- •1. Пользователи класса не должны видеть подробности, которыми оперируют разработчики.
- •2. Прямой доступ к полям хотя и возможен, но не всегда желателен, т.К. Бесконтрольность может привести к ошибкам.
- •Var o1: TmyCl;
- •Var s:string;
- •Var MyOb:TmyCl;
- •Var o1: Tpar; o2: Tchild;
- •Var figure:Tfigure; circle:Tcircle;
- •Var o1,o2: TmyCl; n:integer;
- •Var мan: tМan;
- •Var par: Tpar; child: Tchild;
- •If man is Tman then …;//определение типа
- •Var cIrcle:tcIrcle; Rectangle:tRectangle;
- •Var MetaClass: TmetaClass;//может хранить в себе объект любого класса потомка Tobject Procedure UseObject(Obj: TmetaClass);
- •Любой компонент Делфи является собственностью другого компонента.
- •При разрушении компонента владельца автоматически разрушается принадлежащие ему компоненты.
- •X:Longint;
- •Visible:Boolean; - отображается ли элемент управления на экране.
- •0: (Left, top, right, bottom: integer);
- •1: (TopLeft, BottomRight: tPoint);
- •Interval: cardinal; - интервал в милисекундах после которого начинается событие OnTimer.
- •Items:tString; - задает элементы списка.
- •Items:tString; - задает элементы списка.
- •Items:tString;-содержит список названий переключателей.
- •1. Контроль обращений к данным
- •2. Контроль вычислений
- •3. Контроль передачи управления
- •4. Контроль межмодульных интерфейсов
Var мan: tМan;
Function TМan.GetVozr:integer; Begin result:= FVozrast; end;
Procedure TМan.SetVozr(r:integer); Begin if r<100 then FVozrast:=r else exit; end;
Begin
Мan:= TМan.create;
Мan.vozrast:=188; //не позволит
Мan.vozrast:= 18; // позволит
Man.Free;
End.
Билет 9.
ПОЛИМОРФИЗМ
Замещение метода может быть сделано как на этапе компиляции так и на этапе выполнения программы. Такое замещение называется динамическим (или виртуальным).
Синтаксис объявления таков:
Tpar=class
Procedure DoWork; virtual; [dynamic;] //метод виртуальный
End;
Tchild=class(Tpar)
Procedure DoWork; override;//надо переопределять при выпол
End;
Полиморфизм допускает инициализацию объектной переменной любым классом потомком
Type
Tpar=class
Procedure DoWork; virtual; end;
Tchild=class(Tpar)
Procedure DoWork; override;
End;
Var par: Tpar; child: Tchild;
Begin par:=Tchild.create; par. DoWork; end;
Операции as и is
(man as Tman).Obed; //приведение типа
If man is Tman then …;//определение типа
Абстрактные методы
Динамически перекрываемые методы могут вообще ничего не делать, тогда они называются абстрактными, но они обязаны перекрываться в потомках.
Реализация абстрактного метода не описывается. Вызов не перекрытого метода приводит к ошибке периода исполнения.
Классы, содержащие абстрактные методы называются абстрактными, они, как правило, инкапсулируют в себе общие свойства своих неабстрактных методов. Чтобы в потомках потом поменьше расписывать общие члены предков.
Type TFigure = class function Area:real;virtual; abstract; end;
TCIrcle = class(TFigure) r:real; function Area (rad:real):real; override; end;
TRectangle = class (TFigure) x,y:real; function Area (ax,ay:real):real; override; end;
Var cIrcle:tcIrcle; Rectangle:tRectangle;
function TCIrcle.Area (rad:real):real; begin result:=3.1415*rad*rad; end;
function TRectangle.Area (ax,ay:real):real; begin result:=ax*ay; end;
begin
CIrcle:=TCIrcle.create; Rectangle:=TRectangle.create;
CIrcle.Area(3); Rectangle.Area(2,3); end.
ТИП «КЛАСС»
Type TmetaClass = Class of TObject;
Var MetaClass: TmetaClass;//может хранить в себе объект любого класса потомка Tobject Procedure UseObject(Obj: TmetaClass);
Begin UseObject(TButton); UseObject(TLabel); end;
УКАЗАТЕЛЬ НА СЕБЯ
В каждом классе имеется не явно описанный идентификатор self, который всегда указывает на текущий объект. В метод всегда неявно передается указатель self на вызвавший его объект.
Билет 10.
СОБЫТИЯ.
Событие – это то, что происходит в результате работы компьютера. На низком уровне это изменения, (нажатие кнопки, исход времени, деление на ноль) вызывающие прерывания.
С точки зрения языка событие - это свойство процедурного типа, его значением является указатель на некоторый метод.
Присвоить такому свойству значение – означает указать адрес метода, который будет выполняться в момент наступления события.
Такие методы называются обработчиками событий.
СОБЫТИЯ ПРИМЕР.
Type TControl = class (TComponent) Private FOnDblClick: TNottifyEvent ; …………………….. Protected
property OnDblClick: TNottifyEvent read FOnDblClick write FOnDblClick; ……………………… end;
TNotifyEvent = Procedure(Sender:TObject) of object;
Билет 11.
ДЕРЕВО КЛАССОВ DELPHI
Принцип наследования позволяет использовать любой класс использовать как предка для создания новых классов. При этом члены класса предка наследуются.
Билет 12.
Класс TObject.
Предок всех классов. Класс абстрактный. Обеспечивает возможность создания и разрушения объектов. Для этого определены следующие методы.
Constructor Create – выделяет динам память, инициализацию не делает, т.к. перегружается. Destructor Destroy; virtual; - освобождает выделенную память. Procedure Free – проверяет существование и, если память выделялась, то освобождает ее.
Методы класса: ClassName: shortString; - возвращает имя класса данного объекта ClassNameIs (const Name:string):Boolean; - данный класс совпадает Name InheritsForm(aClass:Tclass):Boolean; - является ли класс предком дан кл InstanceSize:Longint; - возвращает размер класс или объекта.
Билет 13.
Класс TPersistent.
Его объекты инкапсулируют в себе некоторый носитель информации. Память или дисковые файлы.
МЕТОДЫ:
Procedure Assign(Source:Tpersistent); - присваивает данному объекту данные, содержащиеся в объекте с именем Source
Function GetNamePath: string; dynamic; - возвращает строку, содержащую имя объекта.
Function GetOwner: TPersistent; dynamic;- возвращает указатель на владельца объекта.
Билет 14.
Класс TСomponent.
Вершина иерархии компонентов. Потомки его - невизуальные компоненты (TApplication, Tform таймер, меню, диалоговые окна).
Свойства Name (строка ) – имя компонента. При помещении компонента на форму присваивается стандартное имя Label1, Edit1, которое можно заменить на более осмысленное, при этом имя должно быть правильным идентификатором. Tag: Longint; - некоторое число, которым разработчик может распоряжаться по усмотрению.
В классе TComponent вводится концепция принадлежности, которая распространяется на всю VCL. Суть: