Návrhy vylepšení jazyka Delphi: Porovnání verzí

Z ZděchovNET
Skočit na navigaci Skočit na vyhledávání
Bez shrnutí editace
Bez shrnutí editace
Řádek 5: Řádek 5:


Namísto klasického
Namísto klasického
<pre>begin
<source lang="delphi">begin
Application.Initialize;
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TSecondForm, SecondForm);
Application.CreateForm(TSecondForm, SecondForm);
Application.Run;
Application.Run;
end.</pre>
end.</source>


k objektovému
k objektovému


<pre>type
<source lang="delphi">type
TMyApplication = class(TApplication)
TMyApplication = class(TApplication)
MainForm: TMainForm;
MainForm: TMainForm;
Řádek 34: Řádek 34:
SecondForm.Free;
SecondForm.Free;
inherited;
inherited;
end;</pre>
end;</source>




Řádek 41: Řádek 41:
Každý typ definovaný jako nejjednodušší dětí automaticky metody pro počítání referencí. Z pohledu čistoty by mělo být počítání referencí definováno pomocí samostatného interface typu jako např. IRefCount. Díky tomu by bylo možné např. realizovat jiný způsob počítání referencí či jinou správu alokace objektů.
Každý typ definovaný jako nejjednodušší dětí automaticky metody pro počítání referencí. Z pohledu čistoty by mělo být počítání referencí definováno pomocí samostatného interface typu jako např. IRefCount. Díky tomu by bylo možné např. realizovat jiný způsob počítání referencí či jinou správu alokace objektů.


<pre>type
<source lang="delphi">type
TSomeInterface = interface
TSomeInterface = interface
end;</pre>
end;</source>




Řádek 50: Řádek 50:
Sloučit funkce a základní elementární typy do objektové formy. Základní typy se však kopírují jako přímá data, kdežto objekty jako reference.
Sloučit funkce a základní elementární typy do objektové formy. Základní typy se však kopírují jako přímá data, kdežto objekty jako reference.


<pre>type
<source lang="delphi">type
TByte = class(IAssignable, IComparable, IOrdinal)
TByte = class(IAssignable, IComparable, IOrdinal)
procedure Assign(Source: IAssignable); operator :=;
procedure Assign(Source: IAssignable); operator :=;
Řádek 61: Řádek 61:


TRefByte = ^TByte;
TRefByte = ^TByte;
</pre>
</source>






Verze z 5. 2. 2011, 09:07

Nepoužívaní globálních proměnných a funkcí

Přesun k plně objektovému programování. Nepoužívání globálních proměnných jako Application, FormX, Screen, Mouse, aj. Extrémně by byla použita pouze jediná globální proměnná něco jako System.


Namísto klasického

begin
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);    
  Application.CreateForm(TSecondForm, SecondForm);    
  Application.Run; 
end.

k objektovému

type
  TMyApplication = class(TApplication)
    MainForm: TMainForm;
    SecondForm: TSecondForm;
    constructor Create; override;
    destructor Destroy; override;
  end;

procedure TMyApplication.Create;
begin
  inherited;
  MainForm := TMainForm.Create(Self);
  SecondForm := TSecondForm.Create(Self);
end;

procedure TMyApplication.Create;
begin
  MainForm.Free;
  SecondForm.Free;
  inherited;
end;


Nabízet čistý typ interface bez počítání referencí

Každý typ definovaný jako nejjednodušší dětí automaticky metody pro počítání referencí. Z pohledu čistoty by mělo být počítání referencí definováno pomocí samostatného interface typu jako např. IRefCount. Díky tomu by bylo možné např. realizovat jiný způsob počítání referencí či jinou správu alokace objektů.

type
  TSomeInterface = interface
  end;


Přidat do jazyka podporu pro "objektové" elementární typy

Sloučit funkce a základní elementární typy do objektové formy. Základní typy se však kopírují jako přímá data, kdežto objekty jako reference.

type
  TByte = class(IAssignable, IComparable, IOrdinal)
    procedure Assign(Source: IAssignable); operator :=;
    function EqualTo(Source: IComparable): TBoolean; operator =;
    function LessThan(Source: IOrdinal): TBoolean; operator <;
    procedure Inc;
    procedure Dec;
    ...
  end;

  TRefByte = ^TByte;