Главная » Delphi » Объектно ориентированное программирование

0

Объектно ориентированному программированию (OOP —  Object  Oriented Programming) посвящены многие  тома, в дискуссиях  о нем сломано немало  копий, и уже начинает ка заться, что это не методология программирования, а религия. Не являясь ортодоксами объектно ориентированного программирования, авторы книги  не будут пытаться обра тить  вас в ту или  иную веру. Поэтому  мы просто излагаем здесь  основные принципы OOP, которые положены в основу языка Object Pascal.

Объектно ориентированным называется такой  метод  программирования, при  ко тором  в качестве основных элементов программ используются отдельные объекты, содержащие и данные, и код для их обработки. Облегчение создания и сопровожде ния программ не являлось основной целью  разработки методологии объектно ориентированного программирования —  это,  скорее, побочный эффект ее примене ния на практике. Кроме  того,  хранение данных  и кода в одном объекте позволяет ми нимизировать воздействие одного  объекта на другой,  а следовательно, и облегчить поиск  и исправление ошибок  в программе. Традиционно объектно ориентированные языки реализуют, по меньшей мере,  три основные концепции.

•  Инкапсуляция (encapsulation). Работа  с данными и детали  ее реализации скрыты от внешнего пользователя объекта. Достоинства инкапсуляции заключаются в модульности и изоляции кода объекта от другого кода программы.

•  Наследование (inheritance).  Возможность создания новых  объектов, которые обла дают свойствами и поведением родительских объектов. Такая концепция позволяет создавать иерархии объектов (например VCL), включающие наборы объектов, по рожденных от одного общего предка и обладающих все большей специализацией и функциональностью по сравнению со своими предшественниками.

Достоинства наследования состоят, в первую очередь, в совместном использовании многими объектами общего  кода.  На  рис. 2.4 представлен пример наследования: один корневой объект fruit (фрукт) является предком для всех остальных плодов,включая melon (дыня), которая, в свою очередь, является предком таких объектов, как watermelon (арбуз) и honeydew (зимняя дыня).

•  Полиморфизм (polymorphism).  Слово   полиморфизм  означает  “много   форм”.

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

Рис. 2.4. Пример иерархии наследования

Замечания о множественном наследовании

Object Pascal не поддерживает множественного наследования, присущего языку C++. Множественное наследование (multiple inheritance) означает, что некоторый объект может быть потомком двух и более других различных объектов, т.е. содержать в себе все данные и код объектов-предков.

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

Object Pascal предоставляет два возможных пути решения проблемы множественного наследования. Первый состоит в создании объекта одного класса, который содержит

(contain) объект другого класса (такое решение использовалось при построении VCL). В рамках аналогии “яблочного варенья” можно представить себе некий объект “варенье”, который содержится в объекте “яблоко”. Второе решение заключается в использовании интерфейсов (interfaces), речь о которых пойдет в этой главе далее. При использовании

интерфейсов появляется возможность создать объект, который будет иметь оба интер-

фейса — и “яблока”, и “варенья”.

Чтобы рассматриваемый далее материал не вызывал затруднений, уточним значе

ние нескольких терминов.

•  Поле (field). Называется также  переменной  экземпляра (instance  variable), пред ставляет собой  переменную с данными, содержащуюся внутри  объекта. Поле  в объекте сходно  с полем в записи Pascal. В языке  C++ для них иногда  использует ся термин данные члены (data  members).

•  Метод (method). Процедуры и функции, принадлежащие объекту.  В языке  C++

для них используется термин функция член (member function).•  Свойство (property). Свойства представляют собой  сущности, обеспечивающие доступ к данным  и коду, содержащемуся в объекте. Тем  самым  они  избавляют конечного пользователя от деталей реализации объекта.

НА ЗАМЕТКУ

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

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

Некоторые языки  программирования позволяют работать с отдельными сущно стями,  которые можно  считать объектами, но  не  позволяют создавать собственные объекты. Хорошим примером этого  могут служить  элементы управления ActiveX (бывшие OCX) в языке  Visual Basic. Хотя элементы управления ActiveX можно  исполь зовать  в приложениях Visual Basic, их нельзя  создавать заново или  порождать один элемент управления ActiveX из другого.  Среда  программирования с такими свойства ми называется объектно основанной (object based).

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

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии