- •3. Основные проектные операции Delphi. Файлы, генерируемые системой Delphi. Взаимосвязь файлов на этапе проектирования и выполнения программы.
- •4.Модуль. Структура модулей. Интерфейсная часть. Раздел реализации. Компиляция модулей. Ссылки модулей. Области видимости идентификаторов.
- •5. Основные элементы языка Object Pascal. Константы и константные выражения. Переменные.
- •Зарезервированные слова языка Паскаль
- •6. Процедуры и функции. Параметры, механизмы их передачи.
- •7. Операторы Object Pascal
- •8.Динамическое распределение памяти в Object Pascal. Указатели.
- •9.Типы данных Object Pascal. Классификация типов ObjectPascal. Приведение типов.
- •10.Порядковые типы данных. Целые типы данных. Действительные типы данных. Булевы типы данных. Символьные типы данных.
- •11. Перечислимые типы. Ограниченные типы. Типы данных, специфичные для Windows.
- •12. Строки. Традиционные строки Pascal. Длинные строки Delphi.
- •Val(st: string; X: числовая переменная; var code: integer)
- •13.Массивы. Статические массивы. Операции с массивами, передача массивов как параметров. Динамические массивы.
- •14. Множества. Записи.
- •15. Файлы. Типы файлов.
- •16 Тип variant. Массивы типа Variant.
- •Теоретические положения объектно-ориентированного программирования. История, основные принципы ооп.
- •Принцип инкапсуляции в ооп. Принцип наследования в ооп.
- •Понятие полиморфизма в ооп. Языки ооп. Объектно-ориентированный анализ и проектирование.
- •Классы. Объявление классов. Реализация принципа инкапсуляции в Object Pascal. Поля. Директивы private, protected и public. Инкапсуляция и формы. Свойства.
- •21.Понятие объекта и экземпляра объекта в Object Pascal.
- •22.Конструкторы и деструкторы. Ключевое слово self.
- •23.Методы и их наследование. Статические методы.
- •25. Абстрактные методы.
- •33. Общие свойства компонентов: положение, размеры и оформление компонент.
- •35.События клавиатуры. Фокус ввода.
- •36. Механизм перетаскивания Drag&Drop, механизм причаливания Drag&Dock.
- •39. Решение проблемы утечки ресурсов с использованием механизма исключений.
- •42. Класс tList.
- •44.Класс tStream и его потомки – потоки данных.
- •45. Глобальный объект Application.
- •47. Глобальный объект Printer.
21.Понятие объекта и экземпляра объекта в Object Pascal.
Объекты можно представлять несколькими способами.OP использует ссылочную модель объектов. Каждая переменная типа класс называется объектом, но реально содержит лишь указатель на область памяти, в которой содержится значение реального объекта. Эта область оперативной памяти называется экземпляром объект. Несмотря на кажущуюся сложность, такая модель является очень мощной и удобной. Единственная проблема - программист должен вручную отводить память под так называемый экземпляр объекта.Три основных языковых понятия в ОР, реализующих принципы ООП:1) класс — пользовательский тип данных, описывающий поля, свойства, методы и события, которые будут у всех объектов этого класса (переменных этого типа).2) объект — это переменная типа класс, фактически является типизированным указателем.3)экземпляр объекта — место в оперативной памяти, где собственно хранятся значения полей, свойств и адреса методов объекта (по сути, является динамической переменной).
Однако есть определенное отличие динамической переменной от экземпляра объекта. Если для получения значения динамической переменной используется операция разыменования (^), то при работе с экземплярами объекта эту операцию проводить не нужно.Текст фрагмента программы, где используется объект объявленного класса, может выглядеть следующим образом.Создание и уничтожение объекта класса:
// Основная программа
var
AButton: TMyButton;
// Создаем объект
AButton:=TMyButton.Create;
// Записываем значение в его свойство
AButton.ClickCounter:=0;
// Уничтожаем объект
AButton.Free;
End;
В приведенном примере в разделе var описана переменная AButton — объект класса TMyButton. В тексте программы происходит создание объекта, модификация его свойства и в конце — его удаление. Для того чтобы понять, как создается и удаляется объект, необходимо более детально рассмотреть реализацию этого понятия в языке ОР.
Чтобы создать экземпляр объекта, необходимо вызвать метод Create. который является конструктором объекта, а результат его выполнения присвоить переменной-объекту. При создании нового экземпляра объекта класса конструктор применяется к классу, а не к объекту, например, TMyButtonCreate. Такой конструктор есть у всех классов, поскольку он описал как конструктор класса TObject, от которого наследуются все остальные классы. Если создается экземпляр объекта (отводится место в оперативной памяти), то впоследствии его необходимо уничтожить (освободить память). Эта операция выполняется с использованием деструктора. В классе TObject определен деструктор Destroy, который, таким образом, есть у всех классов. Тем не менее, для уничтожения экземпляра объекта рекомендуется использовать метод Free, который также унаследован от класса TObject. Этот метод надежней, поскольку он сначала проверяет не равен ли указатель на экземпляр объекта nil и только затем вызывает деструктор Destroy.
22.Конструкторы и деструкторы. Ключевое слово self.
Ключевое слово self.Отличие методов от процедур и функций состоит в том, что у методов есть неявный параметр, который является ссылкой на тот объект класса, для которого вызван метод. Внутри метода можно явно ссылаться на этот параметр при помощи ключевого слова self. Этот дополнительный скрытый параметр необходим в тех случаях, когда создаются несколько объектов одного класса, так что каждый раз, когда применяется метод к одному из объектов, он должен оперировать со своими данными и не влиять на остальные объекты.
В Delphi ключевое слово self часто используется, когда нужно явно обратиться к текущей форме в одном из ее методов. Типичный пример динамическое создание компонента, когда в конструктор компонента Create необходимо передать параметр Owner (указать владельца), а затем присвоить то же значение свойству Parent (указать родителя). Тем и другим для создаваемого компонента является текущая форма, и лучшим способом указать на нее является использование self.
Конструкторы — это специальные методы, создающие и инициализирующие объекты. Объявление конструктора выглядит как объявление метода, но предваряется ключевым словом constructor. В качестве имени конструктора обычно используют Create.
Если конструктор применяется к классу, то сначала происходит создание объекта — под него отводится память, значения всех полей <обнуляются>, при этом порядковым типам в качестве начального значения задается значение с номером 0, указателям присваивается nil, строки задаются пустыми, а поля типа Variant получают значение Unassigned. Затем выполняется код конструктора, в котором обычно описывается инициализация элементов объектов класса (присваивание полям и свойствам начальных значений и пр.) и возвращается указатель на созданный экземпляр объекта.
Конструктор может применяться и к объекту.В этом случае новый экземпляр объекта не создается, а выполняется только алгоритм конструктора. Фактически происходит переинициализация объекта. При этом нельзя применять конструктор к еще неинициализированной переменной, поскольку память под нее еще не была распределена. В реализации конструктора вначале обычно идет вызов конструктора класса предка с помощью ключевого слова inherited. В результате инициализируются все наследуемые поля. Затем в новом конструкторе инициализируются поля, введенные в данном классе.
Деструкторы — это специальные методы, уничтожающие объект освобождающие место в оперативной памяти. Объявление деструктора выглядит также как объявление процедуры, но предваряется ключевым слово destructor. В качестве имени деструктора обычно задают Destroy. Реализация деструктора, как правило, завершается вызовом наследуемого деструктора с помощью ключевого слова inherited, чтобы освободить память от наследуемых полей.
Вместо того, чтобы вызывать деструктор Destroy напрямую, принято вызывать специальную процедуру Free, действие которой состоит в том, что он вызывает деструктор Destroy только в том случае, если объект существует (то есть ссылка на него не равна nil
При рассмотрении конструкторов и деструкторов необходимо учитывать, что их нельзя использовать для компонентов Delphi (для объектов любых классов, произошедших от класса TComponent). Любой компонент, попавший при визуальном проектировании из Палитры компонентов в приложение, определяет своим владельцем форму (контейнер), на которую он помещен и для него - конструкторы и деструкторы вызываются автоматически, при создании (уничтожении) владельца, то есть формы. Создание и уничтожение форм делает приложение (глобальный объект с именем Application), для этого в файле проекта вызывается метод Application.CreateForm.