
- •История языков программирования
- •Понятия программного обеспечения
- •2. История языков программирования
- •Классификация языков программирования
- •Понятие системы программирования
- •Технологии программирования
- •Понятие системы программирования
- •2.Технологии программирования
- •2.1. Структурное программирование
- •2. Модульное программирование
- •2. 3. Объектно-ориентированное программирование (ооп)
- •Формы записей алгоритмов. Общие принципы построения
- •Тема: Основные алгоритмические конструкции. Сложность алгоритмов.
- •Базовые принципы ооп
- •1.Общие свойства компонентов
- •2.События компонентов
- •Общие свойства компонентов
- •Свойство Align
- •Свойство Color
- •1.Структура проекта
- •2.Структура модуля
- •Лекция10
- •Лекция11
- •Лекция12
- •Лекция13
- •Лекция14
- •Лекция15
- •Лекция16
- •Лекция17 Стандартные диалоговые окна: назначение, свойства, события.TOpenDialog, tSaveDialog, tColorDialog, tOpenPictureDialog, tSavePictureDialogTPrinterSetupDialog, tPrinterDialog
- •1.Правила использования диалоговых панелей
- •П3.3.Символьный тип
- •П3.4. Перечисляемый тип
- •Пз.6. Тип дата-время
- •Приложение 5. Математические формулы
- •Многомерные массивы
- •Листинг 5.11. Инициализация таблицы
- •Листинг 5.12. Обработка двумерного массива
- •Ошибки при использовании массивов
Базовые принципы ооп
ООП характеризуется тремя базовыми принципами:
Инкапсуляция
Наследование
Полиморфизм
1.Инкапсуляция
Инкапсуляцией называется скрытие полей объекта с целью обеспечения доступа к ним только посредством методов класса.
Ограничение доступа к полям объекта реализуется в Delphi при помощи свойствобъекта.
Свойство объекта характеризуется
полем, сохраняющим значение свойства;
двумя методами, обеспечивающими доступ к полю свойства.
Методы, обеспечивающие доступ к полю свойства:
Метод установки значения свойства – метод записи свойства (write).
Метод получения значения свойства – метод чтения свойства (read).
Для описания свойства в определении класса указывают:
зарезервированное слово property;
имя свойства;
тип свойства;
имена методов, обеспечивающих доступ к значению свойства.
Оформление данных объекта как свойства позволяет ограничить доступ к соответствующим полям.
Например: разрешить только чтение свойства.
Чтобы инструкции программы не могли изменить значение свойства, нужно в описании свойства указать только имя метода чтения. В этом случае попытка присвоить значение свойству вызовет ошибку во время компиляции.
Установить значение свойства, защищенного от записи, можно во время инициализации объекта
Пример.
Описание класса TPerson, содержащего свойства Name и Address:
type
TName = string[15];
TAddress = string[50];
TPerson = class
private
fname: TName;
faddress: TAddress;
constructorCreate (Name: TName);
procedure Show;
functionGetName: TName;
functionGetAddress: TAddress;
procedureSetAddress (NewAddress: TAddress);
public
property Name: TName
readGetName;
property Address: TAddress
readGetAddresswriteSetAddress;
Свойство Name доступно только для чтения. Свойство Addressдоступно для чтения и для записи.
Методы класса TPerson, обеспечивающие создание объекта этого класса и доступ к его свойствам.
конструктор объекта TPerson:
constructorTPerson.Create (Name: TName);
begin
fname := Name;
end;
метод получения значения свойства Name:
functionTPerson.GetName;
begin
result := fname;
end;
метод получения значения свойства Address:
functionTPerson.GetAddress;
begin
result := faddress;
end;
метод изменения значения свойства Address:
procedureTPerson.SetAddress(NewAddress:TAddress);
begin
iffaddress = ‘’
thenfaddress := NewAddress;
end;
Чтобы присвоить значение свойству Address объекта student, в программе достаточно использовать инструкцию
student.Address := ‘г. Тюмень, ул. Мельникайте, 75, кв. 6’
Компилятор преобразует эту инструкцию в инструкцию вызова метода
student.SetAddress(‘г. Тюмень, ул. Мельникайте, 75, кв. 6’)
Таким образом, инструкции, обеспечивающие создание объекта класса TPerson и установку его свойств, могут выглядеть так:
student := TPerson.Create(‘ИвановА.А.’);
student.Address := ‘г. Тюмень, ул. Мельникайте, 75, кв. 6’
2.Наследование
Концепция ООП предполагает возможность определять новые классы посредством добавления полей, свойств и методов к уже существующим классам.
Такой механизм получения новых классов называется порождением.
При этом новый, порожденный класс (потомок) наследует свойства и методы своего базового, родительского класса
Класс-потомок должен иметь собственный конструктор, обеспечивающий инициализацию класса-родителя и своих полей.
Пример.
Реализация конструктора класса TProfessor:
constructorTProfessor.Create(Name: TName; dep: string);
begin
inherited Create(Name);
fdepartment := dep;
end;
После создания объекта класса-потомка в программе можно использовать поля и методы родительского класса.
Пример.
Фрагмент программы, демонстрирующий указанную возможность:
Создание объекта класса
professor := TProfessor.Create(‘Петров’, ‘ММФ’);
установка значения свойства родительского класса
professor.Address := ‘ул. Ленина, 210, кв.11’;
применение метода родительского класса
professor.Show;
Директивы
protected (защищенный) и
private (закрытый)
устанавливают степень видимости элементов класса в программе.
Элементы класса, объявленные в секции protected, доступны только в классах, порожденных от данного класса.
Область видимости этих элементов не ограничивается модулем, в котором находится описание класса.
Обычно в секцию protected помещают описание методов класса.
Элементы класса, объявленные в секции private, видимы только внутри модуля.
Эти элементы не доступны за пределами модуля, даже в производных классах.
Обычно в секцию private помещают описание полей класса, а методы, обеспечивающие доступ к этим полям, – в секцию protected.
Описание класса TPerson, включающее директивы управления доступом:
TPerson = class
private
fname: TName;
faddress: TAddress;
protected
constructorCreate (Name: TName);
procedure Show;
functionGetName: TName;
functionGetAddress: TAddress;
procedureSetAddress (NewAddress: TAddress);
property Name: TName
readGetName;
property Address: TAddress
readGetAddresswriteSetAddress;
end;
3.Полиморфизм
Полиморфизм – это возможность использовать одинаковые имена для методов, входящих в различные классы.
Концепция полиморфизма обеспечивает применение к объекту именно того метода, который соответствует классу объекта.
Если в описании родительского класса метод объявлен как виртуальный (директива virtual), то каждый класс-потомок имеет возможность заменить виртуальный метод своим собственным методом.
Эта замена выполняется с помощью директивы override.
Пример.
Рассмотрим определение трех классов:
TPerson – родительский класс,
Tproffessor и TStudent – классы, порожденные от TPerson.
type
TPerson = class
fname: string;
faddress: string;
constructor Create (Name, Address: string);
function Info: string; virtual;//объявление
end;виртуальногометода
TProfessor = class (TPerson)
fdepartment: string;
constructor Create (Name, Address, Dep: string);
functionInfo: string; override; замещение метода родительского класса
end;
класс-потомок TStudent = class (TPerson)
fgroup: integer;
constructor Create (Name, Address: string: Group: Integer);
functionInfo: string; override; замещение метода родительского класса
end;
Определение метода Info для каждого класса (в разделе Implementation):
functionTPerson.Info: string;
begin
result := ‘’;
end;
functionTProfessor.Info: string;
begin
result := fname + ‘ кафедра ‘ + fdepartment;
end;
functionTStudent.Info: string;
begin
result := fname + ‘ группа ‘ + IntToStr(fgroupe);
end;
Пример для закрепления
Type Coordinates = class x, y : byte; procedure Init (Xinit, Yinit: byte); function GetX : byte; function GetY : byte; end; |
Type Cursor = class (coordinates) Hidden : Boolean; end;
|
Закрепление к лекции 6
Лекция 7
Тема: Компоненты и их свойства и методы.
Вопросы: