Содержание
- 2. Объектно-ориентированное программирование § 46. Что такое ООП?
- 3. Зачем нужно что-то новое? программы из миллионов строк тысячи переменных и массивов Э. Дейкстра: «Человечество еще
- 4. Как мы воспринимаем объекты? существенные свойства Абстракция – это выделение существенных свойств объекта, отличающих его от
- 5. Использование объектов Программа – множество объектов (моделей), каждый из которых обладает своими свойствами и поведением, но
- 6. Объектно-ориентированное программирование § 47. Объекты и классы
- 7. С чего начать? Объектно-ориентированный анализ (ООА): выделить объекты определить их существенные свойства описать поведение (команды, которые
- 8. Модель дороги с автомобилями Объект «Дорога»: методы (поведение) свойства (состояние) название класса
- 9. Модель дороги с автомобилями Объект «Машина»: свойства: координаты и скорость все машины одинаковы скорость постоянна на
- 10. Модель дороги с автомобилями Взаимодействие объектов: узнать длину свойства объектов методы: операции, которые они могут выполнять
- 11. Объектно-ориентированное программирование § 48. Создание объектов в программе
- 12. Классы программа – множество взаимодействующих объектов любой объект – экземпляр какого-то класса класс – описание группы
- 13. Класс «Дорога» (FreePascal) type TRoad = class Length: real; Width: integer end; Объявление класса: Объявление переменной:
- 14. Класс «Дорога» (FreePascal) {$mode objfpc} type TRoad = class Length: real; Width: integer; end; var road:
- 15. Новый конструктор type TRoad = class Length: real; Width: integer; constructor Create(length0: real; width0: integer) end;
- 16. Новый конструктор constructor TRoad.Create(length0: real; width0: integer); begin if length0 > 0 then Length:= length0 else
- 17. Класс «Машина» type TCar = class X, V: real; P: integer; road: TRoad; procedure move; constructor
- 18. Конструктор класса «Машина» constructor TCar.Create(road0: TRoad; p0: integer; v0: real); begin road:= road0; P:= p0; V:=
- 19. Класс «Машина»: метод move procedure TCar.move; begin X:= X + V; if X > road.Length then
- 20. Основная программа { описание классов } var road: TRoad; car: TCar; i: integer; begin road :=
- 21. Много машин const N = 3; var road: TRoad; cars: array [1..N] of TCar; i: integer;
- 22. Что в этом хорошего и плохого? основная программа – простая и понятная классы могут разрабатывать разные
- 23. Задание «A»: Построить класс Попугай (TParrot), который умеет говорить какую-то фразу, заранее определённую при описании класса.
- 24. Задание «С»: Изменить класс из задания B так, чтобы фразу можно было изменять во время работы
- 25. Задание «E»: Изменить класс из задания D так, чтобы можно было добавлять фразы в набор фраз,
- 26. Объектно-ориентированное программирование § 49. Скрытие внутреннего устройства
- 27. Зачем скрывать внутреннее устройство? Объектная модель задачи: интерфейсы защита внутренних данных проверка входных данных на корректность
- 28. Защита внутренних данных метод есть + энергия + настроение - голод метод спать + энергия +
- 29. Пример: класс «перо» type TPen = class color: string { цвет, 'FF00FF'} end; R G B
- 30. Пример: класс «перо» type TPen = class private { частные (закрытые) } FColor: string; public {
- 31. Пример: класс «перо» Записать значение: procedure TPen.setColor(newColor: string); begin if Length(newColor) 6 then FColor:= '000000' else
- 32. Пример: класс «перо» Использование: var pen: TPen; ... pen.setColor( 'FFFF00' ); writeln( 'цвет пера: ', pen.getColor
- 33. Свойство Свойство – это способ доступа к внутреннему состоянию объекта, имитирующий обращение к его внутренней переменной.
- 34. Свойство: использование pen.сolor := 'FFFF00'; writeln( 'цвет пера: ', pen.color ); вызов TPen.setColor property сolor: string
- 35. Свойство: прямой доступ к полю function TPen.getColor: string; begin Result:= FColor end; type TPen = class
- 36. Изменение внутреннего устройства type TPen = class private FColor: integer ; ... public property сolor: string
- 37. Изменение внутреннего устройства function TPen.getColor: string; begin Result:= IntToHex(FColor, 6) end; procedure TPen.setColor(newColor: string); begin if
- 38. Свойство «только для чтения» type TCar = class private Fv: real; ... public property v: real
- 39. Скрытие внутреннего устройства Инкапсуляция («помещение в капсулу») интерфейс (public) внутреннее устройство (private)
- 40. Задание «A»: Построить класс РядЛампочек (TLampRow), который хранит состояние ряда из 8 лампочек в виде символьной
- 41. Задание «B»: Дополните класс TLampRow из задания A так, чтобы количество лампочек в цепочке можно было
- 42. Задание «С»: Дополните TLampRow из задания B так, чтобы лампочки могли гореть одним из двух цветов
- 43. Задание «D»: Дополните TLampRow из задания C так, чтобы код состояния хранился как целое число. При
- 44. Объектно-ориентированное программирование § 50. Иерархия классов
- 45. Классификации Классификация – разделение изучаемых объектов на группы (классы), объединенные общими признаками. Яблоко Груша Банан Апельсин
- 46. Что такое наследование? класс Двудольные семейство Бобовые род Клевер горный клевер наследует свойства (имеет все свойства)
- 47. Иерархия логических элементов Логический элемент с одним входом с двумя входами НЕ Объектно-ориентированное программирование – это
- 48. Базовый класс type TLogElement = class In1, In2: boolean; Res: boolean; procedure calc end; можно моделировать
- 49. Базовый класс type TLogElement = class private FIn1, FIn2: boolean; FRes: boolean; procedure setIn1(newIn1: boolean); procedure
- 50. Установка входа procedure TLogElement.setIn1(newIn1: boolean); begin FIn1:= newIn1; calc end; пересчёт при изменении входа procedure TLogElement.calc;
- 51. Что такое полиморфизм? греч.: πολυ — много, μορφη — форма Полиморфизм – это возможность классов-наследников по-разному
- 52. Базовый класс type TLogElement = class private FIn1, FIn2: boolean; procedure setIn1(newIn1: boolean); procedure setIn2(newIn2: boolean);
- 53. Базовый класс type TLogElement = class ... protected FRes: boolean; procedure calc; virtual; abstract; property In2:
- 54. Абстрактный класс Абстрактный метод – это метод класса, который объявляется, но не реализуется в классе. Абстрактный
- 55. Элемент «НЕ» type TNot = class(TLogElement) protected procedure calc; override ; end; procedure TNot.calc; begin FRes:=
- 56. Элемент «НЕ» var n: TNot; ... n:= TNot.Create; n.In1:= False; writeln(n.Res); Использование: создание установка входа вывод
- 57. Элементы с двумя входами type TLog2In = class(TLogElement) public property In2 end; наследник от TLogElement повысить
- 58. Элементы с двумя входами type TAnd = class(TLog2In) protected procedure calc; override; end; TOr = class(TLog2In)
- 59. Элементы с двумя входами procedure TAnd.calc; begin FRes:= In1 and In2 end; procedure TOr.calc; begin FRes:=
- 60. Вызов виртуального метода procedure TLogElement.setIn1(newIn1: boolean); begin FIn1 := newIn1; calc end; В базовом классе: type
- 61. Виртуальный метод Виртуальный метод – это метод базового класса, который могут переопределить классы-наследники так, что конкретный
- 62. Пример: элемент «И-НЕ» var elNot: TNot; elAnd: TAnd; A, B: boolean; begin elNot:= TNot.Create; elAnd:= TAnd.Create;
- 63. Модульность program logic; {$mode objfpc} uses log_elem; var elNot: TNot; elAnd: TAnd; ... begin elNot:= TNot.Create;
- 64. Сообщения между объектами type TLogElement = class private FNextEl: TLogElement; FNextIn: integer; ... public procedure Link(nextElement:
- 65. Сообщения между объектами procedure TLogElement.Link( nextElement: TLogElement; nextIn: integer); begin FNextEl:= nextElement; FNextIn:= nextIn end; Установка
- 66. Сообщения между объектами procedure TLogElement.setIn1( newIn1: boolean); begin FIn1:= newIn1; calc; if FNextEl nil then case
- 67. Сообщения между объектами elNot:= TNot.Create; elAnd:= TAnd.Create; elAnd.Link(elNot, 1); ... for A:=False to True do begin
- 68. Задание «A»: Постройте класс TPet (домашнее животное) с двумя скрытыми полями: FName (имя) и FAge (возраст).
- 69. Задание «A»: Пример: uses Animals; var pets: array of TPet; p: TPet; begin SetLength(pets, 2); pets[0]
- 70. Задание «B»: Добавьте класс TMammal (млекопитающее) – наследник класса TPet и предок для классов TCat и
- 71. Задание «C»: Добавьте класс TReptilia (рептилии) – наследник класса TPet и предок для новых классов TTurtle
- 72. Задание «A»: Собрать полную программу и построить таблицу истинности последовательного соединения элементов «ИЛИ» и «НЕ». Пример:
- 73. Задание «B»: Добавить в иерархию классов элементы «И-НЕ» (TNAnd) и «ИЛИ-НЕ» (TNOr), которые представляют собой последовательные
- 74. Задание «C»: Добавить в иерархию классов элемент «исключающее ИЛИ» (TXor) и «импликация» (TImp). Построить их таблицы
- 75. Задание «D»: Добавить в иерархию классов элемент «триггер» (TTrigger). Построить его таблицу истинности при начальных значениях
- 76. Объектно-ориентированное программирование § 51. Программы с графическим интерфейсом
- 77. Интерфейс: объекты и сообщения поле ввода кнопка флажок переключатель Все элементы окон – объекты, которые обмениваются
- 78. Классические программы основная программа
- 79. Программы, управляемые событиями Событие – это переход какого-либо объекта из одного состояния в другое. нажатие на
- 80. Программы, управляемые событиями основная программа
- 81. Что такое RAD-среда? RAD = Rapid Application Development — быстрая разработка приложений создание формы минимальный код
- 82. RAD-среды: Delphi Язык: Object Pascal, позднее Delphi: 1995: Borland, сейчас: Embarcadero Technologies
- 83. RAD-среды: MS Visual Studio Языки: Visual Basic, Visual C++, Visual C#, Visual F# c 1995 по
- 84. RAD-среды: Lazarus Языки: FreePascal, Delphi свободное ПО: lazarus.freepascal.org
- 85. Объектно-ориентированное программирование § 52. Программирование в RAD-средах
- 86. Lazarus (lalazarus.freepascal.org) Свободное ПО для Windows, Mac OS X, Linux
- 87. Проект – это набор файлов, из которых компилятор строит исполняемый файл программы. проект (.lpr, Lazarus Project)
- 88. Простейший проект Файл – Создать – Проект – Приложение Форма Инспектор объектов главное окно Редактор кода
- 89. Главное окно кнопки быстрого вызова команд палитра компонентов – готовых объектов
- 90. Инспектор объектов дерево объектов свойства выделенного объекта выбор обработчиков событий
- 91. Модуль формы unit Unit1; interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs; type TForm1 =
- 92. Основная программа (проект) Ctrl+F12 – список модулей, выбрать *.lpr program project1; uses Interfaces, Forms, Unit1; begin
- 93. Свойства формы Left – левая граница (x-координата) Top – верхняя граница (y-координата) Width – ширина Height
- 94. Обработчик событий 2×ЛКМ: создать обработчик OnCloseQuery: запрос разрешения на закрытие формы
- 95. Обработчик события procedure TForm1.FormCloseQuery( Sender: TObject; var CanClose: boolean); begin end; метод класса TForm1 название обработчика
- 96. Диалог с вопросом Функция MessageDlg: procedure TForm1.FormCloseQuery( Sender: TObject; var CanClose: boolean); var res: TModalResult; begin
- 97. Параметры MessageDlg заголовок окна сообщение пользователю тип запроса mtError ошибка mtWarning предупреждение mtInformation информация mtConfirmation подтверждение
- 98. Объектно-ориентированное программирование § 53. Использование компонентов
- 99. Панель компонентов Стандартные Дополнительные Диалоги Системные Базы данных
- 100. Просмотр рисунков панель TPanel выключатель TCheckBox рисунок TImage кнопка TButton
- 101. Настройка формы Файл – Создать – Проект – Приложение Name → MainForm Caption → Просмотр рисунков
- 102. Верхняя панель панель TPanel Align = alTop Caption = ''
- 103. Кнопка и выключатель кнопка TButton выключатель TCheckBox Name = OpenBtn Caption = Открыть файл Name =
- 104. Инспектор объектов Родительский объект: «родитель» для Panel1 «родитель» для … отвечает за перерисовку дочерних объектов все
- 105. Компонент TImage рисунок TImage Name = Image Align = alClient
- 106. Выбор файла выбор рисунка TOpenPictureDialog Name = OpenDlg
- 107. Выбор файла if OpenDlg.Execute then Image.Picture.LoadFromFile( OpenDlg.FileName ); если файл выбран загрузить файл имя файла
- 108. Масштабирование Image.Proportional := SizeCb.Checked;
- 109. Ввод и вывод данных для веб-страниц метка rgbLabel TLabel фигура rgbShape TShape поле ввода rEdit TEdit
- 110. Обновление компонентов вывода выделить все три (+Shift)
- 111. Обновление компонентов вывода procedure TForm1.rEditChange( Sender: TObject); var r, g, b: integer; begin r:= StrToInt(rEdit.Text); g:=
- 112. Вызов при запуске procedure TForm1.FormCreate( Sender: TObject); begin rEditChange(rEdit) end; вызов обработчика вызывающий объект – rEdit
- 113. Обработка ошибок
- 114. Обработка ошибок try { «опасные» команды } except { обработка ошибки } end; попытаться выполнить если
- 115. Обработка ошибок try r:= StrToInt(rEdit.Text); g:= StrToInt(gEdit.Text); b:= StrToInt(bEdit.Text); rgbShape.Brush.Color:= RGBToColor(r,g,b); rgbLabel.Caption:= '#' + IntToHex(r,2) +
- 116. Блокирование неверных символов выделить все три (+Shift) procedure TForm1.rEditKeyPress( Sender: TObject; var Key: char); begin if
- 117. Задание «A»: Постройте программу, которая вычисляет площадь комнаты. Требования: размер окна нельзя менять при попытке закрыть
- 118. Задание «B»: Постройте программу, которая вычисляет площадь стен комнаты и определяет, сколько рулонов обоев нужно на
- 119. Задание «С»: Доработайте программу так, чтобы по щелчку по кнопке «Сохранить» все данные сохранялись в файле
- 120. Объектно-ориентированное программирование § 54. Совершенствование компонентов
- 121. Что требуется? Задача: построить поле для ввода целых чисел, в котором есть защита от ввода неверных
- 122. Поле для ввода целых чисел переопределить обработчик KeyPress (защита от ввода неверных символов) свойство Value (значение)
- 123. Поле для ввода целых чисел function TIntEdit.GetValue: integer; begin try Result:= StrToInt(Text); except Result:= 0 end
- 124. Поле для ввода целых чисел procedure TIntEdit.KeyPress(var Key: сhar); begin if not (Key in ['0'..'9', #8])
- 125. Поле для ввода целых чисел unit int_edit; {$mode objfpc} interface uses Classes, SysUtils, StdCtrls ; type
- 126. Поле для ввода целых чисел unit Unit1; {$mode objfpc} interface uses Classes, ..., ExtCtrls, int_edit ;
- 127. Поле для ввода целых чисел TForm1 = class(TForm) ... decEdit: TIntEdit; end; Добавление вручную: это только
- 128. Поле для ввода целых чисел procedure TForm1.FormCreate( Sender: TObject); begin decEdit:= TIntEdit.Create(Self); decEdit.Text:= '100'; decEdit.Left:= 6;
- 129. Поле для ввода целых чисел TForm1 = class(TForm) ... procedure decEditChange( Sender: TObject); public decEdit: TIntEdit;
- 130. Поле для ввода целых чисел procedure TForm1.FormCreate( Sender: TObject); begin decEdit:= TIntEdit.Create(Self); decEdit.Text:= '100'; decEdit.Left:= 6;
- 131. Добавление компонента в палитру unit int_edit; {$mode objfpc} interface … implementation … procedure Register; begin RegisterComponents('Samples',
- 132. Добавление компонента в палитру Порядок установки в среде Lazarus: Пакет → Новый пакет → дать имя
- 133. Объектно-ориентированное программирование § 55. Модель и представление
- 134. решение Еще одна декомпозиция Задача: повторное использование написанного ранее готового кода. решение
- 135. решение Модель и представление Задача: хранить и использовать данные об изменении курса доллара.
- 136. Модель и представление Задача: вычисление арифметического выражения: целые числа знаки арифметических действий + - * /
- 137. Модель k:= номер последней операции если k = 0 то результат:= строка в число иначе n1:=
- 138. Модель function Calc ( s: string ): integer; var k, n1, n2: integer; begin k:= LastOp
- 139. Модель – в модуль unit Model; interface function Calc(s: string): integer; implementation uses SysUtils; function Priority(op:
- 140. Представление многострочное поле TMemo выпадающий список TComboBox Name = Answers Align = alClient ReadOnly = True
- 141. Перехват нажатия на клавишу Enter procedure TForm1.InputKeyPress( Sender: TObject; var Key: char); begin if Key =
- 142. Обработка и вывод данных uses Model; ... x:= Calc(Input.Text); Вычисления (обращение к модели): Answers.Lines .Add(Input.Text +
- 143. Обработка и вывод данных i:= Input.Items .IndexOf(Input.Text); if i Input.Items.Insert(0, Input.Text) Добавление строки в TComboBox: Input.Items
- 144. Перехват нажатия на клавишу Enter procedure TForm1.InputKeyPress( Sender: TObject; var Key: char); var x, i: integer;
- 145. Задание «A»: Измените программу так, чтобы она могла вычислять значения выражений с вещественными числами.
- 146. Задание «B»: Измените программу так, чтобы она могла вычислять значения выражений со скобками.
- 147. Задание «С»: Измените программу так, чтобы она могла вычислять значения выражений, содержащих вызовы функций abs, sin,
- 148. Задание «D»: Измените программу так, чтобы при вводе неверного выражения выводилось сообщение об ошибке. : Все
- 149. Калькулятор
- 150. Конец фильма ПОЛЯКОВ Константин Юрьевич д.т.н., учитель информатики ГБОУ СОШ № 163, г. Санкт-Петербург kpolyakov@mail.ru ЕРЕМИН
- 152. Скачать презентацию