SlideShare uma empresa Scribd logo
1 de 30
Объектно-ориентированное
 программирование (ООП)
  Разработка бизнес приложений
            Лекция 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

Mais conteúdo relacionado

Mais procurados

Шаблоны проектирования GoF
Шаблоны проектирования GoFШаблоны проектирования GoF
Шаблоны проектирования GoFUnguryan Vitaliy
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Unguryan Vitaliy
 
Рефлексия в java
Рефлексия в javaРефлексия в java
Рефлексия в javaUnguryan Vitaliy
 
SOLID Principles in the real world
SOLID Principles in the real worldSOLID Principles in the real world
SOLID Principles in the real worldEPAM
 
C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.Igor Shkulipa
 
философия Java
философия Javaфилософия Java
философия Javaitclub_kz
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.Igor Shkulipa
 
C++ Базовый. Занятие 16.
C++ Базовый. Занятие 16. C++ Базовый. Занятие 16.
C++ Базовый. Занятие 16. Igor Shkulipa
 
Java. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and ObjectsJava. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and Objectscolriot
 
Ruby: интерпретируемый, динамичный, человеколюбивый
Ruby: интерпретируемый, динамичный, человеколюбивыйRuby: интерпретируемый, динамичный, человеколюбивый
Ruby: интерпретируемый, динамичный, человеколюбивыйAlex Mikitenko
 
Системный подход в стандартах
Системный подход в стандартахСистемный подход в стандартах
Системный подход в стандартахAnatoly Levenchuk
 
Msu.Center.Lectures.J02 Classes And Objects
Msu.Center.Lectures.J02 Classes And ObjectsMsu.Center.Lectures.J02 Classes And Objects
Msu.Center.Lectures.J02 Classes And Objectsolegol
 

Mais procurados (13)

Шаблоны проектирования GoF
Шаблоны проектирования GoFШаблоны проектирования GoF
Шаблоны проектирования GoF
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.
 
Рефлексия в java
Рефлексия в javaРефлексия в java
Рефлексия в java
 
SOLID Principles in the real world
SOLID Principles in the real worldSOLID Principles in the real world
SOLID Principles in the real world
 
C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.
 
философия Java
философия Javaфилософия Java
философия Java
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.
 
C++ Базовый. Занятие 16.
C++ Базовый. Занятие 16. C++ Базовый. Занятие 16.
C++ Базовый. Занятие 16.
 
Java. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and ObjectsJava. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and Objects
 
Интерфейсы
ИнтерфейсыИнтерфейсы
Интерфейсы
 
Ruby: интерпретируемый, динамичный, человеколюбивый
Ruby: интерпретируемый, динамичный, человеколюбивыйRuby: интерпретируемый, динамичный, человеколюбивый
Ruby: интерпретируемый, динамичный, человеколюбивый
 
Системный подход в стандартах
Системный подход в стандартахСистемный подход в стандартах
Системный подход в стандартах
 
Msu.Center.Lectures.J02 Classes And Objects
Msu.Center.Lectures.J02 Classes And ObjectsMsu.Center.Lectures.J02 Classes And Objects
Msu.Center.Lectures.J02 Classes And Objects
 

Destaque

разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
Разработка бизнес приложений (5)
Разработка бизнес приложений (5)Разработка бизнес приложений (5)
Разработка бизнес приложений (5)Alexander Gornik
 
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...Alexander Gornik
 
как нанять и сделать счастливыми хороших программистов и других сотрудников
как нанять и сделать счастливыми хороших программистов и других сотрудниковкак нанять и сделать счастливыми хороших программистов и других сотрудников
как нанять и сделать счастливыми хороших программистов и других сотрудниковAlexander Gornik
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)Alexander Gornik
 
Финансовая отчетность в компании разработчике (Александр Горник)
Финансовая отчетность в компании разработчике (Александр Горник)Финансовая отчетность в компании разработчике (Александр Горник)
Финансовая отчетность в компании разработчике (Александр Горник)Ontico
 
Разработка бизнес приложений (3)
Разработка бизнес приложений (3)Разработка бизнес приложений (3)
Разработка бизнес приложений (3)Alexander Gornik
 
Разработка бизнес приложений (4)
Разработка бизнес приложений (4)Разработка бизнес приложений (4)
Разработка бизнес приложений (4)Alexander Gornik
 
Разработка корпоративных (бизнес) приложений (лекция 1)
Разработка корпоративных (бизнес) приложений (лекция 1)Разработка корпоративных (бизнес) приложений (лекция 1)
Разработка корпоративных (бизнес) приложений (лекция 1)Alexander Gornik
 
Процесс Mindbox 2015
Процесс Mindbox 2015Процесс Mindbox 2015
Процесс Mindbox 2015Alexander Gornik
 
Разработка корпоративных (бизнес) приложений (лекция 2)
Разработка корпоративных (бизнес) приложений (лекция 2)Разработка корпоративных (бизнес) приложений (лекция 2)
Разработка корпоративных (бизнес) приложений (лекция 2)Alexander Gornik
 
Stop starting start finishing
Stop starting start finishingStop starting start finishing
Stop starting start finishingAlexander Gornik
 

Destaque (12)

разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Разработка бизнес приложений (5)
Разработка бизнес приложений (5)Разработка бизнес приложений (5)
Разработка бизнес приложений (5)
 
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
 
как нанять и сделать счастливыми хороших программистов и других сотрудников
как нанять и сделать счастливыми хороших программистов и других сотрудниковкак нанять и сделать счастливыми хороших программистов и других сотрудников
как нанять и сделать счастливыми хороших программистов и других сотрудников
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)
 
Финансовая отчетность в компании разработчике (Александр Горник)
Финансовая отчетность в компании разработчике (Александр Горник)Финансовая отчетность в компании разработчике (Александр Горник)
Финансовая отчетность в компании разработчике (Александр Горник)
 
Разработка бизнес приложений (3)
Разработка бизнес приложений (3)Разработка бизнес приложений (3)
Разработка бизнес приложений (3)
 
Разработка бизнес приложений (4)
Разработка бизнес приложений (4)Разработка бизнес приложений (4)
Разработка бизнес приложений (4)
 
Разработка корпоративных (бизнес) приложений (лекция 1)
Разработка корпоративных (бизнес) приложений (лекция 1)Разработка корпоративных (бизнес) приложений (лекция 1)
Разработка корпоративных (бизнес) приложений (лекция 1)
 
Процесс Mindbox 2015
Процесс Mindbox 2015Процесс Mindbox 2015
Процесс Mindbox 2015
 
Разработка корпоративных (бизнес) приложений (лекция 2)
Разработка корпоративных (бизнес) приложений (лекция 2)Разработка корпоративных (бизнес) приложений (лекция 2)
Разработка корпоративных (бизнес) приложений (лекция 2)
 
Stop starting start finishing
Stop starting start finishingStop starting start finishing
Stop starting start finishing
 

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

введение в объектно ориентированный анализ
введение в объектно ориентированный анализвведение в объектно ориентированный анализ
введение в объектно ориентированный анализMaksim Nikitin
 
Java. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UMLJava. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UMLcolriot
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.Igor Shkulipa
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Sergey Nemchinsky
 
Бизнес и системный анализ весна 2013 лекция 5
Бизнес и системный анализ весна 2013 лекция 5Бизнес и системный анализ весна 2013 лекция 5
Бизнес и системный анализ весна 2013 лекция 5Technopark
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7Technopark
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftAnton Loginov
 
FlatGUI: Reactive GUI Toolkit Implemented in Clojure
FlatGUI: Reactive GUI Toolkit Implemented in ClojureFlatGUI: Reactive GUI Toolkit Implemented in Clojure
FlatGUI: Reactive GUI Toolkit Implemented in Clojuredenyslebediev
 
1. основы
1. основы1. основы
1. основыOdant
 
Methods for building dialog agents and the technologies we used
Methods for building dialog agents and the technologies we used Methods for building dialog agents and the technologies we used
Methods for building dialog agents and the technologies we used Grid Dynamics
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.EatDog
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Levon Avakyan
 
PostSharp - Threading Model Library
PostSharp - Threading Model LibraryPostSharp - Threading Model Library
PostSharp - Threading Model LibraryAndrey Gordienkov
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьAndrey Bibichev
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Alexander Syrotenko
 
Top10 доводов против языка Ruby
Top10 доводов против языка RubyTop10 доводов против языка Ruby
Top10 доводов против языка Rubyguest5f907e
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1Technopark
 
А.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектированияА.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектированияAnatoly Levenchuk
 

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

введение в объектно ориентированный анализ
введение в объектно ориентированный анализвведение в объектно ориентированный анализ
введение в объектно ориентированный анализ
 
Java. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UMLJava. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UML
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 
Бизнес и системный анализ весна 2013 лекция 5
Бизнес и системный анализ весна 2013 лекция 5Бизнес и системный анализ весна 2013 лекция 5
Бизнес и системный анализ весна 2013 лекция 5
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
 
FlatGUI: Reactive GUI Toolkit Implemented in Clojure
FlatGUI: Reactive GUI Toolkit Implemented in ClojureFlatGUI: Reactive GUI Toolkit Implemented in Clojure
FlatGUI: Reactive GUI Toolkit Implemented in Clojure
 
1. основы
1. основы1. основы
1. основы
 
Methods for building dialog agents and the technologies we used
Methods for building dialog agents and the technologies we used Methods for building dialog agents and the technologies we used
Methods for building dialog agents and the technologies we used
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
PostSharp - Threading Model
PostSharp - Threading ModelPostSharp - Threading Model
PostSharp - Threading Model
 
PostSharp - Threading Model Library
PostSharp - Threading Model LibraryPostSharp - Threading Model Library
PostSharp - Threading Model Library
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
Top10 доводов против языка Ruby
Top10 доводов против языка RubyTop10 доводов против языка Ruby
Top10 доводов против языка Ruby
 
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1
 
А.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектированияА.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектирования
 

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

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