Объектно-ориентированное программирование



         

Объектно-ориентированное программирование - стр. 99


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

Некоторые объектно-ориентированные языки, особенно С++, позволяют многократное наследование. В такой системе объект может иметь больше одного родителя, и иерархия объектов становится направленным циклическим графом, т. е. связи между объектами направлены с ясным различием, кто родитель, а кто порожденный. Набор связей не имеет никакой цикличности - не существует способа проследить маршрут родитель -  порожденный и вернуться к объекту, с которого начинали. Однако теперь это уже неясная древовидная структура, в которой объект может иметь самое большое - одного родителя и любое количество порожденных. Таким образом, возникают проблемы повторного наследования. Предположим, что объекты В1 и В2 - потомки объекта А, а объект С наследуется и от В1, и от В2. Очевидно, объект С  может наследовать две копии всех полей и методов, которые объекты В1 и  В2 унаследовали от А. Любая многократная система наследования порождает подобные проблемы.

Многократное наследование сейчас недопустимо в Турбо Паскале. Возможна ситуация, когда вы хотите создать объектный тип, наследуемый от двух родителей. Есть два варианта обхода ограничения отсутствия многократного наследования. Иногда вы можете сделать одного из двух потенциальных родителей порожденным от другого. Это сработает, если они в основном схожи. Если объекты слишком сильно отстоят друг от друга в иерархии, чтобы сделать один порожденный от другого, рассмотрите создание нового объекта, порожденного от одного потенциального родителя, и добавление другого в качестве поля данных внутри порожденного. Эта методика, которая называется композицией объектов, является довольно обычной практикой - вы найдете ее в OWL. Например, базисный объект Tapplication имеет поле, которое является объектом  TwintowsObject.




Содержание  Назад  Вперед