Кафедра «Автоматизированные станочные системы» Dept.

Скачать презентацию Кафедра «Автоматизированные станочные системы»  Dept. Скачать презентацию Кафедра «Автоматизированные станочные системы» Dept.

Лекция 5. Наследование и полиморфизм.ppt

  • Количество слайдов: 17

>  Кафедра «Автоматизированные станочные системы»  Dept. Of Automated Manufacturing Systems Объектно-ориентированное Кафедра «Автоматизированные станочные системы» Dept. Of Automated Manufacturing Systems Объектно-ориентированное программирование – 3. Наследование и полиморфизм Троицкий Д. И. Программирование и основы алгоритмизации 1

>Наследование – фундаментальный принцип ООП Можно создавать новые объектные типы   на основе Наследование – фундаментальный принцип ООП Можно создавать новые объектные типы на основе уже существующих Производные классы наследуют свойства и методы базового класса и добавляют к ним новые Троицкий Д. И. Программирование и основы алгоритмизации 2

>  Вернемся к нашим автомобилям TYPE Tvehicle=CLASS PRIVATE power: WORD; { мощность } Вернемся к нашим автомобилям TYPE Tvehicle=CLASS PRIVATE power: WORD; { мощность } speed: WORD; { скорость } gear: BYTE; { передача } engineon: BOOLEAN; { двигатель вкл/выкл } fuelcons: REAL; { расход топлива } PROCEDURE Start. Engine; PROCEDURE Change. Gear(n: BYTE); PROCEDURE Accelerator (n: REAL); … Автомобиль вообще – и «Запорожец» , и самосвал Троицкий Д. И. Программирование и основы алгоритмизации 3

> Новые свойства и методы для самосвала:  СВОЙСТВА: - грузоподъемность; load: WORD; - Новые свойства и методы для самосвала: СВОЙСТВА: - грузоподъемность; load: WORD; - кузов опущен/поднят; lift: BOOLEAN; - упоры опущены/подняты legs: BOOLEAN; МЕТОДЫ: procedure Lift. Up; - поднять кузов; procedure Lift. Down; - опустить кузов; procedure Legs. Up; - поднять упоры; procedure Legs. Down; - опустить упоры Все остальное возьмем из TVehicle Троицкий Д. И. Программирование и основы алгоритмизации 4

>   Создаем объект – потомок: TYPE Ttruck=CLASS(Tvehicle) PRIVATE load: WORD;  lift: Создаем объект – потомок: TYPE Ttruck=CLASS(Tvehicle) PRIVATE load: WORD; lift: BOOLEAN; legs: BOOLEAN; PUBLIC procedure Lift. Up; Объект- procedure Lift. Down; родитель procedure Legs. Up; procedure Legs. Down; END; Троицкий Д. И. Программирование и основы алгоритмизации 5

>  Принцип полиморфизма В родительском объекте и объекте-потомке могут быть методы с одинаковыми Принцип полиморфизма В родительском объекте и объекте-потомке могут быть методы с одинаковыми именами. Паскаль автоматически определяет, какой метод вызывать. type TCar = CLASS procedure Move; end; Ttruck = CLASS(TCar) procedure Move; end; Троицкий Д. И. Программирование и основы алгоритмизации 6

>Как Delphi определить, какой метод вызывать?    По типу переменной  var Как Delphi определить, какой метод вызывать? По типу переменной var Car: TCar; truck: Ttruck; begin Truck: =TTruck. Create; Car: =TCar. Create; { вызовется метод Move класса Ttruck } Truck. Move ; { вызовется метод Move класса Tcar } Car. Move; . . Троицкий Д. И. Программирование и основы алгоритмизации 7

> Вызов одноименных родительских методов Если у объекта есть родитель, можно вызывать его методы, Вызов одноименных родительских методов Если у объекта есть родитель, можно вызывать его методы, совпадающие по названию с методами самого объекта, при помощи оператора INHERITED: PROCEDURE Ttruck. Move; BEGIN {вызывается метод родителя} INHERITED Move; … END; Троицкий Д. И. Программирование и основы алгоритмизации 8

>   Виртуальные методы   Если заранее не известно, какой объект-потомок будет Виртуальные методы Если заранее не известно, какой объект-потомок будет создан Виртуальный метод родителя перекрывается одноименным методом потомка Троицкий Д. И. Программирование и основы алгоритмизации 9

>  Реализация виртуальных методов TYPE Tcar=CLASS PROCEDURE Move; VIRTUAL; END; …  Реализация виртуальных методов TYPE Tcar=CLASS PROCEDURE Move; VIRTUAL; END; … Этот метод можно перекрыть TYPE Ttruck=CLASS(Tcar) PROCEDURE Move; OVERRIDE; END; Этот метод перекрывает одноименный метод VAR ZIL: Ttruck; родительского класса … ZIL: =TTruck. Create; Вызов перекрывающего ZIL. Move метода Троицкий Д. И. Программирование и основы алгоритмизации 10

>  Абстрактные виртуальные методы  Заголовок есть, метода нет  Если одноименные методы Абстрактные виртуальные методы Заголовок есть, метода нет Если одноименные методы у потомков сильно отличаются, нет смысла описывать соответствующий метод у родителя TYPE Tcar=CLASS PROCEDURE Move; VIRTUAL; ABSTRACT; END; Реализации метода Tcar. Move в программе нет Абстрактные методы нельзя вызывать: VAR c: Tcar; … c. Move Троицкий Д. И. Программирование и основы алгоритмизации 11

>Инкапсуляция– менять значения свойств объекта Инкапсуляция  можно только вызовами методов a. Set. X(12) Инкапсуляция– менять значения свойств объекта Инкапсуляция можно только вызовами методов a. Set. X(12) – правильно, но неудобно a. X: =12 – удобно, но неправильно Для облегчения реализации принципа инкапсуляции и упрощения синтаксиса при работе с объектом введены понятия: Поле объекта Свойство объекта (property) Троицкий Д. И. Программирование и основы алгоритмизации 12

>Поле – скрытое, вообще недоступно извне объекта:  TYPE TA=CLASS PRIVATE   Поле – скрытое, вообще недоступно извне объекта: TYPE TA=CLASS PRIVATE поля a: WORD; b: BOOLEAN Свойство объекта – виртуальное поле, доступное извне: PUBLIC PROPERTY abc: WORD READ Get. A WRITE Put. A; Троицкий Д. И. Программирование и основы алгоритмизации 13

> Свойство связано с полем при помощи специальных методов объекта:  - для записи Свойство связано с полем при помощи специальных методов объекта: - для записи значения в поле (WRITE); - для чтения значения поля (READ). TYPE TA=CLASS PRIVATE a: WORD; PROCEDURE Puta(newa: WORD); FUNCTION Geta: WORD; PUBLIC PROPERTY abc: WORD READ Geta WRITE Puta; END; Троицкий Д. И. Программирование и основы алгоритмизации 14

>Простейшая реализация методов чтения/записи:  IMPLEMENTATION PROCEDURE TA. Puta(newa: WORD); BEGIN a: =newa END; Простейшая реализация методов чтения/записи: IMPLEMENTATION PROCEDURE TA. Puta(newa: WORD); BEGIN a: =newa END; FUNCTION TA. Geta: WORD; BEGIN Result: =a END; Троицкий Д. И. Программирование и основы алгоритмизации 15

>  Что будет происходить при   обращении к свойству VAR obj: TA; Что будет происходить при обращении к свойству VAR obj: TA; PROCEDURE … TA. Puta(newa: WORD); obj. abc: =10 BEGIN a: =newa END; VAR obj: TA; FUNCTION TA. Geta: WORD; … BEGIN c: =obj. abc+5; Result: =a END; Троицкий Д. И. Программирование и основы алгоритмизации 16

>   Cвойства только для чтения Их значения можно прочитать, но нельзя изменить Cвойства только для чтения Их значения можно прочитать, но нельзя изменить извне объекта (только из методов) TYPE TA=CLASS PRIVATE a: WORD; FUNCTION Get. A: WORD; PUBLIC PROPERTY abc: WORD READ Get. A; … obj. abc: =10; Троицкий Д. И. Программирование и основы алгоритмизации 17