Конец описания.

Средства Разработки классов. Наследование. Инициализация объектов и производных классов. Управление доступом.

Особенности работы с объектами в Pascal

При работе с объектами в ОР необходимо учитывать основную особенность: объекты размещены в динамической памяти, а соответсвующие переменные явл-ся указателями на объект. При этом операция присваивания переменных соотв операции копирования адреса, а не самого объекта

создание новых классов за счет реализации механизмов наследования, композиции, наполнения и полиморфизма.

Наследование - возможность конструирования новых более сложных классов из уже имеющихся посредством добавления полей и определения новых методов (принцип иерархичности). При этом исходный класс, на базе которого выполняется конструирование, часто называется родителем, а производный - потомком. Специальный механизм наследования обеспечивает классу-потомку возможность использования полей и методов одного или нескольких родительских классов.

Плюсы:

1)Возможность повторного использования программного кода

2)Возможность отразить взаимоотношения объектов свойственной предметной области

3)Возможность рассматривать производный класс как подкласс род-класса. Это упрощает реализацию кода

4) Возможность обработки производных классов метоами, кот более разработаны при проектировании базового класса

5) Возможность обновления содержания методов базового класса применительно к к объектам производного класса.

 

Если непосредственный родитель единственный, то наследование называется простым, а, если таких классов несколько - то множественным. При этом класс родитель (или классы родители) и класс потомок образуют иерархию (рис.1.19).

Рис. 1.19. Иерархия классов при различных видах наследования

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

Если базовый класс имеет конструктор то он должен быть вызван в конструкторе производного класса. Конструктор производного класса может содержать операторы для инициализации собственных полей. Элементы базового класса могут инициализироваться только нужен вызова конструктора базового класса. Нельзя из производного класса непосредственно инициализировать поля базового класса с директивой public. Существует определенный порядок вызова конструкторов и деструкторов и иерархической структуры классов. При создании объектов производных классов сначала вызывается конструктор корневого класса иерархии, затем производного от него класса и след вызов осуществляется так: сначала вызывается деструктор класса, определяющий тип объектной переменной, затем деструктор его базового класса, и в последнюю очередь вызывается деструктор корневого класса.

В большинстве языков ООП используется следующие директивы для управления доступом – public, private, protected. Элементы класса с public доступны как и в методах самого класса, так и за его пределами, т.е. могут использоваться при работе методов производных классов. Элементы класса с private доступны только в методах данного класса. Если необходимо представить доступ к элементам класса только для методов производных классов, то при этом закрываешь доступ для методов других классов - protected

Пример 1.8. Наследование (класс Окно_меняющее_цвет)

Построим на базе класса Окно класс-потомок, который может изменять цвет окна на экране. Для этого к родительскому классу достаточно добавить метод изменить_цвет:

Класс Окно_меняющее_цвет – родитель: класс Окно:

методизменить_цвет(acolor);

Класс Окно_меняющее_цвет содержит все поля родительского класса и все его методы. Дополнительно объекты типа Окно_меняющее_цвет могут менять цвет окна на указанный в сообщении «Изменить_цвет» (рис. 1.20).

Рис. 1.20. Иерархия классов Окно и Окно_меняющее_цвет