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
 
(Nejsou zobrazeny 3 mezilehlé verze od stejného uživatele.)
Řádek 1: Řádek 1:
=Nepoužívaní globálních proměnných=
=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.
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.
Řá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>


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

* V Delphi nelze používat interface bez počítání referencí. Lze pouze nadefinovat vlastní interface, kde funkce _AddRef a _Release nemají žádný účinek. Stále jsou však kompilátorem automaticky volány.
* Vyžaduje vyšší režii
* Při počítání referencí může docházek k vzniku uzavřených smyček, které nejsou automaticky uvolněny
* Vede ke složitějšímu ladění aplikace a vzniku dalších záludných chyb
* Kombinování tříd bez a s počítáním je jen velmi obtížně udržitelné

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

=Umožnit definici proměnných v interface=

* Použití property je v mnoha případech zbytečné a vede k další režii
* Použití property a metod Set a Get snižuje čitelnost definice

<source lang="delphi">type
TSomeInterface = interface
Value: Byte;
end;</source>



=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.

<source lang="delphi">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;
</source>

=Definovat společný kořenový typ=

Jeho název by byl např. TType nebo prostě type. K němu také definovat typ ordinal jako kořenový pro celočíselné typy. To by mělo využití při použití generických typů při definici omezení constraint.


[[Kategorie:Programování]]
[[Kategorie:Programování]]

Aktuální verze z 12. 6. 2012, 07:15

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í

  • V Delphi nelze používat interface bez počítání referencí. Lze pouze nadefinovat vlastní interface, kde funkce _AddRef a _Release nemají žádný účinek. Stále jsou však kompilátorem automaticky volány.
  • Vyžaduje vyšší režii
  • Při počítání referencí může docházek k vzniku uzavřených smyček, které nejsou automaticky uvolněny
  • Vede ke složitějšímu ladění aplikace a vzniku dalších záludných chyb
  • Kombinování tříd bez a s počítáním je jen velmi obtížně udržitelné
type
  TSomeInterface = interface
  end;

Umožnit definici proměnných v interface

  • Použití property je v mnoha případech zbytečné a vede k další režii
  • Použití property a metod Set a Get snižuje čitelnost definice
type
  TSomeInterface = interface
    Value: Byte;
  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;

Definovat společný kořenový typ

Jeho název by byl např. TType nebo prostě type. K němu také definovat typ ordinal jako kořenový pro celočíselné typy. To by mělo využití při použití generických typů při definici omezení constraint.