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.

questionAnswers(1)

yourAnswerToTheQuestion