Я процитирую несколько отрывков из « Паттернов реализации » Кента Бека:
Простое имя суперкласса
«[...] Имена должны быть короткими и яркими. Однако, чтобы сделать имена точными, иногда, кажется, требуется несколько слов. Выход из этой дилеммы - выбор сильной метафоры для вычисления. С метафорой в уме, даже отдельные слова несут с собой богатую сеть ассоциаций, связей и значений. Например, в среде рисования HotDraw мое первое имя объекта на рисунке было
DrawingObject . Уорд Каннингем пришел вместе с метафорой типографики: рисунок похож на напечатанная, разложенная страница. Графические элементы на странице - это фигуры, поэтому класс стал Figure . В контексте метафоры Figure
одновременно короче, богаче и точнее, чем DrawingObject ".
Квалифицированное имя подкласса
«Имена подклассов выполняют две задачи. Им необходимо сообщить, какой класс они похожи и чем они отличаются. [...] В отличие от имен, лежащих в основе иерархий, имена подклассов не так часто используются в разговоре, поэтому они могут быть выразительными за счет краткости. [...]
Дайте подклассам, которые служат корнями иерархий, свои простые имена. Например, в HotDraw есть класс Handle, который представляет операции редактирования фигуры, когда фигура выбрана. Он называется просто Handle,
несмотря на расширение Figure . Существует целое семейство ручек, и у них наиболее подходящие названия, такие как
StretchyHandle и TransparencyHandle . Поскольку Handle является корнем своей собственной иерархии, он заслуживает простого имени суперкласса больше, чем квалифицированного имени подкласса.
Еще одна проблема в именовании подклассов - это многоуровневые иерархии. [...] Вместо того, чтобы слепо добавлять модификаторы к непосредственному суперклассу, подумайте об имени с точки зрения читателя. На какой класс ему нужно знать этот класс? Используйте этот суперкласс как основу для имени подкласса ".
Интерфейс
Два стиля именования интерфейсов зависят от того, как вы думаете об интерфейсах. Интерфейсы как классы без реализации должны быть названы , как если бы они были классы ( Simple суперкласс , Квалифицированные Подкласс Имя ). Одна из проблем этого стиля именования состоит в том, что хорошие имена используются до того, как вы перейдете к именованию классов. Интерфейсу с именем File нужен класс реализации, называемый что-то вроде
ActualFile , ConcreteFile или (фу!) FileImpl(и суффикс, и аббревиатура). В общем, важно сообщить, имеете ли вы дело с конкретным или абстрактным объектом, независимо от того, реализован ли абстрактный объект как интерфейс или как суперкласс, менее важно. Отсрочка различия между интерфейсами и суперклассами хорошо поддерживается этим стилем именования, позволяя вам изменить свое мнение позже, если это станет необходимым.
Иногда просто наименование конкретных классов важнее для коммуникации, чем сокрытие использования интерфейсов. В этом случае добавьте к именам интерфейсов префикс «I». Если интерфейс называется IFile , класс можно назвать просто File .
Для более подробного обсуждения покупайте книгу! Это стоит того! :)