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