Хорошее имя для класса, который содержит объект с начальным временем - PullRequest
2 голосов
/ 17 ноября 2008

Я создаю (Java) класс для представления объекта в музыкальной партитуре, у которого есть определенное время начала и, возможно, также продолжительность. Мне нужно хорошее имя для этого класса. Подходит ли что-то вроде «Timed» или «TimedObject»? Я пытался придумать что-то, что заканчивается "-able" (например, Runnable), но я не могу придумать ничего хорошего; «OnsetTimeable» звучит глупо, потому что «OnsetTime» не глагол. Мне не очень нравится «MusicalObject», так как это не означает, что у объекта есть время начала («музыкальный объект» может быть чем угодно, связанным с партитурой).

Обновление: в музыкальном плане этот класс представляет собой абстракцию того, что происходит в определенный момент времени в партитуре. Предполагается, что это суперкласс классов, таких как Note, KeyChange, MeterChange, DynamicMarking, TempoMark и т. Д.

Ответы [ 9 ]

5 голосов
/ 17 ноября 2008

Звучит как события в файлах MIDI .

1 голос
/ 17 ноября 2008

Это класс или интерфейс? Интерфейс должен определяться потребностями его абонентов. Что вы можете сделать с OnsetTimeable (сейчас это называется)? Ваша склонность предлагать имена, заканчивающиеся на -able, предполагает, что вы воспринимаете это как интерфейс.

Если вы только баллируете музыку, а не пишете программу для воспроизведения партитуры, я бы предположил, что большинство объектов в партитуре будут больше походить на простые структуры данных или «объекты значений», чем на настоящие объекты с операциями. Это потому, что при рендеринге объекта (например, на посох) инкапсуляция имеет тенденцию нарушаться. Это имеет смысл, поскольку целью рендеринга или сериализации объекта является захват всего его состояния. В этом случае, вероятно, достаточно использования конкретных POJO.

0 голосов
/ 17 ноября 2008

Похоже, вы описываете Раздел или, возможно, Движение .

0 голосов
/ 17 ноября 2008

Я согласен с другими, отвечающими на эту тему; Я бы обобщил.

Подумайте о создании класса, скажем, с именем «TimedAction». Это может быть параметризовано для выполнения какого-либо действия в указанное время; тогда вы просто сообщаете «TimedAction», что он собирается делать в это время. Это позволяет вам модифицировать Действие и дает вам гибкость для других Действий, которые вам, возможно, потребуется выполнить.

Идея в том, что вы хотите, чтобы что-то произошло в определенный момент времени. Вместо того, чтобы думать об этом как о чем-то, чего вы хотите, подумайте об этом как о чем-то происходящем. Следовательно, вы создаете класс для события TimedAction и параметризуете что-то. Это в отличие от вашего первого инстинкта создания класса для чего-то, что происходит.

0 голосов
/ 17 ноября 2008

ScoreItem? MusicalEvent

0 голосов
/ 17 ноября 2008

Нам не нужно знать, что делает ваш объект. Более того, нам нужно знать, что делает тип класса «Cat». (Мой класс делает очень мало, но я бы не хотел создавать класс SleepsAndPoops)
Имя класса такое, какое оно есть.
Где нужен глагол? диалог, стек, строка, перо ... Я не вижу глагола в их именах?

Я бы пошел с MusicNote ..
Все музыкальные ноты имеют элемент времени .. Действительно. Вы когда-нибудь слышали ноту, в которой не было элемента времени?

Тогда MusicPhrase может иметь массив MusicNotes, а MusicSong может иметь массив фраз. MusicAlbam может иметь массив MusicSongs ..
Я знаю, что песня по определению музыкальная, но название помогает объединить их.

0 голосов
/ 17 ноября 2008

Как насчет Temporal? Или TimedFigure, TemporalFigure?

0 голосов
/ 17 ноября 2008

Что это, в музыкальном плане ?

Это записка? -> Доброе имя: «Примечание» или «TimedNote»
Это фраза? -> доброе имя: «Музыкальная фраза» или «Фраза»
и т.д.

Не абстрагируйте объект от его контекста (например, назовите его «Timed»); выберите имя, думая о том, чем на самом деле является объект и для чего он используется в вашей программе.

0 голосов
/ 17 ноября 2008

Какой основной сервис (или сервисы) ваш объект должен предложить остальной части вашей системы?

Я считаю, что его имя должно представлять собой абстракцию , которую вы хотите создать, спроектировав ее в первую очередь.

Пока что мы знаем, из чего сделан ваш объект (время начала, ...), но мы не знаем, что делает , и что более важно, как baash05 указывает, что это является : одним словом, что это представляет.

Как уже упоминалось в вопросе Каков наилучший подход к именованию классов? , принцип единственной ответственности также может быть хорошим подходом.

Если оно должно представлять какую-то общую структуру каких-либо характеристик оценки (примечание, ...), может подойти имя типа ScoreAttribute .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...