Объектно-ориентированное
 программирование (ООП)
  Разработка бизнес приложений
            Лекция 6
Разработчик должен знать
• Базовые элементы синтаксиса,
  процедурное мышление: переменные, if /
  циклы / функции
• Указатели и работа с памятью (C)
• ООП (C++) – объектное мышление
• Библиотеки (платформа) и какой-нибудь
  язык более высокого уровня (.NET / Java /
  Пр.)
ЭВОЛЮЦИЯ
ПРОГРАММИРОВАНИЯ
Суть эволюции
• Борьба со с возрастающей сложностью
• Т.е. человек может оперировать 7 +/- 2
  объектами, то использование принципа
  «разделяй и властвуй» или декомпозиции
  (инкапсуляции) неизбежно.
• По сути, вся эволюция индустрии
  разработки заключается в обнаружении
  повторяющегося кода и его инкапсуляции в
  какие-то удобные конструкции
Сначала был ассемблер
• Прямое управление ячейками памяти
  процессора (регистрами)
• Прямой вызов процессорных операций
• Очень быстро (быстрее некуда)
• Очень сложно, нужно помнить МАССУ
  нюансов, плюс процессоро-зависимо
• Применение: ОС, драйверы, встроенный
  софт, игры (чуть-чуть), BIOS …
Захотелось абстракций
• Элементарные типы данных
• Переменные, массивы
• Арифметические операторы и логические
  операторы
• Условный оператор (if), циклы
• Все это компилятором (ну или
  интерпретатором) преобразуется в
  ассемблер
Процедуры и функции, стек
Cтека мало
• Стек быстр, но ограничен
  – вспомним 640 Kb
• Нужно работать с основной памятью
  – указатели
  – malloc(), free()
  – язык C
Структуры, глобальные переменные
• Быстро оказалось что некоторые данные
  постоянно используются вместе ->
  структуры
  – Point (x;y)
• Передавать параметры и получать
  результаты – недостаточно
  – Удобно иметь «состояние» системы доступное
    из разных функций - глобальные переменные
Процедурное программирование
• Когда программа становится большой, а
  глобальных переменных – много, держать в
  голове их состояние становится невозможно, а
  значит – выполнение функций и отладка
  непредсказуемы
• Что бы не путаться – разобьем на модули
  (библиотеки)
  – область видимости, интерфейс, реализация
  – т.е. инкапсуляция ряда функций и глобальных
    переменных
А дальше?

ООП
Класс как эволюция структур
• Было замечено что структуры часто удобно
  передавать в методы и образуются группы
  методов работающие с одними и теми же
  структурами
• Фактически класс – это структура данных
  объединенная с методами (функциями) ее
  обработки
• Класс – это пользовательский тип данных,
  состоящий из полей данных и методов
Объект в теории
• С точки зрения восприятия человеком
  объектом может быть:
  – осязаемый и (или) видимый предмет
  – нечто, воспринимаемое мышлением
  – нечто, на что направлена мысль или действие.
• Объект может обладать состоянием,
  поведением, идентичностью
• Очевидно, что с помощью понятия
  «объект» можно описать все что угодно
Класс как абстракция
• Структура и поведение схожих объектов
  определяет общий для них класс
• Класс это описание множества объектов:
  – Структуры данных состояния
  – Поведения (методов)
• Термины «экземпляр класса» и «объект»
  взаимозаменяемы.
Стандартные операции
• Операция – это услуга, которую класс (объект) может
  предоставить своим клиентам.
• На практике типичный клиент совершает над объектами
  операции пяти видов:
   –   Модификатор - изменяет состояние
   –   Селектор – считывает состояние, но не меняет
   –   Итератор – дает последовательный доступ к частям класса
   –   Конструктор – создание / инициализация объекта
   –   Деструктор – уничтожение объекта (освобождение памяти)
• В различных языках могут быть представлены
  специальными синтаксическими конструкциями
Инкапсуляция
• Основная идея объекта заключается в том,
  что он скрывает от взаимодействующих с
  ним принципы своего устройства, оставляя
  для клиентов только интерфейс.
• Это и называется инкапсуляция
• Инкапсуляция в языках программирования
  реализуется с помощью областей
  видимости:
  – Основные: public, private, protected
Наследование
• Иногда еще называют генерализацией или
  расширением, что часто путает
• Наследование выражает отношение
  классов (объектов) «является» («Is а»)
• Примеры наследования
  – Квадрат – наследник фигуры или?
Полиморфизм
• Возможность объектов с одинаковой
  спецификацией иметь различную реализацию
• Один интерфейс, множество реализаций
• Язык программирования поддерживает
  полиморфизм, если классы с одинаковой
  спецификацией могут иметь различную
  реализацию — например, реализация класса
  может быть изменена в
  процессе наследования
• Наиболее частая реализация – виртуальный
  метод
ООП
• Таким образом, в ООП система
  моделируется как совокупность классов, их
  интерфейсов и заданных отношений
  наследования и композиции между ними.
• Поведение системы – как
  последовательность создания и
  взаимодействия и уничтожения объектов
  (экземпляров классов).
Основные принципы ООП
•   Абстракция (классы)
•   Инкапсуляция (области видимости)
•   Наследование
•   Полиморфизм (виртуальные методы)
Наследование vs композиция
• Использование объекта нужного класса в качестве
  поля другого класса позволяет, так же как и
  наследование, добиться доступа к данным и
  методам этого класса инкапсулируя суть
  взаимодействия
  – Если они не protected
• Наследование нарушает инкапсуляцию
• Наследование дает полиморфизм
• Поэтому: используйте наследование только когда
  вам нужен полиморфизм и обязательно, когда
  есть отношение «является»
Качество абстракции
• Зацепление
  – степень глубины связей между отдельными классами
• Связность
  – Насколько члены класса приследуют единую и
    неделимую цель
• Достаточность, полнота, примитивность
  – Степень пригодности к использованию в изоляции
  – Насколько полно выражает все аспекты абстракции
  – Абстракция должна содержать только примитивные
    операции (то что может быть реализовано с помощью
    них – часто является лишним). Абстракция должна
    инкапсулировать нетривиальные знания.
Как обсуждать программы в ООП

ПАРА СЛОВ О UML
Диаграммы классов




• + public, - private, # protected
• Использование, наследование,
  композиция, агрегация
Диаграммы последовательности
       Owner               Dog               Head


               1: fass()


                                 2: bite()


                                             3: openMouth()


                                                4: bite()



                                             5: closeMouth()




• Время жизни
• Кто кого зовет (можно показывать рез-т)
• Циклы, условия, асинхронность – тоже есть
Другое
•   Методы доступа (свойства / getters / setters)
•   Множественное наследование
•   Абстрактные члены
•   Интерфейсы как языковая конструкция
•   Вложенные классы
•   Прототипы, метаклассы
    (метапрограммирование)
Модуль (полусеместровый)
• Кто уже показал – 45, кто тут – 35, кого нет –
  25.
• Кто показывал лягушку на андроиде – 44.
• Теперь, что бы получить 45-54, мало
  показать что-то, что вы делали раньше.
  Нужно выполнить какое-нибудь задание.
Ресурсы
• Хороших книг по концепциям ООП я не знаю
• Объектно-ориентированный анализ и
  проектирование с примерами приложений
• Применение UML 2.0 и шаблонов
  проектирования. Введение в объектно-
  ориентированный анализ, проектирование и
  итеративную разработку
• UML, основы
• Wikipedia
Темы для докладов
• AOP
• Kanban / Lean (Карпов)
• SCRUM: Team / ScrumMaster – подробнее
  про процесс (DS, Retro, SprintPlan, Demo…)
• Portfolio management, BMG (Alex Ostervald),
  Scrum of Scrum
• NoSql БД
• Реализация ООП в Javascript (прототипы)
Лабы
• Открытые данные
   – http://www.apps4russia.ru/, http://apps4russia.reformal.ru/,
     http://data.worldbank.org/
• Готовое:
   – http://minenergo.gov.ru/activity/statistic/,http://www.fms.gov.ru/abo
     ut/ofstat/, http://www.federalspace.ru/main.php?id=10,
     http://ivan.begtin.name/2011/10/02/gosuslugijson/
• Повышенный балл:
   – Или наличие БД
   – Или наличие веб интерфейса
   – Индивидуальное задание (для тех, у кого уже есть что показать)
• Стажировка (Тестер / Разработчик)
   – MS: C#, MS MVC, MS SQL Server

разработка бизнес приложений (6)

  • 1.
    Объектно-ориентированное программирование (ООП) Разработка бизнес приложений Лекция 6
  • 2.
    Разработчик должен знать •Базовые элементы синтаксиса, процедурное мышление: переменные, if / циклы / функции • Указатели и работа с памятью (C) • ООП (C++) – объектное мышление • Библиотеки (платформа) и какой-нибудь язык более высокого уровня (.NET / Java / Пр.)
  • 3.
  • 4.
    Суть эволюции • Борьбасо с возрастающей сложностью • Т.е. человек может оперировать 7 +/- 2 объектами, то использование принципа «разделяй и властвуй» или декомпозиции (инкапсуляции) неизбежно. • По сути, вся эволюция индустрии разработки заключается в обнаружении повторяющегося кода и его инкапсуляции в какие-то удобные конструкции
  • 5.
    Сначала был ассемблер •Прямое управление ячейками памяти процессора (регистрами) • Прямой вызов процессорных операций • Очень быстро (быстрее некуда) • Очень сложно, нужно помнить МАССУ нюансов, плюс процессоро-зависимо • Применение: ОС, драйверы, встроенный софт, игры (чуть-чуть), BIOS …
  • 6.
    Захотелось абстракций • Элементарныетипы данных • Переменные, массивы • Арифметические операторы и логические операторы • Условный оператор (if), циклы • Все это компилятором (ну или интерпретатором) преобразуется в ассемблер
  • 7.
  • 8.
    Cтека мало • Стекбыстр, но ограничен – вспомним 640 Kb • Нужно работать с основной памятью – указатели – malloc(), free() – язык C
  • 9.
    Структуры, глобальные переменные •Быстро оказалось что некоторые данные постоянно используются вместе -> структуры – Point (x;y) • Передавать параметры и получать результаты – недостаточно – Удобно иметь «состояние» системы доступное из разных функций - глобальные переменные
  • 10.
    Процедурное программирование • Когдапрограмма становится большой, а глобальных переменных – много, держать в голове их состояние становится невозможно, а значит – выполнение функций и отладка непредсказуемы • Что бы не путаться – разобьем на модули (библиотеки) – область видимости, интерфейс, реализация – т.е. инкапсуляция ряда функций и глобальных переменных
  • 11.
  • 12.
    Класс как эволюцияструктур • Было замечено что структуры часто удобно передавать в методы и образуются группы методов работающие с одними и теми же структурами • Фактически класс – это структура данных объединенная с методами (функциями) ее обработки • Класс – это пользовательский тип данных, состоящий из полей данных и методов
  • 13.
    Объект в теории •С точки зрения восприятия человеком объектом может быть: – осязаемый и (или) видимый предмет – нечто, воспринимаемое мышлением – нечто, на что направлена мысль или действие. • Объект может обладать состоянием, поведением, идентичностью • Очевидно, что с помощью понятия «объект» можно описать все что угодно
  • 14.
    Класс как абстракция •Структура и поведение схожих объектов определяет общий для них класс • Класс это описание множества объектов: – Структуры данных состояния – Поведения (методов) • Термины «экземпляр класса» и «объект» взаимозаменяемы.
  • 15.
    Стандартные операции • Операция– это услуга, которую класс (объект) может предоставить своим клиентам. • На практике типичный клиент совершает над объектами операции пяти видов: – Модификатор - изменяет состояние – Селектор – считывает состояние, но не меняет – Итератор – дает последовательный доступ к частям класса – Конструктор – создание / инициализация объекта – Деструктор – уничтожение объекта (освобождение памяти) • В различных языках могут быть представлены специальными синтаксическими конструкциями
  • 16.
    Инкапсуляция • Основная идеяобъекта заключается в том, что он скрывает от взаимодействующих с ним принципы своего устройства, оставляя для клиентов только интерфейс. • Это и называется инкапсуляция • Инкапсуляция в языках программирования реализуется с помощью областей видимости: – Основные: public, private, protected
  • 17.
    Наследование • Иногда ещеназывают генерализацией или расширением, что часто путает • Наследование выражает отношение классов (объектов) «является» («Is а») • Примеры наследования – Квадрат – наследник фигуры или?
  • 18.
    Полиморфизм • Возможность объектовс одинаковой спецификацией иметь различную реализацию • Один интерфейс, множество реализаций • Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования • Наиболее частая реализация – виртуальный метод
  • 19.
    ООП • Таким образом,в ООП система моделируется как совокупность классов, их интерфейсов и заданных отношений наследования и композиции между ними. • Поведение системы – как последовательность создания и взаимодействия и уничтожения объектов (экземпляров классов).
  • 20.
    Основные принципы ООП • Абстракция (классы) • Инкапсуляция (области видимости) • Наследование • Полиморфизм (виртуальные методы)
  • 21.
    Наследование vs композиция •Использование объекта нужного класса в качестве поля другого класса позволяет, так же как и наследование, добиться доступа к данным и методам этого класса инкапсулируя суть взаимодействия – Если они не protected • Наследование нарушает инкапсуляцию • Наследование дает полиморфизм • Поэтому: используйте наследование только когда вам нужен полиморфизм и обязательно, когда есть отношение «является»
  • 22.
    Качество абстракции • Зацепление – степень глубины связей между отдельными классами • Связность – Насколько члены класса приследуют единую и неделимую цель • Достаточность, полнота, примитивность – Степень пригодности к использованию в изоляции – Насколько полно выражает все аспекты абстракции – Абстракция должна содержать только примитивные операции (то что может быть реализовано с помощью них – часто является лишним). Абстракция должна инкапсулировать нетривиальные знания.
  • 23.
    Как обсуждать программыв ООП ПАРА СЛОВ О UML
  • 24.
    Диаграммы классов • +public, - private, # protected • Использование, наследование, композиция, агрегация
  • 25.
    Диаграммы последовательности Owner Dog Head 1: fass() 2: bite() 3: openMouth() 4: bite() 5: closeMouth() • Время жизни • Кто кого зовет (можно показывать рез-т) • Циклы, условия, асинхронность – тоже есть
  • 26.
    Другое • Методы доступа (свойства / getters / setters) • Множественное наследование • Абстрактные члены • Интерфейсы как языковая конструкция • Вложенные классы • Прототипы, метаклассы (метапрограммирование)
  • 27.
    Модуль (полусеместровый) • Ктоуже показал – 45, кто тут – 35, кого нет – 25. • Кто показывал лягушку на андроиде – 44. • Теперь, что бы получить 45-54, мало показать что-то, что вы делали раньше. Нужно выполнить какое-нибудь задание.
  • 28.
    Ресурсы • Хороших книгпо концепциям ООП я не знаю • Объектно-ориентированный анализ и проектирование с примерами приложений • Применение UML 2.0 и шаблонов проектирования. Введение в объектно- ориентированный анализ, проектирование и итеративную разработку • UML, основы • Wikipedia
  • 29.
    Темы для докладов •AOP • Kanban / Lean (Карпов) • SCRUM: Team / ScrumMaster – подробнее про процесс (DS, Retro, SprintPlan, Demo…) • Portfolio management, BMG (Alex Ostervald), Scrum of Scrum • NoSql БД • Реализация ООП в Javascript (прототипы)
  • 30.
    Лабы • Открытые данные – http://www.apps4russia.ru/, http://apps4russia.reformal.ru/, http://data.worldbank.org/ • Готовое: – http://minenergo.gov.ru/activity/statistic/,http://www.fms.gov.ru/abo ut/ofstat/, http://www.federalspace.ru/main.php?id=10, http://ivan.begtin.name/2011/10/02/gosuslugijson/ • Повышенный балл: – Или наличие БД – Или наличие веб интерфейса – Индивидуальное задание (для тех, у кого уже есть что показать) • Стажировка (Тестер / Разработчик) – MS: C#, MS MVC, MS SQL Server