- •Объектная декомпозиция
- •Объекты и сообщения
- •Т: Классы
- •Ограничение доступа классов
- •Наследование при разработке классов
- •Полиморфизм при разработке классов
- •Композиция при разработке классов
- •Наполнение при разработке классов
- •Дополнительные средства и приемы разработки классов
- •Исключения при разработке классов
Т: Классы
Реализация объектов, полученных в результате декомпозиции, принципиально возможна на любом языке. Однако наличие специальных средств позволяет существенно упростить программирование, дополнительно обеспечивая программиста заготовками классов из библиотек и встроенными механизмами обеспечения требуемых свойств.
Для представления абстракций объектов используется специальный определяемый программистом тип данных - класс.
Класс- это структурный тип данных, который включает описание полей данных, а также процедур и функций, работающих с этими полями данных. Применительно к классам такие процедуры и функции получили название методов.
Объединение данных с определенными видами их обработки делает классы пригодными для описания состояния и поведения моделей реальных объектов. Совокупность полейопределяется множеством аспектов состояния объекта с точки зрения решаемой задачи, асовокупность методов- множеством аспектов поведения объекта (рис.).
В программах используются переменные типа класса. Такие переменные принято называть объектами.
ПримерОписание класса (класс Окно). Пусть необходимо разработать класс, переменные которого используются для изображения на экране цветного прямоугольника заданного цвета и размера (рис.).
Проектируемый класс должен содержать поля для сохранения параметров окна: XI, Yl, Х2, Y2 - координаты верхнего левого и нижнего правого углов и Color - цвет.
Пусть единственное сообщение, обрабатываемое объектом, – «Нарисовать окно». Соответственно, класс должен содержать метод, реализующий процесс рисования объекта. Поля объекта можно инициализировать при создании переменной-объекта, передав ему сообщение инициализации, включающее значения полей. Следовательно, класс должен содержать метод инициализации.
Окончательно получаем класс, имеющий следующую структуру:
Класс Окно:
поля X1,Y1,X2,Y2, Color
метод Инициализировать (аХ 1 ,aY 1 ,aX2,aY2,aColor)
метод Изобразить
Конец описания.
Создавая объекты типа Окно, инициализируя их в соответствии с условием и посылая им сообщение «Нарисовать окно», получим разные окна на экране, причем параметры этих окон будут храниться в объектах.
Каждая переменная типа класса включает набор полей, объявленных в классе. Совокупность значений, содержащихся в этих полях, моделирует конкретное состояние объекта предметной области. Изменение этих значений в процессе работы отражает изменение состояния моделируемого объекта.
Воздействие на объект выполняется посредством изменения его полей или вызова его методов. Доступ к полям и методам объекта осуществляется, за исключением специальных случаев, с указанием имени объекта (при этом используются составные имена):
<имя объекта>.<имя поля>
ИЛИ
<имя объекта>.<имя метода>.
Все методы объекта обязательно имеют доступ ко всем полям своего объекта. В рассматриваемых далее языках программирования это достигается через неявную передачу в метод специального параметра - адреса области данных конкретного объекта (Self- в Паскале и this - в C++). Таким образом, уменьшается количество параметров, явно передаваемых в метод.