- •3. Объектно-ориентированное программирование (ооп)
- •3.1. Краеугольные камни ооп
- •3.1.1. Что такое объект?
- •3.1.2. Концептуальный пример объекта
- •3.1.3. Природа объекта
- •3.1.4. Понятие класса объектов
- •3.1.5. Три кита ооп
- •3.1.6. Объекты и компоненты
- •3.2. Классы
- •3.2.1. Понятие класса
- •3.2.2. Классы в программных модулях
- •3.3. Объекты
- •3.4. Методы
- •3.4.1. Понятие метода
- •3.4.2. Конструкторы и деструкторы
- •3.5. Свойства
- •3.5.1. Понятие свойства
- •3.5.2. Методы получения и установки значений свойств
- •3.5.3. Свойства-массивы
- •3.5.4. Свойство-массив как основное свойство объекта
- •3.5.5. Методы, обслуживающие несколько свойств
- •3.6. Наследование
- •3.6.1. Понятие наследования
- •3.6.2. Прародитель всех классов
- •3.6.3. Перекрытие атрибутов в наследниках
- •3.6.4. Совместимость объектов различных классов
- •3.6.5. Контроль и преобразование типов
- •3.7. Статические методы
- •3.7.1. Понятие статического метода
- •3.8. Виртуальные методы
- •3.8.1. Понятие виртуального метода
- •3.8.2. Механизм вызова виртуальных методов
- •3.8.3. Абстрактные виртуальные методы
- •3.8.4. Динамические методы
- •3.8.5. Методы обработки сообщений
- •3.9. Указатели на методы объектов
- •3.12. Метаклассы
- •3.12.1. Ссылки на классы
- •3.12.2. Методы классов
- •3.12.3. Виртуальные конструкторы
- •3.13. Классы общего назначения
- •3.13.1. Классы для представления списка строк
- •Свойства:
- •Методы:
- •События:
- •3.13.2. Классы для представления потока данных
- •Общие свойства:
- •Общие методы:
- •3.14. Итоги
- •4. Исключительные ситуации и надежное программирование
- •4.1. Ошибки и исключительные ситуации
- •4.2. Классы исключительных ситуаций
- •4.3. Обработка исключительных ситуаций
- •4.3.1. Создание исключительной ситуации
- •4.3.2. Распознавание класса исключительной ситуации
- •4.3.3. Пример обработки исключительной ситуации
- •4.3.4. Возобновление исключительной ситуации
- •4.3.5. Доступ к объекту, описывающему исключительную ситуацию
- •4.4. Защита выделенных ресурсов от пропадания
- •4.4.1. Утечка ресурсов и защита от нее
- •4.5. Итоги
Свойства:
Duplicates: TDuplicates — определяет, разрешено ли использовать дублированные строки в списке. Свойство может принимать следующие значения: dupIgnore (дубликаты игнорируются), dupAccept (дубликаты разрешены), dupError (дубликаты запрещены, попытка добавить в список дубликат вызывает ошибку).
Sorted: Boolean — если имеет значение True, то строки автоматически сортируются в алфавитном порядке.
Методы:
Find(const S: string; var Index: Integer): Boolean — выполняет поиск строки S в списке строк. Если строка найдена, Find помещает ее позицию в переменную, переданную в параметре Index, и возвращает True.
Sort — сортирует строки в алфавитном порядке.
События:
OnChange: TNotifyEvent — указывает на обработчик события, который выполнится при изменении содержимого списка. Событие OnChange генерируется после того, как были сделаны изменения.
OnChanging: TNotifyEvent — указывает на обработчик события, который выполнится при изменении содержимого списка. Событие OnChanging генерируется перед тем, как будут сделаны изменения.
Ниже приводится фрагмент программы, демонстрирующий создание списка строк и манипулирование его элементами:
var Items: TStrings; I: Integer; begin // Создание списка Items := TStringList.Create; Items.Add('Туризм'); Items.Add('Наука'); Items.Insert(1, 'Бизнес'); ... // Работа со списком for I := 0 to Items.Count - 1 do Items[I] := UpperCase(Items[I]); ... // Удаление списка Items.Free; end; |
3.13.2. Классы для представления потока данных
В среде Delphi существует иерархия классов для хранения и последовательного ввода-вывода данных. Классы этой иерархии называются потоками. Потоки лучше всего представлять как файлы. Классы потоков обеспечивают различное физическое представление данных: файл на диске, раздел оперативной памяти, поле в таблице базы данных (таблица 3.1).
Класс |
Описание |
TStream |
Абстрактный поток, от которого наследуются все остальные. Свойства и методы класса TStream образуют базовый интерфейс потоковых объектов. |
THandleStream |
Поток, который хранит свои данные в файле. Для чтения-записи файла используется дескриптор (handle), поэтому поток называется дескрипторным. Дескриптор — это номер открытого файла в операционной системе. Его возвращают низкоуровневые функции создания и открытия файла. |
TFileStream |
Поток, который хранит свои данные в файле. Отличается от ThandleStream тем, что сам открывает (создает) файл по имени, переданному в конструктор. |
TMemoryStream |
Поток, который хранит свои данные в оперативной памяти. Моделирует работу с файлом. Используется для хранения промежуточных результатов, когда файловый поток не подходит из-за низкой скорости передачи данных. |
TResourceStream |
Поток, обеспечивающий доступ к ресурсам в Windows-приложении. |
TBlobStream |
Обеспечивает последовательный доступ к большим полям таблиц в базах данных. |
Таблица 3.1. Классы потоков
Потоки широко применяются в библиотеке VCL и наверняка вам понадобятся. Поэтому ниже кратко перечислены их основные общие свойства и методы.