Содержание
- 2. Введение. Эволюция технологии разработки ПО. Процедурная и объектная декомпозиция «Стихийное» программирование – до середины 60-х годов
- 3. Эволюция технологии разработки ПО (2) 2. Структурный подход к программированию - 60-70-е годы ХХ века –
- 4. Эволюция технологии разработки ПО (3) Модульное программирование – выделение групп подпрограмм, использующих общие глобальные данные в
- 5. Эволюция технологии разработки ПО (4) 3. Объектный подход к программированию – с середины 80-х до наших
- 6. Эволюция технологии разработки ПО (5) Компонентный подход – с конца 90-х годов ХХ века (COM-техноло-гия, Corba,
- 7. Пример Разработать программную систему, которая для указанной функции на заданном отрезке: строит таблицу значений с определенным
- 8. Формы интерфейса пользователя Программа исследования функций. Введите функцию или слово «Конец»: y = cos(x) – 1
- 9. Диаграмма состояний интерфейса пользователя Ввод функции Меню Таблица Корни Экстремумы 1 2 3 4 «Конец»
- 10. Разработка схем алгоритмов методом пошаговой детализации Начало F, a, b F =“End” Analyze (fun,a,b) да нет
- 11. Схема структурная программы Main Program Translate Analyze Roots Extremes Table Процедурная декомпозиция – процесс разбиения программы
- 12. Объектная декомпозиция Объектная декомпозиция – процесс представления предметной области задачи в виде отдельных функциональных элементов (объектов
- 13. Реализация объектов предметной области Класс – это структурный тип данных, который включает описание полей данных, а
- 14. Основные принципы, на которых базируется объектно-ориентированное программирование абстрагирование – выделение абстракций в предметной области задачи; под
- 15. Методы построения классов Наследование – механизм, позволяющий строить класс на базе более простого посредством добавления полей
- 16. Глава 7 Средства объектно-ориентированного программирования МГТУ им. Н.Э. Баумана Факультет Информатика и системы управления Кафедра Компьютерные
- 17. 7.1 Определение класса, инкапсуляция полей и методов класса. Объявление объектов и инициализация полей C точки зрения
- 18. Неявный параметр Self Любой метод неявно получает параметр Self – ссылку (адрес) на поля объекта, и
- 19. Объявление объектов класса Примеры: Var A:TRoom; {объект А класса TRoom} B:array[1..5] of TRoom; {массив объектов типа
- 20. Инициализация полей прямой записью в поле Program Ex_7_01a; {$APPTYPE CONSOLE} Uses SysUtils; Type TRoom = object
- 21. Инициализация при объявлении объекта Program Ex_07_01b; {$APPTYPE CONSOLE} Uses SysUtils; Type TRoom = object length, width:single;
- 22. Инициализация посредством метода Program Ex_07_01c; {$APPTYPE CONSOLE} Uses SysUtils; Type TRoom = object length, width:single; function
- 23. Операция присваивания объектов Над объектами одного класса определена операция присваивания. Физически при этом происходит копирование полей
- 24. 7.2 Ограничение доступа к полям и методам Ограничение в пределах модуля, а не в пределах класса!
- 25. Ограничение доступа (2) Program Ex_7_02; {$APPTYPE CONSOLE} Uses SysUtils, Room in 'Room.pas'; Var A:TRoom; Begin A.Init(3.5,5.1);
- 26. 7.3 Наследование Наследование – механизм конструирование новых более сложных производных классов из уже имеющихся базовых посредством
- 27. Наследование (2) Procedure TVRoom.NewInit; Begin Init(l,w); height:=h; End; Function TVRoom.V; Begin Result:=Square*height; End; Var A:TVRoom; Begin
- 28. Присваивание объектов иерархии Допустимо присваивать переменной типа базового класса значение переменной типа объекта производного класса. Var
- 29. Присваивание указателей в иерархии Допустимо указателю на объект базового класса присваивать адрес объекта производного класса. Однако
- 30. 7.4 Композиция Композиция – включение объектов одного класса в объекты другого. Реализуется механизмом поддержки объектных полей.
- 31. Композиция (2) Procedure TFlat.Init; Var i:byte; Begin n:=an; for i:=1 to n do rooms[i].Init(ar[i-1].length, ar[i-1].width); End;
- 32. Композиция (3) Var mas:array[1..3] of TRoom= ((length:2.5; width:3.75), (length:2.85; width:4.1), (length:2.3; width:2.8)); Var F:TFlat; Begin F.Init(3,mas);
- 33. 7.5 Наполнение (агрегация) Наполнение – механизм построения классов, при котором объекты строящегося класса могут включать неопределенное
- 34. Наполнение (2) Program Ex_7_05; {$APPTYPE CONSOLE} Uses SysUtils; Type TWin = object {класс Окно} width,height:single; Function
- 35. Наполнение (3) Type pW = ^SWin; SWin = record // тип элемента списка win:TWin; p:pW; end;
- 36. Наполнение (4) Procedure TWRoom.Init(n:byte;Const ww:array of TWin); Var i:byte; q:pW; Begin windows:=nil; if n 0 then
- 37. Наполнение (5) // процедура Done освобождает выделенную память Procedure Done; Var q:pW; Begin while windows nil
- 38. Наполнение (6) Function TWRoom.WinSquare; Var q:pW; Begin Result:= 0; q:=windows; if q nil then while q
- 39. 7.6 Простой полиморфизм Простой (статический) полиморфизм – механизм переопределения методов при наследовании, при котором связь метода
- 40. Простой полиморфизм (2) Procedure TVRoom2.Init; Begin inherited Init(l,w); { TRoom.Init(l,w);} height:=h; End; Function TVRoom2.Square; Begin Result:=2*(inherited
- 41. Обращение объекта производного класса к переопределенному методу базового класса в программе При необходимости обращении к переопределенному
- 42. 7.7 Сложный (динамический) полиморфизм. Конструкторы Program Ex_7_07; {$APPTYPE CONSOLE} Uses SysUtils; Type TRoomP=object length, width:single; function
- 43. Сложный полиморфизм (2) Function TRoomP.Square; Begin Result:= length* width; End; Procedure TRoomP.Print; Begin WriteLn('Square =', Square:6:2);
- 44. Сложный полиморфизм (2) Function TVRoomP.Square; Begin Square:=2*(inherited Square+height*(length+width)); End; Var A:TRoomP; B:TVRoomP; Begin A.Init(3.5,5.1); A.Print; B.Init(3.5,5.1,2.7);
- 45. Пояснение к ошибке При позднем связывании нужный аспект полиморфного метода определяется на этапе выполнения программы по
- 46. Реализация сложного полиморфизма Для организации сложного полиморфизма необходимо: 1) переопределяемые методы описать служебным словом virtual; 2)
- 47. Различие раннего и позднего связывания Раннее связывание – адрес метода определяется на этапе компиляции по объявленному
- 48. Исправленный пример Unit RoomP; interface Type TRoomP=object length, width:single; function Square:single; virtual; procedure Print; constructor Init(l,w:single);
- 49. Исправленный пример (2) implementation Function TRoomP.Square; Begin Result:= length* width; End; Procedure TRoomP.Print; Begin WriteLn('Square =',
- 50. Исправленный пример (3) Program Ex_7_07a; {$APPTYPE CONSOLE} Uses SysUtils, RoomP in 'RoomP.pas'; Var A:TRoomP; B:TVRoomP; Begin
- 51. 3 случая обязательного использования сложного полиморфизма 1-й случай – если наследуемый метод для объекта производного класса
- 52. 2-й случай Program Ex_7_07b; {$APPTYPE CONSOLE} Uses SysUtils, RoomP in 'Ex_07_07\RoomP.pas'; Var pA: ^TRoomP; B:TVRoomP; Begin
- 53. 3-й случай. Процедура с полиморфным объектом Program Ex_7_07c; {$APPTYPE CONSOLE} Uses SysUtils, RoomP in 'Ex_08_07\RoomP.pas'; Procedure
- 54. Функция определения типа полиморфного объекта TypeOf( ):pointer – возвращает адрес ТВМ класса. Если адрес ТВМ объекта
- 55. Свойства виртуальных методов класса позднее связывание требует построения ТВМ, а следовательно больше памяти; 2) вызов виртуальных
- 56. 7.8 Динамические полиморфные объекты. Деструкторы. Динамические поля Создание полиморфных объектов: Функция New( [, ]) – возвращает
- 57. Динамические полиморфные объекты (2) Program Ex_7_08; {$APPTYPE CONSOLE} Uses SysUtils; Type pTRoomD = ^TRoomD; TRoomD =
- 58. Динамические полиморфные объекты (3) Function TRoomD.Square; Begin Result:= length* width; End; Constructor TRoomD.Init; Begin length:=l; width:=w;
- 59. Динамические полиморфные объекты (4) Var pA: pTRoomD; pB:pTVRoomD; Begin {указатель базового типа, объект базового типа} pA:=New(pTRoomD,Init(3.5,5.1));
- 60. Динамические поля в объектах Program Ex_7_09; {$APPTYPE CONSOLE} Uses SysUtils; Type pTRoomD=^TRoomD; TRoomD=object length, width:single; function
- 61. Динамические поля в объектах (2) Function TRoomD.Square; Begin Square:= length* width; End; Constructor TRoomD.Init; Begin length:=l;
- 62. Динамические поля в объектах (3) Var A:TBRoomD; pB1:pTBRoomD; pB2:pTRoomD; Begin {статический объект с динамическим полем} A.Init(3.2,5.1,2.5,1);
- 64. Скачать презентацию