Similar presentations:
Объектно-ориентированное программирование. Лекция 14
1.
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕПРОГРАММИРОВАНИЕ
2.
Delphi. Основные понятия ООП. Принципы ООПDelphi — это прекрасная система визуального объектно-ориентированного
программирования.
Delphi — одна из мощных систем, позволяющих на самом современном
уровне создавать как отдельные прикладные программы Windows, так и
разветвленные комплексы, предназначенные для работы в корпоративных
сетях и в Интернет.
Перечислим основные задачи, которые позволяет решать Delphi:
1. Создавать законченные приложения для Windows самой различной
направленности – вычислительные, графические, мультимедиа.
2. Быстро создавать оконный интерфейс.
3. Создавать системы для работы с локальными и удаленными базами
данных любых типов.
4. Создавать многозвенные распределенные приложения, основанные
на различных технологиях.
5. Создавать приложения, которые управляют другими приложениями,
в частности, такими программами Microsoft Office, как Word, Excel и
др.
6. Создавать кросс-платформенные приложения, которые можно
компилировать и эксплуатировать как в Windows, так и в системе
Linux.
7. Создавать приложения различных классов для работы в Интернет.
8. Создавать профессиональные программы установки для приложений
Windows, учитывающие всю специфику и все требования Windows.
3.
Основные понятия ООП. Принципы ООПОбъектно-ориентированное программирование (сокращенно ООП)
это в наше время совершенно естественный подход к построению сложных
(и не очень сложных) программ и систем.
Обычное приложение Windows как правило состоит из окон со
множеством кнопок, разделов меню, окон редактирования, списков и т.п. Все
это объекты. Причем сами по себе они ничего не делают. Они ждут каких-то
событий — нажатия пользователем клавиш или кнопок мыши, перемещения
курсора и т.д. Когда происходит подобное событие, объект получает
сообщение об этом и как-то на него реагирует: выполняет некоторые
вычисления, разворачивает список, заносит символ в окно редактирования.
Приложение, построенное по принципам объектно-ориентированного
программирования — это не последовательность каких-то операторов, не
некий жесткий алгоритм. Объектно-ориентированная программа — это
совокупность объектов и способов их взаимодействия.
Объект определим как экземпляр класса - совокупность полей и
методов.
Возможности объектно-ориентированного программирования в Delphi
базируются на свойствах языка Object Pascal.
4.
Основные понятия ООП. Принципы ООППроект в Delphi представляет собой набор программных единиц –
модулей. Модуль на английском языке называется Unit.
В процессе проектирования вами приложения Delphi автоматически
создает код головной программы и отдельных модулей. Сама головная
программа получается предельно простой и короткой. Она состоит из
объявления списка используемых модулей и нескольких операторов, которые
создают объекты тех форм, которые вы задумали, и запускают выполнение
приложения.
Все объекты компонентов размещаются в объектах — формах. Для
каждой формы, которую вы проектируете в своем приложении, Delphi
создает отдельный модуль.
Именно в модулях и осуществляется программирование задачи. В модули вы
вводите свой код, создавая обработчики различных событий. Но головную
программу, как правило, вы не трогаете и даже не видите ее текст. Только в
исключительных случаях вам надо что-то изменять в тексте головной
программы, сгенерированном Delphi. Тем не менее, хотя бы ради этих
исключительных случаев, надо все-таки представлять вид головной
программы и понимать, что означают ее операторы.
5.
Основные понятия ООП. Принципы ООП6.
Основные понятия ООП. Принципы ООП7.
Основные понятия ООП. Принципы ООПТипичная головная программа приложения имеет вид:
program Project2;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
8.
Основные понятия ООП. Принципы ООППосле заголовка в тексте программы располагается предложение uses.
В этом предложении перечисляются модули, загружаемые программой.
Первый модуль Forms — системный. А следующие — модули
разработанных вами форм. Данный пример подразумевает, что вы создали в
проекте две формы с именами Forml и Form2 в модулях с именами Unitl и
Unit2. Помещенные в фигурные скобки названия форм — это комментарии.
Затем после ключевого слова begin и до последнего завершающего
программу оператора end с точкой (end.) записано тело программы.
Первый оператор в теле программы инициализирует приложение, два
следующих — создают объекты форм Forml и Form2, последний —
начинает выполнение приложения.
9.
СТРУКТУРА МОДУЛЯМодуль начинается с ключевого слова unit, после которого пишется
имя модуля. Оно совпадает с именем файла, в которым вы сохранили свой
модуль.
Текст модуля состоит из двух основных разделов: interface —
открытый(внешний) интерфейс модуля, и implementation —реализация
модуля. Все, что помещается непосредственно в раздел interface (типы,
переменные, константы, функции, процедуры), может быть использовано
другими модулями программы. Все, что помещается в раздел implementation
— внутреннее дело модуля. Внешние модули не могут видеть типы,
переменные, константы, функции и процедуры, размещенные в разделе
реализации.
В разделе interface после предложения uses, содержащего список
подключаемых модулей, вы можете видеть заготовку объявления класса
вашей формы, подготовленную Delphi. Имя класса вашей формы -- TForml.
Класс содержит два раздела:
private — закрытый раздел класса, и public — открытый раздел класса. То,
что вы или Delphi объявите в разделе public, будет доступно для других
классов и модулей. То, что объявлено в разделе private, доступно только в
пределах данного модуля. (подробнее о спецификаторах доступа позже
10.
СТРУКТУРА МОДУЛЯРассмотрим теперь, как выглядят тексты модулей.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
11.
СТРУКТУРА МОДУЛЯПосле завершения объявления класса формы вы можете видеть строки
var
Forml: TForml;
Это объявляется переменная Forml класса TForml, т.е. объявляется ваша
форма как объекта класса TForml. Затем следует пока пустой раздел
реализации implementation. Раздел implementation включает в себя
реализацию модуля. Основное тело модуля составляет коды, реализующие
объявленные функции и процедуры.
В данном примере раздел implementation содержит директиву {$R}
Директива компилятора {$R} указывает файлы ресурсов (.DFM, .RES),
которые должны быть включены в выполняемый модуль или в библиотеку.
Указанный файл должен быть файлом ресурсов Windows. По умолчанию
расширение файлов ресурсов – файл с расширением .RES. В процессе
компоновки компилированной программы или библиотеки файлы, указанные
в директивах {$R}, копируются в выполняемый модуль. Компоновщик
Delphi ищет эти файлы в том каталоге, в котором расположен модуль,
содержащий директиву {$R}.
12.
СТРУКТУРА МОДУЛЯПри генерации кода модуля, содержащего форму, Delphi
автоматически включает в файл .pas директиву {$R *.DFM},
обеспечивающую компоновку файлов ресурсов форм. Эту директиву нельзя
удалять из текста модуля, так как в противном случае загрузочный модуль не
будет создан и сгенерируется исключение EResNotFound.
Существуют еще 2 необязательных раздела: initialization – включает в
себя операторы, выполняющиеся только 1 раз при первом обращении
программы к данному модулю. В этом разделе могут быть операторы,
производящие начальную настройку модуля. Если в программе есть
несколько
модулей,
содержащих
разделы
initialization,
то
последовательность выполнения операторов этих разделов определяется
последовательностью указания модулей в операторах uses. Например если в
головной программе имеется оператор uses unit1,unit2, unit3 , а модуле init1
имеется оператор uses unit3, то последовательность выполнения разделов
initialization будет следующей: unit3, unit1,unit2.
13.
СТРУКТУРА МОДУЛЯПример применения такого раздела может быть перенос кода головной
программы
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
В раздел initialization какого-либо из объявленных модулей.
И второй необязательный раздел – finalization – включает в себя
операторы, которые выполняются только один раз при завершении работы
программы: нормальном или аварийном. В нем могут помещаться операторы
по удалению временных файлов, освобождению ресурсов памяти.
14.
ОСНОВНЫЕ ПОНЯТИЯ ООПКласс – особый тип записи, который может иметь в своем составе
поля, методы и свойства. Свойства – совокупность данных и методов их
чтения и записи .
Пример класса:
unit Unit2;
interface
type
TMyObject = class (TObject)
MyField:integer;
Function print: integer;
end;
implementation
function TMyObject.print;
begin
writeln('Hello!!!!');
end;
end.
В примере описан класс TMyObject, имеющий поле MyField и метод
print.
15.
ОСНОВНЫЕ ПОНЯТИЯ ООПВ примере описан класс TMyObject, имеющий поле MyField и метод
print.
Классы описываются в секции интерфейса модуля.
Чтобы использовать этот новый тип(класс) надо объявить переменную
этого типа, которая будет называться экземпляром класса (объектом).
var
v: TMyObject;
После этого можно вызывать методы класса: v.print;
Можно создать много экземпляров одного класса. Поля класса это
данные уникальные для каждого экземпляра класса. А методы у нескольких
экземпляров одного класса общие. Методы это процедуры и функции,
описанные внутри класса и предназначенные для операций над полями (хотя
и не обязательно)
16.
ИНКАПСУЛЯЦИЯ-предполагает возможность скрытия данных объекта от пользователя. Это
свойство
языка
программирования
(объектно-ориентированного),
позволяющее пользователю не задумываться о сложности реализации
используемого программного компонента (то, что у него внутри), а
взаимодействовать с ним посредством предоставляемого интерфейса
(публичных методов),
Пользователь может взаимодействовать с объектом только через
интерфейс.
Пользователь не может использовать закрытые данные и методы.
В объектах Delphi пользователь объекта может быть полностью отгорожен от
полей при помощи свойств.
17.
ИНКАПСУЛЯЦИЯСвойство определяется тремя основными элементами: полем и двумя
методами, которые осуществляют его чтение/запись.
В Delphi для создания скрытых полей или методов их достаточно объявить в
секции private.
TMyClass = class
private
FMyField: Integer;
procedure SetMyField(const Value: Integer);
function GetMyField: Integer;
public
property MyField: Integer read GetMyField write SetMyField;
end;
Свойства используются в Delphi для создания интерфейса доступа к скрытым
полям. Для описания свойства в Delphi служит слово property.
18.
НАСЛЕ́ ДОВАНИЕ1. НАСЛЕ́ДОВАНИЕ —
механизм
объектно-ориентированного
программирования, позволяющий описать новый класс на основе
уже существующего (родительского), при этом свойства и
функциональность родительского класса заимствуются новым
классом.
Класс, от которого произошло наследование, называется базовым или
родительским (англ. base class). Классы, которые произошли от базового,
называются потомками, наследниками или производными классами
(англ. derived class).
Для использования механизма наследования в Delphi необходимо в
объявлении класса справа от слова class указать класс предок:
TNewObject = class (TOldObject)
19.
НАСЛЕ́ ДОВАНИЕСостав класса TObject: (некоторые важные методы)
constructor Create
Конструктор.
Создает
новый
экземпляр объекта.
destructor Destroy; virtual;
Деструктор. Производит действия по
уничтожению экземпляра объекта.
procedure Free;
Эта процедура может использоваться
вместо
деструктора.
Проверяет
передаваемы деструктору указатель
на экземпляр.
class function NewInstance: TObject; Создает новый экземпляр объекта. В
virtual;
частности, эта функция вызывается
внутри конструктора.
procedure FreeInstance; virtual;
Уничтожает
экземпляр
объекта.
Вызывается внутри деструктора.
class function ClassName: string;
Возвращает строку с именем класса
вызвавшего объекта.
class function ClassParent: TClass;
Возвращает указатель на класспредок.
class function InstanceSize:Word;
Возвращает
размер
экземпляра
объекта.
20.
НАСЛЕ́ ДОВАНИЕСтатические методы и поля в объектах-потомках ведут себя одинаково:
можно без ограничений перекрывать старые имена, и при этом изменять тип
методов:
Type
T1Obj = class
i : Extended;
procedure SetData(AValue : Extended );
end;
T2Obj = class(T1Obj)
i : Integer;
procedure SetData(AValue : Integer );
end;
……
procedure T1Obj.SetData;
begin
i:=v;
end;
procedure T2Obj.SetData;
begin
i:=0;
inherited SetData(0.99);
end;