Jak rozpocząć tworzenie własnych klas z Delphi?
Zamieściłempytanie kilka dni temu, a odpowiedzi kazały mi tworzyć własne klasy.
Jestem programistą ze starej szkoły od czasów sprzed OOP, moje programowanie jest dobrze zorganizowane, wydajne i zorganizowane, ale brakuje mu niestandardowego OOP, poza używaniem obiektów Delphi i innych firm.
Patrzyłem na to, jak klasy zorientowane obiektowo Delphi działały, kiedy zacząłem używać Delphi 2, ale wydawały się obce mojemu programistycznemu środowisku. Rozumiem, jak one były i są doskonałe dla programistów projektujących komponenty i wizualną kontrolę interfejsu użytkownika. Ale nigdy nie znalazłem potrzeby używania ich w kodowaniu mojego programu.
Teraz znów patrzę, 15 lat później, na klasy Delphi i OOPing. Jeśli zastosuję na przykład strukturę, którą mam, taką jak:
type
TPeopleIncluded = record
IndiPtr: pointer;
Relationship: string;
end;
var
PeopleIncluded: TList<TPeopleIncluded>;
Następnie rzecznik OOP prawdopodobnie powie mi, żebym uczynił to klasą. Logicznie myślę, że byłaby to klasa odziedziczona po ogólnym TListu. Zgaduję, że byłoby to tak:
TPeopleIncluded<T: class> = class(TList<T>)
Ale tam utknęłam i nie mam dobrych instrukcji, jak zrobić resztę.
Kiedy patrzę na jakąś klasę, którą Delphi ma jako przykład w jednostce Generics.Collections, widzę:
TObjectList<T: class> = class(TList<T>)
private
FOwnsObjects: Boolean;
protected
procedure Notify(const Value: T; Action: TCollectionNotification); override;
public
constructor Create(AOwnsObjects: Boolean = True); overload;
constructor Create(const AComparer: IComparer<T>; AOwnsObjects: Boolean = True); overload;
constructor Create(Collection: TEnumerable<T>; AOwnsObjects: Boolean = True); overload;
property OwnsObjects: Boolean read FOwnsObjects write FOwnsObjects;
end;
a następnie ich definicje konstruktorów i procedur są następujące:
{ TObjectList<T> }
constructor TObjectList<T>.Create(AOwnsObjects: Boolean);
begin
inherited;
FOwnsObjects := AOwnsObjects;
end;
constructor TObjectList<T>.Create(const AComparer: IComparer<T>; AOwnsObjects: Boolean);
begin
inherited Create(AComparer);
FOwnsObjects := AOwnsObjects;
end;
constructor TObjectList<T>.Create(Collection: TEnumerable<T>; AOwnsObjects: Boolean);
begin
inherited Create(Collection);
FOwnsObjects := AOwnsObjects;
end;
procedure TObjectList<T>.Notify(const Value: T; Action: TCollectionNotification);
begin
inherited;
if OwnsObjects and (Action = cnRemoved) then
Value.Free;
end;
Pozwólcie, że powiem wam, że ta „prosta” definicja klasy może być oczywista dla tych z was, którzy używają OOP w Delphi od lat, ale dla mnie dostarcza mi tylko setek pytań bez odpowiedzi dotyczących tego, czego używam i jak z niego korzystać .
Dla mnie to nie wydaje się być nauką. Wydaje się, że jest to sztuka, jak najlepiej uporządkować informacje w obiekty.
Więc to pytanie i mam nadzieję, że nie zostanie zamknięte, ponieważ naprawdę potrzebuję pomocy w tym, gdzie lub jak uzyskać najlepszą instrukcję dotyczącą używania Delphi do tworzenia klas - i jak to zrobić w odpowiedni sposób Delphi.