Upgrade to Pro — share decks privately, control downloads, hide ads and more …

АФТИ ООП 2013-2014. Лекция I/13

АФТИ ООП 2013-2014. Лекция I/13

Oleg Dashevskii

December 16, 2013
Tweet

More Decks by Oleg Dashevskii

Other Decks in Education

Transcript

  1. Детали реализации
 Конкретная задача
 Память, быстродействие
 Ассемблер Абстракции
 Концепции
 Подходы


    Инструменты Воплощение
 Структурирование Обратная связь
 Ограничения
  2. ОБЪЕКТЫ • Моделируют мир (не все). • Взаимодействуют. • Имеют

    время жизни. • Участвуют в общей иерархии. • Имеют свойства и поведение. • Инкапсулируют что-то. • Организуются в классы.
  3. ПОЛИМОРФИЗМ • Мы можем не знать истинный класс объекта, отправляя

    ему «сообщение» (вызывая метод). • Но сам объект знает свой класс, и код обработки будет соответствовать этому классу.
  4. ПРИНЦИП ОДНОЙ ЗОНЫ ОТВЕТСТВЕННОСТИ • Один класс — одна зона.

    • Если больше — выделяем в отдельные классы.
  5. ПРИНЦИП ОТКРЫТИЯ- ЗАКРЫТИЯ • Открытость для расширения, но закрытость для

    модификации. • Расширение производится без изменения исходного кода уже существующих модулей. • Если это невозможно, то вводится абстракция, которая позволит реализовать необходимое.
  6. ОБЩИЕ ТРЕБОВАНИЯ К КЛАССАМ • Декомпозиция. • Модульная композиция. •

    Модульная понятность. • Модульная непрерывность. • Модульная защищенность.
  7. ПРИНЦИП ПОДСТАНОВКИ ЛИСКОУ • «Объекту О1 типа S соответствует объект

    О2 типа Т, причем S является подтипом Т. Для всех программ Р, определенных на основе Т, поведение Р не меняется при замене О1 на О2 ». • Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.
  8. ПРИНЦИП ИНВЕРСИИ ЗАВИСИМОСТЕЙ • Модули и высокого, и низкого уровня

    должны зависеть от абстракций. • Подробности должны зависеть от абстракций, а не наоборот.
  9. ПРИНЦИП ОТДЕЛЕНИЯ ИНТЕРФЕЙСА • Клиенты не должны попадать в зависимость

    от методов, которыми они не пользуются! • Интерфейсы «принадлежат» клиентам, а не библиотекам.
  10. ПРАКТИЧЕСКИЕ ПРИНЦИПЫ • Нечто простое, но цельное. • Объекты —

    имена существительные в описании проекта. • Ядро и периферия. • Самодокументируемость. • Взрывной рост и эволюция. • Цикличность.
  11. С++ • Обратная совместимость с C. • Классы и объекты.

    • Ссылки и указатели. • Перегрузка функций. • Исключения и защита от них.