Основы объектно-ориентированного проектирования


Основы объектно-ориентированного проектирования

О методологии
Методология: что и почему

Как создавать хорошие правила: советы советчикам
Необходимость методологических руководств
Теория
Практика
Повторное использование
Типология правил
Абсолютная положительность
Абсолютная отрицательность


Рекомендации
Исключения

Абстракция и точность
Если это необычно, зафиксируй это
Об использовании метафор
Как важно быть скромным
Библиографические замечания
У1.1 Самоприменение правил
У1.2 Библиотека правил

У1.3 Применение правил
У1.4 Метафоры в сети

Основы объектно-ориентированного проектирования


Многопанельные системы
Первая напрашивающаяся попытка
Функциональное решение: проектирование сверху вниз
Функция переходов
Архитектура программы
Критика решения
Статичность
Объектно-ориентированная архитектура

Закон инверсии
Состояние как класс
Наследование и отложенные классы
Описание полной системы
Класс приложения
Обсуждение

Основы объектно-ориентированного проектирования

Проделки дьявола
Откаты для пользы и для забавы

Многоуровневый откат и повтор: undo и redo
Практические проблемы
Требования к решению
Поиск абстракций
Класс Command
Основной интерактивный шаг
Сохранение последней команды
Действия системы

Как создается объект command
Многоуровневый откат и повтор: UNDO-REDO
Список истории
Реализация Undo
Реализация Redo
Выполнение обычных команд
Аспекты реализации
Аргументы команды
Предвычисленные командные объекты

Представление списка истории
Интерфейс пользователя для откатов и повторов
Роль реализации
Небольшие классы
У3.1 Небольшая интерактивная система (программистский проект)
У3.2 Многоуровневый Redo
У3.3 Undo-redo в Pascal

У3.4 Undo, Skip и Redo
У3.5 Сохранение командных объектов
У3.6 Составные команды
У3.7 Необратимые команды
У3.8 Библиотека команд (проектирование и реализация)
У3.9 Механизм истории
У3.10 Тестирование окружения
У3.11 Интегрируемые функции

Основы объектно-ориентированного проектирования

Изучение документа "технические требования"
Существительные и глаголы
Как избежать бесполезных классов

Нужен ли новый класс?
Пропуск важных классов
Обнаружение и селекция
Сигналы опасности
Большое Заблуждение
Мой класс выполняет...
Императивные имена
Однопрограммные классы

Преждевременная классификация
Классы без команд
Смешение абстракций
Идеальный класс
Общие эвристики для поиска классов
Категории классов
Внешние объекты: нахождение классов анализа
Нахождение классов реализации
Отложенные классы реализации

Нахождение классов проектирования
Другие источники классов
Предыдущие разработки
Адаптация через наследование
Оценивание кандидатов декомпозиции
Находки других подходов
Файлы
Использование ситуаций
КОС (CRC) карты

Подход снизу вверх
Сказка о поиске классов
Метод получения классов
Ключевые концепции
Библиографические замечания
У4.1 Floors как integers
У4.2 Инспектирование объектов

Основы объектно-ориентированного проектирования

Побочные эффекты в функциях
Команды и запросы
Формы побочного эффекта

Ссылочная прозрачность
Объекты как машины
Функции, создающие объекты
Чистый стиль для интерфейса класса
Генераторы псевдослучайных чисел: упражнение
Абстрактное состояние, конкретное состояние

Абстрактное состояние, конкретное состояние - 2
Стратегия
Возражения
Законные побочные эффекты: пример
Много ли аргументов должно быть у компонента?
Важность числа аргументов

Операнды и необязательные параметры (опции)
Принцип
Преимущества, обеспечиваемые Принципом Операндов
Исключения из Принципа Операндов?
Контрольный перечень
Размер класса: Подход списка требований
Определение размера класса
Поддержка согласованности

Запреты и послабления
Активные структуры данных
Представление связного списка
Пассивные классы
Инкапсуляция и утверждения
Критика интерфейса класса
Простые, напрашивающиеся решения
Введение состояния

Поддержка согласованности: инвариант реализации
С точки зрения клиента
Взгляд изнутри
АТД и абстрактные машины
Отделение состояния

Слияние списка и стражей
Выборочный экспорт
Как справляться с особыми ситуациями
Априорная схема
Препятствия на пути априорной схемы
Апостериорная схема
Роль механизма исключений

Эволюция классов. Устаревшие классы
Документирование класса и системы
Показ интерфейса
Документирование на уровне системы
У5.1 Функция с побочным эффектом
У5.2 Операнды и опции
У5.3 Возможные аргументы

У5.4 Число элементов как функция
У5.5 Поиск в связных списках
У5.6 Теоремы в инварианте
У5.7 Двунаправленные списки
У5.8 Альтернативный проект связного списка
У5.9 Вставка в связный список
У5.10 Циклические списки
У5.11 Функции ввода, свободные от побочных эффектов
У5.12 Документация
У5.13 Самодокументированное ПО

Основы объектно-ориентированного проектирования

Как не следует использовать наследование

Покупать или наследовать
Иметь и быть (To have and to be)
Правило изменений
Правило полиморфизма
Резюме
Приложение: техника описателей
Таксомания

Использование наследования: таксономия таксономии
Область действия правил
Ошибочное использование
Общая таксономия
Наследование подтипов
Наследование c ограничением
Наследование с расширением

Подходящая математическая модель
Наследование вариаций
Отмена эффективизации
Наследование с конкретизацией
Структурное наследование
Наследование реализации
Льготное наследование
Использование наследования с отложенными и эффективными классами

Один механизм, или несколько?
Наследование подтипов и скрытие потомков
Определение подтипа
Различные взгляды
Взгляд на подтипы
Необходимость скрытия потомком
Как избежать скрытия потомком
Приложения скрытия потомком

Таксономии и их ограничения
Использование скрытия потомком
Брак по расчету
Это выглядит привлекательно, но правильно ли это?
Как это делается без наследования
Использование кодов символов
Итераторы

Формы льготного наследования
Понимание льготного наследования
Множественные критерии и наследование видов
Классификация при множественных критериях
Наследование вида
Подходит ли нам наследование видов?
Критерии для наследования видов
Как разрабатываются структуры наследования

Специализация и абстракция
Произвольность классификации
Индукция и дедукция
Разнообразие абстракции
Независимость клиента
Совершенствование уровня абстракции
Итоговый обзор: используйте наследование правильно
Приложение: история таксономии

У6.1 Стек, основанный на массиве
У6.2 Метатаксономия
У6.3 Стеки Ханоя
У6.4 Являются ли многоугольники списками?
У6.5 Наследование функциональной вариации
У6.6 Примеры классификации
У6.7 Кому принадлежат итераторы?
У6.8 Наследование типа и модуля
У6.9 Наследование и полиморфизм

Основы объектно-ориентированного проектирования

Общая схема разработки
Структура систем

Эволюция системы
Структура класса
Документация класса
Индексируйте классы.
Использование утверждений
Как обращаться со специальными ситуациями
Повторные объявления
Отложенные классы
Полиморфизм
Формы наследования

Основы объектно-ориентированного проектирования

Дела косметические!

Применение правил на практике
Кратко и явно
Роль соглашений
Самоприменение
Дисциплина и творчество
Выбор правильных имен
Общие правила
Локальные сущности и аргументы подпрограмм

Регистр
Грамматические категории
Стандартные имена
Преимущества согласованного именования
Использование констант
Манифестные и символические константы
Где размещать объявления констант
Заголовочные комментарии и предложения индексации
Комментарии в заголовках: упражнение на сокращение

Заголовочные комментарии предложений feature
Предложения индексирования
Не заголовочные комментарии
Форматирование и презентация текста
Форматирование
Высота и ширина
Детали отступов
Пробелы
Приоритеты и скобки

Война вокруг точек с запятыми
Утверждения
Шрифты
Основные правила
Другие соглашения
У8.1 Стиль заголовочных комментариев
У8.2 Неоднозначность точки с запятой

Основы объектно-ориентированного проектирования

Цели анализа

Задачи
Требования
Облака и провалы
Изменчивая природа анализа
Вклад объектной технологии
Программирование телевизионного вещания
Графики вещания
Сегменты
Программы и реклама

Деловой регламент
Оценка
Представление анализа: разные способы
Методы анализа
Нотация BON (Business Object Notation)

Основы объектно-ориентированного проектирования

Кластеры
Параллельная разработка
Этапы и задачи
Кластерная модель жизненного цикла ПО
Обобщение

Бесшовность и обратимость
Бесшовная разработка
Обратимость: мудрость иногда расцветает слишком поздно
У нас все - лицо

Основы объектно-ориентированного проектирования

Профессиональная подготовка (тренинг) в индустрии
Вводные курсы
Филогенез и онтогенез

Вымощенная дорога к другим подходам
Выбор языка
Другие курсы
Терминология
Среднее и высшее образование
Курсы для аспирантов
Полный учебный план (curriculum)
Вперед к новой педагогике для программистов

Стратегия "от потребителя к производителю"
Абстракция
Ученичество
Обращенный учебный план
Политика многих семестров
Объектно-ориентированный план

Основы объектно-ориентированного проектирования

Предварительный просмотр

Возникновение параллельности
Мультипроцессорная обработка
Многозадачность
Посредники запросов объектов (брокеры объектных запросов - Object Request Broker)
От процессов к объектам
Сходство

Активные объекты
Конфликт активных объектов и наследования
Программируемые процессы
Введение параллельного выполнения
Процессоры
Природа процессоров
Операции с объектом

Дуальная семантика вызовов
Сепаратные сущности
Получение сепаратных объектов
Объекты здесь и там
Параллельная архитектура
Распределение процессоров: файл управления параллелизмом (Concurrency Control File)
Библиотечные механизмы

Правила обоснования корректности: разоблачение предателей
Импорт структур объекта
Вопросы синхронизации
Синхронизация versus взаимодействия
Механизмы, основанные на синхронизации
Механизмы, основанные на взаимодействии

Синхронизация параллельных ОО-вычислений
Доступ к сепаратным объектам
Параллельный доступ к объекту
Резервирование объекта

Ожидание по необходимости
Мультипускатель
Устранение блокировок (тупиков)
Условия ожидания
Буфер - это сепаратная очередь
Предусловия при параллельном выполнении
Парадокс предусловий

Параллельная семантика предусловий
Последовательные и параллельные утверждения
Ограничение проверки правильности
Состояния и переходы
Запросы специальных услуг
Экспресс сообщения
Дуэли и их семантика
Обработка исключений: алгоритм "Секретарь-регистратор"

О том, что будет дальше в этой лекции
Примеры
Обедающие философы
Полное использование параллелизма оборудования
Полное использование параллелизма оборудования - 2
Замки

Сопрограммы (Coroutines)
Система управления лифтом
Сторожевой механизм
Организация доступа к буферам
О правилах доказательств

Резюме параллельного механизма
Синтаксис
Ограничения
Семантика
Минимальность механизма
Полное использование наследования и других ОО-методов

Совместимость с Проектированием по Контракту
Поддержка различия между командами и запросами
Применимость ко многим видам параллельности
Адаптируемость с помощью библиотек
Поддержка программирования сопрограмм
Поддержка использования непараллельного ПО
Поддержка устранения блокировок
Допускается ли одновременный доступ?
Ключевые концепции

У12.1 Принтеры
У12.2 Почему импорт должен быть глубоким
У12.3 "Аномалия наследования"
У12.4 Устранение тупиков (проблема для исследования)
У12.5 Приоритеты
У12.6 Файлы и парадокс предусловия
У12.7 Замки (Locking)
У12.8 Бинарные семафоры

У12.9 Целочисленные семафоры
У12.10 Контроллер сопрограмм
У12.11 Примеры сопрограмм
У12.12 Лифты
У12.13 Сторожа и принцип визитной карточки
У12.14 Однократные подпрограммы и параллельность

Основы объектно-ориентированного проектирования

Сохраняемость средствами языка
Сохранение и извлечение структур объектов
Форматы сохранения
Вне рамок замыкания сохраняемости

Эволюция схемы
Наивные подходы
Преобразование объектов на лету
Выявление
Извещение
Исправление
От сохраняемости к базам данных
Объектно-реляционное взаимодействие

Определения
Операции
Запросы
Использование реляционных баз данных с ОО-ПО
Основания ОО-баз данных
На чем застопорились реляционные БД
Идентичность объектов
Пороговая модель
Дополнительные возможности

Версии объекта
Версии классов и эволюция схемы
Длинные транзакции
Блокировка
ОО-СУБД: примеры
Matisse
Versant
Обсуждение: за пределами ОО-баз данных

Является ли "ОО-база данных" оксюмороном?
Неструктурированная информация
Библиографические замечания
У13.1 Динамическая эволюция схем
У13.2 Объектно-ориентированные запросы

Основы объектно-ориентированного проектирования

Необходимые средства
Конечные пользователи, разработчики приложений и разработчики инструментальных средств
Графические системы, оконные системы, инструментальные средства
Библиотека и конструктор приложений

Применение ОО-подхода
Переносимость и адаптация к платформе
Графические абстракции
Фигуры (изображения)
Координаты
Операции над окнами
Графические классы и операции
Механизмы взаимодействия

События
Контексты и объекты интерфейса пользователя
Обработка событий
Команды
Базисная схема
Состояния
Приложения
Контекст-Событие-Команда-Состояние: резюме
Математическая модель

Основы объектно-ориентированного проектирования


Немного контекста
Пакеты
Реализация стеков
Простой интерфейс
Использование пакета
Реализация
Универсальность
Скрытие представления: частная история

Упрощение управляющей структуры
Возбуждение и обработка исключений
ОО-механизмы языка Ada 95: пример

Ada 95 и объектная технология: оценка
Обсуждение: наследование модулей и типов
Вперед к ОО-языку Ada
У15.1 Как выиграть, не используя скрытия
У15.2 Родовые параметры подпрограммы
У15.3 Классы как задачи (для программистов Ada)
У15.4 Добавление классов к Ada
У15.5 Пакеты-классы

Основы объектно-ориентированного проектирования

Уровни языковой поддержки

ОО-программирование на языке Pascal?
Собственно Pascal
Модульные расширения языка Pascal
ОО-расширения языка Pascal
Fortran
Техника COMMON
Техника подпрограммы с множественным входом
ОО-программирование и язык C

Основные положения
Эмуляция объектов
Эмулирующие классы
OO C: оценка
У16.1 Графические объекты (для программистов на Fortran)
У16.2 Универсальность (для программистов на C)
У16.3 ОО-программирование на C (семестровый проект)

Основы объектно-ориентированного проектирования

Simula

Основные понятия
Доступность
Основные черты языка
Пример
Концепции сопрограмм
Пример сопрограммы

Последовательное выполнение и наследование
Моделирование
Пример моделирования
Simula: оценка
Smalltalk
Языковой стиль
Сообщения

Окружение и производительность
Smalltalk: оценка
Расширения Lisp
Расширения C
Objective-C
C++
Сложность
C++: оценка

Java
Другие ОО-языки
Расширения C: Objective-C, C++
Другие языки
У17.1 Остановимся на коротких файлах

У17.2 Неявный вызов
У17.3 Эмулирующие сопрограммы
У17.4 Моделирование
У17.5 Ссылка на версию предка

Основы объектно-ориентированного проектирования

Компоненты среды
Язык
Развитие
Открытость
Технология компиляции
Требования к компиляции
Технология тающего льда

Анализ зависимостей
Предкомпиляция
Удаленное выполнение
Оптимизация
Инструментальные средства
Bench и процесс разработки
Инструментальные средства высокого уровня
Библиотеки
Реализация интерфейса
Платформы

Перенастройка и просмотр
Извлечения из библиотек Base

Основы объектно-ориентированного проектирования

Универсальность и (versus) наследование

Неограниченная универсальность
Ограниченная универсальность
Наследование
Эмуляция наследования с помощью универсальности
Эмуляция универсальности с помощью наследования

Эмуляция ограниченной универсальности: обзор
Ограниченная универсальность: подпрограммы
Ограниченная универсальность: пакеты
Сочетание универсальности и наследования
Библиографические замечания
УB.1 Искусственные якоря
УB.2 Бинарные деревья и бинарные деревья поиска
УB.3 Более просто используемые матрицы
УВ.4 Полная реализация очередей