русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Поля методы и свойства называются членами классов.


Дата добавления: 2015-07-09; просмотров: 730; Нарушение авторских прав


Наследование. Любой класс может быть порожден от другого класса. Порожденный класс автоматически наследует все члены родителя, но может и пополнять их.

Все классы OBJECT PASCAL являются потомками класса TОbject. Наследование приводит к тому, что создается дерево классов, разрастающееся по мере удаления от потомка. Программисты создавая новые классы, на основе старых не вникают в подробности программного кода старых. Значительно возрастает преемственность кода.

Полиморфизм – это возможность в классах потомках переопределять (перекрывать) методы родителей. Поведенческие свойства класса определяются набором методов входящих в класс, изменяя тот или иной метод в потомке, мы изменяем в нем свойства родителя, хотя имя метода остается прежним.

 

ИНКАПСУЛЯЦИЯ
Инкапсуляция – это объединение в одно целое трех сущностей: полей, методов и свойств.

Поля – это данные.

Методы – это процедуры, обрабатывающие данные.

Свойства – это механизм доступа к данным.

Инкапсуляция позволяет изолировать класс от остальных частей программы, сделать его самодостаточным для решения конкретной задачи.

Инкапсуляция предполагает разграничение доступа разработчиков разного уровня к различным членам класса.(если ты разрабатываешь класс, то тебе доступны все члены класса, если ты используешь класс, то только те, которые определят поведение класса), Потому что:

1.Пользователи класса не должны видеть подробности, которыми оперируют разработчики.

2. Прямой доступ к полям хотя и возможен, но не всегда желателен, т.к. бесконтрольность может привести к ошибкам. Часто поля делают узко доступными, а свойства (именно они проводят контроль корректности) широко.

В Delphi есть четыре модификатора разграничения доступа:1)public, 2)published, 3)protected, 4)private.

 

Модификатором public объявляют (помечают ) члены класса видимые везде.



А именно, в любой программе и в любом модуле, которые имеют доступ к нашему модулю, (т.е. где наш модуль объявлен в разделе USES).

Модификатором published объявляют члены класса видимые везде, но более того, свойства помещенные в эту секцию видимы еще и в инспекторе объектов.

Секция, не имеющая модификатора доступа, по умолчанию считается published.

 

Модификатором protected объявляют члены класса доступные методам самого класса и их потомкам.Модификатором private объявляют члены класса видимые только в модуле, где описан класс, т.е. это локальные описания.Любая секция может объявляться сколько угодно раз, порядок следования секций произвольный. Внутри каждой секции объявляются сначала поля затем методы и свойства.

ПОЛЯ

Поля – это данные, инкапсулированные в классе.

В классе поля описываются как обычные переменные.

Если разворачиваются несколько объектов одного класса, то каждый объект получает уникальный набор полей и общий набор методов и свойств.

СВОЙСТВА Как мы помним:

Свойства – это механизм доступа к данным. Возможно прямое обращение к полям, но фундаментальный принцип инкапсуляции требует обращаться к полям посредством свойств и методов (во избежание ошибок, для обеспечения корректности изменения данных).

В описании свойства используются два метода, один для чтения, другой для записи значения свойства (через эти методы реализуется контроль корректности вводимых данных и др. действия).

Function GetVozr:integer; //верни значение возраста.

Procedure SetVozr(r:integer); //установи возраст, но без глупостей не 1000 лет

Синтаксис описания свойства выглядит так:

Property Vozrast:integer read GetVozr write SetVozr;

Property Vozrast:integer read GetVozr ;

Property Vozrast:integer write SetVozr;

Property Vozrast:integer;

МЕТОДЫ

Инкапсулированные в классе процедуры и функции называются методами.

Методы объявляются в классе как обычные подпрограммы.

В заголовке описания реализации метода используют составное имя метода (имя класса точка имя метода).

В теле описания реализации метода собствен-ные поля используются без указания имени класса. (этим методы отличаются от прочих процедур)

В ООП различаются следующие виды методов:

Методы класса

Конструктор и деструктор

Виртуальные

Динамические

Абстрактные

Перегружаемые

 

МЕТОДЫ КЛАССА

Некоторые методы (называются методы класса) могут вызываться без создания и инициализации объекта, они характеризуют не объект, а класс. Объявляются с помощью зарезервированного слова class.

Обращения к полям с их помощью запрещаются.

Пример:

Type
TMyCl=class
Class Function
GetClassName: String;
End;

Var
S:string;

Class Function GetClassName: String;

Begin
Result:=‘TmyCl’;
End;

 

КОНСТРУКТОР И ДЕСТРУКТОР

В состав любого класса входят два специальных метода – конструктор и деструктор.

В классе TОbject конструктор называется create деструктор destroy.

Конструктор и деструктор – это функция и процедура, но в виду их важности и единственности они объявляются с помощью зарезервированных слов Constructor Destructor.

Type
TmyCl=class(TObject)

end;

Var

Ob1: TmyCl;//выделяет указатель 4 б, cначалa хранит nil

Для разворачивания же объекта в динамической памяти используется метод класса конструктор (для Tobject это Create) в таком виде

Ob1:= TmyCl.Create;

В результате применения метода create:

выделяется дин память и разворачивается объект;

- инициализируется объект

- возвращается ссылка в объектную переменную, (чтобы можно было пользоваться его членами, а в последствии и разрушить.)

Любые действия с объектом возможны после работы конструктора.
Деструктор разрушает объект в динамической памяти.

Type

TMyCl=class
Fint: integer;
End;


Var
MyOb:TmyCl;


Begin
MyOb.Fint:=0; //комментировать самостоятельно

MyOb.Create; //

MyOb:=TmyCl.Create; //

MyOb.Fint:=0; //

MyOb.Destroy;//

MyOb.Free; //

End.

Утечка памяти

Type
TMyCl=class
Fint: integer;
End;

Var

MyOb:TmyCl;
i:integer;

Begin
Fori:=1 to 10 do
MyOb:=TmyCl.Create;
MyOb.Fint:=0;

End.

ПЕРЕОПРЕДЕЛЕНИЕ (ПЕРЕКРЫТИЕ) МЕТОДОВ

Type
Tpar=class
Procedure
DoWork;
End;

Tchild=class(Tpar)
Procedure DoWork;
End;

Var O1: Tpar; O2: Tchild;

Procedure Tpar . DoWork;
Beginwriteln(‘стучит молотком’); end;

Procedure Tchild . DoWork;
Beginwriteln(‘играется в песочнице’); end;

Begin
O1
:= Tpar.create;
O2:= Tchild.create;

O1.DoWork; // стучит молотком

O2.DoWork; // играется в песочнице
end.

Методы в классе могут перекрываться (еще говорят переопределяться) в потомках, т.е. процедуры с одним и тем же именем в предке и потомке выполняют разные алгоритмы.

Объекты обоих классов (предка и потомка) будут выполнять сходную процедуру по-разному. Такое замещение называется статическим, т.к. реализуется компилятором на этапе компиляции.

ПЕРЕОПРЕДЕЛЕНИЕ КОНСТРУКТОРА

Конструктор не редко переопределяется для выполнения инициализации полей.
Полное переопределение не рекомендуется, рационально вызвать конструктор предка, затем произвести собственные дополнительные действия. Вызвать любой перекрытый метод родительского класса можно при помощи зарезервированного слова inherited.

Type
Tfigure = class

end
;

Tcircle = class (Tfigure)
r:real;
constructor create(ar:real);
end;

var
figure:Tfigure;
circle:Tcircle;

constructor Tcircle.create(ar:real);
begin
inherited create;
r:=ar;// инициализируем
end;

Begin
figure:=Tfigure.Create;
circle:=Tcircle.create(1.25);
end.

ПОЛИМОРФИЗМ

Замещение метода может быть сделано как на этапе компиляции так и на этапе выполнения программы. Такое замещение называется динамическим (или виртуальным).

Синтаксис объявления таков:

Tpar=class

Procedure DoWork; virtual; [dynamic;] //метод виртуальный

End;

Tchild=class(Tpar)

Procedure DoWork; override;//надо переопределять при выпол

End;

Полиморфизм допускает инициализацию объектной переменной любым классом потомком

Type
TMan= class
procedure Obed;
end;

TStud = class (TMan)
Procedure Obed;
end;

Var
Man:TMan;
Stud:TStud;

procedure TMan.Obed;
begin writeln('плотно поел');end;

procedure TStud.Obed;
begin writeln('съел коржик');end;

Begin

Man:=TStud.Create; //предок инициал потомком

man.Obed; //'плотно поел' 'съел коржик (man as Tman).Obed;

 

Man.Free;

 

Операции as и is

(man as Tman).Obed; //приведение типа

if man is Tman then …;//определение типа



<== предыдущая лекция | следующая лекция ==>
Finalization | Класс TСomponent


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 3.245 сек.