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

advertisement
Объектно-ориентированное
конструирование программ
по книге Б. Мейера
Объектно-ориентированная
разработка
Почему ОО?
Философия проектирования
ОО-анализ
Процесс разработки
Источники классов
Причины отбраковки кандидатов в
классы
Почему ОО?








Корректность
Устойчивость
Расширяемость
Повторное использование
Совместимость
Переносимость
Функциональность
Документирование
Философия проектирования:
общая схема




Разработка снизу вверх
Бесшовность
Обратимость
Обобщение
Философия проектирования:
структура систем





Системы только из классов
Стиль: снизу вверх
Классы – наиболее общие
Классы – наиболее автономные
Многослойная архитектура
ОО анализ: цели
1. Понять проблему, которую должна решать
система
2. Задать значимые вопросы о проблеме и о
системе
3. Обеспечить основу для ответов на вопросы
о специфических свойствах проблемы и
системы
4. Определить, что система должна делать
5. Определить, что система не должна делать
6. Определить критерии приемки
7. Обеспечить основу для разработки системы
Процесс разработки
 Кластеры
 Параллельная разработка
 Этапы жизненного цикла кластера:





Спецификация
Проектирование
Реализация
Верификация и аттестация
Обобщение
Источники классов
 Существующие библиотеки
 Документ требований
 Обсуждения с заказчиками и будущими
пользователями
 Документация других систем
(конкурентов)
 Описания не ОО-систем
 Литература по алгоритмам и структурам
данных, ОО-проектированию
Причины отбраковки кандидатов
в классы
Имя – глагол
Одна экспортируемая подпрограмма
Класс «выполняющий нечто»
Нет подпрограмм
Нет (мало) компонентов (но
наследует от родителей)
 Несколько абстракций в классе





Проектирование классов
Структура классов
Утверждения
Исключения
Компоненты класса
Наследование
Отложенные классы
Множественное наследование
Полиморфизм
Универсальность
Структура класса
 Класс – АТД
 Но есть и исключения, например,
множество констант
 Ключевое решение – задание
статуса экспорта
 Документирование кода в самом
коде
Утверждения:
проектирование по контракту
 Предусловия
 Обеспечивается клиентом
 Может быть ослаблено при наследовании
 Никогда не проверяется поставщиком
 Постусловия
 Обеспечивается поставщиком
 Может быть усилено при наследовании
 Инварианты
 Обеспечивается поставщиком
 Может быть нарушено, но восстанавливается
Исключения
 Априорная проверка: до
выполнения функции проверьте
возможность ее вызова
 Апостериорная проверка: после
выполнения проверьте статус
 Способы обработки ошибок:
 Отказ (передача управления в
вызывающую процедуру)
 Повтор (обработка ошибки)
Компоненты класса
 Функции не должны иметь
побочные эффекты
 Контрпример: возвращение статуса
 Контрпример: параллельность
 Аргументы должны быть
операндами
 Размер класса
Наследование
 Переопределение
 Функция может быть переопределена
как атрибут, но не наоборот
 Эффективизация отложенных
компонент
 Повторные объявления сохраняют
семантику (утверждения)
Отложенные классы
 Описывают абстракции высокого
уровня
 Являются инструментом анализа,
описывают абстракции без ссылок
на реализацию
 Задают общее поведение
Множественное наследование
 Примеры
 Числа – арифметика и сравнения
 Деревья – списки и элементы
 Стек на основе массива
 Переименование компонентов
 Дублируемое наследование
Полиморфизм
 Наследование и универсальность –
комбинация подобия и вариации
 Динамическое связывание –
избегаем разбора случаев
 Ковариантность
 Проблемы ковариантности и их
решение
Универсальность
 Горизонтальное и вертикальное
обобщение типа
 Родовые классы
 Ограниченная универсальность
Требования к ОО-языку
 Бесшовность
 Основан на классах:
 Классы как модули
 Классы как типы
 Утверждения и исключения
 Скрытие компонентов
 Вызовы функций и доступ к
компонентам имеют одинаковый
синтаксис
Требования к ОО-языку
 Универсальность
 Включая ограниченную
универсальность
 Статическая типизация
 Наследование
 Множественное наследование
 Отложенные классы
 Возможность определения типа во
время выполнения
ОО-подход к обучению
 Чистый ОО-язык для обучения
 Использование библиотек классов для
курсов
 Использование библиотеки для написания
программ
 Модификация существующих классов
 Создание собственных классов
 Библиотека классов – долговременный
проект, который может объединить
усилия кафедры или факультета
Спасибо за внимание!
Download