Java→ Рекомендации по проектированию классов
Июл 29, 2011
1. Всегда храните данные в переменных, объявленных как private.
Первое и главное требование: всеми средствами избегайте нарушения инкапсуляции. Иногда приходится писать методы доступа к полю или модифицирующие методы, но предоставлять доступ к полям не следует. Горький опыт показал, что способ представления данных может изменяться, однако порядок их использования изменяется гораздо реже. Если данные приватны, их представление не влияет на использующий класс, поэтому ошибки искать легче.
2. Всегда инициализируйте данные.
Язык Java не инициализирует локальные переменные, однако поля в объектах инициализируются. Не полагайтесь на действия по умолчанию, инициализируйте переменные явным образом с помощью конструкторов.
3. Не используйте в классе слишком много простых типов.
Несколько связанных между собой полей простых типов следует объединять в новый класс. Такие классы проще для понимания, и их легче модифицировать. Например, следующие четыре поля в классе
Customer
надо объединить в новый классAddress
:private String street;
private String city;
private String state;
private int zip;
Представленный таким образом адрес легче изменять, как, например, в случае необходимости указания интернациональных адресов.
4. Не для всех полей надо создавать методы доступа и модификации.
Очевидно, что при выполнении программы надо получать сведения о зарплате сотрудника, кроме того, ее приходится время от времени изменять. Но вряд ли придется менять дату приема на работу после того, как объект сконструирован. Тj есть существуют поля, которые после создания объекта вовсе не изменяются. К ним относится, например, массив аббревиатур названий штатов США классе
Address
.
5. Используйте стандартную форму определения класса.
Содержимое класса всегда перечисляется в следующем порядке:
— общедоступные элементы;
— элементы, область видимости которых ограничена пакетом;
— приватные элементы;
Внутри каждого раздела перечисляются:
— методы экземпляра;
— статические методы;
— поля экземпляра;
— статические поля;
Такой порядок вполне оправдан. Пользователей вашего класса больше интересует общедоступный интерфейс, чем детали приватной реализации. Кроме того, их больше интересуют методы, нежели данные.
Однако в настоящее время общего мнения об оптимальном стиле программирования еще нет. Согласно стилю программирования на языке Java, принятом в компании Sun, рекомендуется сначала перечислять поля, а затем — методы. Независимо от того, какого стиля вы придерживаетесь, главное — не отступать от него.
6. Разбивайте на части слишком большие классы.
Этот совет, конечно, слишком общий: то, что кажется «слишком большим» одному программисту, кажется нормальным другом. Однако, если есть очевидная возможность разделить один сложный класс на два класса попроще, воспользуйтесь ею. (Только опасайтесь другой крайности. Вряд ли оправданы десять классов, в каждом из которых имеется только один метод.)
7. Выбирайте для классов и методов осмысленные имена.
Классы, как и переменные, следует называть именами, отражающими их смысл. (В стандартной библиотеке есть примеры, для которых данное правило нарушается, скажем, класс
Date
описывает время, а не дату.)
Удобно принять следующие соглашение: имя класса должно быть именем существительным (Order
) или именем существительным, которому предшествует имя прилагательное (RushOrder
), или герундий (слово, заканчивающиеся на «-ing», напримерBillingAddress
). Как правило, методы доступа должны начинаться словомget
, представленным строчными буквами (getSalary
), а модифицирующие методы — словомset
, также представленными строчными буквами (setSalary
).
(с) Java 1. Основы (К. Хорстманн, Г. Корнелл)