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