К. Поляков, 2011 1 Объектно- ориентированное программирование 7.1 Что такое ООП?Что такое ООП? 7.2 Объекты и классыОбъекты и.

Презентация:



Advertisements
Похожие презентации
ОДНОМЕРНЫЕ МАССИВЫ. РАБОТА С ЭЛЕМЕНТАМИ СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ.
Advertisements

1. Определить последовательность проезда перекрестка
1 Программирование на языке Паскаль Циклы. 2 Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов.

Двумерные массивы. Задачи обработки двумерных массивов.
Проектирование архитектуры ИСО 1. UML 2 Структура определения языка 4.
Массивы Материалы к урокам по программированию. МАССИВ это УПОРЯДОЧЕННАЯ последовательность данных ОДНОГО ТИПА. Массивы относятся к структурированным.
1 Знаток математики Тренажер Таблица умножения 2 класс Школа 21 века ®м®м.
Урок повторения по теме: «Сила». Задание 1 Задание 2.
Таблица умножения на 8. Разработан: Бычкуновой О.В. г.Красноярск год.
Урок-обобщение (7 класс – алгебра) МОУ "СОШ 45 г. Чебоксары" Кабуркина М. Н.1.
Что такое структурный подход в программировании? Как он реализуется в ЯП Паскаль? Что такое процедура? Кто дает название процедуре? Где записывается процедура?
Подпрограммы 1.Принцип модульности 2.Область действия переменных 3.Параметры подпрограмм 4.Модули.
Фрагмент карты градостроительного зонирования территории города Новосибирска Масштаб 1 : 6000 Приложение 7 к решению Совета депутатов города Новосибирска.
Разработал: Учитель химии, биологии высшей квалификационной категории Баженов Алексей Анатольевич.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
1 Программирование на языке Паскаль Ветвления. 2 Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее из них. Идея решения:
Лекция 2 Раздел 2.1 Windows Phone Темы раздела 3.
1 Записи 2 Запись – это тип данных, который может включать в себя несколько полей – элементов разных типов (в том числе и другие структуры). Свойства:
Автор: учитель информатики МКОУ Плесской средней общеобразовательной школы Юдин Андрей Борисович Часть 1.
Транксрипт:

К. Поляков, Объектно- ориентированное программирование 7.1 Что такое ООП?Что такое ООП? 7.2 Объекты и классыОбъекты и классы 7.3 Скрытие внутреннего устройства объектовСкрытие внутреннего устройства объектов 7.4 Иерархия классовИерархия классов

К. Поляков, Объектно- ориентированное программирование 7.1 Что такое ООП?

Объектно-ориентированное программирование К. Поляков, Направления развития ПО 3 переход от расчетов по формулам к сложным задачам моделирования систем увеличение объемов обрабатываемых данных повышение сложности программ, увеличение их длины (до миллионов строк!) Сложность программ превышает возможности одного человека. ! В итоге: коллективная разработка каждый делает свою часть независимо от других части программы легко «собрать» вместе Как? ?

Объектно-ориентированное программирование К. Поляков, Борьба со сложностью 4 «Техника борьбы со сложностью известна с античных времен: Divide et impera (разделяй и властвуй)». Э. Дейкстра подзадача 1 подзадача 3 подзадача 2.1 подзадача 2.2 подзадача 2.3 задача подзадача 2 Декомпозиция – это разбиение системы на подсистемы, каждая из которых может изучаться отдельно. Алгоритмическая декомпозиция > строк???

Объектно-ориентированное программирование К. Поляков, Объектный подход 5 Люди воспринимают мир, состоящий из объектов (Р. Декарт).

Объектно-ориентированное программирование К. Поляков, Абстракция 6 Абстракция – это выделение существенных характеристик объекта, отличающих его от других объектов. Иллюстрация из книги Г. Буч, Объектно-ориентированный анализ и проектирование с примерами приложений на С++.

Объектно-ориентированное программирование К. Поляков, Абстракция в программировании 7 программа – это множество взаимодействующих объектов (моделей) объекты имеют свойства и поведение объекты не «знают» внутреннее устройство других объектов А А Б Б Б1 Б2 Б3 В В В1 В2 В3 Г Г Г1 Г2 Объектная декомпозиция Объектная декомпозиция

Объектно-ориентированное программирование К. Поляков, Абстракция в программировании 8 Б Б Б1 Б2 Б3 В В В1 В2 В3 Верхний уровень: определить, ЧТО делает каждый объект определить ИНТЕРФЕЙС – способ обмена данными между объектами Б Б В В интерфейс Нижний уровень: определить, КАК работают объекты интерфейс

Объектно-ориентированное программирование К. Поляков, Что такое ООП? 9 Программирование, основанное на моделировании задачи реального мира как множества взаимодействующих объектов, принято называть объектно-ориентированным программированием (ООП). уточнение следует…

К. Поляков, Объектно- ориентированное программирование 7.2 Объекты и классы

Объектно-ориентированное программирование К. Поляков, Объектно-ориентированный анализ (ООА) 11 Задачи: выделить взаимодействующие объекты определить их существенные свойства описать команды, которые объекты могут выполнить (поведение) Какие свойства существенные? ?

Объектно-ориентированное программирование К. Поляков, Что такое объект? 12 Объектом можно назвать то, что имеет четкие границы и обладает состоянием и поведением. Состояние объекта определяет его поведение! ! Примеры: «Подпрыгни!»«Пли!»

Объектно-ориентированное программирование К. Поляков, Объектная модель: пример 13 Объекты: дорога машины Описывать каждую машину отдельно? ? светофоры … Класс – это множество объектов, имеющих общую структуру и общее поведение. Классы объектов: Дорога, Машина

Объектно-ориентированное программирование К. Поляков, Объектная модель: класс Дорога 14 длина ширина Дорога длина ширина название класса свойства поведение (команды, методы) поведение (команды, методы) Какое «поведение» могло бы быть у дороги? ?

Объектно-ориентированное программирование К. Поляков, Объектная модель: класс Машина 15 X Y V Машина X (координата) Y (полоса) V (скорость) двигаться Дорога длина ширина Метод – это процедура или функция, принадлежащая классу объектов. метод узнать длину

Объектно-ориентированное программирование К. Поляков, Класс Дорога в программе 16 type TRoad = class Length: real; Width: integer; end; type TRoad = class Length: real; Width: integer; end; поля Поле – это переменная, принадлежащая объекту. Объявление (описание) класса: Объект в памяти не создается! ! Аналогия: чертёж детали. от type

Объектно-ориентированное программирование К. Поляков, Класс Дорога в программе 17 var road: TRoad; Переменная для работы с объектом: Объект в памяти не создается! ! LengthWidth 00 road адрес Ссылка – это переменная, в которую можно записать адрес объекта заданного типа. road := TRoad.Create; Конструктор – это метод класса, который вызывается для создания объектов этого класса. ? Конструктор не нужно объявлять! !

Объектно-ориентированное программирование К. Поляков, Создание объекта 18 type TRoad = class Length: real; Width: integer; end; var road: TRoad; begin road := TRoad.Create; road.Length := 60; road.Width := 3; end. type TRoad = class Length: real; Width: integer; end; var road: TRoad; begin road := TRoad.Create; road.Length := 60; road.Width := 3; end. описание класса переменная-ссылка вызов конструктора значения полей

Объектно-ориентированное программирование К. Поляков, Новый конструктор 19 Цель – определить начальные значения при создании объекта. road := TRoad.Create (60, 3); длина ширина Описание класса: type TRoad = class Length: real; Width: integer; end; type TRoad = class Length: real; Width: integer; end; constructor Create(length0: real; width0: integer);

Объектно-ориентированное программирование К. Поляков, Новый конструктор 20 Реализация (программа) конструктора: constructor TRoad. Create(length0: real; width0: integer); begin if length0 > 0 then Length := length0 else Length := 1; if width0 > 0 then Width := width0 else Width := 1; end; constructor TRoad. Create(length0: real; width0: integer); begin if length0 > 0 then Length := length0 else Length := 1; if width0 > 0 then Width := width0 else Width := 1; end; Length := length0; Width := width0; Что плохо? ? Можно обрабатывать ошибки! ! TRoad. метод класса TRoad

Объектно-ориентированное программирование К. Поляков, Класс Машина в программе 21 Машина X (координата) Y (полоса) V (скорость) двигаться Дорога длина ширина узнать длину type TCar = class X, V: real; { координата, скорость } Y: integer; { номер полосы } road: TRoad; { ссылка на дорогу } procedure move; { двигаться вперед } end; type TCar = class X, V: real; { координата, скорость } Y: integer; { номер полосы } road: TRoad; { ссылка на дорогу } procedure move; { двигаться вперед } end; Как машина сможет узнать длину дороги? ? адрес объекта класса Дорога road: TRoad;

Объектно-ориентированное программирование К. Поляков, Класс Машина в программе 22 procedure TCar.move; begin X := X + V; { при Δt = 1 } if X > road.Length then X := 0; { «перескочить» в начало } end; procedure TCar.move; begin X := X + V; { при Δt = 1 } if X > road.Length then X := 0; { «перескочить» в начало } end; Равномерное движение: V – перемещение за 1 интервал. длина дороги, по которой едет машина

Объектно-ориентированное программирование К. Поляков, Класс Машина в программе 23 type TCar = class... constructor Create(road: TRoad; y0: integer; v0: real); end; type TCar = class... constructor Create(road: TRoad; y0: integer; v0: real); end; Добавление конструктора: адрес дороги полоса скорость Чему будет равна координата X? ?

Объектно-ориентированное программирование К. Поляков, Основная программа моделирования 24 const N = 3; var road: TRoad; cars: array [1..N] of TCar; i: integer; begin road := TRoad.Create(60, N); for i:=1 to N do cars[i] := TCar.Create(road, i, 2.0*i); repeat for i:=1 to N do cars[i].move; { вывод расположения машин } until keypressed; end. const N = 3; var road: TRoad; cars: array [1..N] of TCar; i: integer; begin road := TRoad.Create(60, N); for i:=1 to N do cars[i] := TCar.Create(road, i, 2.0*i); repeat for i:=1 to N do cars[i].move; { вывод расположения машин } until keypressed; end. Важен ли порядок создания объектов? ?

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

К. Поляков, Объектно- ориентированное программирование 7.3 Скрытие внутреннего устройства объектов

Объектно-ориентированное программирование К. Поляков, Зачем скрывать внутреннее устройство? 27 Иллюстрация из книги Г. Буч, Объектно-ориентированный анализ и проектирование с примерами приложений на С++. борьба со сложностью безопасность внутренних данных возможность изменять «внутренности», не меняя интерфейс

Объектно-ориентированное программирование К. Поляков, Инкапсуляция 28 Инкапсуляция («помещение в капсулу») – это скрытие внутреннего устройства объектов от других объектов. Класс Перо (цвет и стиль линий): type TPen = class color: string; end; type TPen = class color: string; end; 'FF00FF' var pen: TPen;... pen := TPen.Create; pen.color := '#%'; writeln(pen.color); var pen: TPen;... pen := TPen.Create; pen.color := '#%'; writeln(pen.color); По умолчанию все поля общедоступные! ! доступно всем!

Объектно-ориентированное программирование К. Поляков, Инкапсуляция 29 Скрытие полей: type TPen = class private FColor: string; end; type TPen = class private FColor: string; end; от Field – «поле» частный, закрытый F private pen.color := 'FFFF00'; writeln(pen.color); pen.color := 'FFFF00'; writeln(pen.color); Проблема – нет доступа к полю! ! Для доступа к закрытому полю нужны методы чтения и записи! !

Объектно-ориентированное программирование К. Поляков, Методы доступа к полю 30 type TPen = class private FColor: string; public function getColor: string; procedure setColor(newColor: string); end; type TPen = class private FColor: string; public function getColor: string; procedure setColor(newColor: string); end; общедоступный public метод чтения function getColor: string; procedure setColor(newColor: string); метод записи Метод чтения: функция без параметров возвращает значение того же типа, что и поле Метод записи: процедура принммает значение того же типа, что и поле

Объектно-ориентированное программирование К. Поляков, TPen Методы доступа к полю 31 function TPen.getColor: string; begin Result := FСolor; end; procedure TPen.setColor(newColor: integer); begin FColor := newColor; end; function TPen.getColor: string; begin Result := FСolor; end; procedure TPen.setColor(newColor: integer); begin FColor := newColor; end; Стало ли лучше? ? getColor setColor FColor другой объект другой объект методыполе

Объектно-ориентированное программирование К. Поляков, Проверка при изменении поля 32 procedure TPen.setColor(newColor: integer); begin if { ошибочное значение } then FColor := '000000' { чёрный цвет } else FColor := newColor; end; procedure TPen.setColor(newColor: integer); begin if { ошибочное значение } then FColor := '000000' { чёрный цвет } else FColor := newColor; end; В случае ошибочного значения установить черный цвет: Length(newColor) 6 pen.setColor('FF00'); { ошибка: черный } pen.setColor('FFFF00'); { запись } writeln(pen.getColor); { чтение } pen.setColor('FF00'); { ошибка: черный } pen.setColor('FFFF00'); { запись } writeln(pen.getColor); { чтение } Использование: Какие ошибки не обработаны? ?

Объектно-ориентированное программирование К. Поляков, Свойство 33 pen.сolor := 'FFFF00'; { запись } writeln(pen.color); { чтение } pen.сolor := 'FFFF00'; { запись } writeln(pen.color); { чтение } Свойство – это способ доступа к внутреннему состоянию объекта, имитирующий обращение к его внутренней переменной. TPen FColor другой объект другой объект color getColor setColor методыполесвойство

Объектно-ориентированное программирование К. Поляков, Свойство 34 type TPen = class private FColor: string; function getColor: string ; procedure setColor(newColor: string ); public property сolor: string read getColor write setColor; end; type TPen = class private FColor: string; function getColor: string ; procedure setColor(newColor: string ); public property сolor: string read getColor write setColor; end; свойство property pen.сolor := 'FFFF00'; { запись } writeln(pen.color); { чтение } pen.сolor := 'FFFF00'; { запись } writeln(pen.color); { чтение } string тип свойства getColor метод чтения setColor метод записи

Объектно-ориентированное программирование К. Поляков, Изменяем способ хранения данных 35 FColor: string; FColor: integer; 'FF00FF'FF00FF 16 = '001234' = 4460 '0000A5'A5 16 = 165 TPen FColor другой объект другой объект color getColor setColor методыполесвойство реализацияинтерфейс Можно менять реализацию, не меняя интерфейс! !

Объектно-ориентированное программирование К. Поляков, Изменяем способ хранения данных 36 function TPen.getColor: string; begin Result := IntToHex (FColor,6); end; function TPen.getColor: string; begin Result := IntToHex (FColor,6); end; procedure TPen.setColor(newColor: string); begin if Length(newColor) 6 then FColor := 0 { чёрный цвет } else FColor := StrToInt ('$' + newColor); end; procedure TPen.setColor(newColor: string); begin if Length(newColor) 6 then FColor := 0 { чёрный цвет } else FColor := StrToInt ('$' + newColor); end; IntToHex X 10 X 16 (строка) 6 знаков: '0000FF' StrToInt строка число шестнадцатеричное

Объектно-ориентированное программирование К. Поляков, Свойства «только для чтения» 37 Машина … V (скорость) двигаться Могут ли другие объекты менять скорость автомобиля? ? type TCar = class private Fv: real;... public property v: real read Fv;... end; type TCar = class private Fv: real;... public property v: real read Fv;... end; property v: real read Fv; свойство «только для чтения»

Объектно-ориентированное программирование К. Поляков, Скрытие внутреннего устройства: итог 38 свойства методы защита данных объекта изменение внутреннего устройства не требует изменения других объектов, если сохранить интерфейс длина программы замедление работы Выгодно для больших программ, где требуется надежность! !

К. Поляков, Объектно- ориентированное программирование 7.4 Иерархия классов

Объектно-ориентированное программирование К. Поляков, Классификации 40 Фото: xenianova.files.wordpress.com, spoon.com.ua, gerbl.ru Фрукт Как выглядит фрукт? ? сочный съедобный плод дерева или кустарника базовый класс классы-наследники Яблоко – это разновидность фруктов. Яблоко наследует все свойства фруктов.

Объектно-ориентированное программирование К. Поляков, Примеры наследования свойств 41 Человек Работник школы Ученик Родитель Администратор Учитель Технический работник Директор Завуч Уборщик Слесарь Электрик базовый класс

Объектно-ориентированное программирование К. Поляков, Что такое наследник? 42 Класс Б является наследником класса А, если можно сказать, что Б – это разновидность А. водоемозеро осёлживотное цветок ромашка автомобиль двигатель Двигатель – это часть автомобиля, а не разновидность! ! автомобиль грузовик косточка ягода

Объектно-ориентированное программирование К. Поляков, Иерархия логических элементов 43 Логический элемент с одним входом с двумя входами НЕ И И ИЛИ

Объектно-ориентированное программирование К. Поляков, Определение ООП 44 Объектно-ориентированное программирование – это такой подход к программированию, при котором 1)программа представляет собой множество взаимодействующих объектов, 2)… каждый из которых является экземпляром определенного класса, и … 3)классы образуют иерархию наследования.

Объектно-ориентированное программирование К. Поляков, Класс «Логический элемент» 45 ЛогЭлемент In1 (вход 1) In2 (вход 2) Res (результат) сalc (вычислить) type TLogElement = class In1, In2: boolean; Res: boolean; procedure calc; end; type TLogElement = class In1, In2: boolean; Res: boolean; procedure calc; end; Сравните (плюсы, минусы): type TLogElement = class In1, In2: boolean; function res: boolean; end; type TLogElement = class In1, In2: boolean; function res: boolean; end; вычислить результат при изменении входов вычислить результат по известным входам

Объектно-ориентированное программирование К. Поляков, Скрываем данные (инкапсуляция) 46 type TLogElement = class private FIn1, FIn2: boolean; FRes: boolean; procedure calc; procedure setIn1(newIn1: boolean); procedure setIn2(newIn2: boolean); public property In1: boolean read FIn1 write setIn1; property In2: boolean read FIn2 write setIn2; property Res: boolean read FRes; end; type TLogElement = class private FIn1, FIn2: boolean; FRes: boolean; procedure calc; procedure setIn1(newIn1: boolean); procedure setIn2(newIn2: boolean); public property In1: boolean read FIn1 write setIn1; property In2: boolean read FIn2 write setIn2; property Res: boolean read FRes; end; читать прямо из поля свойство «только для чтения»

Объектно-ориентированное программирование К. Поляков, Процедура изменения входа 47 procedure TLogElement.setIn1(newIn1: boolean); begin FIn1 := newIn1; calc; end; procedure TLogElement.setIn1(newIn1: boolean); begin FIn1 := newIn1; calc; end; Сразу после изменения входа нужно пересчитать значение выхода! ! Проблемы: как написать метод calc? для элемента «НЕ» доступ ко второму входу не нужен!

Объектно-ориентированное программирование К. Поляков, Метод calc 48 невозможно написать для базового класса разный у всех логических элементов наследники должны его переопределять! недоступен для других объектов Абстрактный метод – это метод, который объявляется, но не реализуется в классе. Виртуальный метод – это метод, который могут переопределять классы-наследники. Calc – это виртуальный (virtual) и абстрактный (abstract) метод! !

Объектно-ориентированное программирование К. Поляков, Метод calc 49 type TLogElement = class private... protected procedure calc; virtual; abstract; public... end; type TLogElement = class private... protected procedure calc; virtual; abstract; public... end; procedure calc; virtual; abstract; protected виртуальный абстрактный защищенный protected – доступно только наследникам! ! Абстрактный класс – это класс, содержащий абстрактный метод («фрукт»).

Объектно-ориентированное программирование К. Поляков, Как «скрыть» свойство In2 ? 50 type TLogElement = class private... protected property In2: boolean read FIn2 write setIn2; procedure calc; virtual; abstract; public... end; type TLogElement = class private... protected property In2: boolean read FIn2 write setIn2; procedure calc; virtual; abstract; public... end; property In2: boolean read FIn2 write setIn2; Наследники могут «открыть» защищенное свойство (перевести в public )! !

Объектно-ориентированное программирование К. Поляков, Классы-наследники: TNot 51 type TNot = class(TLogElement) procedure calc; override; end; type TNot = class(TLogElement) procedure calc; override; end; override; переопределить наследник от … procedure TNot.calc; begin FRes := not FIn1; end; procedure TNot.calc; begin FRes := not FIn1; end; TNot – не абстрактный класс! !

Объектно-ориентированное программирование К. Поляков, Классы-наследники: TLog2In 52 TLog2In = class(TLogElement) public property In2; end; TLog2In = class(TLogElement) public property In2; end; свойство становится общедоступным наследник от … TLog2In – абстрактный класс? ?

Объектно-ориентированное программирование К. Поляков, Классы-наследники: TAnd 53 type TAnd = class(TLog2In) procedure calc; override; end; type TAnd = class(TLog2In) procedure calc; override; end; override; переопределить наследник от … procedure TAnd.calc; begin FRes := FIn1 and FIn2; end; procedure TAnd.calc; begin FRes := FIn1 and FIn2; end; TAnd – абстрактный класс? ?

Объектно-ориентированное программирование К. Поляков, Вернемся к setIn1 … 54 procedure TLogElement.setIn1 (newIn1: boolean); begin FIn1 := newIn1; calc; end; procedure TLogElement.setIn1 (newIn1: boolean); begin FIn1 := newIn1; calc; end; calc; какой метод вызывается? вызвать процедуру = перейти по заданному адресу памяти в классе TLogElement метод calc не реализован (нет кода, нет адреса) каждый наследник имеет свой метод calc

Объектно-ориентированное программирование К. Поляков, Обычный вызов процедуры calc;... calc;... call AB12... call AB12... ПаскальАссемблерпроцедура AB12... AB14... AB AB12... AB14... AB Статическое связывание: адрес процедуры известен и сразу записывается в машинный код!

Объектно-ориентированное программирование К. Поляков, Динамическое связывание (при выполнении) calc;... calc;... Паскаль Каков класс объекта? ? TNot.calc методы классов TAnd.calc TOr.calc виртуальный метод Виртуальный метод – это метод базового класса, который могут переопределить классы- наследники так, что конкретный адрес вызываемого метода определяется только при выполнении программы.

Объектно-ориентированное программирование К. Поляков, Основная программа («И-НЕ») 57 var elNot: TNot; { ссылки } elAnd: TAnd; A, B: boolean; begin elNot := TNot.Create; { создание объектов } elAnd := TAnd.Create; writeln('| A | B | not(A&B) '); writeln(' '); for A:=False to True do begin { перебор вариантов } elAnd.In1 := A; for B:=false to True do begin elAnd.In2 := B; elNot.In1 := elAnd.res; { связь элементов } writeln('| ', integer(A), ' | ', integer(B), ' | ', integer(elNot.res)); end; end. var elNot: TNot; { ссылки } elAnd: TAnd; A, B: boolean; begin elNot := TNot.Create; { создание объектов } elAnd := TAnd.Create; writeln('| A | B | not(A&B) '); writeln(' '); for A:=False to True do begin { перебор вариантов } elAnd.In1 := A; for B:=false to True do begin elAnd.In2 := B; elNot.In1 := elAnd.res; { связь элементов } writeln('| ', integer(A), ' | ', integer(B), ' | ', integer(elNot.res)); end; end. integer(False) = 0 integer(True) = 1 ! | A | B | not(A&B) | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | A | B | not(A&B) | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0

Объектно-ориентированное программирование К. Поляков, Классы – в модуль! 58 unit log_elem; {$mode objfpc} interface { доступно другим модулям } type TLogElement = class... end;... { объявление всех классов } implementation { скрыто от других модулей } procedure TLogElement.setIn1(newIn1: boolean); begin FIn1 := newIn1; calc; end;... end. unit log_elem; {$mode objfpc} interface { доступно другим модулям } type TLogElement = class... end;... { объявление всех классов } implementation { скрыто от других модулей } procedure TLogElement.setIn1(newIn1: boolean); begin FIn1 := newIn1; calc; end;... end. interface implementation режим работы с объектами

Объектно-ориентированное программирование К. Поляков, Основная программа 59 program logic; {$mode objfpc} uses log_elem ; var elNot: TNot; elAnd: TAnd;... begin elNot := TNot.Create; elAnd := TAnd.Create;... end. program logic; {$mode objfpc} uses log_elem ; var elNot: TNot; elAnd: TAnd;... begin elNot := TNot.Create; elAnd := TAnd.Create;... end. unit log_elem ; {$mode objfpc} interface { доступно другим модулям }... implementation { скрыто от других модулей }... end. unit log_elem ; {$mode objfpc} interface { доступно другим модулям }... implementation { скрыто от других модулей }... end. log_elem

Объектно-ориентированное программирование К. Поляков, Обмен данными между объектами 60 & & «И»«НЕ» Как может один объект передать данные другому? ? 12 объект 1 должен «знать» адрес объекта 2 у объекта 2 должен быть метод, доступный объекту 2, с помощью которого он может передать данные

Объектно-ориентированное программирование К. Поляков, Обмен данными между объектами 61 TLogElement = class private FNextEl: TLogElement; { адрес объект 2 } FNextIn: integer; { номер входа объекта 2 }... public procedure Link(nextElement: TLogElement; nextIn: integer);... end; TLogElement = class private FNextEl: TLogElement; { адрес объект 2 } FNextIn: integer; { номер входа объекта 2 }... public procedure Link(nextElement: TLogElement; nextIn: integer);... end; метод для установки связи выхода с входом другого элемента

Объектно-ориентированное программирование К. Поляков, Обмен данными между объектами 62 procedure TLogElement.Link (nextElement: TLogElement; nextIn: integer); begin FNextEl := nextElement; FNextIn := nextIn; end; procedure TLogElement.Link (nextElement: TLogElement; nextIn: integer); begin FNextEl := nextElement; FNextIn := nextIn; end; запомнить адрес и номер входа следующего элемента Когда нужно передать данные «следующему»? ?

Объектно-ориентированное программирование К. Поляков, Обмен данными между объектами 63 procedure TLogElement.setIn1(newIn1: boolean); begin FIn1 := newIn1; calc; if FNextEl nil then case FNextIn of 1: FNextEl.In1 := res; 2: FNextEl.In2 := res; end; procedure TLogElement.setIn1(newIn1: boolean); begin FIn1 := newIn1; calc; if FNextEl nil then case FNextIn of 1: FNextEl.In1 := res; 2: FNextEl.In2 := res; end; если связь установлена… передать новые данные Почему не включить передачу в метод calc ? ? аналогично для setIn2 …

Объектно-ориентированное программирование К. Поляков, Обмен данными между объектами 64 elNot := TNot.Create; elAnd := TAnd.Create; elAnd.Link(elNot, 1);... for A:=False to True do begin elAnd.In1 := A; for B:=False to True do begin elAnd.In2 := B;... end; elNot := TNot.Create; elAnd := TAnd.Create; elAnd.Link(elNot, 1);... for A:=False to True do begin elAnd.In1 := A; for B:=False to True do begin elAnd.In2 := B;... end; elAnd.Link(elNot, 1); объект elAnd САМ сообщает объекту elNot, что его выход изменился установить связь

Объектно-ориентированное программирование К. Поляков, Конец фильма ПОЛЯКОВ Константин Юрьевич д.т.н., учитель информатики высшей категории, ГОУ СОШ 163, г. Санкт-Петербург