Лабораторна робота № 4
Тема. Классы и отношения
Мета роботи: ознайомитися із використанням класів на прикладах.
Короткі теоретичні відомості
Классы определяют структуру и поведение некоторого набора элементов предметной области, для которой разрабатывается программная модель.
Классом называется описание совокупности объектов с общими атрибутами, методами, отношениями и семантикой.
Каждый класс имеет свое имя, отличающее его от других классов, и относится к определенному пакету. Имя класса в пакете должно быть уникальным. Физически пакет представляет собой каталог, в который помещаются программные файлы, содержащие реализацию классов. Классы позволяют разбить поведение сложных систем на простое взаимодействие взаимосвязанных объектов.
При проектировании системы необходимо не только идентифицировать сущности, но и указать, как они соотносятся друг с другом.
Отношением называется связь между классами. В объектно-ориен-тированном проектировании особое значение имеют четыре типа отношений: зависимости, обобщения, ассоциации и реализации.
Зависимостью (Dependency) называется отношение использования, определяющее, что изменение состояния объекта одного класса может повлиять на объект другого класса, который его использует, причем обратное в общем случае неверно. Зависимости применяются тогда, когда экземпляр одного класса использует экземпляр другого, например в качестве параметра метода.
Обобщение (Generalization) означает, что объекты подкласса могут использоваться всюду, где встречаются объекты суперкласса, но ни в коем случае не наоборот. Определение суперкласса является более общим, чем определение подкласса. Подкласс наследует свойства родителя (атрибуты и методы). Идентификация суперклассов и подклассов осуществляется с использованием модели предметной области, так как с ее помощью возможен анализ всех понятий в более общих и абстрактных терминах. В итоге улучшается понимание кода (особенно для систем с сотнями классов), уменьшается объем повторяемой информации.
Например, понятия CashPayment, CreditPayment, CheckPayment очень похожи одно на другое, и в этом случае разумно организовать их в иерархию обобщения – специализации классов. Класс Payment представляет более общее понятие, а его подклассы – специализированные свойства.
Рис. 3.1. Отношение обобщения
Подкласс создается в случаях, если:
он имеет дополнительные атрибуты, интересующие разработчика;
он имеет дополнительные ассоциации, интересующие разработчика;
ему соответствует понятие, управляемое, обрабатываемое, реагирующее или используемое способом, отличным от способа, определенного суперклассом или другими подклассами;
он представляет объекту поведение, которое отлично от поведения, определяемого суперклассом или другими подклассами.
Реализацией (Realization) называется отношение между классификаторами (классами, интерфейсами), при котором один из них описывает контракт (интерфейс сущности), а другой гарантирует его выполнение.
Ассоциации (Association) показывают, что объекты одного класса связаны с объектами другого класса и отражают некоторое отношение между ними. В этом случае можно перемещаться (с помощью вызова методов) от объектов одного класса к объектам другого. Агрегация – ассоциация, моделирующая взаимосвязь “часть/целое” между классами, которые в тоже время могут быть равноправными. Оба класса при этом находятся на одном концептуальном уровне, и ни один не является более важным, чем другой.
Тело класса в системе Java может содержать объявление полей данных, конструкторов, методов, внутренних классов и интерфейсов, а также логические блоки, используемые обычно для инициализации полей.
Переменные класса и константы
Данные – члены класса, которые называются полями или переменными класса, объявляются в классе следующим образом:
cпецификатор тип имя;
В языке Java могут использоваться переменные класса, объявленные один раз для всего класса со спецификатором static и одинаковые для всех экземпляров класса, или переменные экземпляра, создаваемые для каждого экземпляра класса. Переменные объявляются со спецификаторами доступа public, private, protected или по умолчанию без спецификатора. Кроме данных – членов класса в классе используются локальные переменные и параметры методов. Переменные со спецификатором final являются константами. Спецификатор final можно использовать для переменной, объявленной в методе, а также для параметра метода.
Объявить и проинициализировать значения переменных класса и локальных переменных метода, а также параметры метода можно следующим образом:
/* пример # 1 : типы атрибутов и переменных : MyClass.java */
class MyClass {
int x; // переменная экземпляра класса
int y = 2; // переменная экземпляра класса
final int YEAR = 2003; // константа
static int bonus; // переменная класса
static int b = 1; // переменная класса
void init(int z){// параметр метода
z = 3;// переинициализация
int a;// локальная переменная метода
a = 4;// инициализация
}
}
В приведенном примере использованы данные базовых типов, не являющиеся ссылками на объекты. Данные могут быть ссылками, назначить которым реальные объекты можно с помощью оператора new.
