- •1.Тип данных “класс”. Объекты и классы.
- •Классы и объекты, понятие экземпляра класса, понятие членов класса
- •Виды классов
- •Классы в языке Object Pascal (среда Delphi)
- •2.Методы класса
- •3.Свойства класса и поля. Отличие свойства класса от полей записи.
- •4. Конструктор и деструктор класса.
- •Назначение конструктора
- •Виды конструкторов
- •Конструктор по умолчанию
- •Конструктор копирования
- •Конструктор преобразования
- •Виртуальный конструктор
- •Деструктор в Delphi
- •5.Использование разделов класса public, protected, published.
- •6. Использование наследования при создании класса.
- •Простое наследование
- •Множественное наследование
- •Delphi (Object Pascal)
- •7. Определение инкапсуляции.
- •8. Определение полиморфизма.
- •Примеры
- •В объектно-ориентированных языках
- •9. Динамическое создание объектов на форме с помощью классов.
- •10-13. Классы
- •14-16 StringGrid.
- •17. Процедуры работы с памятью. Приведите примеры.
- •18. Особенности работы процедур GetMem, BlockRead, функция FileSize .
- •19. Особенности работы процедуры new
- •20. Особенности работы процедуры FreeMem.
- •21. Стек. Локальные переменные и стек. Параметры процедуры и стек.
- •22. Списки. Динамическое создание очереди. Приведите примеры.
- •23. Компоненты работы с базами данных Table, Query, dbGrid, DataSource.
- •25. Занесение информации из базы данных в StringGrid.
- •Interface
- •Implementation
- •Implementation
- •26. Иерархические структуры. Деревья.
- •27. Использование компоненты TeeView для построения деревьев.
- •28. Рекурсия. Рекурсивные функции и процедуры. Рекурсия в программировании Функции
- •29. Выдача сообщений и отладка
- •Место отладки в цикле разработки программы
- •Инструменты
- •Инструменты, снижающие потребность в отладке
- •Оператор try...OnException..._try
- •31. Типы файлов. Операторы последовательного метода доступа.
- •32. Особенности обработки текстовых файлов.
- •33. Особенности работы с файлами с помощью прямого метода доступа.(!хз!)
- •34. Организуется диалогового поиска файлов. Компонента OpenDialog.
27. Использование компоненты TeeView для построения деревьев.
Сложные структуры данных в Windows обычно представляются двумя способами: в виде только что рассмотренного списка и в виде дерева. Так, например, отображается структура каталогов в Проводнике: слева иерархическая структура диска в виде раскрывающихся значков с обозначениями «-» (развернут) и «+» (свернут), а справа — содержимое выбранного каталога в виде списка. Для создания подобных деревьев, отображающих иерархические структуры дан¬ных, в системе Delphi 7 реализован компонент TTreeView. Процесс создания дерева достаточно прост. Его начальную структуру можно сформи-ровать в редакторе, аналогичном редактору компонента TListView, только уровень вложенности элементов в таком списке не ограничен. У компонента TListView под-держивался только один уровень вложенности по схеме «объект — набор свойств». Каждому узлу дерева может соответствовать своя картинка. Ее номер указывается в поле редактора Image Index (Номер картинки), а сам список картинок задается в свойстве Images. Дополнительно, для каждого узла можно указать номер картинки, отражающей его выделенное состояние (свойство Selected Index), и номер картинки, отражающей его дополнительное состояние (свойство State Index). Имена узлов можно редактировать, как обычные названия объектов Windows. Многие свойства дерева совпадают со свойствами объекта TListView, но есть и небольшие отличия, вызванные необходимостью отображать неограниченные иерархии объектов и только одним режимом работы. Основные свойства компонента TTreeView приведены в табл. 4.78. Сами узлы хранятся в свойстве Items (класс TTreeNodes) и имеют тип TTreeNode. Класс TTreeNodes содержит свойство Item — массив объектов типа TTreeNode. Основные свойства класса TTreeNode приведены в табл. 4.79.
28. Рекурсия. Рекурсивные функции и процедуры. Рекурсия в программировании Функции
В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная или косвенная рекурсия), например, функция A вызывает функцию B, а функция B — функцию A. Количество вложенных вызовов функции или процедуры называется глубиной рекурсии.
Преимущество рекурсивного определения объекта заключается в том, что такое конечное определение теоретически способно описывать бесконечно большое число объектов. С помощью рекурсивной программы же возможно описать бесконечное вычисление, причём без явных повторений частей программы.
Реализация рекурсивных вызовов функций в практически применяемых языках и средах программирования, как правило, опирается на механизм стека вызовов — адрес возврата и локальные переменные функции записываются в стек, благодаря чему каждый следующий рекурсивный вызов этой функции пользуется своим набором локальных переменных и за счёт этого работает корректно. Оборотной стороной этого довольно простого по структуре механизма является то, что на каждый рекурсивный вызов требуется некоторое количество оперативной памяти компьютера, и при чрезмерно большой глубине рекурсии может наступить переполнение стека вызовов. Вследствие этого, обычно рекомендуется избегать рекурсивных программ, которые приводят (или в некоторых условиях могут приводить) к слишком большой глубине рекурсии.
Впрочем, имеется специальный тип рекурсии, называемый «хвостовой рекурсией». Интерпретаторы и компиляторыфункциональных языков программирования, поддерживающие оптимизацию кода (исходного и/или исполняемого), автоматически преобразуют хвостовую рекурсию к итерации, благодаря чему обеспечивается выполнение алгоритмов с хвостовой рекурсией в ограниченном объёме памяти. Такие рекурсивные вычисления, даже если они формально бесконечны (например, когда с помощью рекурсии организуется работа командного интерпретатора, принимающего команды пользователя), никогда не приводят к исчерпанию памяти. Однако, далеко не всегда стандарты языков программирования чётко определяют, каким именно условиям должна удовлетворять рекурсивная функция, чтобы транслятор гарантированно преобразовал её в итерацию. Одно из редких исключений — язык Scheme (диалект языка Lisp), описание которого содержит все необходимые сведения.
Любую рекурсивную функцию можно заменить циклом и стеком.
Данные
Описание типа данных может содержать ссылку на саму себя. Подобные структуры используются при описании списков и графов. Пример описания списка (C++):
struct element_of_list
{
element_of_list *next; /* ссылка на следующий элемент того же типа */
int data; /* некие данные */
};
Рекурсивная структура данных зачастую обуславливает применение рекурсии для обработки этих данных.