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

Объектно-ориентированное программирование (ООП)

Разработка бизнес приложений Лекция 6

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

Разработчик должен знать

• Базовые элементы синтаксиса, процедурное мышление: переменные, if / циклы / функции

• Указатели и работа с памятью (C)• ООП (C++) – объектное мышление• Библиотеки (платформа) и какой-нибудь

язык более высокого уровня (.NET / Java / Пр.)

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

ЭВОЛЮЦИЯ ПРОГРАММИРОВАНИЯ

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

Суть эволюции

• Борьба со с возрастающей сложностью• Т.е. человек может оперировать 7 +/- 2

объектами, то использование принципа «разделяй и властвуй» или декомпозиции (инкапсуляции) неизбежно.

• По сути, вся эволюция индустрии разработки заключается в обнаружении повторяющегося кода и его инкапсуляции в какие-то удобные конструкции

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

Сначала был ассемблер

• Прямое управление ячейками памяти процессора (регистрами)

• Прямой вызов процессорных операций• Очень быстро (быстрее некуда)• Очень сложно, нужно помнить МАССУ

нюансов, плюс процессоро-зависимо• Применение: ОС, драйверы, встроенный

софт, игры (чуть-чуть), BIOS …

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

Захотелось абстракций

• Элементарные типы данных• Переменные, массивы• Арифметические операторы и логические

операторы• Условный оператор (if), циклы• Все это компилятором (ну или

интерпретатором) преобразуется в ассемблер

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

Процедуры и функции, стек

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

Cтека мало

• Стек быстр, но ограничен – вспомним 640 Kb

• Нужно работать с основной памятью– указатели– malloc(), free() – язык C

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

Структуры, глобальные переменные

• Быстро оказалось что некоторые данные постоянно используются вместе -> структуры– Point (x;y)

• Передавать параметры и получать результаты – недостаточно– Удобно иметь «состояние» системы доступное

из разных функций - глобальные переменные

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

Процедурное программирование

• Когда программа становится большой, а глобальных переменных – много, держать в голове их состояние становится невозможно, а значит – выполнение функций и отладка непредсказуемы

• Что бы не путаться – разобьем на модули (библиотеки)– область видимости, интерфейс, реализация– т.е. инкапсуляция ряда функций и глобальных

переменных

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

ООПА дальше?

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

Класс как эволюция структур

• Было замечено что структуры часто удобно передавать в методы и образуются группы методов работающие с одними и теми же структурами

• Фактически класс – это структура данных объединенная с методами (функциями) ее обработки

• Класс – это пользовательский тип данных, состоящий из полей данных и методов

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

Объект в теории

• С точки зрения восприятия человеком объектом может быть: – осязаемый и (или) видимый предмет– нечто, воспринимаемое мышлением – нечто, на что направлена мысль или действие.

• Объект может обладать состоянием, поведением, идентичностью

• Очевидно, что с помощью понятия «объект» можно описать все что угодно

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

Класс как абстракция

• Структура и поведение схожих объектов определяет общий для них класс

• Класс это описание множества объектов:– Структуры данных состояния– Поведения (методов)

• Термины «экземпляр класса» и «объект» взаимозаменяемы.

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

Стандартные операции

• Операция – это услуга, которую класс (объект) может предоставить своим клиентам.

• На практике типичный клиент совершает над объектами операции пяти видов: – Модификатор - изменяет состояние– Селектор – считывает состояние, но не меняет – Итератор – дает последовательный доступ к частям класса – Конструктор – создание / инициализация объекта – Деструктор – уничтожение объекта (освобождение памяти)

• В различных языках могут быть представлены специальными синтаксическими конструкциями

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

Инкапсуляция

• Основная идея объекта заключается в том, что он скрывает от взаимодействующих с ним принципы своего устройства, оставляя для клиентов только интерфейс.

• Это и называется инкапсуляция• Инкапсуляция в языках программирования

реализуется с помощью областей видимости:– Основные: public, private, protected

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

Наследование

• Иногда еще называют генерализацией или расширением, что часто путает

• Наследование выражает отношение классов (объектов) «является» («Is а»)

• Примеры наследования– Квадрат – наследник фигуры или?

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

Полиморфизм

• Возможность объектов с одинаковой спецификацией иметь различную реализацию

• Один интерфейс, множество реализаций• Язык программирования поддерживает

полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования

• Наиболее частая реализация – виртуальный метод

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

ООП

• Таким образом, в ООП система моделируется как совокупность классов, их интерфейсов и заданных отношений наследования и композиции между ними.

• Поведение системы – как последовательность создания и взаимодействия и уничтожения объектов (экземпляров классов).

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

Основные принципы ООП

• Абстракция (классы)• Инкапсуляция (области видимости)• Наследование• Полиморфизм (виртуальные методы)

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

Наследование vs композиция

• Использование объекта нужного класса в качестве поля другого класса позволяет, так же как и наследование, добиться доступа к данным и методам этого класса инкапсулируя суть взаимодействия– Если они не protected

• Наследование нарушает инкапсуляцию• Наследование дает полиморфизм• Поэтому: используйте наследование только когда

вам нужен полиморфизм и обязательно, когда есть отношение «является»

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

Качество абстракции

• Зацепление– степень глубины связей между отдельными классами

• Связность– Насколько члены класса приследуют единую и неделимую

цель• Достаточность, полнота, примитивность

– Степень пригодности к использованию в изоляции– Насколько полно выражает все аспекты абстракции– Абстракция должна содержать только примитивные операции

(то что может быть реализовано с помощью них – часто является лишним). Абстракция должна инкапсулировать нетривиальные знания.

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

ПАРА СЛОВ О UMLКак обсуждать программы в ООП

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

Диаграммы классов

• + public, - private, # protected• Использование, наследование,

композиция, агрегация

Human

firstNamelastName

Dog

nickname

HeadMammal

weightLeg

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

Диаграммы последовательности

• Время жизни• Кто кого зовет (можно показывать рез-т)• Циклы, условия, асинхронность – тоже есть

OwnerOwner DogDog HeadHead

1: fass()

2: bite()

3: openMouth()

4: bite()

5: closeMouth()

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

Другое

• Методы доступа (свойства / getters / setters)• Множественное наследование• Абстрактные члены• Интерфейсы как языковая конструкция• Вложенные классы• Прототипы, метаклассы

(метапрограммирование)

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

Модуль (полусеместровый)

• Кто уже показал – 45, кто тут – 35, кого нет – 25.

• Кто показывал лягушку на андроиде – 44.• Теперь, что бы получить 45-54, мало

показать что-то, что вы делали раньше. Нужно выполнить какое-нибудь задание.

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

Ресурсы

• Хороших книг по концепциям ООП я не знаю

• Объектно-ориентированный анализ и проектирование с примерами приложений

• Применение UML 2.0 и шаблонов проектирования. Введение в объектно-ориентированный анализ, проектирование и итеративную разработку

• UML, основы• Wikipedia

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

Темы для докладов

• AOP• Kanban / Lean (Карпов)• SCRUM: Team / ScrumMaster – подробнее

про процесс (DS, Retro, SprintPlan, Demo…)• Portfolio management, BMG (Alex Ostervald),

Scrum of Scrum• NoSql БД• Реализация ООП в Javascript (прототипы)

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

Лабы• Открытые данные

– http://www.apps4russia.ru/, http://apps4russia.reformal.ru/, http://data.worldbank.org/

• Готовое:– http://minenergo.gov.ru/activity/statistic/,http

://www.fms.gov.ru/about/ofstat/, http://www.federalspace.ru/main.php?id=10, http://ivan.begtin.name/2011/10/02/gosuslugijson/

• Повышенный балл:– Или наличие БД– Или наличие веб интерфейса– Индивидуальное задание (для тех, у кого уже есть что показать)

• Стажировка (Тестер / Разработчик)– MS: C#, MS MVC, MS SQL Server


Recommended