Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
АФТИ ООП 2013-2014. Лекция I/07
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Oleg Dashevskii
October 21, 2013
Education
77
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
АФТИ ООП 2013-2014. Лекция I/07
Oleg Dashevskii
October 21, 2013
More Decks by Oleg Dashevskii
See All by Oleg Dashevskii
Лекция № 13. Практическое руководство по разработке
be9
0
1.6k
Лекция № 12. Ещё о проектировании
be9
0
1.5k
Лекция № 11. Принцип отделения интерфейса. «Малое ООП»
be9
0
1.6k
Лекция № 10. Графическая нотация. Принципы LSP и DIP
be9
0
1.6k
Лекция № 9. Отношения между классами. Принцип открытия-закрытия
be9
0
1.5k
Лекция № 8. Хорошие и плохие ОО-программы
be9
0
1.5k
Лекция № 7. algorithm. Исключения
be9
1
1.5k
Лекция № 6. Стандартная библиотека C++. Часть 2
be9
0
1.6k
Лекция № 5. Стандартная библиотека C++. Часть 1
be9
0
1.6k
Other Decks in Education
See All in Education
Throw Yourself In! - How I've learned English and What I'm Facing
georgeorge
1
180
生成AI時代のエンジニア育成について考えてみた
akasan
0
170
!コスパよくインターンに受かる方法!
ruribou
1
290
Info Session MSc Computer Science & MSc Applied Informatics
signer
PRO
0
300
DECADE_ゴルフ_コースマネジメント完全ガイド.pdf
ozekinote
0
110
2026年度春学期 統計学 第9回 確からしさを記述する ー 確率 (2026. 5. 28)
akiraasano
PRO
0
130
[2026前期火5] 論理学(京都大学文学部 前期 第12回)「証明を走らせる:カリー・ハワード対応」
yatabe
0
170
Human-AI Interaction - Lecture 11 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
1.1k
モブ社員がモブエンジニアを名乗って得られたこと_20260413
masakiokuda
4
540
LinkedIn
matleenalaakso
0
4.4k
Course Review - Lecture 13 - Information Visualisation (4019538FNR)
signer
PRO
1
2.7k
면접관 눈에 띄는 데이터 분석 포트폴리오 만드는 법 | 2026년 5월 세미나
datarian
0
880
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
1.1k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
240
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Typedesign – Prime Four
hannesfritz
42
3.1k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
KATA
mclloyd
PRO
35
15k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
Google's AI Overviews - The New Search
badams
0
1.1k
Side Projects
sachag
455
43k
Transcript
ОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ Лекция № 7 21.10.2013 г.
FLASHBACK • ООП: объектно-ориентированное проектирование. • Лучше проектировать пораньше, чтобы
потом все не переделывать. • Один класс — одна зона ответственности (SRP). • Два инструмента: наследование и композиция — позволяют распределять функционал по нескольким классам.
ПРИНЦИП ОТКРЫТИЯ-ЗАКРЫТИЯ (OPEN-CLOSED PRINCIPLE) Программные объекты: (классы, модули, методы, …)
Открыты для расширения Закрыты для модификации но …
Client Server Теперь хочется так: Было: Client Cheap Server Quick
Server Cool Server ?
Client Abstract Server Cheap Server Quick Server Cool Server
/* shape.h */ enum ShapeType { CIRCLE, SQUARE }; struct
Shape { ! ShapeType type; }; /* circle.h */ struct Circle { ! ShapeType type; ! double radius; ! Point center;! }; void DrawCircle(struct Circle *); /* square.h */ struct Square { ! ShapeType type; ! double side; ! Point topLeft;! }; void DrawSquare(struct Square *); Процедурный style
/* drawallshapes.c */ typedef struct Shape *ShapePointer; void DrawAllShapes(ShapePointer *list,
int n) { ! int i; ! for (i = 0; i < n; ++i) { ! ! ShapePointer *s = list[i]; ! ! switch (s->type) { ! ! ! case SQUARE: DrawSquare((struct Square *)s); break; ! ! ! case CIRCLE: DrawCircle((struct Circle *)s); break; ! ! } ! } }
class Shape { public: ! virtual void Draw() const =
0; }; class Square : public Shape { public: ! // ... ! virtual void Draw() const; }; class Circle : public Shape { public: ! // ... ! virtual void Draw() const; }; void DrawAllShapes(Shape **list, int n) { ! for (int i = 0; i < n; ++i) ! ! list[n]->Draw(); } OO-style
Усложнение Сначала рисовать все окружности, а затем все квадраты
КАК ВООБЩЕ МОЖНО ВНОСИТЬ ИЗМЕНЕНИЯ? Способ первый Текущее состояние системы
фича + Новое состояние системы =
Состояние системы еще фича + еще фича + еще фича
+ еще фича + + =
ИНОЙ СПОСОБ Текущее состояние системы Фича и Фича расщепляется на
Абстракция Фича’ Дано: Шаг первый
Текущее состояние системы + Абстракция = Система с новой возможностью
Шаг второй Шаг третий Система с новой возможностью Фича’ + = Система с реализованной новой возможностью
Какая абстракция соответствует тому, чтобы рисовать сначала окружности, а потом
квадраты?
class Shape { public: ! virtual void Draw() const =
0; ! virtual bool Precedes(const Shape &another) = 0; }; ЗАДАНИЕ ПОРЯДКА
КОНЕЦ СЕДЬМОЙ ЛЕКЦИИ