Как начать создавать свои собственные классы с 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.