$30 off During Our Annual Pro Sale. View Details »

Лекция № 1. Введение

Лекция № 1. Введение

ООП АФТИ ФФ НГУ 2017, зимний семестр

Oleg Dashevskii

February 13, 2017
Tweet

More Decks by Oleg Dashevskii

Other Decks in Education

Transcript

  1. ОБЪЕКТНО-
    ОРИЕНТИРОВАННОЕ
    ПРОГРАММИРОВАНИЕ
    Лекция № 1 / 01

    13.02.2017 г.

    View Slide

  2. РЕАЛИИ НАШЕГО ДНЯ
    • ООП везде. Из 10 самых популярных языков
    программирования 8 поддерживают ООП на уровне
    синтаксиса.

    http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
    • Программы на C++ работают быстро.
    • Ergo: Занимаемся ООП на C++.

    View Slide

  3. О КУРСЕ
    • Две основных темы:
    • С++.
    • Принципы ООП.
    • Орг. часть:
    • «Как на ОПК».
    • I часть: проект, теория,
    семинары => оценка.
    • II часть: проект, теория,
    семинары, I часть =>
    оценка.

    View Slide

  4. ЛАДНО, КРУТО!
    А ЧТО ТАКОЕ ООП?

    View Slide

  5. View Slide

  6. View Slide

  7. View Slide

  8. ФИГУРА И ФОН!

    View Slide

  9. ПАРАДИГМЫ
    • Фигура: заметное, яркое, важное, об этом все говорят.
    • Известные нам парадигмы:
    • императивная (алгоритмическая);
    • функциональная;
    • логическая.

    View Slide

  10. ИМПЕРАТИВНАЯ ПАРАДИГМА
    Фигура: последовательность действий

    View Slide

  11. ФУНКЦИОНАЛЬНАЯ ПАРАДИГМА
    • result = f1(a, b) + f2(b, c)
    • Данные являются неизменяемыми.
    • Последовательность действий не важна.
    • Текущее состояние (≈ слепок памяти) не важно.
    Фигура: данные и преобразования над ними

    View Slide

  12. ЛОГИЧЕСКАЯ ПАРАДИГМА
    Фигура: предикаты, правила

    View Slide

  13. О. О. ПАРАДИГМА
    Фигура: объекты, их «поведение» и взаимодействие

    View Slide

  14. ОБЪЕКТЫ
    • Программы так или иначе моделируют мир.
    • В мире есть «объекты», т. е. некие отдельные сущности.
    • Пусть в программах тоже будут объекты!
    • Для нас важны свойства и поведение объекта

    исходя из решаемой задачи !!

    View Slide

  15. ВЗАИМОДЕЙСТВИЕ ОБЪЕКТОВ
    • Важен момент рождения объекта и время его жизни.
    • Принцип иерархии: есть более глобальные объекты,
    которые живут дольше и порождают менее глобальные
    объекты.
    • Принцип черного ящика: взаимодействие с любым
    объектом через интерфейс.

    View Slide

  16. КАКОЙ ЯЗЫК
    САМЫЙ ООП-ИСТЫЙ?

    View Slide

  17. View Slide

  18. Объект окружающего мира
    0/1
    Данные
    Алгоритмы
    Память
    Код
    Баги
    Интерфейс
    Реализация
    Объект программного мира
    ?
    1. Свойства
    2. Поведение

    (реакция на сообщения)

    View Slide

  19. МЫСЛЕННЫЙ
    ЭКСПЕРИМЕНТ
    Много объектов с одинаковым поведением, но разными
    свойствами.

    View Slide

  20. СХОДСТВА И РАЗЛИЧИЯ
    •Порода
    •Рост
    •Вес
    •Цвет
    •...
    Свойства:
    •Лаять
    •Выть
    •Кусать
    •Приносить палочку
    •...
    Поведение:

    View Slide

  21. vs.
    Объекты класса Dog
    Объекты класса Cat

    View Slide

  22. ОБЩАЯ СТРУКТУРА
    Класс 1
    Поведение Свойства
    Класс 2
    Поведение Свойства
    Класс N
    Поведение Свойства
    ...

    View Slide

  23. ПРЕДСТАВЛЕНИЕ ОБЪЕКТА
    • Свойства — данные, находятся где-то в памяти.
    • Поведение — код, имеющий доступ к данным.
    • Вопрос: как это все реализовать, например, на языке C?

    View Slide

  24. ГДЕ ХРАНИТЬ ДАННЫЕ?
    • typedef struct { ... } Dog;
    • Виды памяти в C:
    • глобальная;
    • автоматическая (стековая);
    • динамическая (malloc / free).

    View Slide

  25. ФУНКЦИИ, СВЯЗАННЫЕ С
    ОБЪЕКТОМ
    • «Методы» объекта.
    • void dog_bark(Dog *dog, int loudness);
    • Создание / инициализация:
    • void dog_initialize(Dog *dog);
    • Dog *dog_create();
    • Уничтожение:
    • void dog_destroy(Dog *dog);
    Конструктор
    Деструктор

    View Slide

  26. RATIONAL.H
    #ifndef __rational_h
    #define __rational_h
    #include
    struct Rational {
    int numer; /* numerator, числитель */
    int denom; /* denominator, знаменатель */
    };
    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 */
    #endif
    Ничего не напоминает?

    View Slide

  27. КОНЕЦ ПЕРВОЙ ЛЕКЦИИ

    View Slide