Материал: Мансуров. Основы программирования в среде Lazarus. 2010

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Глава 5 Основы объектно-ориентированного

программирования

5.1. Три источника и три составные части ООП.

Аббревиатура ООП расшифровывается как объектно-ориентированное программирование. Рассмотрим три источника и три составные части марксиз-

ма-ленинизма, ой простите (куда это меня занесло?!), конечно же, ООП!

Три источника – это объекты, абстракция и классификация.

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

тает программа и процедур, которые эти данные обрабатывают в единое целое

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

ления в совокупности свойств, составляющих их элементов и их поведения.

Программист при решении задачи из какой-либо предметной области, вы-

деляет отдельные объекты, исходя из особенностей задачи. Этот процесс назы-

вается объектной декомпозицией [5]. Объекты состоят из данных, описываю-

щих свойства этих объектов и процедур, обрабатывающих эти данные. Напри-

мер, при создании, скажем, базы данных студентов некоторого университета,

можно выделить объект "Студент". Данными (свойствами) для этого объекта могут выступать фамилия и имя студента, курс, группа, его оценки и т.д. При этом можно определить некоторые процедуры для обработки этих данных, на-

пример процедуру вычисления средней оценки за семестр (эту процедуру мож-

но в дальнейшем использовать для установления размера стипендии), процеду-

ру перевода с курса на курс, процедуру отчисления (к сожалению) из универси-

тета и т.д.

396

Глава 5Основы объектно-ориентированного программирования

____________________________________________________________________

При рассмотрении объектов очень важен уровень абстракции (или уровень детализации) с которой мы рассматриваем объект. В нашем случае нас совер-

шенно не интересуют такие характеристики объекта как рост, цвет глаз, размер обуви и т.д. Мы абстрагируемся от этих свойств и выделяем только те свойства,

которые позволяют нам решать поставленную задачу.

В то же время важно понимать, что конкретный "экземпляр" студента, на-

пример по фамилии Иванов является представителем целого класса студентов.

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

ект "ВУЗ". Наконец, студент без всякого сомнения является человеком!! Отсю-

да мы можем говорить о таком объекте, как "Человек".

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

Объединение данных и обрабатывающих их функций и процедур в виде отдельных объектов называется инкапсуляцией. Основная сложность ООП за-

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

сификацию, которые как можно точнее описывали бы решаемую задачу и, кро-

ме того, позволяли бы их повторное использование. Внутреннее "устройство"

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

чем количество и тип этих данных строго под контролем. Это существенно по-

вышает надежность программы.

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

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

тов автоматически может быть использован для новых объектов;

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

397

5.2 Классы и объекты.

____________________________________________________________________

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

следования;

Код программы становится более понятным. Для того чтобы понять как ра-

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

тают добавленные данные и функции.

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

там. Например, пусть у вас имеется объект "Геометрическая фигура" и пусть у нее имеется функция вычисления площади. Если необходимо вычислить пло-

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

если это треугольник, то ее площадь функция будет вычислять по совсем дру-

гому алгоритму.

5.2. Классы и объекты.

Основным понятием ООП является класс. Класс представляет собой структуру, состоящую из описания полей данных, функций и процедур, обраба-

тывающих поля данных и свойств. Функции и процедуры класса принято назы-

вать методами. Поля, методы и свойства называются элементами или членами класса.

Поле это обычная переменная языка Паскаль. Допускаются любые разре-

шенные в языке типы переменных, в том числе поле может иметь тип класса. С

помощью полей описываются состояние объекта. С помощью методов – пове-

дение объекта. Свойство это специфический способ для организации связи с данными класса.

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

ектом понимается конкретный экземпляр (сущность) класса. В программе объ-

398

Глава 5 Основы объектно-ориентированного программирования

____________________________________________________________________

ект описывается как переменная типа класс. В языке Free Pascal как и в боль-

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

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

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

ляра переменной типа класс. После завершения работы с этим экземпляром класса (объектом) память необходимо освободить. Объявление класса в про-

стейшем случае производится следующим образом:

type

<Имя класса> = class <объявление полей класса> <объявление методов класса>

end;

Рассмотрим пример объявления класса:

type

 

THuman = class

// объявление класса

name: string;

// поля класса

fam: string;

 

function GetData: string; // объявление метода класса

end;

Здесь THuman имя класса. Имена классов принято начинать с буквы Т (от слова Type), хотя это и не обязательно. Полями класса являются name и fam,

399

5.2 Классы и объекты.

____________________________________________________________________

а GetData – метод класса (в данном случае это функция).

Реализация метода (тело функции или процедуры) помещается после объ-

явления класса (ключевого слова end). Если класс создается внутри модуля (в

большинстве случаев именно так и происходит), то реализацию метода следует помещать после ключевого слова implementation. При этом перед именем метода указывается имя класса через точку:

function THuman.GetData: string; // реализация метода

begin

Result:= name + ' ' + fam;

end;

В данном случае мы создали класс THuman (человек) с полями name

(имя), fam (фамилия) и методом GetData, который просто возвращает имя и фамилию человека.

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

ким образом

function GetData(name, fam: string): string;

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

function GetData: string;

var

name: string;

400

Смотрите также:

1 — пак
11 Горм +
113
1149
14
1433
1511
1632
199
204