Návrhy vylepšení jazyka Delphi
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;