Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 129; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.15 (0.009 с.) |