Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Модуль 7. Объектно - ориентированное программирование
Тип объект.
Объект можно рассматривать как усовершенствование типа запись, в которой описание свойств и параметры моделируемой сущности дополняются методами - описаниями действий с объектом. В отличие от записи объект объявляется словом object. Пример: создадим простейший объект: позицию на экране в графическом режиме: program oop; uses graph; type pozicia = object x, y: integer; procedure init (xn, yn: integer); procedure locate (var xl, yl: integer); end; procedure pozicia.init; begin x:=xn; y:=yn; end; procedure pozicia.locate; begin xl:=x; yl:=y; end; var d, r, xx, yy: integer; p: pozicia; begin d:=detect; randomize; initgraph (d, r, 'c:\tp\bgi'); p.init (random(GetMaxX), random(GetMaxY)); closegraph; p.locate (xx, yy); write (xx, yy); end.
Инкапсуляция.
Одним из главных свойств ООП является инкапсуляция - замыкание в общей оболочке (Object…end) всех составляющих описания. При этом поля оказываются глобальными для методов данного объекта, т.к. у полей и методов общая область действия, то совпадение имен полей и формальных параметров методов не допустимо. Блоки-методы вынесены за описание типа объект. Имена блоков-методов, принадлежащих разным типам могут совпадать. Даже при совпадении имен заголовки методов будут различны, т.к. состоят из префикса (имени типа) и имени метода. Доступ к полям объектов из вне можно принудительно ограничивать. Для этого группа полей в описании объекта заключается в скобки Private Public. После этого поля окажутся доступными лишь методам данного модуля.
Наследование.
Примитивные объекты не используются как програмные модули, а используются в качестве носителей общих свойств и методов. Такие объекты называют родительскими. Объекты основанные на родительских называют дочерними. Родительский тип не используемый для описания переменных называется абстрактным. Тип потомок наследует все поля типа отца. В их числе все поля унаследованные отцом, если у него есть предки. Увеличение числа полей у потомка необязательно. Наследоваться также могут и методы, но выборочно. Описание типа потомка имеют отличительную деталь - имя типа отца: <имя типа потомка>=object(<имя типа отца>) С увеличением сложности объектов увеличивается число действий, которое можно заменить построением нового метода, причем имена методов создаются так, как если бы объекты не имели между собой родственной связи. Одинаковое обозначение функционально-подобных методов упрощает не только восприятие системы объектов, но и программирование.
Важной деталью использования наследования в программах является применение присваивания объектам значений объектов. Присваивание A:=B допустимо, если A и B - однотипны, A - предок B или для каждого поля A есть соответствующее поле в B.
Полиморфизм.
Полиморфизм предполагает определение класса или нескольких классов для родственных объектных типов так, что каждому классу отводится своя функциональная роль. Методы одного класса обычно наделяются общим именем. В ситуации когда необходимо сложный метод использовать в нескольких объектах и различия в поведении объектов минимальны, возможно создание смежного сложного метода с вынесением различий в сменные подчиненные методы. Такой метод называется конструктивным полиморфизмом. Осуществляется эта идея созданием виртуальных сменных методов. В заголовке такого метода присутствует слово virtual, а для их подключения к общему методу - обращение к конструктору - блоку со специальным заголовком. constructor <имя блока> (<список формальных параметров>) К конструктору надо обращаться для каждого объекта использующего виртуальные методы. Задача: тип kom - сын типа pozicia представляет закрашенные квадраты с длиной стороны raz (в пикселах). Наследуемые поля x, y являются координатами центра квадрата. Процедура kom.zoom увеличивает (уменьшает) объект если аргумент znak>0 (znak<=0). Длина raz изменяется на 2*delt, где delt - еще один аргумент. uses graph, crt; type pozicia = object x, y: integer; procedure init (xn, yn: integer); procedure locat (var xl, yl: integer); end; kom=object (pozicia) cvet, raz: word; procedure init (xn, yn: integer; color: word); procedure zoom (delt, znak: integer); end; procedure pozicia.init; begin x:=xn; y:=yn; end; procedure pozicia.locat; begin xl:=x; yl:=y; end; procedure kom.init; begin pozicia.init (xn, yn); cvet:=color; raz:=1; end; procedure kom.zoom; var j, d: integer; begin if znak>0 then setcolor (cvet) else setcolor (getBkcolor); for j:=1 to delt do begin if znak>0 then raz:=raz+2; d:=raz div 2; moveto (x-d, y-d); linerel (d+d, 0); linerel (0, d+d); linerel (-d-d, 0); linerel (0, -d-d); if (znak<=0) and (raz>1) then raz:=raz-2; end; end; const n=50; var j, d, r, xx, yy: integer; kvad: array [1..n] of kom; begin d:=detect;
randomize; initgraph (d, r, 'c:\tp\bgi'); for j:=1 to n do kvad[j].init (random(GetMaxX), random(GetMaxY), random(GetMaxColor); repeat delay (100); j:=random (n)+1; kvad[j].zoom(random(8)+1, random(3)-1); until kepressed; closegraph; kvad[1].locat (xx, yy); write (xx, ' ', yy); readln; end.
|
||||||
Последнее изменение этой страницы: 2020-12-09; просмотров: 64; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.237.255 (0.012 с.) |