Слайд 2Программирование и основы алгоритмизациии ч2 (и последняя, с экзаменом!)
Лекция 5
Объектно-ориентированное
программирование
Слайд 4ЭКСПРЕСС -КОНТРОЛЬ
1. Эффективность алгоритма – это возможность его решать не
одну задачу, а класс задач.
Слайд 5ЭКСПРЕСС -КОНТРОЛЬ
2. Метод частных целей позволяет свести решение сложной задачи
к решению более простых задач.
Слайд 6ЭКСПРЕСС -КОНТРОЛЬ
3. Объектно-ориентированное программирование реализует нисходящее программирование.
Слайд 7ЭКСПРЕСС -КОНТРОЛЬ
4. Метод бинарного поиска не требует упорядочивания исходных данных
по возрастанию.
Слайд 8ЭКСПРЕСС -КОНТРОЛЬ
5. S:=0; For i:=1 to n do S:=S+I ;
Writeln (‘сумма равна ‘, S); этот фрагмент реализует алгоритм итерации.
Слайд 9ЭКСПРЕСС -КОНТРОЛЬ
6. Рекурсия – это тоже, что итерация.
Слайд 10ЭКСПРЕСС -КОНТРОЛЬ
7. Инкапсуляция – это наследование объектом свойств родителя.
Слайд 11ЭКСПРЕСС -КОНТРОЛЬ
8. Полиморфизм позволяет использовать одинаковые имена методам, отличающимся по
реализации.
Слайд 12ЭКСПРЕСС -КОНТРОЛЬ
9. Объект – это конкретный экземпляр класса.
Слайд 13ЭКСПРЕСС -КОНТРОЛЬ
10. В классе объединены поля, методы и свойства.
Слайд 14ОТВЕТЫ ЭКСПРЕСС -КОНТРОЛЯ
1. Эффективность алгоритма – это возможность его решать
не одну задачу, а класс задач.
2. Метод частных целей позволяет
свести решение сложной задачи к решению более простых задач.
3. Объектно-ориентированное программирование реализует нисходящее программирование.
4. Метод бинарного поиска не требует упорядочивания исходных данных по возрастанию.
5. S:=0; For i:=1 to n do S:=S+I ; Writeln (‘сумма равна ‘, S); этот фрагмент реализует алгоритм итерации.
6. Рекурсия – это тоже, что итерация.
7. Инкапсуляция – это наследование объектом свойств родителя.
8. Полиморфизм позволяет использовать одинаковые имена методам, отличающимся по реализации.
9. Объект – это конкретный экземпляр класса.
10. В классе объединены поля, методы и свойства.
Ответы
__
+
__
__
+
__
__
+
+
+
Слайд 15Объектно-ориентированное программирование
(продолжение темы)
Следует отметить, что описание класса нужно применять только
к прикладным задачам, имеющим оригинальные объекты. Дело в том, что
современные среды программирования уже имеют описание типовых различных классов.
Слайд 16 Например, в среде Delphi все компоненты являются классами. И все
они являются потомками базового класса TObject.
Данный класс является абстрактным
и содержит базовые методы, которые наследуются классами-потомками.
Слайд 17Объектно-ориентированное программирование
Основные методы класса TObject - это:
Create - метод, вызываемый для создания объекта;
Destroy - метод, вызываемый
для удаления объекта;
Free - метод, вызываемый для уничтожения объекта, при вызове данного
метода освобождается память, выделенная для данного объекта.
Слайд 18Объектно-ориентированное программирование
Рассмотрим некоторые из них, чтобы представлять себе
возможности среды программирования.
Прямыми потомками класса TObject являются классы TPersistent,
TException.
Слайд 19Класс TPersistent позволяет сохранять данные в файле и получать их
из файла. Он добавляет к методам класса TObject метод Assign.
Этот метод позволяет передавать поля и свойства одного объекта другому.
Слайд 20 Потомками класса TPersistent являются классы TComponent, и TStrings.
Именно класс
TComponent является базовым классом для всех компонентов VCL Delphi, расположенных
в палитре компонентов
Слайд 21Объектно-ориентированное программирование
Компоненты в Delphi могут быть визуальные и невизуальные.
Визуальные
делятся на оконные и графические.
Все оконные элементы являются потомками
класса TWinControl.
TGraphicControl – класс-наследник класса TControl, предоставляющий пользователю «холст» для рисования.
Слайд 22Перечислим некоторые компоненты общего назначения.
TMainMenu – форма главного меню. Основное
свойство компонента — Items.
Слайд 23Объектно-ориентированное программирование
TLabel – метка для отображения текста, основное свойство –Caption.
Слайд 24TEdit – окно редактора, основное свойство –Text.
Слайд 25TMemo – то же, но для многострочных текстов. Основное свойство
– Lines.
Слайд 26TButton – кнопка. Основное свойство кнопки — Caption. Основное событие—
OnClick, возникающее при щелчке на кнопке.
Слайд 27TPanel – отображение текста с объемным оформлением.
Слайд 28Компонент StringGrid представляет собой таблицу, содержащую строки
представляет собой таблицу,
содержащую строки
Слайд 29Объектно-ориентированное программирование
Важным является то, что можно не только использовать
готовые классы, но и создавать на их базе новые.
Слайд 30Предположим, необходимо создать программу, которая изображала бы на экране прямоугольную
форму для ввода и вывода данных.
На ней необходимо размещать
вспомогательный текст, иметь окно ввода данных и участок вывода результатов.
Слайд 31Если идти традиционным путем, то нужно
создать иерархию объектов, в
которую входили бы прямоугольник (форма), прямоугольник с текстом, прямоугольник с
данными, которые можно передавать в программу вычисления и прямоугольник, на котором отражались бы результаты вычислений.
Слайд 32По составленной иерархии программируется описание выбранных классов, а затем программа
управдения ими.
Но благодаря наличию в среде программирования уже созданных классов
(компонентов), можно этого не делать, а использовать эти классы.
Слайд 33 Создадим программу, которая позволяла бы :
заносить два числа в форму,
запускать ее на выполнение с помощью кнопки
и выводить на
форму результат сложения этих чисел.
Слайд 34Мы воспользуемся стандартной функцией преобразования строки в вещественное число StrToFloat
т.к. будет вводиться текст, а для вычислений нужны константы. Полученный
же цифровой результат должен быть снова представлен текстом, для этого используем функцию обратного преобразования FloatToStr.
Слайд 35 Причем среда представляет пользователю готовую структуру модуля.
Interface
Uses
Windows, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms, Dialogs;
Type
TForm1=Class (TForm)
Private
{Private
declaration}
Public
{Public declaration}
end;
Var
Form1:TForm1;
Implementation
end.
Слайд 36Добавим в окно формы
метки Label1 и Label2 (надписи вводимых
чисел),
Слайд 37
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls,
ExtCtrls;
Type
TForm1=Class(TForm)
Label1:TLabel;
Label2: TLabel;
end;{TForm1}
var
Form1:TForm1;
Implementation
end.
Слайд 38редакторы Edit1 и Edit2 (окна ввода чисел),
Слайд 39
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls,
ExtCtrls;
Type
TForm1=Class(TForm)
Label1:TLabel;
Label2: TLabel;
Edit1:TEdit;
Edit2:TEdit; var
Form1:TForm1;
Implementation
end.
Слайд 40панель Panel1 (для вывода результата)
Слайд 41
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls,
ExtCtrls;
Type
TForm1=Class(TForm)
Label1:TLabel;
Edit1:TEdit;
Label2: TLabel;
Edit2:TEdit;
Panel1:TPanel; end;{TForm1}
var
Form1:TForm1;
Implementation
end.
Слайд 42 кнопку Button1 (запуск программы на вычисление). Для обработки события
– «нажатие кнопки» добавим процедуру Nagatie, которая будет выполнять преобразование
ввода и вывода и выполнять вычисления:
Procedure TForm1.Nagatie(Sender:TObject);
begin
Panel1.Caption:=FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text));
end;
В итоге в окне программы будут следующие операторы:
Слайд 43
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls,
ExtCtrls;
Type
TForm1=Class(TForm)
Label1:TLabel;
Edit1:TEdit;
Label2: TLabel;
Edit2:TEdit;
Panel1:TPanel;
Button1:TButton;
Слайд 44
Procedure Nagatie(Sender:TObject);
Private
{Private declaration}
Public
{Public declaration}
end;{TForm1}
var
Form1:TForm1;
Implementation
Procedure TForm1.Nagatie(Sender:TObject);
begin
Panel1.Caption:=FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text));
end;{Proc TForm1.Nagatie}
end.
Слайд 45Объектно-ориентированное программирование
Однако и этого можно не делать, потому что в
среде Delphi используется еще один современный подход к программированию –
визуальное программирование.
Слайд 46Визуальное программирование
По своим действиям визуальное программирование напоминает технологию создания графических
изображений с помощью графических пакетов, например, Visio.
Слайд 47Объектно-ориентированное программирование
В среде есть палитра визуальных компонентов. Выбрав нужный
компонент, например, кнопку, пользователь размещает ее в нужном месте формы,
с заданными размерами, цветом, надписью и другими характеристиками.
Слайд 48Но в отличие от графического пакета, среда программирования параллельно с
действиями разработчика создает соответствующий код будущей программы.
Этот код, выделяемый
в тексте модуля, не рекомендуют исправлять, т.к. он заведомо правильный.
Слайд 49Объектно-ориентированное программирование
(Кратко о среде и инспекторе объектов).
События в Delphi.
Объекты библиотеки визуальных компонентов (VCL) имеют набор откликов на события,
происходящие с ними.
Эти события имеют определенные названия, например, OnDblClick соответствует двойному нажатию кнопки мыши,
OnKeyUp –нажатая клавиша отпущена.
Слайд 50Задача разработчика заключается в настройке свойств используемых объектов и создание
обработчиков событий.
События вызываются в среде Delphi не только сообщениями
Windows, но и внутренними процессами программы.
Слайд 51Разработка ПО с помощью объектно-ориентированного и вызуалтьного программирования
Таким образом,
процесс
разработки ПО
заключается в следующем:
Слайд 52Разработка ПО
1. Разрабатывается иерархия классов для прикладной части проекта, т.е.
для тех классов, компоненты которых отсутствуют в среде программирования (например,
классы магнитного элемента, электронных элементов, моделей управления и т.п.), и разрабатывается описание этих классов на конкретном языке программирования.
Слайд 53Разработка ПО с ООП
Если подобные классы ранее использовались и хранятся
в библиотеке разработчика, то, естественно, можно использовать готовые модули или
модифицировать их.
2. Используются готовые невизуальные компоненты или добавляются к ним наследники.
3. Используя визуальное программирование, создается интерфейс к программе на базе компонентов среды разработки.
Слайд 54
Рассмотрим в качестве примера программу, приведенную в учебнике О.Л.Голициной и
И.И.Попова «Основы алгоритмизации и программирования»
Программа «Калькулятор», реализует выполнение арифметических действий
с помощью калькулятора
Слайд 55ПРОЕКТ в среде
Любой проект в Delphi – это совокупность в
общем случае следующих файлов:
.dpr основной модуль проекта –главный файл;
.dfm файл
главной формы;
.pas модуль программы;
.res файл ресурсов с иконкой проекта;
.cfg текстовый файл конфигурации;
.dof файл параметров среды;
.dsk файл настроек рабочей среды;
Слайд 56Пример разработки программы в среде Delphi
Разработаем форму, которая будет окном
программы «Калькулятор».
На этой форме разместим:
Окно отражения ввода аргументов и вывода
результата;
Кнопки с цифрами для ввода аргументов;
Кнопки с знаками арифметических операций;
Кнопка «точка» для разделения целой и дробной части аргументов;
Кнопка «равно» для получения результата;
Кнопка для удаления последнего введенного знака;
Кнопка очистки окна ввода аргументов и вывода результата.
Слайд 57Пример разработки программы в среде Delphi
Для этого откроем новый проект
для создания приложения.
При этом на экране появляется
главное меню,
окно формы,
окно программы,
окно инспектора объектов.
Слайд 58Разработка программ в среде Delphi
Слайд 59Пример разработки программы в среде Delphi
Изменим в инспекторе объектов заголовок
формы TForm1 (Ception) на «Калькулятор АиТ». При этом в окне
формы сменится надпись.
Исключим возможность изменять размеры окна калькулятора: в свойствах biMinimize и biMaximize установим значение false.
Слайд 61Пример разработки программы в среде Delphi
Разместим окно отражения ввода аргументов
и вывода результата, используя компонент класса TMemo (Палитра компонентов, Стандартные).
При
этом в окне программы в классе TForm1 появится новое поле
Memo1: TMemo;
Изменим его свойства, появившиеся в окне инспектора объектов.
Имя (Name) – ArgMemo (изменяется и в программе)
Свойство размещения Align – AlTop (в верхней части формы по ширине формы)
Слайд 63Пример разработки программы в среде Delphi
Изменим его свойства, появившиеся в
окне инспектора объектов.
Имя (Name) – ArgMemo (изменяется и в программе)
Свойство размещения Align – AlTop (в верхней части формы по ширине формы)
Слайд 65Пример разработки программы в среде Delphi
Установим в свойстве Alignment значение
taRightJusttify – введенное в окне значение будет выравниваться по правой
границе.
В свойстве ReadOnly установим true, т.е запретим ввод аргументов с клавиатуры.
Слайд 66Пример разработки программы в среде Delphi
Разместим на форме кнопки, которые
будем представлять классом TSpeedButton, присвоив им в соотвествии с заданием
имена SB0…SB9, SB_Point, SB_div;
SB_mul; SB_min; SB_plus; SB_del; SB_Eq;
SB_Clear.
Слайд 67Разработка программ в среде Delphi
Слайд 68Пример разработки программы в среде Delphi
Для реализации арифметических операций создадим
новый класс TOperation
TOperation = class
Arg1:real;
Arg2:real;
Oper: char;
LastOper: boolean;
Procedure InitOperation;
Procedure SetArg1 (ArgString:
string);
Procedure SetArg2 (ArgString: string);
Procedure SetOper (OperString: char);
Function OperatinResult : string;
End;
Слайд 69Разработка программ в среде Delphi
Каждая кнопка будет являться источником событий
для реализации арифметических операций.
Добавим в программу методы обработки цифровых
кнопок, кнопок операций и т.д.
Для этого вставим в программу заголовки процедур (тело этих процедур уже может быть запрограммировано, или продуманы только заголовки с соответствующими формальными параметрами)
Слайд 70Разработка программ в среде Delphi
Слайд 71Вставим в раздел Implementation описание методов обоих классов.
Procedure TOperation.InitOperation;
begin
Arg1:=0;
Arg2:=0;
Oper:=#0;
LastOper:=false;
End;
Слайд 72Procedure TOperation.SetArg1 (ArgString: string);
Var i:integer;
Begin
Val (ArgString, Arg1, i)
End;
Procedure TOperation.SetArg2 (ArgString:
string);
Var i:integer;
Begin
Val (ArgString, Arg2, i)
End;
Слайд 73Procedure TOperation.SetOper (OperString: char);
Begin
Oper:=OperString;
End;
Function TOperation.OperationResult : string;
Var R: real;
Begin
R:=0:
Case
Oper of
‘+’: R:= Arg1 + Arg2;
‘-’: R:= Arg1 - Arg2;
‘*’:
R:= Arg1 * Arg2;
‘/’: R:= Arg1 / Arg2;
End;
str(R:10:4,Result)
End;
Слайд 74Procedure TForm1.SB_DigitClick (sender: TObject);
begin
If Oper_Result.LastOper
Then ArgMemo.Text:=‘’;
ArgMemo.Text:= ArgMemo.Text + (Sender
as TSpeedButton).Caption;
Oper_Result.LastOper := false;
End;
Слайд 75procedure TForm1.SB_PointClick (Sender: Tobject);
Begin
If Oper_Result.LastOper Then
begin
ArgMemo.Text:=‘’; Oper_result.LastOper:=false;
end;
If
ArgMemo.Text=‘’ then ArgMemo.Text:= ArgMemo.Text + ‘0.’
Else
if pos(‘.’, ArgMemo.Text)
= 0 then
ArgMemo.Text:= ArgMemo.Text + ‘.’
End;
Слайд 76procedure TForm1.SB_PointClick (Sender: Tobject);
Begin
If Oper_Result.LastOper Then
begin
ArgMemo.Text:=‘’; Oper_result.LastOper:=false;
end;
If
ArgMemo.Text=‘’ then ArgMemo.Text:= ArgMemo.Text + ‘0.’
Else
if pos(‘.’, ArgMemo.Text)
= 0 then
ArgMemo.Text:= ArgMemo.Text + ‘.’
End;
Слайд 77procedure TForm1.SB_OperClick (Sender: Tobject);
var s:shortstring;
Begin
With Oper_Result do
Begin SetArg2 (ArgMemo.Text);
If
Oper #0 Then s:= OperationResult
else s:= ArgMemo.Text;
SetArg1 (s); ArgMemo.Text:=s;
S:=(
Sender as TSpeedButton).Caption;
SetOper(s[1]);
LastOper:=true;
end;
End;
Слайд 78procedure TForm1.SB_EqClick (Sender: Tobject);
Begin
With Oper_Result do
Begin
If Oper #0 Then
Begin
SetArg2 (ArgMemo.Text);
ArgMemo.Text:= OperationResult;
SetArg1 (ArgMemo.Text);
End;
InitOperation;
LastOper:=true;
End;
end;
Слайд 79procedure TForm1.SB_delClick (Sender: Tobject);
Var s: string;
Begin
s :=ArgMemo.Text;
SetLength (s,Length(s) -1);
ArgMemo.Text:=s;
End;
Слайд 80procedure TForm1.SB_ClearClick (Sender: Tobject);
Begin
ArgMemo.text:=‘ ‘;
Oper_Result.InitOperation;
End;
Слайд 81procedure TForm1. FormCreate (Sender: Tobject);
Begin
Oper_Result:= TOperation.Create;
Oper_Result.Initoperation;
End;
procedure TForm1.FormClose (Sender: Tobject; var
Action: TcloseAction);
Begin
Oper_Result.Free;
End;
Слайд 82
В свойствах формы создания OnCreate и закрытия формы OnClose занесем
методы FormCreate и FormClose
Слайд 87Калькулятор работает!
Рекомендация:
пройти путь разработки этой программы самостоятельно. Проверить ее
работу в пошаговом режиме. После этого разработать программу индивидуального задания
лабораторной работы.