Как начать создавать свои собственные классы с Delphi?

Я отправилвопрос Несколько дней назад, и ответы сказали мне, чтобы создать свои собственные классы.

Я программист старой школы со времен до ООП, мои программы хорошо структурированы, эффективны и организованы, но в них нет каких-либо пользовательских ООП, кроме использования Delphi и сторонних объектов.

Я смотрел на то, как объектно-ориентированные классы Delphi работали, когда я начал использовать Delphi 2, но они казались чуждыми моему опыту программирования. Я понимаю, как они были и отлично подходят для разработчиков, разрабатывающих компоненты и для визуального контроля над пользовательским интерфейсом. Но я так и не нашел необходимости использовать их в кодировании самой моей программы.

Итак, теперь я снова, спустя 15 лет, смотрю на классы Delphi и OOPing. Если я возьму, например, структуру, которая у меня есть, например:

type
  TPeopleIncluded = record
    IndiPtr: pointer;
    Relationship: string;
  end;
var
  PeopleIncluded: TList<TPeopleIncluded>;

Тогда адвокат ООП, вероятно, скажет мне сделать это занятием. Логично, что я думаю, что это будет класс, унаследованный от общего TList. Я думаю, это будет сделано так:

TPeopleIncluded<T: class> = class(TList<T>)

Но именно здесь я застреваю, и у меня нет хороших инструкций о том, как делать все остальное.

Когда я смотрю на некоторый класс, который Delphi имеет в качестве примера в модуле Generics.Collections, я вижу:

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;

а затем их определения конструкторов и процедур:

{ 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;

Позвольте мне сказать вам, что это "просто" Определение класса может быть очевидным для тех из вас, кто использовал ООП в Delphi в течение многих лет, но для меня это только дает мне сотни вопросов без ответа о том, что я использую и как я его использую.

Мне это не кажется наукой. Похоже, это искусство того, как лучше структурировать вашу информацию в объекты.

Итак, этот вопрос, и я надеюсь, что он не будет закрыт, потому что мне действительно нужна помощь в этом, где и как я могу получить лучшую инструкцию по использованию Delphi для создания классов - и как сделать это надлежащим образом в Delphi.

Ответы на вопрос(1)

Ваш ответ на вопрос