- •1. Нарисуйте и опишите структуру главного окна системы Delphi. Для чего нужно окно инспектора объектов и как им пользоваться?
- •2. Объясните назначение окна формы. Как на нём размещать компоненты и настраивать их параметры?
- •4. Что собой представляет программа решения задачи в системе Delphi? Как организуются процедуры обработки событий: «щелчок мыши на кнопке», «создание формы»?
- •8. Как запустить программу? Как работать с программой? Как остановить программу для её редактирования?
- •9. Какие файлы содержит программа, их структура? Как организовать запись программы в отдельный каталог? Как создать новый каталог?
- •12. Приведите примеры схем циклических алгоритмов и их программ с использованием оператора repeat.
- •13. Приведите примеры схем циклических алгоритмов и их программ с использованием оператора while.
- •14.Приведите примеры схем циклических алгоритмов и их программ с использованием оператора for.
- •15. Как организуется работа с массивами в языке Pascal: описание, обращение к элементам, операции над массивами? Проиллюстрируйте на примерах.
- •16. Понятия статического и динамического распределения памяти. Что такое указатель? Операции над указателями. Что такое динамическая переменная? Наложение переменных с помощью указателя.
- •17. Понятие множеств в языке Pascal. Как они описываются? Какие операции над ними допустимы? Привести примеры их полезного использования.
- •18. Что такое строки в языке Pascal? Как они описываются, что такое текущая и максимальная длина строки? Опишите процедуры и функции обработки строк.
- •23. Как выводить графики в Delphi, используя компоненту tImage. Опишите последовательность действий по настройке tImage и фрагмент программы вывода закрашенного квадрата внутри круга.
- •24. Что такое записи в языке Pascal? Как они описываются, в чем особенность вариантной части?
- •25.Понятие объекта и класса. Объясните на примерах, что такое инкапсуляция наследственность и полиморфизм, раннее и позднее связывание
- •26. Что такое виртуальный и динамический способы реализации полиморфизма. В чем их различие. Понятие абстрактного метода. Как реализуется вызов родительского метода в методе потомке?
- •27.Назначение конструктора и деструктора. Приведите примеры их описаний. Их вид в Delphi
- •28.Понятие свойств класса, для чего они нужны? Как они описываются? Приведите примеры классов со свойствами
- •29. Постановка задачи оптимального выбора. Двоичное дерево решений. Метод полного перебора, метод ветвей и границ эвристические методы.
26. Что такое виртуальный и динамический способы реализации полиморфизма. В чем их различие. Понятие абстрактного метода. Как реализуется вызов родительского метода в методе потомке?
Полиморфизм- возможность объектов с одинаковой спецификацией иметь различную реализацию. Виртуальные и динамические методы связываются во время выполнения программы (позднее связывание). Если метод объявлен виртуальным или динамическим, то нельзя менять типы и число параметров.
Для реализации позднего связывания поступают следующим образом. В потомке замещающий метод объявляется директивой override. Замещаемый одноименный метод родителя объявляется как динамический или виртуальный с помощью ключевых слов (dynamic) или (virtual).
Встретив объявления dynamic или virtual, компилятор создает таблицы соответствия DMT и VMT. В этих таблицах помещаются адреса точек входа методов. Адрес VMT “своего” класса хранится в каждом экземпляре объекта в особом, скрытом от программиста поле. Адрес DMT хранится в VMT. При каждом обращении к методу компилятор вставляет в соответствующую таблицу код, позволяющий извлечь затем из нее адрес точки входа в подпрограмму.
Отличие таблиц DMT и VMT в том, что DMT содержит адреса только тех методов, которые объявлены как dynamic в данном классе, а VMT содержит адреса всех виртуальных методов данного класса: как нововведенных, так и унаследованных от родителей.
При реализации позднего связывания в родительском классе часто используют абстрактные методы (abstract), т.е. такие виртуальные методы, тело которых не прописано. Классы, имеющие хотя бы один абстрактный метод, сами называются абстрактными. Объекты абстрактных методов не создаются.
Вызов перекрытого метода родительского класса в одноименном методе потомка достигается с помощью зарезервированного слова Inherited (унаследованный).
27.Назначение конструктора и деструктора. Приведите примеры их описаний. Их вид в Delphi
Как всякая динамическая переменная, объект перед началом работы с ним должен быть создан. Нужно выделить под него динамическую область памяти и инициализировать (т.е. подготовить к работе) созданный объект. Для этого в Delphi служит конструктор Create, который является методом класса TObject, т.е конструктор- метод, который предназначен для создания объектов. Применяется конструктор следующим образом:
<Имя-переменной-типа-класс> := <тип-класса> . Create;
После окончания работы с объектом, выделенную под него память необходимо освободить, для чего служат деструкторы класса TObject Destroy или Free, т.е деструктор- метод, который предназначен для удаления объектов из динамической памяти. Метод Free удобнее использовать, так как он, в отличие от метода Destroy перед освобождением памяти проверяет, не была ли она уже освобождена ранее, т.е. работает более корректно: <Имя-переменной-типа-класс> . Free;
Прежде чем обращаться к элементам объекта, его нужно создать с помощью конструктора. Например: ObjectA:=TOwnClass.Create;
Конструктор выделяет память для нового объекта, задает нулевые значения для порядковых полей, значение nil – для указателей и полей классов, строковые поля устанавливает пустыми, а также возвращает указатель на созданный объект. Методы, как и обычные процедуры и функции, помещаются в область кода программы; они могут работать с любыми экземплярами своего класса и не дублируются в памяти.
Классы объектов определяются в секции type глобального блока. Описание класса начинается с ключевого слова class и заканчивается ключевым словом end.
После создания объект можно использовать в программе: получать и устанавливать значения его полей, вызывать его методы.
Чтобы от описания класса перейти к полям и методам объекта, следует выполнить соответствующее объявление в разделе var: Var math:TMatematica; Переменная math – это ссылка на экземпляр (объект в памяти), которого физически еще не существует. Чтобы сконструировать объект (выделить память для экземпляра) класса TMatematica и связать с ним переменную math, нужно в тексте программы поместить следующий оператор: math:= TMatematica.Create;
Если объект становится ненужным, он должен быть удален вызовом специального метода Destroy (освобождение памяти, занимаемой объектом), например: math.Destroy;
После вызова деструктора переменная math становится несвязанной и не должна исп-ться для доступа к полям и методам уже несуществующего объекта. Чтобы отличать в программе связанные объектные переменные от несвязанных, последние следует инициализировать значением nil.
Вызов деструктора для несуществующих объектов недопустим и при выполнении программы приведет к ошибке. Чтобы избавить от лишних ошибок, в объекты ввели предопределенный метод Free, который следует вызывать вместо деструктора Destroy. Метод Free сам вызывает деструктор Destroy, но только в том случае, если значение объектной переменной не равно nil: math.Free;
После уничтожения объекта переменная math сохраняет свое значение, продолжая ссылаться на место в памяти, где объекта уже нет. Если эту переменную предполагается еще использовать, то желательно присвоить ей значение nil, чтобы программа могла проверить, существует объект или нет. Таким образом, наиболее правильная последовательность действий при уничтожении объекта должна быть следующая:
math.Free;
math:= nil;
С помощью стандартной процедуры FreeAndNil это можно сделать проще: FreeAndNil(math);