- •1. Новые концепции ооп в языке Oblect Pascal
- •2. Объектно-ориентированный подход в программировании
- •Основные понятия
- •3. Понятие класса и объекта
- •4. Поля, методы и свойства объекта
- •5. Ключевое слово Self, примеры использования
- •6. Перегруженные методы
- •7. Создание и удаление объектов
- •8. Инкапсуляция
- •9. Инкапсуляция и модули
- •10. Директивы видимости
- •11. Инкапсуляция при помощи свойств
- •12. Свойства-массивы
- •13. Индексированные свойства
- •14. Свойства и иерархия классов
- •15. Конструкторы, перегрузка конструкторов, 16. Деструкторы
- •17. Ссылочная модель объектов Delphi
- •18. Наследование
- •19. Совместимость типов
- •20. Полиморфизм и позднее связывание
- •21. Виртуальные, динамические методы
- •22. Абстрактные методы
- •23. Бе6зопасное преобразование типов
- •24. Ссылки на класс
- •25. Создание компонентов при помощи ссылок на класс
- •26. Интерфейсы
- •27. Технические приемы, связанные с использованием интерфейсов (делегирование, использование директивы implements)
- •28. Исключительные ситуации
- •29. Порядок выполнения программы и блок finally
- •30. Классы исключений
- •31. Исключения и отладка приложений
- •32. Класс tObject, использование методов класса Tobject
- •33. Понятие события
- •34. Обработчики событий. Делегирование в Delphi
- •35. События стандартных визуальных компонент и их использование
32. Класс tObject, использование методов класса Tobject
Он является предком всех классов Delphi. Иерархия классов любой программы, написанная на Object Pascal обладает единым корнем. -> тип данных TObject можно использовать в качестве замены любого класса.
Конструктор Create класса TObject.
Выполняет общие стандартные действия по созданию объектов.
1. Выделяет память для объекта с помощью использования метода newInstance класса TObject, который в свою очередь вызывает метод InstanceSize(метод класса TObject) для определения размера памяти, требуемого для данного объекта.
2. Инициализирует поля созданного объекта нулевыми значениями с помощью метода InitInstance класса TObject.
Конструктор Create класса TObject объявлен статическим и не содержит параметров, но в некоторых классах он переопределяется.
Constructor Create (AOwner:TComponent);virtual;
Деструктор Destroy класса TObject.
Выполняет общие стандартные действия по уничтожению объекта с помощью метода FreeInstance класса. TObject, который в свою очередь вызывает метод CleanUpInstance.для корректного завершения работы со сложными структурами данных
Вызывает метод InstanceSize для определения размера памяти, занимаемого удаляемым объектом.
Деструктор Destroy в классе TObject виртуальный, если в производных классах он переопределяется, необходимо использовать директиву override.
Одним из аргументов обработчика событий обычно является параметр Sender, имеющий тип TObject. Фактические это означает что Sender может принадлежать любому классу. Таким образом недостатком является то, что неизвестно, к какому именно классу принадлежит данный объект.
Проблема решается при помощи механизмов RTTI или при помощи методов класса TObject.
1 подход.
Procedure …………….. (sender: TObject)
Begin
If Sender is TButton
End
Сущевует и доругой подход, в отнощении любого объекта можно использовать методы, определенные в ….. TObject.
Например, метод ClassName возвращает строку, возвращающую имя класса. Это классовый метод, поэтому его можно применят как в отнощении объекта, так и в отношении класса.
Text:=Button1.ClassName;
Text:=TButton.ClassName;
Результат будет одинаковый.
Бывают ситуации когда необходимо получить имя класса, но чаще требуется получить ссылку на сам класс или на его базовый класс. Ссылка на класс позволяет выполнять операции в отношении класса в процессе выполнения программы. А имя класса это всего лишь строка символов.
Ссылку на класс можно получить при помощи методов:
ClassType //класс
ClassParent // родительский класс
Получив ссылку на класс можно использовать в отношении неё любой из методов класса TObject.
InstanceSize отличается от функции SizeOf.
sizeOf к любому объекту вернет 4 байта, т.к. переменная в Обжект паскале всего лишь ссылка, а объекты динамические на самом деле.
Метод InstanceSize возвращает размер объекта в процессе выполнения программы(не путать с функцией sizeOf, которая возвращает размер ссылки на объект, т.е. 4 байта).
Метод ClassInfo возвращает указать на внутреннюю информацию RTTI.
Пример того, как методы класса TObject можно использовать для получения инфы о классе.
Procedure TSenderForm.ShowSender (Sender:TObject);
Begin
Memo.Lines.Add(‘Имя класса:’+sender.ClassName);
If sender.ClassParent <> nil then
Memo.lines.add(‘родительский класс:’+sender.ClassParent.ClassName);
Memo.Lines.Add(‘размер’+IntToStr(Sender.InstanceSize));
End;
