Книга: Основы объектно-ориентированного программирования
Оглавление книги
- Лекция 1. Качество ПО
- Внешние и внутренние факторы
- Обзор внешних факторов
- Корректность (Correctness)
- Устойчивость (Robustness)
- Расширяемость (Extendibility)
- Повторное использование (Reusability)
- Совместимость (Compatibility)
- Эффективность (Efficiency)
- Переносимость (Portability)
- Простота использования (Easy of Use)
- Функциональность (Functionality)
- Своевременность (Timeliness)
- Другие качества
- О документации
- Компромиссы
- Ключевые вопросы
- О программном сопровождении
- Ключевые концепции
- Лекция 2. Критерии объектной ориентации
- О критериях
- Метод и язык
- Бесшовность (seamlessness)
- Классы
- Утверждения (Assertions)
- Классы как модули
- Классы как типы
- Вычисления, основанные на компонентах
- Скрытие информации (information hiding)
- Обработка исключений (Exception handling)
- Статическая типизация (static typing)
- Универсальность (genericity)
- Единичное наследование (single inheritance)
- Множественное наследование (Multiple inheritance)
- Дублируемое наследование (Repeated inheritance)
- Ограниченная универсальность (Constrained genericity)
- Переопределение (redefinition)
- Полиморфизм
- Динамическое связывание
- Выяснение типа объекта в период выполнения
- Отложенные (deferred) свойства и классы
- Управление памятью (memory management) и сборка мусора (garbage collection)
- Реализация и среда
- Автоматическое обновление (automatic update)
- Быстрое обновление (fast update)
- Живучесть (persistence)
- Документация
- Быстрый просмотр (browsing)
- Библиотеки
- Базовые библиотеки
- Графика и пользовательские интерфейсы
- Механизмы эволюции библиотек
- Механизмы индексации в библиотеках
- Продолжение просмотра
- Библиографические ссылки и объектные ресурсы
- Лекция 3. Модульность
- Пять критериев
- Декомпозиция
- Модульная Композиция
- Модульная Понятность
- Модульная Непрерывность
- Модульная Защищенность
- Пять правил
- Прямое отображение
- Минимум интерфейсов
- Слабая связность интерфейсов
- Явные интерфейсы
- Скрытие информации
- Пять принципов
- Лингвистические Модульные Единицы
- Самодокументирование
- Унифицированный Доступ
- Открыт-Закрыт
- Единственный Выбор
- Ключевые концепции
- Библиографические замечания
- Упражнения
- Лекция 4. Подходы к повторному использованию
- Цели повторного использования
- Что следует повторно использовать?
- Повторное использование персонала
- Повторное использование проектов и спецификаций
- Образцы проектов (design patterns)
- Повторное использование исходного текста
- Повторное использование абстрактных модулей
- Повторяемость при разработке ПО
- Нетехнические препятствия
- Синдром NIH
- Фирмы по разработке ПО и их стратегии
- Организация доступа к компонентам
- Несколько слов об индексировании компонентов
- Форматы для распространения повторно используемых компонентов
- Оценка
- Техническая проблема
- Пять требований к модульным структурам
- Изменчивость Типов (Type Variation)
- Группирование Подпрограмм (Routine Grouping)
- Изменчивость Реализаций (Implementation Variation)
- Независимость Представлений
- Факторизация Общего Поведения
- Традиционные модульные структуры
- Перегрузка и универсальность
- Синтаксическая перегрузка
- Семантическая перегрузка (предварительное представление)
- Универсальность (genericity)
- Основные методы модульности: оценка
- Ключевые концепции
- Библиографические замечания
- Лекция 5. К объектной технологии
- Ингредиенты вычисления
- Ингредиенты вычисления
- Функциональная декомпозиция
- Непрерывность
- Проектирование сверху вниз
- Не только одна главная функция
- Обнаружение вершины
- Функции и эволюция
- Интерфейсы и проектирование ПО
- Преждевременное упорядочение
- Упорядочивание и ОО-разработка
- Возможность повторного использования
- Производство и описание
- Проектирование сверху вниз: общая оценка
- Декомпозиция, основанная на объектах
- Объектно-ориентированное конструирование ПО
- Вопросы
- Ключевые концепции
- Библиографические замечания
- Лекция 6. Абстрактные типы данных (АТД)
- Критерии
- Различные реализации
- К абстрактному взгляду на объекты
- Использование операций
- Политика невмешательства в обществе модулей
- Согласованность имен
- Можно ли обойтись без абстракций?
- Формализация спецификаций
- Специфицирование типов
- Универсализация (Genericity)
- Перечисление функций
- Категории функций
- Раздел АКСИОМЫ
- Две или три вещи, которые мы знаем о стеках
- Частичные функции
- Предусловия
- Полная спецификация
- Ничего кроме правды
- От абстрактных типов данных к классам
- Классы
- Как создавать эффективный класс
- Роль отложенных классов
- Абстрактные типы данных и скрытие информации
- Переход к более императивной точке зрения
- Назад к тому, с чего начали?
- Конструирование объектно-ориентированного ПО
- За пределами программ
- Дополнительные темы
- Еще раз о неявности
- Соотношение спецификации и проектирования
- Соотношение классов и записей
- Альтернативы частичным функциям
- Полна ли моя спецификация?
- Доказательство достаточной полноты
- Ключевые концепции
- Библиографические замечания
- Упражнения
- Лекция 7. Статические структуры: классы
- Классы, а не объекты - предмет обсуждения
- Устранение традиционной путаницы
- Роль классов
- Унифицированная система типов
- Простой класс
- Основные соглашения
- Распознавание вида компонент
- Тело подпрограммы и комментарии к заголовку
- Предложение indexing
- Обозначение результата функции
- Правила стиля
- Наследование функциональных возможностей общего характера
- Объектно-ориентированный стиль вычислений
- Текущий экземпляр
- Клиенты и поставщики
- Вызов компонента
- Принцип единственности цели
- Слияние понятий модуль и тип
- Роль объекта Current
- Квалифицированные и неквалифицированные вызовы
- Компоненты-операции
- Селективный экспорт и скрытие информации
- Неограниченный доступ
- Ограничение доступа клиентам
- Стиль объявления скрытых компонент
- "Внутренний" экспорт
- Собираем все вместе
- Общая относительность
- Большой Взрыв
- Системы
- Программа main отсутствует
- Компоновка системы
- Классическое "Hello"
- Структура и порядок: программист в роли поджигателя
- Обсуждение
- Форма объявлений
- Атрибуты или функции?
- Экспорт атрибутов
- Доступ клиентов к атрибутам
- Оптимизация вызовов
- Архитектурная роль селективного экспорта
- Импорт листингов
- Присваивание функции результата
- Дополнение: точное определение сущности
- Ключевые концепции
- Библиографические замечания
- Упражнения
- Лекция 8. Динамические структуры: объекты
- Объекты
- Что такое объект?
- Базовая форма
- Простые поля
- Простое представление книги - класс BOOK
- Писатели
- Ссылки
- Идентичность объектов
- Объявление ссылок
- Ссылка на себя
- Взгляд на структуру объектов периода выполнения
- Объекты как средство моделирования
- Работа с объектами и ссылками
- Динамическое создание и повторное связывание
- Инструкция создания
- Общая картина
- Для чего необходимо явное создание объектов?
- Процедуры создания
- Перекрытие инициализации по умолчанию
- Статус экспорта процедур создания
- Правила, применимые к процедурам создания
- Процедуры создания и перегрузка
- Еще о ссылках
- Операции над ссылками
- Присоединение ссылки к объекту
- Сравнение ссылок
- Значение void
- Клонирование и сравнение объектов
- Копирование объектов
- Глубокое клонирование и сравнение
- Глубокое хранилище: первый взгляд на сохраняемость
- Составные объекты и развернутые типы
- Ссылок не достаточно
- Развернутые типы
- Роль развернутых типов
- Агрегирование
- Свойства развернутых типов
- Недопустимость ссылок на подобъекты
- Присоединение: две семантики - ссылок и значений
- Работа со ссылками: преимущества и опасности
- Динамические псевдонимы
- Семантика использования псевдонимов
- Выработка соглашений для динамических псевдонимов
- Псевдонимы в ПО и за его пределами
- Инкапсуляция действий со ссылками
- Обсуждение
- Графические соглашения
- Ссылки и простые значения
- Форма операций клонирования и эквивалентности
- Статус универсальных операций
- Ключевые концепции
- Библиографические замечания
- Упражнения
- Лекция 9. Управление памятью
- Что происходит с объектами
- Создание объектов
- Использование динамического режима
- Повторное использование памяти в трех режимах
- Отсоединение
- Недостижимые объекты
- Достижимые объекты в классическом подходе
- Достижимые объекты в ОО-модели
- Проблема управления памятью в ОО-модели
- Три ответа
- Несерьезный подход (тривиальный)
- Может ли быть оправдан несерьезный подход?
- Надо ли заботиться о памяти?
- Байт здесь, байт там, и реальные покойники
- Восстановление памяти: проблемы
- Удаление объектов, управляемое программистом
- Подход на уровне компонентов
- Автоматическое управление памятью
- Подсчет ссылок
- Сборка мусора
- Механизм сборки мусора
- Основа сборки мусора
- Сборка по принципу "все-или-ничего"
- Продвинутый (Advanced) подход к сборке мусора
- Алгоритмы параллельной сборки мусора
- Практические проблемы сборки мусора
- Среда с управлением памятью
- Основы
- Сложные проблемы
- Перемещение объектов
- Механизм сборки мусора
- Повышенное чувство голода и потеря аппетита (Bulimia and anorexia)
- Операции сборщика мусора
- Ключевые концепции
- Библиографические заметки
- Упражнения
- Лекция 10. Универсализация
- Горизонтальное и вертикальное обобщение типа
- Необходимость параметризованных классов
- Родовые классы
- Объявление родового класса
- Использование родового класса
- Терминология
- Проверка типов
- Правило типизации
- Операции над сущностями родового типа
- Типы и классы
- Массивы
- Стоимость универсализации
- Обсуждение: что все-таки не сделано
- Ключевые концепции
- Библиографические замечания
- Упражнения
- Лекция 11. Проектирование по контракту: построение надежного ПО
- Базисные механизмы надежности
- О корректности ПО
- Выражение спецификаций
- Введение утверждений в программные тексты
- Предусловия и постусловия
- Контракты и надежность ПО
- Права и обязательства
- Интуиция (Дзен) и искусство программной надежности: больше гарантий и меньше проверок
- Утверждения не являются механизмом проверки вводимых данных
- Утверждения это не управляющие структуры
- Ошибки, дефекты и другие насекомые
- Работа с утверждениями
- Класс стек
- Императив и аппликатив (применимость)
- Замечание о пустоте структур
- Проектирование предусловий: толерантное или требовательное?
- Предусловия и статус экспорта
- Толерантные модули
- Инварианты класса
- Определение и пример
- Форма и свойства инвариантов класса
- Инвариант в момент изменения
- Кто должен обеспечить сохранность инвариантов
- Роль инвариантов класса в программной инженерии
- Инварианты и контракты
- Когда класс корректен?
- Связывание с АТД
- Не просто коллекция функций
- Компоненты класса и АТД функции
- Выражение аксиом
- Функция абстракции
- Инварианты реализации
- Инструкция утверждения
- Инварианты и варианты цикла
- Трудности циклов
- Сделаем циклы корректными
- Ингредиенты доказательства корректности цикла
- Синтаксис цикла
- Использование утверждений
- Утверждения как средство для написания корректного ПО
- Использование утверждений для документирования: краткая форма класса
- Мониторинг утверждений в период выполнения
- Каков оптимальный уровень мониторинга?
- Обсуждение
- Нужен ли мониторинг в период выполнения?
- Выразительная сила утверждений
- Включение функций в утверждения
- Инварианты класса и семантика ссылок
- Что дальше
- Ключевые концепции
- Библиографические замечания
- Упражнения
- У11.1 Комплексные числа
- У11.2 Класс и его АТД
- У11.3 Полные утверждения для стеков
- У11.4 Экспортирование размера
- У11.5 Инвариант реализации
- У11.6 Утверждения и экспорт
- У11.7 Поиск жучков (bugs)
- У11.8 Нарушение инварианта
- У11.9 Генерация случайных чисел
- У11.10 Модуль "очередь"
- У11.11 Модуль "множество"
- Постскриптум: Катастрофа Ариан 5
- Лекция 12. Когда контракт нарушается: обработка исключений
- Базисные концепции обработки исключений
- Обработка исключений
- Как не следует делать это - C-Unix пример
- Как не следует делать это - Ada пример
- Принципы обработки исключений
- Цепочка вызовов
- Механизм исключений
- Примеры обработки исключений
- Поломки при вводе
- Восстановление при исключениях, сгенерированных операционной системой
- Повторение программы, толерантной к неисправностям
- N-версионное программирование
- Задача предложения rescue
- Продвинутая обработка исключений
- Обсуждение
- Ключевые концепции
- Библиографические замечания
- Упражнения
- Лекция 13. Поддерживающие механизмы
- Взаимодействие с не объектным ПО
- Внешние программы
- Улучшенные варианты
- Использование внешних программ
- ОО-изменение архитектуры (re-architecturing)
- Вопрос совместимости: гибридный программный продукт или гибридные языки?
- Передача аргументов
- Инструкции
- Вызов процедуры
- Присваивание (Assignment)
- Создание (Creation)
- Условная Инструкция (Conditional)
- Множественный выбор
- Циклы
- Проверка
- Отладка
- Повторение вычислений
- Выражения
- Манифестные константы
- Вызовы функций
- Текущий объект
- Выражения с операторами
- Нестрогие булевы операторы
- Строки
- Ввод и вывод
- Лексические соглашения
- Ключевые концепции
- Упражнения
- Лекция 14. Введение в наследование
- Многоугольники и прямоугольники
- Многоугольники
- Прямоугольники
- Основные соглашения и терминология
- Наследование инварианта
- Наследование и конструкторы
- Пример иерархии
- Полиморфизм
- Полиморфное присоединение
- Что на самом деле происходит при полиморфном присоединении?
- Полиморфные структуры данных
- Типизация при наследовании
- Согласованность типов
- Пределы полиморфизма
- Экземпляры
- Статический тип, динамический тип
- Обоснованы ли ограничения?
- Может ли быть польза от неведения?
- Когда хочется задать тип принудительно
- Полиморфное создание
- Динамическое связывание
- Использование правильного варианта
- Переопределение и утверждения
- О реализации динамического связывания
- Отложенные компоненты и классы
- Движения произвольных фигур
- Отложенный компонент
- Эффективизация компонента
- Отложенные классы
- Соглашения о графических обозначениях
- Что делать с отложенными классами?
- Задание семантики отложенных компонентов и классов
- Способы изменения объявлений
- Повторное объявление функции как атрибута
- Обратного пути нет
- Использование исходной версии при переопределении
- Смысл наследования
- Двойственная перспектива
- Взгляд на класс как на модуль
- Взгляд на класс как на тип
- Наследование и децентрализация
- Независимость от представления
- Парадокс расширения-специализации
- Роль отложенных классов
- Назад к абстрактным типам данных
- Отложенные классы как частичные интерпретации: классы поведения
- Не вызывайте нас, мы вызовем вас
- Программы с дырами
- Роль отложенных классов при анализе и глобальном проектировании
- Обсуждение
- Явное переопределение
- Доступ к предшественнику процедуры
- Динамическое связывание и эффективность
- Оценка накладных расходов
- Статическое связывание как оптимизация
- Кнопка под другим именем: когда статическое связывание ошибочно
- Подход языка С++ к связыванию
- Ключевые концепции
- Библиографические замечания
- Упражнения
- У14.1 Многоугольники и прямоугольники
- У14.2 Многоугольник с малым числом вершин
- У14.3 Геометрические объекты с двумя координатами
- У14.4 Наследование без классов
- У14.5 Классы без объектов
- У14.6 Отложенные классы и прототип
- У14.7 Библиотека поиска в таблицах (семестровый проект)
- У14.8 Виды отложенных компонентов
- У14.9 Комплексные числа
- Лекция 15. Множественное наследование
- Примеры множественного наследования
- Пример, неподходящий для введения
- Может ли самолет быть имуществом?
- Числовые и сравнимые значения
- Окна - это деревья и прямоугольники
- Деревья - это списки и их элементы
- Составные фигуры
- Брак по расчету
- Структурное наследование
- Наследование функциональных возможностей
- Лунка и кнопка
- Оценка
- Переименование компонентов
- Конфликт имен
- Результат переименования
- Смена имен и переопределение
- Подбор локальных имен
- Играем в имена
- Использование родительской процедуры создания
- Плоские структуры
- Дублируемое наследование
- Общие предки
- По обе стороны океана
- Совместное использование и репликация
- Ненавязчивое дублирующее наследование
- Правило переименования
- Конфликт переопределений
- Конфликт при совместном использовании: отмена определения и соединение компонентов
- Конфликты при репликации: выделение
- Выделение всех компонентов
- Сохранение исходной версии при переопределении
- Пример повышенной сложности
- Дублируемое наследование и универсальность
- Правила об именах
- Обсуждение
- Ключевые концепции
- Библиографические замечания
- Упражнения
- У15.1 Окна как деревья
- У15.2 Является ли окно строкой?
- У15.3 Завершение строительства
- У15.4 Итераторы фигур
- У15.5 Связанные стеки
- У15.6 Кольцевые списки и цепи
- У15.7 Деревья
- У15.8 Каскадные или "шагающие" (walking) меню
- У15.9 Плоский precursor (предшественник)
- У15.10 Дублируемое наследование и репликация
- Лекция 16. Техника наследования
- Наследование и утверждения
- Инварианты
- Предусловия и постусловия при наличии динамического связывания
- Как обмануть клиентов
- Как быть честным
- Пример
- Устранение посредника
- Субподряды
- Абстрактные предусловия
- Правило языка
- Повторное объявление функции как атрибута
- Замечание математического характера
- Глобальная структура наследования
- Замороженные компоненты
- Запрет повторного объявления
- Фиксированная семантика компонентов copy, clone и equality
- Не злоупотребляйте замораживанием
- Ограниченная универсальность
- Вектора, допускающие сложение
- Не ОО-подход
- Ограничение родового параметра
- Игра в рекурсию
- И снова неограниченная универсальность
- Попытка присваивания
- Когда правила типов становятся несносными
- Проблема
- Механизм решения
- Правильное использование попытки присваивания
- Типизация и повторное объявление
- Закрепленные объявления
- Несогласованность типов
- Примеры из практики
- Серьезное затруднение
- Понятие опорного элемента
- Опорный элемент Current
- Еще раз о базовых классах
- Правила о закрепленных типах
- Когда не используются закрепленные объявления
- Статический механизм
- Наследование и скрытие информации
- Кое-что о политике
- Применение
- Зачем нужна такая гибкость?
- Интерфейс и повторное использование реализаций
- Слово в защиту реализаций
- Два стиля
- Выборочный экспорт
- Ключевые концепции
- Библиографические замечания
- Упражнения
- Лекция 17. Типизация
- Проблема типизации
- Статическая типизация: как и почему
- Преимущества
- Аргументы в пользу динамической типизации
- Типизация: слагаемые успеха
- "Типизирована ли кроха"?
- Типизация и связывание
- Ковариантность и скрытие потомком
- Ковариантность
- Параллельные иерархии
- Своенравие полиморфизма
- Скрытие потомком
- Корректность систем и классов
- Практический аспект
- Корректность систем: первое приближение
- Контравариантность и безвариантность
- Использование родовых параметров
- Типовые переменные
- Полагаясь на закрепление типов
- Глобальный анализ
- Остерегайтесь полиморфных кэтколлов!
- Оценка
- Полное соответствие
- Ключевые концепции
- Библиографические замечания
- Лекция 18. Глобальные объекты и константы
- Константы базовых типов
- Использование констант
- Константы пользовательских классов
- Применение однократных подпрограмм
- Разделяемые объекты
- Однократные функции с результатами базовых типов
- Однократные процедуры
- Параметры
- Однократные функции, закрепление и универсальность
- Константы строковых типов
- Unique-значения
- Обсуждение
- Инициализация: подходы языков программирования
- Строковые константы
- Unique-значения и перечислимые типы
- Ключевые концепции
- Библиографические замечания
- Упражнения
- Сноски из книги
- Содержание книги
- Популярные страницы
Оглавление статьи/книги
- Лекция 1. Качество ПО
- Лекция 2. Критерии объектной ориентации
- Лекция 3. Модульность
- Лекция 4. Подходы к повторному использованию
- Лекция 5. К объектной технологии
- Лекция 6. Абстрактные типы данных (АТД)
- Лекция 7. Статические структуры: классы
- Лекция 8. Динамические структуры: объекты
- Лекция 9. Управление памятью
- Лекция 10. Универсализация
- Лекция 11. Проектирование по контракту: построение надежного ПО
- Лекция 12. Когда контракт нарушается: обработка исключений
- Лекция 13. Поддерживающие механизмы
- Лекция 14. Введение в наследование
- Лекция 15. Множественное наследование
- Лекция 16. Техника наследования
- Лекция 17. Типизация
- Лекция 18. Глобальные объекты и константы
- Сноски из книги
- Содержание книги
- Популярные страницы
Похожие страницы
- Лекция 8. Основы объектно-ориентированного программирования
- 2. Лекция: Основы объектно-ориентированного программирования
- Основы объектно-ориентированного программирования
- Лекция 8. Основы объектно-ориентированного программирования
- Класс стек
- Использование констант
- Корректность (Correctness)
- Пакеты: оценка
- Переименование компонентов
- Типизация и повторное объявление
- Роль типизации
- Смысл наследования