unit Hat;
{$mode objfpc}{$H+}
interface
uses
Classes,SysUtils,Dialogs;
type
THat = class //Hat 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
Name: string; //I suppose name is an unique ID too.... //Private Object Attribute
Color: string; //Private Object Attribute
IsAvailable: boolean;
//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 children can SEE this zone)
//We will see this later on the inheritance
public //PUBLIC (Anyone can see this zone)
//PUBLIC ATTRIBUTES
//Id_public: integer; //Public Object Attribute (bad NO encapsulation! Object attributes must be private)
//...
//PUBLIC METHODS
//Constructors (Create the object Employee):
constructor Create(Name_,Color_ : 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 Employee)
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 GetName():string; //Public Object Method
procedure SetName(Name_:string); //Public Object Method
function GetColor():string; //Public Object Method
procedure SetColor(Color_:string); //Public Object Method
function GetIsAvailable():boolean; //Public Object Method
procedure SetIsAvailable(IsAvailable_:boolean); //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 THat.Create(Name_,Color_ : string); overload;
begin
self.Name:=Name_;
self.Color:=Color_;
self.IsAvailable := true; //A new hat is always available
end;
//Class Method
Destructor THat.Destroy; //override; //not needed here !!!
begin
showmessage('Hat with name' + self.Name + ' and with color ' + self.Color + ' is deleted');
//Self->This in c++
inherited; // Always call the parent destructor after running your own code
end;
//Object Method
function THat.GetName():string;
begin
result := self.Name;
end;
//Object Method
procedure THat.SetName(Name_:string);
begin
self.Name := Name_;
end;
//Object Method
function THat.GetColor():string;
begin
result := self.Color;
end;
//Object Method
procedure THat.SetColor(Color_:string);
begin
self.Color := Color_;
end;
//Object Method
function THat.GetIsAvailable():boolean;
begin
result := self.IsAvailable;
end;
//Object Method
procedure THat.SetIsAvailable(IsAvailable_:boolean);
begin
self.IsAvailable := IsAvailable_;
end;
//Object Method
function THat.PrintMe():string;
begin
result:= 'The selected hat has name : ' + self.Name + ' , color : ' + self.color + ' and is available : ' + booltostr(self.IsAvailable);
end;
end.
That's all for now!
Thank you for your patience.
See you on next article!