Содержание
- 2. Полиморфизм является необходимым средством при обеспечении расширяемости типов в приложениях.
- 3. Виртуальные методы Полиморфизм позволяет не переделывать структуру программы Если возникает необходимость определения нового типа данных, например
- 4. Виртуальные методы Метод становится виртуальным, если за его объявлением в типе объекта стоит зарезервированное слово VIRTUAL.
- 5. Необходимо помнить, что если метод объявлен в родительском типе как VIRTUAL, то все методы с аналогичными
- 6. Виртуальные методы UNIT New_persons; INTERFACE TYPE PPerson = ^TPerson; TPerson = OBJECT Name : STRING[30]; Date
- 7. Виртуальные методы Обратите внимание, что метод ShowSum, показанный для типа TTeacher, теперь удален из его определения.
- 8. Виртуальные методы Обратите внимание на зарезервированное слово CONSTRUCTOR (конструктор), заменившее зарезервированное слово PROCEDURE для процедур Init.
- 9. Виртуальные методы Каждый тип объекта, имеющий виртуальные методы, обязан иметь конструктор. Понятие DESTRUCTOR (деструктор), обратное понятию
- 10. Виртуальные методы Например: VAR One,Two: TPerson; BEGIN One.Init('Петр Петров','25-06-1995' ,400000); Two := One; {Неправильный вызов!} END;
- 11. Виртуальные методы Каждый тип объекта, содержащий виртуальные методы, имеет таблицу виртуальных методов (ТВМ), хранящуюся в сегменте
- 12. Виртуальные методы При отладке программы для контроля правильности вызовов виртуальных методов можно использовать директиву компилятора $R.
- 13. Виртуальные методы Как только родительский тип объекта объявит метод виртуальным, все его потомки также должны объявить
- 14. Расширяемость объектов Преимуществом использования виртуальных методов является то, что типы объектов и методы, определенные в модуле,
- 15. Преимущества и недостатки виртуальных методов Рекомендуется делать методы виртуальными. Использование статических методов имеет смысл, если требуется
- 16. Динамические объекты Точно так же, как и любые типы данных в Паскале, объекты можно размещать в
- 17. Динамические объекты Если динамический объект содержит виртуальные методы, он должен инициализироваться с помощью вызова конструктора, перед
- 18. Расширенное использование оператора New. Специально для работы с динамическими объектами Турбо Паскаль включает несколько усовершенствованных процедур
- 19. Расширенное использование оператора New. При использовании расширенного синтаксиса процедуры New конструктор Init выполняет динамическое размещение объекта,
- 20. Расширенное использование оператора New. Процедура New также может использоваться в качестве функции, которая возвращает значение указателя.
- 21. Обнаружение ошибок конструктора Турбо Паскаль позволяет установить пользовательскую функцию обработки ошибок динамической памяти с помощью переменной
- 22. Обнаружение ошибок конструктора Новая функция обработки ошибок устанавливается путем присваивания ее адреса переменной НеарЕrrоr следующим образом:
- 23. Обнаружение ошибок конструктора По умолчанию, если не хватает памяти для размещения экземпляра динамического объекта, вызов конструктора,
- 24. Обнаружение ошибок конструктора
- 25. Обнаружение ошибок конструктора
- 26. Обнаружение ошибок конструктора Для реализации изложенного выше механизма, Турбо Паскаль предоставляет новую стандартную процедуру Fail, которая
- 27. Обнаружение ошибок конструктора Если динамические экземпляры размещаются с помощью расширенного синтаксиса New, то результирующее значение NIL,
- 28. Обнаружение ошибок конструктора Рассмотрим, как можно описать последовательный вызов конструкторов типа TPerson, TStaff и TTeacher.
- 29. Обнаружение ошибок конструктора пример конструкторов не использующих обнаружение ошибок: CONSTRUCTOR TPerson.Init(Nm,Dt : STRING; Rt : REAL);
- 30. Обнаружение ошибок конструктора можно переписать конструкторы типа TStaff и ТТеасher с учетом обнаружения ошибок: CONSTRUCTOR TStaff.Init(Nm,Dt
- 31. Полезная информация В приведенных примерах вложенные вызовы конструкторов осуществляются путем указания имени предка, за которым следует
- 32. Деструкторы Подобно другим типам данных, размещаемые в динамической памяти объекты могут удаляться в случае необходимости с
- 33. Деструкторы Метод Done должен инкапсулировать все детали очистки своего объекта, а также всех структур данных и
- 34. Деструкторы Деструктор размещается вместе с другими методами объекта в определении типа объекта: ТУРЕ TPerson = OBJECT
- 35. Деструкторы Деструкторы можно наследовать, и они могут быть либо статическими, либо виртуальными. Поскольку различные программы завершения
- 36. Деструкторы Основное преимущество использования деструктора заключается в удалении из памяти полиморфных объектов. Полиморфными являются те объекты,
- 37. Деструкторы Термин "полиморфный" означает, что компилятор, строя код объекта, во время компиляции точно не знает, какой
- 38. Деструкторы Информация о размере удаляемого объекта становится доступной для деструктора в момент удаления, благодаря обращению к
- 39. Деструкторы Для выполнения освобождения памяти при позднем связывании деструктор нужно вызывать как часть расширенного синтаксиса процедуры
- 40. Деструкторы
- 41. Полезная информация Вызов деструктора вне процедуры Dispose не приведет к автоматическому освобождению памяти. Сам по себе
- 42. Динамические методы. В Турбо Паскале имеется дополнительный класс методов позднего связывания, которые называются динамическими. Фактически, динамические
- 43. Динамические методы. Описание динамического метода аналогично описанию виртуального за исключением того, что оно должно включать в
- 45. Скачать презентацию