Návrhy vylepšení jazyka Delphi: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
Bez shrnutí editace |
Bez shrnutí editace |
||
(Nejsou zobrazeny 2 mezilehlé verze od stejného uživatele.) | |||
Řádek 5: | Řádek 5: | ||
Namísto klasického |
Namísto klasického |
||
< |
<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.</ |
end.</source> |
||
k objektovému |
k objektovému |
||
< |
<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;</ |
end;</source> |
||
=Nabízet čistý typ interface bez počítání referencí= |
=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. |
|||
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ů. |
|||
* 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 |
TSomeInterface = interface |
||
end;</ |
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> |
|||
Řádek 50: | Řádek 65: | ||
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. |
||
< |
<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 76: | ||
TRefByte = ^TByte; |
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.