SlideShare a Scribd company logo
ОмГУ ФКН 2013

Проектирование программного
обеспечения
01 TIKTOKCOACH.RU
Преподаватель
Тюменцев Евгений

02 TIKTOKCOACH.RU
Объектная модель
•
•
•
•

абстракция
инкапсуляция
модульность
иерархия

03 TIKTOKCOACH.RU

• типизация
• параллелизм
• сохраняемость
Объектная модель
•
•
•
•

абстракция
инкапсуляция
модульность
иерархия

04 TIKTOKCOACH.RU

• типизация
• параллелизм
• сохраняемость
Заблуждение
Абстракция = класс

05 TIKTOKCOACH.RU
Правило 7±2
The magical Number Seven,
Plus or Minus Two
СЛЕДСТВИЕ: Чтобы удержать
в памяти большее количество
предметов, человек
разбивает их на логические
группы
Джордж Миллер
06 TIKTOKCOACH.RU
Абстракция
Абстракция выделяет существенные
характеристики некоторого
объекта, отличающие его от всех
других видов объектов.
(Гради Буч)

07 TIKTOKCOACH.COM
Что дает абстракция?

Система понятий, с помощью
которых можно описать
некоторую область

08 TIKTOKCOACH.RU
Примеры абстракций
Сфера применения

Абстракция

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

• Процедура

09 TIKTOKCOACH.RU
Примеры абстракций
Сфера применения

Абстракция

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

• Процедура

• ООП

• Класс

10 TIKTOKCOACH.COM
Примеры абстракций
Сфера применения

Абстракция

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

• Процедура

• ООП

• Класс

• Предметная область

• Абстракция сущности

11 TIKTOKCOACH.RU
Примеры абстракций
Сфера применения

Абстракция

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

• Процедура

• ООП

• Класс

• Предметная область

• Абстракция сущности

• Многопоточное
программирование

• Поток

12 TIKTOKCOACH.RU
Что такое объекты?

13 TIKTOKCOACH.RU
Принципы мышления

 Группировка
 Обобщение

14 TIKTOKCOACH.RU
Обобщение через полиморфизм

Указатель на функцию: одно и
то же имя может означать
разные функции одной
сигнатуры
15 TIKTOKCOACH.RU
Определение ООП
Объектно-ориентированное
программирование - это
методология
программирования, основанная
на представлении программы в
виде совокупности объектов,
каждый из которых является
экземпляром определенного
класса, а классы образуют
иерархию наследования.
16 TIKTOKCOACH.RU

Гради Буч
Чем может помочь ООП?
Естественный язык

ООП

Слово
Правила
Жанры
Приемы

Класс
Синтаксис
Архитектура
Паттерны

Теорема Ферма
Война и Мир

Высокие нагрузки
Операционная система

17 TIKTOKCOACH.RU
ООП – это инструмент
Необходимое vs достаточное

18 TIKTOKCOACH.RU
Особенности абстракций

19 TIKTOKCOACH.RU
Сюрпризы абстракций
Реальный объект

Абстракция

• Вещественное число

• Число с плавающей точкой

20 TIKTOKCOACH.RU
Сюрпризы абстракций
Реальный объект

Абстракция

• Вещественное число

• Число с плавающей точкой

• Денежная единица

• Число с плавающей точкой

21 TIKTOKCOACH.RU
Сюрпризы абстракций
Реальный объект

Абстракция

• Вещественное число

• Число с плавающей точкой

• Денежная единица

• Число с плавающей точкой

• Квадрат

• Класс квадрат

22 TIKTOKCOACH.RU
Сюрпризы абстракций
Реальный объект

Абстракция

• Вещественное число

• Число с плавающей точкой

• Денежная единица

• Число с плавающей точкой

• Квадрат

• Класс квадрат

• Бизнес-операция

• Процедура

23 TIKTOKCOACH.RU
Группировка идей сверху вниз

Чтобы донести мысли до другого
человека, нужно убедиться, что
он группирует предметы так же
как и Вы
24 TIKTOKCOACH.RU
Мышление «снизу вверх»

25 TIKTOKCOACH.RU
Пример: список покупок
Мука
Молоко
Батарейки
Морковь
Апельсины
Хлеб
Масло
Яблоки
Ручка
26 TIKTOKCOACH.RU

Сок
Детская игрушка
Картофель
Детские тетради
Сметана
Сахар
Виноград
Вода
Группировка
Батарейки

Масло

Детские тетради
Ручка

Хлеб

Вода
Сок
Сахар

Морковь
Апельсины
Яблоки
Виноград
Картофель

27 TIKTOKCOACH.RU

Молоко
Сметана
Мука

Детская игрушка
Что такое хорошая абстракция?

Martin Fauler
Рефакторинг
28 TIKTOKCOACH.RU
The Open-Closed Principle

Rob Martin (Uncle Bob)
29 TIKTOKCOACH.COM
Программные объекты должны
быть открыты для
расширения, но в тоже время
закрыты для модификации

30 TIKTOKCOACH.RU
Открытые vs закрытые
• Полиморфная
операция

31 TIKTOKCOACH.RU
Открытые vs закрытые
• Полиморфная
операция
• Паттерны

32 TIKTOKCOACH.RU
Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры

33 TIKTOKCOACH.RU
Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
34 TIKTOKCOACH.RU
Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
35 TIKTOKCOACH.RU

• switch
• If /else – if/else
Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
36 TIKTOKCOACH.RU

• switch
• If /else – if/else
• Неполиморфная
операция
•
Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
37 TIKTOKCOACH.RU

• switch
• If /else – if/else
• Неполиморфная
операция
• операторы
приведения типа
Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
38 TIKTOKCOACH.RU

• switch
• If /else – if/else
• Неполиморфная
операция
• операторы
приведения типа
Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
39 TIKTOKCOACH.RU

• switch
• If /else – if/else
• Неполиморфная
операция
• операторы
приведения типа
• enum
Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
40 TIKTOKCOACH.RU

• …
• Магические
константы
Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
41 TIKTOKCOACH.RU

• …
• Магические
константы
• Copy-paste
Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
42 TIKTOKCOACH.RU

• …
• Магические
константы
• Copy-paste
• Public поля
• …
Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
43 TIKTOKCOACH.RU

• …
• Магические
константы
• Copy-paste
• Public поля
• Глобальные
переменные
Код открыт на 100%: возможно?

44 TIKTOKCOACH.RU
Стратегическая замкнутость
Архитектура

Открытые конструкции

45 TIKTOKCOACH.RU
Вопросы

46 TIKTOKCOACH.RU
Об истории - 1

47 TIKTOKCOACH.RU
Об истории - 2

48 TIKTOKCOACH.RU
Об истории - 3

49 TIKTOKCOACH.RU
Об истории - 4

50 TIKTOKCOACH.RU
Открытость: где предел?

Ассемблер –> if, for, switch
Алгоритмы -> процедуры
Процедуры -> классы
Собственный код -> библиотеки
Компьютер -> облако

4
51 TIKTOKCOACH.RU
Аргументы
Нижний

Скорость,
контроль,
доп. возможности

52 TIKTOKCOACH.RU

Верхний

гибкость,
продуктивность
Рефакторинг vs дублирование кода
//ушел он ночью, но уже на другой день
если час (ТекСтрокаРабочиеЧасы.МоментВыхода) < Константы.НачалоДневныхЧасов.Получить() и час
(ТекСтрокаРабочиеЧасы.МоментВхода) < Константы.НачалоДневныхЧасов.Получить()
тогда
//он пришел утром и ушел следующим утром
МоментПерехода = началоДня(ТекСтрокаРабочиеЧасы.МоментВхода);
МоментПерехода = МоментПерехода + (Константы.НачалоДневныхЧасов.Получить()) * 3600;
НочныеЧасы = НочныеЧасы + (МоментПерехода - ТекСтрокаРабочиеЧасы.МоментВхода) / 3600;
МоментПереходаВНочь = началоДня(ТекСтрокаРабочиеЧасы.МоментВхода);
МоментПереходаВНочь = МоментПереходаВНочь + (Константы.НачалоНочныхЧасов.Получить()) * 3600;
ДневныеЧасы = ДневныеЧасы + (МоментПереходаВНочь - МоментПерехода) / 3600;
НочныеЧасы = НочныеЧасы + (НачалоСледующегоДня - МоментПереходаВНочь) / 3600
иначе
//он пришел вечером
НочныеЧасы = НочныеЧасы + (НачалоСледующегоДня - 1 - ТекСтрокаРабочиеЧасы.МоментВхода) /
3600;
КонецЕсли;

От дублирования кода
полностью избавиться нельзя

53 TIKTOKCOACH.RU

3
Почему?
Дублирование выходит за рамки
применяемой платформы

54 TIKTOKCOACH.RU
Почему?
Дублирование выходит за рамки
применяемой платформы
Дублирование выходит за рамки понимания
программиста

55 TIKTOKCOACH.RU
Эффект Даннинга-Крюгера

55 TIKTOKCOACH.COM
Зачем рефакторинг?

 Группировка
 Обобщение
 общее понимание
57 TIKTOKCOACH.RU

1
Исчисление предикатов
∀𝑥∃𝑦 𝑃(𝑥, 𝑦)

58 TIKTOKCOACH.RU
Теорема дедукции

𝞒, 𝐴 ⊦ 𝐿 𝐵 ↔

59 TIKTOKCOACH.RU

𝞒 ⊦𝐿 𝐴 → 𝐵
Теория второго порядка
∀𝑓∃𝑦 𝑃(𝑓(𝑦))

60 TIKTOKCOACH.RU
Логика Хоара
Тройка Хоара
{pred} statement {post}

Пример:
Чарльз Хоар
{x+1 == 43} y=x+1; {y == 43 ^ x == 42}
61 TIKTOKCOACH.RU
Аксиомы и правила логики Хоара
Аксиома пустого оператора
{P} skip {P}
Аксиома присваивания
{P[E/x]} x := E {P}
Правило композиции
{P} S {Q}, {Q} T {R} ╞ {P} S;T {R}
Правило условного оператора
{B ^ P} S {Q}, {B’ ^P} T {Q} ╞ {P} if B then S else T endif {Q}
Правило вывода
P1 → P, {P} S {Q}, Q → Q1 ╞ {P1} S {Q1}
Правило оператора цикла
{P ^ B} S {P} ╞ {P} while B do S done {B’ ^ P}

62 TIKTOKCOACH.RU
Два подхода к параллельности
• CSP
• Модель акторов

63 TIKTOKCOACH.RU
Какой язык лучше?

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

64 TIKTOKCOACH.RU
Контрактное программирование

 Инвариант
 Предусловие
 Постусловие

65 TIKTOKCOACH.RU
Следствия
Конструктор используется для инвариантов
класса

66 TIKTOKCOACH.RU
Следствия - 2
Конструктор используется для инвариантов
класса
При нарушении условия выбрасывается
исключение

67 TIKTOKCOACH.RU
Следствия - 3
Конструктор используется для инвариантов
класса
При нарушении условия выбрасывается
исключение
Техника RAII

68 TIKTOKCOACH.RU
Следствия - 4
Конструктор используется для инвариантов
класса
При нарушении условия выбрасывается
исключение
Техника RAII
Модульное тестирование

69 TIKTOKCOACH.RU
Модульное тестирование
Правило композиции
{P} S {Q}, {Q} T {R} ╞ {P} S;T {R}

2
70 TIKTOKCOACH.RU
Контракт процедуры
• возможные типы входных данных и их значение;
• типы возвращаемых данных и их значение;
• условия возникновения исключений, их типы и
значения;
• присутствие побочного эффекта;
• (иногда) качественные характеристики, такие как
гарантии производительности, например,
временная сложность или сложность по памяти

71 TIKTOKCOACH.RU
Слабое, сильное условие

73 TIKTOKCOACH.RU
P^Q^S

73 TIKTOKCOACH.RU
«Реальные» объекты

74 TIKTOKCOACH.RU
Ключевые идеи
• Косвенный вызов процедуры

• Пред- и постусловия процедур
• Грубо: Абстракция ООП – это набор
процедур, предназначенных для
совместного использования
75 TIKTOKCOACH.RU
Контракт метода
• предусловия, которые могут быть
ослаблены (но не усилены) в подклассах;

76 TIKTOKCOACH.RU
Контракт метода
• предусловия, которые могут быть
ослаблены (но не усилены) в подклассах;
• постусловия, которые могут быть усилены
(но не ослаблены) в подклассах;

77 TIKTOKCOACH.RU
Контракт метода
• предусловия, которые могут быть
ослаблены (но не усилены) в подклассах;
• постусловия, которые могут быть усилены
(но не ослаблены) в подклассах;
• инварианты, которые могут быть усилены
(но не ослаблены) в подклассах;

78 TIKTOKCOACH.RU
Принцип подстановки Лисков

Функции, которые используют
ссылки на базовые классы, должны
иметь возможность
использовать объекты
производных классов, не зная об
этом.
79 TIKTOKCOACH.RU
Нарушение принципа Лисков -1
void Draw(Shape s)
{
if (s is Point)
{
DrawPoint(s as Point);
}
else if (s is Circle)
{
DrawCircle(s as Circle);
}
else if(s is Square)
{
DrawSquare(s as Square);
}

}

80 TIKTOKCOACH.RU
Нарушение принципа Лисков -2
class Rectangle
{
private double height;
private double width;
public double getHeight() { return height; }
public void setHeight(int value) { height = value;}
public double getWidth() { return width; }
public void setWidth(int value) { width = value; }
}
….
void f(Rectangle r)
{
r.setHeight (5);
r.setWidth (4);
Debug.Assert(r.getHeight() * r.getWidth() == 20);
}

81 TIKTOKCOACH.RU

class Square extends Rectangle
{
public void setHeight(int value)
{
super.setHeight(value);
super.setWidth(value);
}
public void setWidth(int value)
{
super.setHeight(value);
super.setWidth(value);
}
}
Следствие

Построенные абстракции нельзя проверить
на корректность сами по себе.

82 TIKTOKCOACH.RU
Последствия
• Заранее построить очень гибкую модель
“про запас” нельзя!
• Лучше использовать прототипирование

83 TIKTOKCOACH.RU
Программа Copy - 1
void Copy()
{
int ch;
while ((ch = Keyboard()) != EOF)
{
WritePrinter(c);
}
}

84 TIKTOKCOACH.RU

enum OutputDevice
{
printer,
disk
};
void Copy(OutputDevice dev)
{
int c;
while ((c = ReadKeyboard()) != EOF)
{
if (dev == printer)
WritePrinter(c);
else
WriteDisk(c);
}
}
Программа Copy - 2
interface IReader
{
int Read();
}
interface IWriter
{
void Write(char) = 0;
}

85 TIKTOKCOACH.RU

void Copy(
IReader r,
IWriter w
)
{
int c;
while((c=r.Read()) != EOF)
w.Write(c);
}
Схема зависимостей

86 TIKTOKCOACH.RU
Принцип обращения зависимостей
Высокоуровневые компоненты не
должны зависеть от низкоуровневых
компонент. И те, и те должны
зависеть от абстракций.
Абстракции не должны зависеть от
деталей. Детали должны зависеть
от абстракций.

87 TIKTOKCOACH.RU
Слои

88 TIKTOKCOACH.RU
Лампочка - 1
class Lamp
{
public void TurnOn() {…}
public void TurnOff() {…}
}

89 TIKTOKCOACH.RU

class Button
{
private Lamp lamp;
public Button(Lamp lamp)
{this.lamp = lamp;}
public void Detect()
{
if(GetPhisicalState())
lamp.TurnOn();
else lamp.TurnOff();
}
}
Лампочка - 2
interface IButtonClient
{
void TurnOn();
void TurnOff();
}
class Button
{
private IButtonClient client;
public Button(IButtonClient client)
{ this.client = client; }
public void Detect()
{
if (GetPhisicalState()) client.TurnOn();
else client.TurnOff();
}
}
90 TIKTOKCOACH.RU

class Button
{
private Lamp lamp;
public Button(Lamp lamp)
{this.lamp = lamp;}
public void Detect()
{
if(GetPhisicalState())
lamp.TurnOn();
else lamp.TurnOff();
}
}
Следствия
• Сторонний код должен быть скрыт за
обертками, реализующими собственные
интерфейсы
• Обертки можно строить к старому
наследуемому коду
• Переписывание не всегда самый лучший
путь
91 TIKTOKCOACH.RU
DI-контейнеры
В коде
new Circle(3,4, 10)
new Rectangle(0, 0, 10, 10)

92 TIKTOKCOACH.RU

Фабрика
Shape Create(ShapeType sType)
{
switch(sType)
{
case Circle: return new Circle(3,4, 10);
case Rec: new Rectangle(0, 0, 10, 10);
}
}
«Обычное» unit-тестирование
Тестирование основанное на состояниях
Недостатки:
• Требует знания о внутреннем состоянии
объекта –возможно нарушение
инкапсуляции
• Нарушает принципы ООП

93 TIKTOKCOACH.RU
Mock-объекты
Тестирование основанное на поведении –
• какие методы вызываются,
• в какой последовательности,
• какие результаты выдают
Mock-объект – прокси-объект, который
определяет прошел ли тестируемый
объект тест или нет
94 TIKTOKCOACH.RU
Дверь и таймер -1
abstract class Door
{
abstract void Lock();
abstract void Unlock();
abstract bool IsDoorOpen() ;
}

95 TIKTOKCOACH.RU
Дверь и таймер -2
abstract class Timer
{
abstract void Regsiter(int timeout, TimerClient
client);
}
abstract class TimerClient
{
abstract void TimeOut();
}
96 TIKTOKCOACH.RU
Дверь и таймер -3
Как правильно объединить две иерархи?

97 TIKTOKCOACH.RU
Дверь и таймер - 4
abstract class Door: TimerClient {}
abstract class TimedDoor: Door{}

98 TIKTOKCOACH.RU
Дверь и таймер - 5
class TimedDoorAdapter:
TimerClient
{
private TimedDoor
itsTimedDoor;
public void TimeOut(int
timeOutId)
{

itsTimedDoor.DoorTimeOut(ti
meOutId);
}
}
99 TIKTOKCOACH.RU

class TimedDoor : Door
{
public virtual void
DoorTimeOut(int timeOutId);
};
Дверь и таймер - 6
interface Door
{
void Lock();
void Unlock();
bool IsDoorOpen() ;
}

class TimedDoor: Door,
TImerClient
{}
100 TIKTOKCOACH.RU

interface Timer
{
void Regsiter(int timeout,
TimerClient client);
}
interface TimerClient
{
interface void TimeOut();
}
Может быть проблема надумана?

101KTOKCOACH.RU
94
Принцип соответствия интерфейсов

Класс не должен зависеть от
интерфейсов, которые он не
использует

102 TIKTOKCOACH.RU
Жирный интерфейс

103 TIKTOKCOACH.RU
Жирный интерфейс

104 TIKTOKCOACH.RU
Ответственность

105 TIKTOKCOACH.RU
Принцип единой ответственности

Должна быть ровно одна причина
для изменения класса

106 TIKTOKCOACH.RU
Модульность
1. Какой наилучший критерий для
разбиения на модули?
2. Какие отношения существуют
между модулями и каким
принципам они подчиняются?
3. Что первично класс или
модуль?
4. Физическое представление
модулей?

107 TIKTOKCOACH.RU
Принцип эквивалентности

Единица повторного
использования = единице релиза.
Это единица называется
пакетом.

108 TIKTOKCOACH.RU
Повторное использование

Классы в пакете повторно
используются совместно. То есть,
если хотя бы один класс пакета
повторно используется, то повторно
используются и все остальные.

109 TIKTOKCOACH.RU
Обобщенная замкнутость

Классы в пакете должны быть
замкнуты от одних и тех же
изменений. Изменение, влияющее на
пакет, влияет на все классы этого
пакета.

110 TIKTOKCOACH.RU
Ациклические зависимости

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

111 TIKTOKCOACH.RU
Разрыв циклов

112 TIKTOKCOACH.RU
Patterns
vs
Antipatterns
113 TIKTOKCOACH.RU
Стабильные зависимости

Зависимости между пакетами
должны быть направлены в сторону
более стабильных пакетов

114 TIKTOKCOACH.RU
Метрика нестабильности I

Ca – зависимые классы за пределами пакета
Ce – зависисмые классы внутри пакета
𝐶𝑒
𝐼=
𝐶𝑒 + 𝐶𝑎

115 TIKTOKCOACH.RU
Стабильные абстракции

Пакеты, которые максимально
стабильны, должны быть
абстрактными. Нестабильными
пакеты должны быть максимально
конкретными.

116 TIKTOKCOACH.RU
Метрика абстрактности

Абстрактные классы
𝐴=
Общее число классов

117 TIKTOKCOACH.RU
Метрики

118 TIKTOKCOACH.RU

More Related Content

Similar to ооп

2014-02-01 01 Евгений Тюменцев. Качественный код - миф
2014-02-01 01 Евгений Тюменцев. Качественный код - миф2014-02-01 01 Евгений Тюменцев. Качественный код - миф
2014-02-01 01 Евгений Тюменцев. Качественный код - мифОмские ИТ-субботники
 
Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.
Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.
Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.
SmartTools
 
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Dev2Dev
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Dev2Dev
 
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
etyumentcev
 
Coding like a sex
Coding like a sexCoding like a sex
Coding like a sex
Max Arshinov
 
Kotlin на практике
Kotlin на практикеKotlin на практике
Kotlin на практике
Виталий Бендик
 
Deliteli i kratnye_1
Deliteli i kratnye_1Deliteli i kratnye_1
Deliteli i kratnye_1
Иван Иванов
 
зачем нужны системы управления проектами
зачем нужны системы управления проектамизачем нужны системы управления проектами
зачем нужны системы управления проектами
etyumentcev
 
зачем нужны системы управления проектами и задачами
зачем нужны системы управления проектами и задачамизачем нужны системы управления проектами и задачами
зачем нужны системы управления проектами и задачами
tiktokcoach
 
Машинное обучение в электронной коммерции — практика использования и подводны...
Машинное обучение в электронной коммерции — практика использования и подводны...Машинное обучение в электронной коммерции — практика использования и подводны...
Машинное обучение в электронной коммерции — практика использования и подводны...
Ontico
 
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
Mail.ru Group
 
Сергей Скроботов "Баннерокрутилка: разбираем на куски"
Сергей Скроботов "Баннерокрутилка: разбираем на куски"Сергей Скроботов "Баннерокрутилка: разбираем на куски"
Сергей Скроботов "Баннерокрутилка: разбираем на куски"
Yandex
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
Technopark
 

Similar to ооп (15)

2014-02-01 01 Евгений Тюменцев. Качественный код - миф
2014-02-01 01 Евгений Тюменцев. Качественный код - миф2014-02-01 01 Евгений Тюменцев. Качественный код - миф
2014-02-01 01 Евгений Тюменцев. Качественный код - миф
 
Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.
Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.
Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.
 
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
 
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
 
Coding like a sex
Coding like a sexCoding like a sex
Coding like a sex
 
Python
PythonPython
Python
 
Kotlin на практике
Kotlin на практикеKotlin на практике
Kotlin на практике
 
Deliteli i kratnye_1
Deliteli i kratnye_1Deliteli i kratnye_1
Deliteli i kratnye_1
 
зачем нужны системы управления проектами
зачем нужны системы управления проектамизачем нужны системы управления проектами
зачем нужны системы управления проектами
 
зачем нужны системы управления проектами и задачами
зачем нужны системы управления проектами и задачамизачем нужны системы управления проектами и задачами
зачем нужны системы управления проектами и задачами
 
Машинное обучение в электронной коммерции — практика использования и подводны...
Машинное обучение в электронной коммерции — практика использования и подводны...Машинное обучение в электронной коммерции — практика использования и подводны...
Машинное обучение в электронной коммерции — практика использования и подводны...
 
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
 
Сергей Скроботов "Баннерокрутилка: разбираем на куски"
Сергей Скроботов "Баннерокрутилка: разбираем на куски"Сергей Скроботов "Баннерокрутилка: разбираем на куски"
Сергей Скроботов "Баннерокрутилка: разбираем на куски"
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 

More from etyumentcev

Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
etyumentcev
 
Платформа SmartActors
Платформа SmartActorsПлатформа SmartActors
Платформа SmartActors
etyumentcev
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
etyumentcev
 
Программирование глазами математика
Программирование глазами математикаПрограммирование глазами математика
Программирование глазами математика
etyumentcev
 
Большие данные: как могут навредить и ка могут помочь?
Большие данные: как могут навредить и ка могут помочь?Большие данные: как могут навредить и ка могут помочь?
Большие данные: как могут навредить и ка могут помочь?
etyumentcev
 
матлогика для программистов
матлогика для программистовматлогика для программистов
матлогика для программистов
etyumentcev
 
Математическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповМатематическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принципов
etyumentcev
 
Как 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проектКак 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проект
etyumentcev
 
разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4
etyumentcev
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
etyumentcev
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2
etyumentcev
 
разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1etyumentcev
 
высокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затратвысокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затрат
etyumentcev
 
введение в Sql
введение в Sqlвведение в Sql
введение в Sqletyumentcev
 
ук 03.010.01 2011
ук 03.010.01 2011ук 03.010.01 2011
ук 03.010.01 2011etyumentcev
 
ук 03.009.01 2011
ук 03.009.01 2011ук 03.009.01 2011
ук 03.009.01 2011etyumentcev
 
ук 03.007.02 2011
ук 03.007.02 2011ук 03.007.02 2011
ук 03.007.02 2011etyumentcev
 
ук 03.006.02 2011
ук 03.006.02 2011ук 03.006.02 2011
ук 03.006.02 2011etyumentcev
 
ук 03.005.03 2011
ук 03.005.03 2011ук 03.005.03 2011
ук 03.005.03 2011etyumentcev
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011etyumentcev
 

More from etyumentcev (20)

Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
 
Платформа SmartActors
Платформа SmartActorsПлатформа SmartActors
Платформа SmartActors
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
 
Программирование глазами математика
Программирование глазами математикаПрограммирование глазами математика
Программирование глазами математика
 
Большие данные: как могут навредить и ка могут помочь?
Большие данные: как могут навредить и ка могут помочь?Большие данные: как могут навредить и ка могут помочь?
Большие данные: как могут навредить и ка могут помочь?
 
матлогика для программистов
матлогика для программистовматлогика для программистов
матлогика для программистов
 
Математическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповМатематическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принципов
 
Как 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проектКак 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проект
 
разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2
 
разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1
 
высокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затратвысокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затрат
 
введение в Sql
введение в Sqlвведение в Sql
введение в Sql
 
ук 03.010.01 2011
ук 03.010.01 2011ук 03.010.01 2011
ук 03.010.01 2011
 
ук 03.009.01 2011
ук 03.009.01 2011ук 03.009.01 2011
ук 03.009.01 2011
 
ук 03.007.02 2011
ук 03.007.02 2011ук 03.007.02 2011
ук 03.007.02 2011
 
ук 03.006.02 2011
ук 03.006.02 2011ук 03.006.02 2011
ук 03.006.02 2011
 
ук 03.005.03 2011
ук 03.005.03 2011ук 03.005.03 2011
ук 03.005.03 2011
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011
 

ооп