- •Программирование и алгоритмические языки. Курс за третий семестр. Введение в объектно-ориентированное программирование (ооп)
- •Именование типов в Object Pascal Тип данных «класс»
- •Инкапсуляция
- •Представление данных Данные как функции доступа Свойства
- •Иерархия типов Наследование реализации Проблемы наследования
- •Полиморфизм
- •Проблема множественности иерархий Агрегирование
- •Абстрактные методы и именованные интерфейсы
- •Описание сложного поведения
- •Эволюция пользовательского интерфейса
- •Автоматные модели описания поведения Сложное поведение как изменчивое поведение
- •Программы как символьные преобразования Алфавит как тип данных
- •Программы как синхронные преобразования
- •Тривиальное поведение
- •Нетривиальное поведение
- •Интеллект как рефлексивное, самоопределяемое поведение Машины Тьюринга
- •События как предикаты
- •Событийно управляемое исполнение программ в ооп Программы как тип данных
- •События конечного пользователя и системные, внешние и внутренние
- •Обработка исключений Делегирование
- •Живые данные
- •Задача (проблема) многих тел
- •События как исключения Исключения как события Обработка исключений в Delphi
События конечного пользователя и системные, внешние и внутренние
Ранняя идеология ООП базировалась на задачах интерфейса конечного пользователя, - в первую очередь, визуальный интерфейс. Соответственно, события делятся на например, в Delphi) пользовательские (пользователь программы) (например, в Delphi: OnClick, OnKeyPress) и все остальные, системные (например, в Delphi: OnCreate, OnDestroy, OnShow).
Системные события никак не классифицируются, в частности, отсутствует разделение «пользователь-программист» или «клиент-сервер» в смысле использования результатов работы одного программиста другим. Следствие: устойчивый стереотип отождествления объектного и визуального программирования. В Delphi невозможна генерация событий программиста (за одним исключением, с точки зрения Delphi, выпадающим из, собственно, ООП).
Обработка исключений Делегирование
Ключевым в обработке событий является определение функции P, сопоставляющей сообщениям имён процедур-обработчиков, или внешнего интерфейса внутреннему.
Как это обозначается и реализуется?
В Delphi обработчики реализуются как ссылки на методы, оформляемые как свойства, одноимённые с сообщениями, что неудобно, поскольку разные сообщения могут именовать одно событие и требовать одной реакции. Возможный выход – присваивание соответствующим полям ссылки на нужную процедуру, что вызывает проблему согласования типов. Процедура-обработчик имеет фиксированный набор параметров определённых типов. Такое согласование типов этих параметров не может быть проверено на уровне синтаксического анализа.
В языках ООП нового поколения проблема обходится двумя путями. Подстановка явно задаётся синтаксисом.
Visual Basic 6
subroutine AnyName ( );
handles (имена сообщений)
Второй способ: строить эту функцию динамически.
Visual Basic 7. Добавлен оператор AddHanle – добавить сообщение в список обрабатываемых. RemoveHandle - удалить сообщение из списка обрабатываемых (случай взаимодействия двух объектов).
Живые данные
Что такое автомат? Объект, среди методов которого выделены процедуры обработки событий, или интерфейс пользователя.
Что такое поставщик и/или преемник данных? (Входной и выходной потоки в конечных автоматах, лента в машине Тьюринга). Это переменные строго определённых типов, или объекты. Автоматы реагируют на сообщения этих типов. Воспринимают ли они какие-то события, генерируемые автоматом? Выходные сообщения автомата являются входными для другого автомата. Автоматы (объекты) могут быть определены только попарно.
Задача (проблема) многих тел
В реальности всегда имеется несколько взаимодействующих тел, которые всегда можно представить графом. Именно такая модель неявно предполагается в ООП. С теоретической точки зрения, это автомат, состояниями которого являются автоматы.
Попытки структурировать такое сложное взаимодействие, свести его к рассмотрению в каждый момент времени лишь взаимодействия двух объектов называются идеологией «клиент-сервер» (двухзвенная архитектура), либо тернарному отношению (трёхзвенная архитектура). Эта задача, очевидно, аналогична соответствующей в СУБД.