Návrhy vylepšení jazyka Delphi: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
(Založena nová stránka: =Nepoužívaní globálních proměnných= Přesun k plně objektovému programování. Nepoužívání globálních proměnných jako Application, FormX, Screen, Mouse, a…) |
Bez shrnutí editace |
||
(Nejsou zobrazeny 4 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 |
||
< |
<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í= |
|||
* 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. |
|||
⚫ |
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.