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
Oleg Dashevskii
October 21, 2013
Education
80
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
2026年度春学期 統計学 第7回 データの関係を知る(2)ー 回帰と決定係数 (2026. 5. 21)
akiraasano
PRO
0
250
輻射安全管理系統2.0暨輻防e++學園平台說明會
aecrp
0
1.9k
2026年度春学期 統計学 第9回 確からしさを記述する ー 確率 (2026. 5. 28)
akiraasano
PRO
0
180
Laura Wilson - The Quarterly PR Pivot
laurawilsonbseo1
1
390
Lectura 1 (PIT : Python Basico)
robintux
0
1k
【デザイナー就活講座】 デザイナー就活市場・企業探し・ポートフォリオのポイント
koheihasebe
0
410
Where Data Meets Storytelling
georgesinnott
0
150
Lectura 2 (PIT : Python Basico)
robintux
0
400
0513
cbtlibrary
0
260
Interaction - Lecture 10 - Information Visualisation (4019538FNR)
signer
PRO
0
2.7k
生成AI時代の情報発信
molmolken
0
160
[2026前期火5] 論理学(京都大学文学部 前期 第11回)「ハーモニー:三層モデルと保存拡大」
yatabe
0
210
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
460
Exploring anti-patterns in Rails
aemeredith
3
460
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
410
Building Flexible Design Systems
yeseniaperezcruz
330
40k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.9k
Mobile First: as difficult as doing things right
swwweet
225
10k
Making Projects Easy
brettharned
120
6.7k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Side Projects
sachag
455
43k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
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; }; ЗАДАНИЕ ПОРЯДКА
КОНЕЦ СЕДЬМОЙ ЛЕКЦИИ