Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 26.27.doc
Скачиваний:
1
Добавлен:
11.07.2019
Размер:
88.58 Кб
Скачать

Лекции 26-27: Объекты и объектно-ориентированное программирование.

1.Принципы объектно-ориентированного программирования.

2. Концепция объекта в Турбо Паскале.

3. Свойства наследования и полиморфизма объектов.

4. Пример программы с использованием объектов.

5. Понятие о динамических объектах.

6. Расширенное использование процедуры new.

7. Освобождение хип-памяти от динамических объектов.

1.Принципы объектно-ориентированного программирования.

Традиционным направлением развития программирования в течение многих лет было так называемое процедурное программирование, в основе которого лежит понятие процедуры (подпрограммы). В соответствии с этим направлением сложная программа строится из более мелких частей - процедур, осуществляя декомпозицию задачи на подзадачи и преодолевая сложность исходной задачи. Однако по мере увеличения сложности задачи растёт число процедур, и их использование требует (начиная от некоторого предела) собственной поддержки. Замечено, что если при процедурном подходе длина программы становится больше 1000-1500 строк, существенно возрастает сложность отладки такой программы. Таким образом, возникла потребность в качественно новом подходе в программировании. Этим подходом стало объектно-ориентированное программирование.

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

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

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

2. Концепция объекта в Турбо Паскале.

В языке Турбо Паскаль (начиная с версии 5.5) введено новое понятие объекта, как дальнейшее развитие концепции типа. Как и типы, объекты должны быть описаны в разделе описаний программы. Форма описания объекта аналогична описанию типа Запись. Различие лишь в том, что ключевым словом описания является object, а не record, и кроме обычных полей (элементов структуры данных) в описании объекта используются процедурные поля - заголовки процедур и функций, инкапсулированных в данном типе объекта. Кроме того, возможности описания полей структуры данных расширены - могут описываться кроме переменных также необходимые типы данных, константы. Переменные, образующие структуру данных, называются полями объекта, а процедуры и функции - методами объекта. При этом тела методов должны быть описаны вне описания объекта: обычно в соответствующих модулях.

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

Пример описания объекта:

type point = object; {объект - точка на плоскости}

x,y: integer; {координаты точки}

c: byte; { цвет точки}

vis: boolean; { светимость}

procedure create(a,b:integer); {создание точки}

procedure move(dx,dy:integer); {сдвиг точки}

procedure setcolor(color:byte); {установка цвета}

procedure vis_on; {включить светимость}

procedure vis_off; {выключение светимости}

function getX:integer; {получить координату Х}

function getY:integer; {получить координату Y}

end {point};

Для работы с объектами помимо описания объекта, как и при описании других типов, необходимо объявить переменные типа объект, называемые экземплярами объектов. Например, для описанного выше объекта point можно объявить экземпляры: var p1,p2:point; {две точки}

Для обращения к полям и к методам объекта используются составные имена (имена с точкой), аналогично тому, как это принято для записей. Например: p1.X:=1; p1.Y:=p1.X; p2.X:=p1.getX; p1.SetColor(green);

Замечание

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

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

Например: with p1 do begin x1:=getX; y1:=getY end;

Для объектов одного типа допустимо присваивание, например: p1:=p2;