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

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

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

Вопросы к экзамену: https://gist.github.com/be9/595d85f63843415ea3bf

Oleg Dashevskii

May 19, 2014
Tweet

More Decks by Oleg Dashevskii

Other Decks in Education

Transcript

  1. ПРОТОТИП КЛАССА — СТРУКТУРА Она может хранить свойства, присущие классу,

    остаётся как-то добавить поведение. struct Point {! double x;! double y;! double z;! };
  2. ПОВЕДЕНИЕ КЛАССА Функции с заданным первым аргументом. void rat_add(struct Rational

    *result, struct Rational *a, struct Rational *b);! void rat_sub(struct Rational *result, struct Rational *a, struct Rational *b);! void rat_mul(struct Rational *result, struct Rational *a, struct Rational *b);! void rat_div(struct Rational *result, struct Rational *a, struct Rational *b);! /* возведение в целочисленную степень. power может быть отрицательным! */! void rat_power(struct Rational *result, struct Rational *r, int power);! void rat_create(struct Rational *res, int a, int b);! /* возвращает -1 (a < b), 0 (a == b), 1 (a > b) */! int rat_compare(struct Rational *a, struct Rational *b);! int rat_to_i(struct Rational *a); /* округление до ближ. целого */! double rat_to_d(struct Rational *a); /* преобразование в число с плав. точкой */! void rat_print(struct Rational *a, FILE *fp); /*выводит в формате p/q */!
  3. НАСЛЕДОВАНИЕ Поведение класса B такое же, как у класса A,

    но с некоторыми отличиями. Shape Circle Triangle Rectangle 2DShape 3DShape Sphere Cube Tetrahedron
  4. ИНТЕРФЕЙС Базовый класс задаёт интерфейс, производные — реализуют его и

    дополняют. Vehicle —————— + brand + yearsModel —————— soundSample() Car Moped RowBoat
  5. НАСЛЕДОВАНИЕ И КОМПОЗИЦИЯ Композиция (включение объекта как атрибута другого объекта)

    — менее обязывающая связь между объектами. struct Line {! Point a;! Point b;! }; is-a has-a
  6. ОБЪЕКТНАЯ СИСТЕМА НА C Класс — набор указателей на методы.

    Каждый объект содержит указатель на класс. // new.h! struct Class {! size_t size;! void *(*ctor)(void *self,! va_list *app);! void *(*dtor)(void *self);! void (*draw)(const void *self);! };! ! void *new(const void *class, ...);! void delete(void *item);! void draw(const void *self); // point.h! struct Point {! const void *class;! int x, y; /* координаты */! };! ! extern const void *Point; p Объект size ctor dtor draw Класс struct Class // circle.h! struct Circle {! const struct Point _;! int rad;! };! ! extern const void *Circle;
  7. ПОЛИМОРФИЗМ Вызываемый метод зависит от реального типа объекта, а не

    типа указателя. В терминологии C++ — виртуальный метод.
  8. ОБЩИЕ ТРЕБОВАНИЯ К КЛАССАМ «Что такое хорошо и что такое

    плохо?» • Декомпозиция. Подзадачи являются самостоятельными. • Модульная композиция. Модули свободно соединяются для создания новых систем. • Модульная понятность. Можно понять содержание модуля, не зная текста остальных. • Модульная непрерывность. Незначительное изменение спецификаций приведёт к изменению небольшого числа модулей. • Модульная защищённость. Аварийная ситуация в одном из модулей затронет только сам модуль или ещё несколько соседних, но не всю систему.
  9. ПРИНЦИП ОДНОЙ ЗОНЫ ОТВЕТСТВЕННОСТИ Должна существовать только одна причина, приводящая

    к изменению класса. Класс Rectangle double area(); // calculate area ! void draw(); // draw rectangle Зона ответственности 1.
 Вычисление площади Зона ответственности 2.
 Отрисовка прямоугольника
  10. ПРИНЦИП ПОДСТАНОВКИ ЛИСКОУ Дочерние классы можно использовать через интерфейсы базовых

    классов без знания о том, что это именно дочерний класс. Rectangle Square ?
  11. ПРИНЦИП ИНВЕРСИИ ЗАВИСИМОСТЕЙ Модули и низкого, и высокого уровня должны

    зависеть от абстракций, а не друг от друга (и не наоборот!). Слой Policy Policy Service Interface Слой Mechanism Mechanism Service Interface Слой Utility
  12. ПРИНЦИП ОТДЕЛЕНИЯ ИНТЕРФЕЙСА Клиенты не должны попадать в зависимость от

    методов, которыми они не пользуются. Timer TimerClient Door TimedDoor
  13. SOLID Solid – прочный, крепкий, надежный… Single responsibility principle
 Open-closed

    principle Liskov substitution principle Interface Segregation Principle Dependency Inversion principle
  14. C++ Новое, по сравнению с C • Классы с конструкторами

    и деструкторами. • Ссылки. • Перегрузка функций. • Параметры функций и методов по умолчанию. • Расширение модификатора const. • Пространства имён (namespace). • Исключения. • Шаблоны. • Стандартная библиотека: контейнеры, ввод/вывод, алгоритмы.
  15. КОНТЕЙНЕРЫ • std::vector. • std::list. • std::map, std::multimap, std::set. •

    std::deque. • std::stack, std::queue, std::priority_queue. • std::unordered_map, std::unordered_multimap, std::unordered_set.
  16. ПАТТЕРНЫ Способы организации классов, объектов и операций
 с ними, полезные

    во многих контекстах • Паттерны порождения объектов. • Структурные паттерны. • Поведенческие паттерны.
  17. ПОРОЖДЕНИЕ ОБЪЕКТОВ Паттерны создания новых объектов • Одиночка (Singleton). •

    Абстрактная фабрика (Abstract Factory). • Строитель (Builder). • Фабричный метод (Factory Method). • Прототип (Prototype).
  18. ПОВЕДЕНЧЕСКИЕ ПАТТЕРНЫ Организация обработки данных • Итератор (Iterator). • Команда

    (Command). • Шаблонный метод (Template Method). • Состояние (State). • Стратегия (Strategy). • Интерпретатор (Interpreter). • Посетитель (Visitor).
  19. СТРУКТУРНЫЕ ПАТТЕРНЫ Группы объектов, связи между объектами • Адаптер (Adapter).

    • Декоратор (Decorator). • Заместитель (Proxy). • Фасад (Facade). • Компоновщик (Composite).
  20. ШАБЛОНЫ (TEMPLATES) Управляемая, параметризованная генерация кода • Шаблоны функций. •

    Шаблоны классов. • Полная и частичная специализация. • Классы свойств и значений. • Принцип SFINAE. • Метапрограммирование.
  21. ХОРОШИЙ КОД НА C++ • Имена. • Функции и методы.

    • Технический долг и рефакторинг.