Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
oaip_2 / Курсовая ОАиП.doc
Скачиваний:
95
Добавлен:
27.05.2013
Размер:
204.8 Кб
Скачать

Скрытые поля и методы.

Часть полей и методов объектовых типов можно объявить как скрытые (приватные). Смысл введения скрытых компонент объектов заключается в ограничении области видимости идентификаторов этих компонент. Для этого используется служебное слово private, которое используется по следующей схеме:

Type

Object Type = object

Обычные поля и методы

private

Скрытые поля и методы

end;

Идентификаторы полей и методов, объявленных как скрытые, считаются известными (доступными) только в пределах программы или модуля , в которой содержится описание данного объектового типа. Вне модуля, содержащего такое описание( например, в программе, использующей этот модуль) , скрытые компоненты объектового типа неизвестны и недоступны, в то время как сам объектовый тип и его остальные компоненты считаются известными по обычным правилам.

Введение понятия скрытых компонент объектовых типов придает объектам дополнительное сходство с модулями. Это позволяет изолировать технические подробности реализации объектов от программ-потребителей, что способствует большей независимости программных единиц и служит добавочным средством контроля за использованием объектов.

Как сказано выше приватные поля и методы должны располагатся после общедоступных. Директива public позволяет, если это удобно, расположить их наоборот.

Type

Object Type = object

private

Скрытые поля и методы

public

Обычные поля и методы

end;

Наследование и переопределение .

Следующее важное свойство объектовых типов позволяет при построении нового объектного типа использовать некоторый ранее определенный объектовый тип.

Объектно-ориентированный стиль программирования позволяет определить новый объект, как потомок другого ранее определенного типа. Это означает, что новый тип автоматически получает все поля и методы ранее введенного типа, который в этом случае называется предком или родительским типом. В этом случае в определении типа-потомка должно быть указано имя родительского типа которое указывается в круглых скобках:

Type

Circle = object (point)

Radius :integer

End;

Задание родительского типа означает, что в объектовом типе Circle неявно присутствуют все поля из типа Point; аналогично для переменной этого нового типа доступны все методы из Point.

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

Тип потомок может, в свою очередь, выступать как предок по отношению к другому объектовому типу (типам).

Type

Ring = object (Circle)

Radius2:integer;

End;

Тип Ring наследует полн Radius из своего непосредственного родителя Circle, а также поля и методы из типа Pоint, который также считается (косвенным) предком для Ring. Длинна такой цепочки наследования никак не ограничивается.

Механизм наследования, являясь достаточно простым для понимания и использования , представляет широкие возможности при разработке программ. Имея несколько “базовых” объектовых типов (например, в интерфейсном разделе модуля) , можно на их основе конструировать новые объекты, добавляя в них новые поля и расширяя и/или переопределяя соответствующие методы. Отметим , что переопределять можно только методы; поля указанные в родительском типе ,безусловно, наследуются типом-потомком и не могут быть в нем переопределены. Кроме того, новый метод в типе-потомке может иметь совершенно другие параметры, нежели одноименный метод из типа-предка.

Дадим правило совместимости типов по присваиванию, действующее для случая объектовых типов. Это правило формулируется достаточно просто: совместимыми по присваиванию являются, кроме эквивалентных типов объектовые типы, состоящие в отношении наследования, причем присваивание может происходить в направлении от типа-потомка к родительскому типу, но не наоборот.

Наследование дочерними типами информационных полей и методов их родительских типов осуществляется по следующим правилам:

  • Информационные поля и методы родительского типа наследуются всеми еог дочерними типами независимо от числа промежуточных уровней иерархии.

  • Доступ к полям и методам родительских типов в рамках описания любых дочерних типов выполняется так, как будто - бы описаны в самом дочернем типе. Отсюда следует следущее правило.

  • Ни в однои дочернем типе не могут использоваться идентификаторы полей, совпадающие с идентификаторами полей какого – либо из родительских типов. Это же относится и к идентификаторам формальных параметров, указанных в заголовках методов.

  • Дочерний тип может доопределить произвольное число собственных методов и идентификаторых полей.

  • Любое изменение текста в родительском методе автоматически оказывает влияние на все дочерние типы, которве его вызывают.

  • В противоположность идентификаторым полям идентификаторы методов в дчерних типах могут совпадать с именами методов в родительских типах. В этом случае говорят , что дочерний метод подавляет одноименный ему родительский, и в рамках дочернего типа, приуказании такого метода, будет вызываться именно дочерний метод, а не родительский.

Важным аспектогм, касающимся наследования являются правила вызова наследуемых элементов:

  • При вызове метода компилятор сначала ищет метод , имя которого определено внутри типа объекта.

  • Если в типе объекта не определен метод с указанным в операторе вызова именем, то компилятор в поисках метода стаким именем , поднимается выше к непосредственно родительскому типу.

  • Вызываемый метод будет работать так, как он определен и компилирован для родительского типа , а не для дочернего.

  • Вызовы методов из нижеследующих по иерархии типов не допускаются.

Соседние файлы в папке oaip_2