DynBOT
Главная
Сервисы
Программы
Игры
Калькулятор
Delphi - Object Pascal 10.4
Оглавление
Книга о современном языке
Учись на собственном опыте
Заметка о нумерации глав
Часть I: основы
Содержание первой части
$00: кодирование в Паскале
Начнем с кода
Первое консольное приложение
Первое визуальное приложение
Синтаксис и стиль кодирования
Комментарии
Комментарии и XML Doc
Символические идентификаторы
Нечувствительность к регистру и использование прописных букв
Пустое пространство, пробелы
Ключевые слова языка
Структура программы
Имена модулей и программ
Имена модулей с точками
Подробнее о структуре модулей
Раздел Uses
Использование модулей, подобно пространствам имён
Файл программы
Директивы компилятора
Условные определения
Версии компилятора
Включение файлов
$01: Переменные и типы данных
Переменные и присвоения
Литералы
Оператор присваивания
Присвоение и преобразование
Инициализация глобальных переменных
Инициализация локальных переменных
Инициализация inline-переменных
Вывод типа для inline-переменных
Константы
Inline-константы
Константы Resource String
Жизненный цикл и видимость переменных
Типы данных
Порядковый и цифровой типы
Псевдонимы целых типов
Целочисленный тип, 64-разрядный, NativeInt и LargeInt
Стандартные операции порядкового типа
Операции Out-of-Range (вне диапазона)
Boolean
Символы
Операции с типом данных Char
Char как порядковый тип данных
Типы с плавающей точкой
Чем отличаются значения с плавающей точкой?
Простые пользовательские типы данных
Выражения и операторы
Использование операторов
Операторы и Приоритет
Дата и время
Приведение и преобразование типов
$02: языковые утверждения
Простые и составные утверждения
Условное выражение IF
Оператор Case
Цикл For
Циклы While и Repeat
Примеры циклов
Прерывание выполнения цикла с break и continue
$03: Процедуры и функции
Процедуры и функции
Предварительные декларации
Рекурсивная функция
Что такое Метод?
Параметры и возвращаемые значения
Выход с результатом
Ссылочные параметры
Постоянные параметры
Перегрузка функций
Перегрузка и неоднозначные вызовы
Параметры по умолчанию
Встраивание
Расширенные возможности функций
Конвенции по вызову в Object Pascal
Процедурные типы
Декларация внешних функций
$04: Массивы и записи
Типы массивов данных
Статические массивы
Размеры и границы массива
Многомерные статические массивы
Динамические массивы
Открытый массив параметров
Типы данных record
Использование массивов записей
Вариантные записи
Выравнивание полей
Особенности оператора With
Методы записей
Self: Магия записей
Инициализация записей
Записи и конструкторы
Операторы получают новую основу
Операторы и управляемые записи
Тип данных Variant
Варианты не имеют типа
Варианты в подробностях
Варианты - медленные
А что насчет указателей?
Типы файлов, кто-нибудь?
$05: Все о строках
Юникод: Алфавит для всего мира
Символы из прошлого: от ASCII до ISO кодировки
Unicode Code Points и Graphemes
От кодовых точек к байтам (UTF)
Отметка Byte Order Mark
Рассматривая Юникод
Вернемся к типу Char
Операции в Юникод из модуля Character
Символьные литералы Юникода
Как насчет 1-байтовых Char?
Тип данных String
Передача строк как параметры
Использование [] и режимов подсчета строковых символов
Конкатенация строк
Операции хелпера строк
Больше RTL функций для строк
Строки форматирования
Внутренняя структура строк
Глядя на строки в памяти
Строки и кодирование
Другие типы для строк
Тип UCS4String
Старые типы строк
Часть II: ООП в Object Pascal
Резюме части II
$06: Объекты
Представляем классы и объекты
Определение класса
Классы в других ООП-языках
Методы и классы
Создание объекта
Объектная модель
Утилизация oбъектов
Что такое "nil"?
Отличие Record от Class в памяти
Private, Protected и Public
Пример Private данных
Инкапсуляция и формы
Ключевое слово Self
Динамическое создание компонентов
Конструкторы
Управление локальными данными класса с помощью конструкторов и деструкторов
Перегруженные методы и конструкторы
Полный класс TDate
Вложенные типы и вложенные константы
$07: Наследование
Наследование от существующих типов
Общий базовый класс
Защищенные поля Protected и инкапсуляция
Использование приема "Protected Hack"
От наследования к полиморфизму
Наследование и совместимость типов
Позднее связывание и полиморфизм
Методы переопределения, повторного определения и повторного объявления
Наследование и конструкторы
Виртуальный и динамический методы
Абстрактные методы и классы
Абстрактные методы
Запечатанные классы и окончательные методы
Безопасные операторы приведения типа
Наследование визуальной формы
Наследование от базовой формы
$08: Обработка Исключений
Блоки Try-Except
Иерархия исключений
Поднятие (вызов) исключения
Исключения и Стек
Блок Finally
Восстановление курсора с блоком Finally
Восстановить курсор с помощью управляемой записи
Исключения в реальном мире
Обработка глобальных исключений
Исключения и конструкторы
Расширенные возможности исключений
Вложенные исключения и Механизм Внутренних Исключений
Перехват исключения
$09: Свойства и события
Определение свойств
Свойства сравнительно с другими языками программирования
Code Completion и свойства
Добавление свойств в формы
Добавление свойств в класс TDate
Использование массива свойств
Установка значения свойств по ссылке
Спецификатор доступа published
Свойства при проектировании
Published и формы
Автоматическая RTTI
Программирование, ориентированное на события
Указатели на методы
Концепция делегирования
События являются свойствами
Добавление события в класс TDate
Создание компонента TDate
Реализация поддержки перечислений в классе
15 советов по RAD и ООП
Совет 1: Форма - это класс
Совет 2: Название Компоненты
Совет 3: Имя События
Совет 4: Используйте методы формы
Совет 5: Добавить конструкторы формы
Совет 6: Избегайте глобальных переменных
Совет 7: Никогда не используйте Form1 в методах TForm1
Совет 8: Редко используйте Form1 в других формах
Совет 9: Удалить Глобальную переменную Form1
Совет 10: Добавить свойства формы
Совет 11: Показать свойства компонентов
Совет 12: Используйте массив свойств, когда это необходимо
Совет 13: Запуск операций в свойствах
Совет 14: Спрячьте компоненты
Совет 15: Используйте мастер создания формы ООП
Советы: Заключение
$10: Интерфейсы
Использование интерфейсов
Объявление интерфейса
Реализация интерфейса
Интерфейсы и подсчет ссылок
Ошибки при смешивании способов применения ссылок
Слабые и небезопасные ссылки на интерфейс
Расширенные технологии интерфейсов
Свойства у интерфейса
Делегирование интерфейса
Несколько интерфейсов и псевдонимы методов
Полиморфизм интерфейсов
Получение объектов из ссылок на интерфейс
Реализация паттерна адаптера с интерфейсами
$11: Работа с классами
Методы и данные классов
Данные классов
Виртуальные методы класса и скрытый параметр self
Статические методы классов
Свойства класса
Класс со счетчиком инстанций
Конструкторы (и деструкторы) классов
Конструкторы классов в RTL
Реализация паттерна Singleton
Ссылки на классы
Ссылки на класс в RTL
Создание компонентов с использованием ссылок на классы
Помощники классов и записей
Помощники класса
Помощники классов и наследование
Добавление перечисления элементов управления с помощью помощника класса
Помощники записей для внутренних типов
Помощники для псевдонимов типов
$12: Объекты и память
Глобальные данные, стек и куча
Глобальная память
Стек
Куча
Объектная модель
Объекты как параметры
Советы по управлению памятью
Уничтожение объектов, которые вы создаете
Уничтожение объектов только один раз
Управление памятью и интерфейсы
Подробнее о Слабых (Weak) Ссылках
Атрибут Unsafe
Отслеживание и проверка памяти
Статус памяти
FastMM4
Отслеживание утечек и другие глобальные настройки
Перерасход буфера в Full FastMM4
Управление памятью на платформах, отличных от Windows
Отслеживание выделения памяти класса
Написание надежных приложений
Конструкторы, деструкторы и исключения
Вложенные блоки Finally
Динамическая проверка типа
Является ли этот указатель ссылкой на объект?
Часть III: Расширенные функции
Главы части III
$13: Дженерики
Generic пары ключей-значений
Встроенные переменные и выведение типа у дженериков
Правила типов для дженериков
Дженерики в Object Pascal
Правила совместимости Generic типов
Generic методы для стандартных классов
Инициализация типа Generic
Функции типа Generic
Конструкторы классов для Generic классов
Ограничения Generic
Ограничения класса
Конкретные ограничения классов
Ограничения, основанные на интерфейсе
Ссылки на интерфейс vs. Generic ограничения по интерфейсу
Ограничение конструктор по умолчанию
Сводка ограничений и их комбинация
Готовые Generic контейнеры
Использование TList
Сортировка TList
Сортировка анонимным методом
Контейнеры для объектов
Использование Generic словаря
Словари или списки строк?
Generic интерфейсы
Предопределенные Generic интерфейсы
Умные указатели в Object Pascal
Использование записей для умных указателей
Реализация умных указателей с управляемой generic записью
Реализация умного указателя с Generic записью и интерфейсом
Добавление неявного преобразования
Сравнение решений на основе интеллектуальных указателей
Ковариантные возвратные типы с дженериками
Животных, собак и кошек
Метод с Generic результатом
Возвращение производного объекта другого класса
$14: Анонимные методы
Синтаксис и семантика анонимных методов
Переменная Анонимного метода
Параметр анонимного метода
Использование локальных переменных
Продление срока службы локальных переменных
Анонимные методы: за кулисами
(Потенциально) пропущенная скобка
Реализация анонимных методов
Готовые к использованию ссылочные типы
Анонимные методы в реальном мире
Анонимные обработчики событий
Анонимные методы работы со временем
Синхронизация потоков
AJAX в Object Pascal
$15: Отражение и атрибуты
Расширенная RTTI
Первый пример
Генерируемая компилятором информация
Слабые и сильные связи типов
Модуль RTTI
Классы RTTI в модуле Rtti
Жизненный цикл объектов RTTI и запись TRttiContext
Отображение информации о классе
RTTI для пакетов
Структура TValue
Чтение свойств с TValue
Вызов методов
Использование атрибутов
Что такое "Атрибут"?
Классы атрибутов и декларации атрибутов
Атрибуты просмотра
Перехват виртуальных методов
Сценарии использования RTTI
Атрибуты для ID и описания
Потоковая передача XML
Другие библиотеки на базе RTTI
$16: TObject и модуль System
Класс TObject
Конструкторы и деструкторы
Знания об объекте
Дополнительные методы класса TObject
Виртуальные методы ТОbject
Краткое описание класса
Юникод и имена классов
Unit System
Избранные системные типы
Интерфейсы в System Unit
Избранные системные подпрограммы
Предопределенные атрибуты RTTI
$17: Другие базовые классы RTL
Unit Classes
Классы в модуле Classes
Класс TPersistent
Класс TComponent
Современный доступ к файлам
Модуль управления вводом/выводом
Введение в потоки
Использование Reader и Writer
Построение строк и списков строк
Класс TStringBuilder
Использование списков строк
Библиотека RTL на самом деле большая
В заключение
end
Резюме раздела приложений
A: Эволюция Object Pascal
Паскаль Вирта
Турбо-Паскаль
Ранние дни Object Pascal в Delphi
Object Pascal из CodeGear в Embarcadero
Переход к мобильности
Эпоха Delphi 10.x
В: Глоссарий
A
B
C
D
E
F
G
H
I
M
O
P
R
S
U
V
W
C: Index