Разделы презентаций


Информатика и программирование

Содержание

ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯОбъектно-ориентированное программирование (ООП) представляет собой следующий этап развития современных концепций построения языков программирования. Здесь получили дальнейшее развитие принципы структурного программирования - структуризация программ и данных, модульность и т. д.В

Слайды и текст этой презентации

Слайд 1Информатика и программирование
Лебедева Т.Ф.
КЕМЕРОВСКИЙ ИНСТИТУТ (филиал)
РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТОРГОВО-ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА

ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

Информатика и программированиеЛебедева Т.Ф.КЕМЕРОВСКИЙ ИНСТИТУТ (филиал)РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТОРГОВО-ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

Слайд 2ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ
Объектно-ориентированное программирование (ООП) представляет собой следующий этап развития

современных концепций построения языков программирования. Здесь получили дальнейшее развитие принципы

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

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 1

ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯОбъектно-ориентированное программирование (ООП) представляет собой следующий этап развития современных концепций построения языков программирования. Здесь получили

Слайд 3Рис.1. Процедурно- и объектно-ориентированные парадигмы программирования. Незаполненные фигуры представляют данные,

а фигуры с заливкой—процедуры

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

2
Рис.1. Процедурно- и объектно-ориентированные парадигмы программирования. Незаполненные фигуры представляют данные, а фигуры с заливкой—процедуры8  ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Слайд 4Введение нового типа данных потребовало пересмотреть некоторые концепции языка Паскаль:

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

новые зарезервированные слова (constructor, destructor, inherited, object, private, public, virtual), изменить уже существующие подпрограммы (подпрограммы New и Dispose).
ООП характеризуется тремя основными свойствами: инкапсуляция (encapsulation), наследование (inheritance) и полиморфизм (polymorphism).
Инкапсуляция означает упоминавшееся выше объединение в одном объекте данных и действий над ними. Примером может служить перемещаемый по экрану отрезок, определяемый координатами своих концов (данные), и процедурой, обеспечивающей это перемещение (метод).

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 3

Введение нового типа данных потребовало пересмотреть некоторые концепции языка Паскаль: ввести новые понятия, как, например, инкапсуляция, наследование,

Слайд 5Наследование позволяет создавать иерархию объектов, начиная с некоторого простого первоначального

(предка) и кончая более сложными, но включающими (наследующими) свойства предшествующих

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

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 4

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

Слайд 6Полиморфизм означает, что для различных родственных объектов можно задать единый

класс действий (например, перемещение по экрану любой геометрической фигуры). Затем

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

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 5

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

Слайд 78 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

6

Гради Буч: «Объектно-ориентированное программирование (ООП) – это методология программирования, которая основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией (экземпляром) определенного класса (типа особого вида), а классы образуют иерархию на принципах наследуемости».
Как следует из определения, ООП в отличие от процедурного программирования, базируется на объектной декомпозиции предметной области программы.
ООП обладает рядом преимуществ при создании больших программ. В частности, к ним можно отнести:
использование более естественных с точки зрения повседневной практики понятий, простота введения новых понятий;
некоторое сокращение размера программ за счет того, что повторяющиеся (наследуемые) свойства и действия можно не описывать многократно, как это делается при использовании подпрограмм; кроме того, использование динамических объектов позволяет более эффективно использовать оперативную память;
возможность создания библиотеки объектов;

8  ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Слайд 88 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

7

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

8  ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Слайд 98 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

8

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

8  ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Слайд 10Гради Буч выделяет две разновидности декомпозиции: алгоритмическую (поддерживаемую структурными методами)

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

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

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 9

Гради Буч выделяет две разновидности декомпозиции: алгоритмическую (поддерживаемую структурными методами) и объектно-ориентированную, основанную на разделении по объектам.На

Слайд 11Объектная декомпозиция
Объектной декомпозицией называют процесс представления предметной области задачи в

виде совокупности функциональных элементов (объектов), обменивающихся в процессе выполнения программы

входными воздействиями (сообщениями).
Каждый выделяемый объект предметной области отвечает за выполнение некоторых действий, зависящих от полученных сообщений и параметров самого объекта.
Гради Буч дает следующее определение объекта:
«Объект - это мыслимая или реальная сущность, обладающая характерным поведением и отличительными характеристиками и являющаяся важной в предметной области. Каждый объект имеет состояние, обладает четко определенным поведением и уникальной идентичностью».
Объект – это тип данных, который включает не только поля данных объекта, но и подпрограммы (процедуры и функции) для их обработки, называемые методами.

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 10

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

Слайд 12Объект характеризуется как совокупностью всех своих свойств


( например, для животных – это наличие головы, хвоста, ушей,

глаз и т.д.) и их текущих значений (голова – большая, уши – длинные, глаза – желтые и т.д.) так и совокупностью допустимых для данного объекта действий ( умение есть, дышать, бегать и т.д.).
Указанное объединение в едином объекте как «материальных» составных частей (голова, уши, лапы и т.д.), так и действий, манипулирующих этими частями (действие «бежать» быстро перемещает лапы) называется инкапсуляцией.
Совокупность значений параметров объекта называют его состоянием, а совокупность реакций на получаемые сообщения - поведением.
Состояние (state) - совокупный результат поведения объекта: одно из стабильных условий, в которых объект может существовать, охарактеризованных количественно; в любой момент времени состояние объекта включает в себя перечень (обычно статический) свойств объекта и текущие значения (обычно динамические) этих свойств .

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 11

Объект характеризуется как совокупностью всех своих свойств    ( например, для животных – это наличие

Слайд 13Поведение
Для каждого объекта существует определенный набор действий, которые с ним

можно произвести. Например, возможные действия с некоторым файлом операционной системы

ПК (объектом):
создать;
открыть;
читать из файла;
писать в файл;
закрыть;
удалить.
Результат выполнения действий зависит от состояния объекта на момент совершения действия, т.е. нельзя, например, удалить файл, если он открыт кем-либо (заблокирован).
В то же время действия могут менять внутреннее состояние объекта - при открытии или закрытии файла свойство "открыт" принимает значения "да" или "нет", соответственно.



8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 12

ПоведениеДля каждого объекта существует определенный набор действий, которые с ним можно произвести. Например, возможные действия с некоторым

Слайд 14Поведение (behavior) - действия и реакции объекта, выраженные в терминах

передачи сообщений и изменения состояния; видимая извне и воспроизводимая активность

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


8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 13

Поведение (behavior) - действия и реакции объекта, выраженные в терминах передачи сообщений и изменения состояния; видимая извне

Слайд 15В процессе решения задачи объект, получив некоторое сообщение, выполняет заранее

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

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

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 14

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

Слайд 16Классы и объекты-переменные
В программе для представления объектов предметной области используют

переменные специальных типов - классы.
Класс - это структурный тип данных,

который включает описание полей данных, а также процедур и функций, работающих с этими полями данных.
Применительно к классам такие процедуры и функции получили название методов.
Поля, описанные в классе, используют для хранения составляющих состояния или атрибутов объекта. Например, если объект Функция должен хранить номер функции, то реализующий его класс должен содержать соответствующее поле.
Класс изображается в виде прямоугольника, состоящего из трех частей. В верхней части помещается название класса, в средней - свойства объектов класса, в нижней - действия, которые можно выполнять с объектами данного класса (методы).
Каждый класс также может иметь специальные методы, которые автоматически вызываются при создании и уничтожении объектов этого класса:
конструктор (constructor) - выполняется при создании объектов;
деструктор (destructor) - выполняется при уничтожении объектов.


8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 15

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

Слайд 178 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

16



Рис.2 Соответствие

объектов предметной области, классам и
объектам-переменным
8  ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Слайд 18Переменные типа класса также обычно называют объектами. На рис. 2

показана связь объектов предметной области, классов и объектов-переменных.
Согласно общим правилам

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

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 17

Переменные типа класса также обычно называют объектами. На рис. 2 показана связь объектов предметной области, классов и

Слайд 19Наследование
Наследование (inheritance) - это отношение между классами, при котором класс

использует структуру или поведение другого класса (одиночное наследование), или других

(множественное наследование) классов. Наследование вводит иерархию "общее/частное", в которой подкласс наследует от одного или нескольких более общих суперклассов. Подклассы обычно дополняют или переопределяют унаследованную структуру и поведение.
В качестве примера можно рассмотреть задачу, в которой необходимо реализовать классы "Легковой автомобиль" и "Грузовой автомобиль". Очевидно, эти два класса имеют общую функциональность. Так, оба они имеют 4 колеса, двигатель, могут перемещаться и т.д. Всеми этими свойствами обладает любой автомобиль, независимо от того, грузовой он или легковой, 5- или 12-местный. Разумно вынести эти общие свойства и функциональность в отдельный класс, например, "Автомобиль" и наследовать от него классы "Легковой автомобиль" и "Грузовой автомобиль", чтобы избежать повторного написания одного и того же кода в разных классах (рис.3).

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 18

НаследованиеНаследование (inheritance) - это отношение между классами, при котором класс использует структуру или поведение другого класса (одиночное

Слайд 20                                                                                                                

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

19
Рис.3

Одиночное наследование
В рассмотренном примере применено одиночное наследование. Некоторый класс также может наследовать свойства и поведение сразу нескольких классов. Наиболее популярным примером применения множественного наследования является проектирование системы учета товаров в зоомагазине.
Все животные в зоомагазине являются наследниками класса "Животное", а также наследниками класса "Товар". Т.е. все они имеют возраст, нуждаются в пище и воде и в то же время имеют цену и могут быть проданы.
Множественное наследование на диаграмме изображается точно так же, как одиночное, за исключением того, что линии наследования соединяют класс-потомок сразу с несколькими суперклассами.
Не все объектно-ориентированные языки программирования содержат языковые конструкции для описания множественного наследования.
                                                                                                                 8  ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Слайд 21Рис.4 Иерархическая система классов окон

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

20
Рис.4 Иерархическая система классов окон8  ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Слайд 22Рис.5 Гетерархическая система классов окон

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

21
Рис.5 Гетерархическая система классов окон8  ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Слайд 238 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

22
Класс-родитель

Класс-потомок

Класс-родитель

Класс-потомок

1

Класс-потомок 2

Рис. 6 Примеры иерархий классов

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

8  ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Слайд 24Методы построения классов
Одним из наиболее значимых достоинств ООП является то,

что большинство классов для реализации объектов не приходится разрабатывать «с

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

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 23

Методы построения классовОдним из наиболее значимых достоинств ООП является то, что большинство классов для реализации объектов не

Слайд 25При наследовании поля и методы родительского класса повторно не определяют,

специальный механизм наследования позволяет использовать эти компоненты класса, особо этого

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

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 24

При наследовании поля и методы родительского класса повторно не определяют, специальный механизм наследования позволяет использовать эти компоненты

Слайд 26Инкапсуляция (encapsulation) - это сокрытие реализации класса и отделение его

внутреннего представления от внешнего (интерфейса). При использовании объектно-ориентированного подхода не

принято применять прямой доступ к свойствам какого-либо класса из методов других классов. Для доступа к свойствам класса принято задействовать специальные методы этого класса для получения и изменения его свойств. Несмотря на непривычность слова это просто связывание полей и методов в одну структуру (складывание их в одну "капсулу").

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 25

Инкапсуляция (encapsulation) - это сокрытие реализации класса и отделение его внутреннего представления от внешнего (интерфейса). При использовании

Слайд 27Инкапсуляция позволяет в максимальной степени изолировать объект от внешнего окружения.

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

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

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 26

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

Слайд 28Полиморфизм
Этот принцип неразрывно связан с наследованием и гласит, что каждый

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

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

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 27

ПолиморфизмЭтот принцип неразрывно связан с наследованием и гласит, что каждый класс наследник может обладать не только свойствами,

Слайд 29Полиморфизм – это свойство родственных объектов (т.е. объектов, имеющих одного

общего родителя) решать схожие по смыслу проблемы разными способами. В

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

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 28

Полиморфизм – это свойство родственных объектов (т.е. объектов, имеющих одного общего родителя) решать схожие по смыслу проблемы

Слайд 30Создание объектов
В Турбо Паскале для создания объектов используется три зарезервированных

слова: object, constructor, destructor и три стандартные директивы: private, public

и virtual.
Зарезервированное слово object используется для описания объекта. Описание объекта должно помещаться в разделе описания типов:
type
       MyObject = object
       {поля объекта}
        {методы объекта}
        end;
Если объект порождается от какого-либо родителя, имя родителя указывается в круглых скобках сразу за словом object:
type
      MyDescendantObject = object (MyObject)
  ............................................................
............................................................
       end;

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 29

Создание объектовВ Турбо Паскале для создания объектов используется три зарезервированных слова: object, constructor, destructor и три стандартные

Слайд 31Пример. Требуется разработать программу, которая создаёт на экране ряд графических

изображений (точку, окружность, линию, квадрат) и может перемещать эти изображения

по экрану. Вид создаваемого программой экрана показан ниже.

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 30

Пример. Требуется разработать программу, которая создаёт на экране ряд графических изображений (точку, окружность, линию, квадрат) и может

Слайд 32Для данной учебной задачи создадим объект-родитель TGraphObject, в рамках которого

инкапсулированы поля и методы, общие для всех остальных объектов:
type
      TGraphObj

= object
       Private  {поля объекта будут скрыты от                    пользователя}
                 X,Y: Integer;  {координаты точки}
                 Color: Word;   {цвет фигуры}
       Public
                  Constructor Init (aX, aY: Integer; aColor: Word);
                  {создаёт экземпляр объекта}
                   Procedure Draw (aColor: Word); Virtual;
                   {вычерчивает объект заданным цветом aColor}
                   Procedure Show;
                   {показывает объект – вычерчивает его цветом Color}
                   Procedure Hide;
                   {прячет объект – вычерчивает его цветом фона}
                   Procedure MoveTo (dX, dY: Integer);
                   {перемещает объект в точку с координатами X+dX и Y+dY}
       end;      {конец описания объекта TGraphObj}   

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 31

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

Слайд 33Чтобы описать все свойства объекта, необходимо раскрыть содержимое объектных методов,

т.е. описать соответствующие процедуры и функции. Описание методов производится обычным

для Паскаля способом в любом месте раздела описаний, но после описания объекта. Например:
type
      TGraphObj = object
      .................................
      end;
Constructor TGraphObj.Init;
begin
         X:= aX;
         Y:= aY;
         Color:= aColor
end;
Procedure TGraphObj.Draw;
begin
{Эта процедура в родительском объекте ничего не делает, поэтому экземпляры TGraphObj не способны отображать себя на экране. Чтобы потомки объекта TGraphObj были способны отображать себя, они должны перекрывать этот метод}
end;

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 32

Чтобы описать все свойства объекта, необходимо раскрыть содержимое объектных методов, т.е. описать соответствующие процедуры и функции. Описание

Слайд 34Procedure TGraphObj.Show;
begin
        Draw (Color)
end;
Procedure TGraphObj.Hide;
begin
         Draw (GetBkColor)
end;
Procedure TGraphObj.MoveTo;
begin
        Hide;
        X:=

X+dX;
        Y:= Y+dY;
end; 
8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

33
Procedure TGraphObj.Show;begin        Draw (Color)end;Procedure TGraphObj.Hide;begin         Draw (GetBkColor)end;Procedure TGraphObj.MoveTo;begin        Hide;        X:= X+dX;        Y:= Y+dY;end;  8  ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Слайд 35Создадим простейшего потомка от TGraphObj — объект TРoint, с помощью

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

для этого, уже есть в объекте TGraphObj, поэтому в объекте TPoint перекрывается единственный метод — Draw:
type
      TPoint = object (TGraphObj)
             Procedure Draw (aColor); Virtual;
      end;
Procedure TPoint.Draw;
begin
        PutPixel (X, Y, Color)   {показываем цветом Color пиксель с     ординатами X и Y}
end;

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 34

Создадим простейшего потомка от TGraphObj — объект TРoint, с помощью которого будет визуализироваться и перемещаться точка. Все

Слайд 36В новом объекте TРoint можно использовать любые методы объекта-родителя TGraphObj.

Например, вызвать метод MoveTo, чтобы переместить изображение точки на новое

место. В этом случае родительский метод TGraphObj.MoveTo будет обращаться к методу TPoint.Draw, чтобы спрятать и затем показать изображение точки.
Директивы private и public
С помощью директивы private при описании объекта можно ограничить область видимости полей и методов. Поля и методы объекта, описанные в секции private, будут доступны только в пределах той программной единицы (программы или модуля), где описан соответствующий объект. Такие поля и методы принято называть приватными.

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 35

В новом объекте TРoint можно использовать любые методы объекта-родителя TGraphObj. Например, вызвать метод MoveTo, чтобы переместить изображение

Слайд 37Директива же public просто отменяет действие директивы private. То есть

все последующие поля и методы будут общедоступными.
Если объектный тип

создается "на базе" другого существующего объекта, то имя родительского типа должно быть указано в скобках после слова object при описании потомка:
Type <Потомок> = object(<Родитель>)
<Добавленные поля>
<Добавленные и переопределенные методы>
end;
Как уже говорилось выше, такие объекты автоматически наследуют от родителя его поля и методы. Поля могут быть добавлены (но не переопределены), а методы переопределены и добавлены.

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 36

Директива же public просто отменяет действие директивы private. То есть все последующие поля и методы будут общедоступными.

Слайд 38Объекты, динамическая память и деструкторы
Экземпляры объектов можно размещать в динамической

памяти (куче). Работа с кучей применительно к объектам почти не

отличается от работы с кучей применительно к обычным данным. Точно так же необходимо объявить ссылку на объект (переменную ссылочного типа), выделить для нее память в куче, а в конце работы эту память освободить.
Разместим, например, в куче экземпляр объекта TCircle:
Type PCircle = ^TCircle;
Var Circ1 : PCircle; ...
Begin Circ1 := New(PCircle); или New(Circ1);

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 37

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

Слайд 39Для работы с экземпляром объекта, расположенного в куче, необходимо проводить

(как обычно) операцию разыменовывания указателя, например:
Circ1^.Init(150, 200, 40, Blue);


Существует расширенный синтаксис процедуры (и функции) New для выделения памяти экземпляру объекта с одновременным вызовом метода-конструктора:
Сirc1 := New(PCircle,Init(150,200,40,Blue)); или New(Сirc1,Init(150,200,40,Blue));

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 38

Для работы с экземпляром объекта, расположенного в куче, необходимо проводить (как обычно) операцию разыменовывания указателя, например: Circ1^.Init(150,

Слайд 40При работе с динамическими объектами надо очень серьезно подходить к

освобождению памяти. Ведь и сам объект в качестве своих полей

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

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 39

При работе с динамическими объектами надо очень серьезно подходить к освобождению памяти. Ведь и сам объект в

Слайд 41В связи с этим синтаксис процедуры Dispose тоже расширен и

позволяет вызывать деструктор объекта до его удаления из кучи:
Dispose(Сirc1,Done);


При таком написании, сначала вызывается деструктор, а затем высвобождается память.
Кстати, назначение деструктора как разновидности процедуры - следить за тем, чтобы высвобождалась соответствующая память.
То есть деструктор - это, как и конструктор, специальный вид метода, который по-другому еще называют "сборщиком мусора".

8 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 40

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

Слайд 42Вопросы?

Вопросы?

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика