Объектные типы данных в Delphi. Вид наследования в Delphi. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Объектные типы данных в Delphi. Вид наследования в Delphi.



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

Сейчас преимущества использования объектов очевидны для всех. Однако так было не всегда. Сначала старая гвардия не поняла и не приняла объекты, поэтому они почти 20 лет потихоньку развивались в различных языках, первым из которых была Simula 67. Постепенно объектно-ориентированный подход нашел себе место и в более мощных языках, таких как C++, Delphi и множестве других языков. Блестящим примером реализации объектов была библиотека Turbo Vision, предназначенная для построения пользовательского интерфейса программ в операционной системе MS-DOS.

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

3.1. Краеугольные камни ООП

3.1.1. Формула объекта

Авторы надеются, что читатель помнит кое-что из главы 2 и такие понятия как тип данных, процедура, функция, запись для него не в новинку. Это прекрасно. Так вот, в конце 60-х годов кому-то пришло в голову объединить эти понятия, и то, что получилось, назвать объектом. Рассмотрение данных в неразрывной связи с методами их обработки позволило вывести формулу объекта:

Объект = Данные + Операции

На основании этой формулы была разработана методология объектно-ориентированного программирования (ООП).

3.1.2. Природа объекта

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

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

Например, объект "кнопка" имеет свойство "цвет". Значение цвета кнопка запоминает в одном из своих полей. При изменении значения свойства "цвет" вызывается метод, который перерисовывает кнопку.

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

3.1.3. Объекты и компоненты

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

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

В данной главе мы рассмотрим лишь вопросы создания и использования объектов. Чуть позже мы научим вас превращать объекты в компоненты (см. главу 13).

3.1.4. Классы объектов

Каждый объект всегда принадлежит некоторому классу объектов. Класс объектов — это обобщенное (абстрактное) описание множества однотипных объектов. Объекты являются конкретными представителями своего класса, их принято называть экземплярами класса. Например, класс СОБАКИ — понятие абстрактное, а экземпляр этого класса МОЙ ПЕС БОБИК — понятие конкретное.

3.1.5. Три кита ООП

Весь мир ООП держится на трех китах: инкапсуляции, наследовании и полиморфизме. Для начала о них надо иметь только самое общее представление.

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

Второй кит ООП — наследование. Этот простой принцип означает, что если вы хотите создать новый класс объектов, который расширяет возможности уже существующего класса, то нет необходимости в переписывании заново всех полей, методов и свойств. Вы объявляете, что новый класс является потомком (или дочерним классом) имеющегося класса объектов, называемого предком (или родительским классом), и добавляете к нему новые поля, методы и свойства. Процесс порождения новых классов на основе других классов называется наследованием. Новые классы объектов имеют как унаследованные признаки, так и, возможно, новые. Например, класс СОБАКИ унаследовал многие свойства своих предков — ВОЛКОВ.

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

Объект — основа Паскаля

До сих пор мы рассматривали типы данных, которые существовали в языках про-

граммирования еще тридцать лет назад. С их помощью можно разработать очень

большую программу, однако потребует это значительных усилий группы профес-

сиональных программистов. А в одиночку, используя только числа, строки, массивы и

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

строк исходного текста. Это является своеобразным пределом возможностей чело-

века. Дело в том, что структура данных исходного алгоритма дробится на элемен-

тарные, слишком маленькие и явно не связанные друг с другом и с программным

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

по разным модулям. По мере роста объема исходных текстов корректно обрабаты-

вать переменные, не затрагивая уже нормально функционирующие части программы,

становится невозможно.

В 80-х годах стали появляться первые коммерческие системы разработки, в которых

была реализована новая парадигма программирования, так называемый объект-

ный подход, что позволило резко повысить производительность труда программи-

стов. Подход был основан на понятии объекта, типа данных, к котором сочетаются

как свойства, сгруппированные данные (пример — поля в записи), так и методы

их обработки (подпрограммы).

Фактически объект стал отражать реальные и даже абстрактные понятия окружаю-

щего мира. Например, автомобиль характеризуется такими свойствами, как марка,

тип двигателя, наличие колес и руля, а файл — названием и размером. ≪Методы≫

автомобиля определяют его способность двигагься в нужном направлении в соот-

ветствии со значениями своих свойств: объемом бензина в баке, углом поворота

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

Благодаря этому теперь удается выполнять проектирование программ, основыва-

ясь на понятии объекта, что значительно проще и быстрее, чем раньше. Работать с

привычными понятиями человеку легче, нежели с абстрактными числами. При

этом специалистам удалось выделить большой набор объектов, которые нужны

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

расходования времени на их программирование. Именно такой подход и реализо-

ван в среде Delphi 7.

Описание

Ключевое слово Class это центральная часть Объектно-ориентированного кода.

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

Эти элементы определены в определении типов класса. Элементы метода осуществлены в разделе implementation модуля.

Объявление класса имеет следующее типичное описание:

type

className = class(BaseClass)

private

// Определения данных/методов локальные для этого модуля

protected

// Определения данных/методов, локальных для этого класса + потомки

public

// Определения данных/методов пригодных для использования всеми объектами этого класса

published

// Внешне общественные определения

end;

Параметры можно передать при создании объектного образца класса. Они передаются методу Constructor класса. Слово Constructor используется вместо функции или метода. Вы можете иметь множество конструкторов для различных наборов параметра. Они снабжены ключевым словом overload; после конца определения конструктора.

Обычно, название метода конструктора - Create.

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

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

Обычно, название метода деструктора - Destroy.

Есть множество использований слова Class:

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

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

2. Определение класса базируются на указанном классе, но без местных добавлений или изменений. Вы имеете новый класс, который действует тождественно к классу BaseClass

3. Ускоренное объявление класса. Оно позволяет всем классам в модуле быть перечисленными в начале раздела type. Так что это вопрос удобства, а не чего-нибудь еще.

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

5. Класс может содержать выполнение внешне предопределенных интерфейсов.

  1. Ссылка metaclass позволяет переменной быть использованной для указания класса, а не объекта

Обджект считается устаревшим,тем не менее есть свои преимущества. можем вместо записи(record)написать обджест и добавить новый метод(?).но все-таки в основном используются



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 351; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 35.172.193.238 (0.033 с.)