
- •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.
42. Класс tList.
Класс ТList позволяет создать набор из произвольного количества элементов и организовать индексный способ доступа к ним, как это делается при работе с массивом. ТList реализует список значений, но с некоторыми оговорками, которые становятся очевидными при рассмотрении реализации класса.
Cписки отличаются от массивов двумя важными обстоятельствами. Во-первых, их размер может изменяться в ходе работы программы, фактически ограничиваясь лишь свободной оперативной памятью. Во-вторых, в списках могут храниться элементы разных типов.
Класс TList происходит непосредственно от ТОbject.
TList=class(TObject)
End;
Технически класс ТList реализуется в виде динамического массива безтиповых указателей РРоinterList, каждый из элементов массива указывает на область памяти, где расположен элемент списка.
Количество элементов динамического массива определяется свойством Сарасitу, количество реальных элементов в списке равно Соunt.Если при добавлении очередного элемента в список TList Соunt становится равным Сарасitу, автоматически происходит расширение динамического массива (для Соunt <5 на 4 элемента, для 4<Соunt<8— на 8 элементов, для Соunt>7— на 16 элементов). При этом сначала резервируется место для размещения расширенного массива указателей, потом происходит копирование текущего массива, затем его удаление. Поэтому, чтобы снизить накладные расходы, в случае если заранее известно приблизительное количество элементов, следует инициализировать свойство Сарасitу соответствующим значением. Основные свойства класса TList:
1Property capacity:integer read FCapacity write SetCapacity;-содержит кол-во элементов массива указателя списка.всегда больше Count.
2Property Count: integer read FCount write SetCount;-количество элементов списка изменяется при добавлении и удалении элемента.
3Property Items [index:integer]:pointer read Get write Put;default;-возвращает указатель на элемент списка по его индексу. Индекс первого элемента 0.
Основные методы класса TList:
Function Add(item:pointer):Integer;-добавляет элемент Items в конец списка и взвращает его индекс;
Procedure clear;virtual;-очищает список,не очищает память,связанную с каждым элементом. Устанавливает Count и Capacity в 0.
Procedure delete(index:Integer);-удаляет из списка элемент с индексом Index. Все элменты,расположенные за удаляемым смещаются на одну позицию вверх.
Function first:pointer;-возвращает указатель на 1-ый элемент списка.
Function Last:pointer;-возвращает указатель на последний элемент.
Function remove(item:pointer):integer;-отыскивает в списке элемент item и удаляет его.
Procedure sort(compare:TListSortCompare);-сортирует коллекцию с помощью ф-ии compare/
Для того чтобы воспользоваться методами Add, Insert необходимо разместить в оперативной памяти динамические переменные, а в указанные методы передавать полученные указатели. Соответственно методы Delete, Extract, Remove, Clear не освобождают динамическую память, а только очищают ссылки на эти данные. Поэтому, необходимо очищать динамическую память программно. Например:
Var
List: TList;
Item: ^Integer;
Begin
List:=TList.Create; //создаем список
New(Item); //создаем динамическую переменную
List.Add(Item); //добавляем в список значение-указатель на созданную переменную
List.Remove(Item); //удаляем из списка указатель на динамическую переменную
Dispose(Item); //Очищаем динамическую память от динамической переменной
List.Free; //Очищаем память от списка
End;
Метод Sort сортирует список по критерию, устанавливаемому функцией Compare. Тип TListSortCompare определен так:
TListSortCompare=function(Item1,Item2: Pointer): integer;
Таким образом, функция Соmраrе получает указатели на два элемента списка. Результат сравнения.
• любое отрицательное число, если Item1^<Item2^;
• 0, если Item1^=Item2^;
• любое положительное число, если Item1^>Item2^.
Критерий сравнения данных устанавливается программистом и реализуется в функции Compare.
43. Классы TStrings и TStringList.Класс TStrings происходит от класса ТРеrsistent.
TStrings=class(TPersistant).Класс TStrings является абстрактным, он инкапсулирует поля и методы для работы с наборами строк. От него порождены многочисленные специализированные потомки, обслуживающие наборы строк в таких компонентах как TComboВох, TListBox, TRichЕdit и др. Эти классы (TComboBoxString, TListBoxStrings и др.) объявляются в разделе implementation соответствующих модулей и поэтому скрыты от броузера Delphi и не включены в справочную службу. Единственным доступным наследником класса TStrings является класс ТStringList - полнофункциональный класс общего назначения для работы с набором строк.
Особенностью класса TStrings и его потомков является то, что элементами наборов служат пары строка-объект, в которых строка — собственно строка символов, а объект — объект любого класса. Такая двойственность позволяет хранить в TStrings объекты с их описаниями, сортировать объекты и т.д. Кроме того, в качестве объекта может также выступать потомок от TStrings, что позволяет создавать многомерные наборы строк.Основные свойства класса TStrings:
Property capacity:integer read Getcapacity write Setcapacity;-текущая емкость набора строк. Всегда больше count.
Proptery count: :integer read Getcount write Setcount;текущее количество строк в наборе. Технически класс TStrings реализует в виде динамического массива указателей.
Основные методы класса:
Function add(const:s:string);integer:virtual;-добавляет строку в набор данных и возвращает ее индекс.
Procedure apperied(const s:string;AObject:TObject):integer;virtual;-добавляет строку в набор данных.
Procedure clear;virtual;abstract;-очищает набор данных и освобождает связанную с ним память.
Procedure delete(index:integer); virtual;abstract;-удаляет элемент набора с индексом index и освобождает связанную с ним память.
Методы Add, Append, Insert, Clear и т.п. – абстрактные, т.е. они объявлены в классе TStrings, и таким образом определены во всех потомках. Но каждый потомок самостоятельно реализует то, как располагаются в памяти объекты и строки. В то же время наличие, например, метода Assign позволяет с его помощью копировать наборы данных из одного потомка класса TStrings в другой.
Класс TStringList происходит от класса TString и является уже не абстрактным, а полнофункциональным классом общего назначения для работы с наборами строк. Для этого в нем перекрыты все абстрактные методы класса TString, а кроме этого добавлены свойства и методы:
Property duplicates:Tduplicates read Fduplicates write FDupduplicates;-управление возможностью размещения в набор двух и более идентичных строк.
Property sorted:Boolean read Fsorted write setsorted;-признак необходимости сортировки строк в алфавитном порядке.