unit Document;
{$mode objfpc}{$H+}
interface
uses
Classes,SysUtils,Dialogs;
type
TDocument = class //document is a CLASS and is child of TObject (inherited)
//All delphi classes have TObject as root father. This is not true in C++
//Thats why in delphi the Multiple inheritance DOES NOT EXIST
//Every class has at MAX ONE Father in Delphi
//We have :
//1. Class Attributes (var ...)
//2. Class Methods (constructors, destructor, class static)
//3. Object Attributes (id,name...)
//4. Object Methods (Get,Set...)
private //PRIVATE ZONE (Only the Class employee can SEE this zone)
//PRIVATE ATTRIBUTES
Tipo: string; //Private Object Attribute
Description: string; //Private Object Attribute
//PRIVATE METHODS
//procedure Fake(); //Private Object Method
//...
//class function x(): integer; //Private Class Method (class->static in c++)
protected //PROTECTED ZONE (Only the Class employee and his childs can SEE this zone)
//We will see this later on the inheritence
public //PUBLIC (Anyone can see this zone)
//PUBLIC ATTRIBUTES
//Id_public: integer; //Public Object Attribute (bad NO incapsulation! Object attributes must be private)
//...
//PUBLIC METHODS
//Constructors (Create the oblect Employee):
constructor Create(Tipo_,Description_ : string); overload; //Public Class Method
//The Overload allows you to have different versions of the same named function/procedure with different arguments
//OVERLOAD : SAME NAME OF FUNCTION WITH DIFFERENT ARGUMENTS IN THE SAME CLASS
//Destructor (can be only ONE) (Destroy the object document)
Destructor Destroy; override; //Public Class Method
//The Override must be specified since we are overriding the virtual TObject destroy method.
//At the end of a destructor, you should call Inherited to invoke the parent destructor.
//OVERRIDE : SAME NAME OF FUNCTION WITH SAME ARGUMENTS IN DIFFERENT CLASSES
//class function x(): integer; //Public Class Method (class->static in c++)
function GetTipo():string; //Public Object Method
procedure SetTipo(Tipo_:string); //Public Object Method
function GetDescription():string; //Public Object Method
procedure SetDescription(Description_:string); //Public Object Method
function PrintMe():string; //Public Object Method
end;
implementation
//uses unit1;
//var
// Counter: integer =0; //Class Attribute SOS !!!
//implementation of the methods here !!!
//Class Method
constructor TDocument.Create(Tipo_,Description_ : string); overload;
begin
self.Tipo:=Tipo_;
self.Description:=Description_;
end;
//Class Method
Destructor TDocument.Destroy; //override; //not needed here !!!
begin
showmessage('Document with type ' + self.Tipo + ' and description ' + self.Description + ' is deleted');
//Self->This in c++
inherited; // Always call the parent destructor after running your own code
end;
//Object Method
function TDocument.GetTipo():string;
begin
result := self.Tipo;
end;
//Object Method
procedure TDocument.SetTipo(Tipo_:string);
begin
self.Tipo := Tipo_;
end;
//Object Method
function TDocument.GetDescription():string;
begin
result := self.Description;
end;
//Object Method
procedure TDocument.SetDescription(Description_:string);
begin
self.Description := Description_;
end;
//Object Method
function TDocument.PrintMe():string;
begin
result:= 'The selected document has type : ' + self.Tipo + ' and description : ' + self.Description;
end;
end.
That's all for now!
Play with the code, try and do errors: it's a good way to learn!
Have fun, and see you on next article!