Категорија :
TPerson = class
private
FirstName: string;
LastName: string;
public
function GetPersonFullName: string;
end;
TEmployee = class(TPerson(
private
EmpID: string;
CompanyName: string;
public
function GetEmployeeFullName: string;
end;
function TPerson.GetPersonFullName: string;
begin
Result := FirstName + LastName;
end;
function TEmployee.GetEmployeeFullName: string;
begin
Result := EmpID + CompanyName;
end;
Кад се варијабла дефинише као приватна може јој се приступати само из класе.
Може се дефинисати пар GET и SET метода или својстава за приступ приватним варијаблама ван класе.
Инкапсулација помаже сигурности кода, корисник зна како да користи објекат,
али је од њега скривено како и гдје су подаци сачувани.
Класе које имају најмање један абстрактни члан (virtual dynamic) (abstract).
Имају само декларацију, а имплементација ће бити у потомак класи (override).
Override значи да метод у потомак класи надјачава или преписује метод у родитељској класи.
Без override ће абстрактни метод бити сакривен.
Интерфејс је тип или модел као и класа с том разликом да никад не имплементира методе
већ класа имплементира интерфејс имплементирајући методе дефинисане у њему.
Предност коришћења интерфејса је могућност вишеструког наслеђивања. Класа може имплементирати више интерфејса.
Интерфејс садржи методе и својства (properties), а не поља (fields). Читање и писање пропертија иде преко метода.
Нема кључних ријечи : constructor, destructor, virtual, dynamic, abstract, override.
ITestInterfaceOne = interface
procedure GetInfoOne;
end;
ITestInterfaceTwo = interface
procedure GetInfoTwo;
end;
TEmpKlasa = class(TInterfacedObject, ITestInterfaceOne, ITestInterfaceTwo)
procedure GetInfoOne;
procedure GetInfoTwo;
end;
procedure TEmpKlasa.GetInfoOne;
begin
//
end;
procedure TEmpKlasa.GetInfoTwo;
begin
//
end;
Полиморфизам се изводи методом overloading или методом overriding.
Overload директива омогућава приступ различитим верзијама истоимене методе са различитим параметрима.
Override директива означава да се користи имплементација методе у насљедној класи.
Постоји : compile-time polymorphism i runtime polymorphism.
TStudentClass = class
function StudentDetails(Name: string; StudNo: Integer): string; overload;
function StudentDetails(StudNo: Integer; Name: string): string; overload;
end;
function TStudentClass.StudentDetails(Name: string; StudNo: Integer): string;
begin
//
end;
function TStudentClass.StudentDetails(StudNo: Integer; Name: string): string;
begin
//
end;
static (default вриједност)
virtual (могу бити override-овани и апстрактни)
dynamic (могу бити override-овани и апстрактни)
inherited (директива која показује метод у дијете класи који насљеђује метод родитеља)
reintroduce (директива која показује да игнорише што смо дали исто име метода у дијете класи као метод родитеља)
private (не виде се ван unit-a)
strict private (не виде се ван класе)
protected ()
strict protected ()
public (јавни)
published (јавни код визуелних компонената)
automated ()
TRoditeljKlasa = class poljeRoditelj: Integer; type TDijeteKlasa = class poljeDijete: Integer; end; procedure RoditeljProc; end; procedure TRoditeljKlasa.RoditeljProc; begin // end; var rod: TRoditeljKlasa; dij: TRoditeljKlasa.TDijeteKlasa;
Додаје се кључна ријеч sealed. Запечаћене класе се не могу насљеђивати.
* Object * Class * Constructor * Destructor * Reintroduce * Inheritance * Polymorphism
* Early/Static Binding * Late/Dynamic Binding * Method Overloading * Abstraction
* Encapsulation * Interface * Access specifier * Strict private * Strict protected * Private
* Protected * Public * Published * Nested class * Static class * Sealed class
Аутор :
Драшко Шикањић
20. 09. 2024.