You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
8.<!-- .element: class="fragment fade-in" --> pola i metody statyczne
26
+
27
+
___
28
+
29
+
### Pre-work
30
+
31
+
* Dowiedzcie się czym jest problem diamentowy
32
+
* Poczytajcie o zasadach SOLID, dotyczących pisania dobrego kodu obiektowego
33
+
* Lektura o wzorcach projektowych z przykładami w C++ - [refactoring.guru](https://refactoring.guru/design-patterns)
34
+
* Spróbujcie w grupie metodą Copy & Paste dorzucić system budowania cmake do projektu. W tym celu popatrzcie na dotychczasowe zadania domowe i plik CMakeLists.txt.
35
+
36
+
___
37
+
38
+
## Projekt grupowy
39
+
40
+
Wykorzystajcie kod napisany podczas zajęć. Możecie też skorzystać z kodu w katalogu [solutions](solutions)
41
+
42
+
Projekt grupowy - kontynuacja. Możecie zmienić grupę jeśli chcecie ;)
43
+
44
+
___
45
+
46
+
## Organizacja prac
47
+
48
+
* Jak wyglądało wasze daily?
49
+
* Czy Code Review nie jest zaniedbane?
50
+
* Czy współpraca idzie gładko?
51
+
* Zróbcie sobie retrospektywę :)
52
+
53
+
___
54
+
55
+
### Punktacja
56
+
57
+
* 3 pierwsze zadania - 5 punktów
58
+
* zadania 4, 5, 6 - 8 punktów
59
+
* 20 punktów za dostarczenie wszystkich 6 zadań przed 05.07.2020 (niedziela) do 23:59
60
+
* brak punktów bonusowych za dostarczenie tylko części zadań przed 05.07
61
+
* 6 punktów za pracę w grupie dla każdej osoby z grupy.
62
+
63
+
___
64
+
65
+
## Zadanie 1
66
+
67
+
Napisz klasę `Store`, która będzie umożliwiała dokonywanie zakupów. Wykorzystaj poniższy enum i funkcje.
Copy file name to clipboardExpand all lines: module2/presentation_inheritance.md
+50-10Lines changed: 50 additions & 10 deletions
Original file line number
Diff line number
Diff line change
@@ -13,8 +13,10 @@ ___
13
13
## Wprowadzenie do dziedziczenia
14
14
15
15
Podczas implementacji klas, często możemy zauważyć, że część cech składowych klasy można wykorzystać także w innych klasach.
16
+
<!-- .element: class="fragment fade-in" -->
16
17
17
-
Weźmy pod lupę klasę Komputer. Jeżeli chcielibyśmy utworzyć klasy: laptop, PC, tablet, to część metod oraz składowych klasy musielibyśmy niepotrzebnie powielić.
18
+
Weźmy pod lupę klasę `Computer`. Jeżeli chcielibyśmy utworzyć klasy: `Laptop`, `PC`, `Tablet`, to część metod oraz składowych klasy musielibyśmy powielić.
19
+
<!-- .element: class="fragment fade-in" -->
18
20
19
21
___
20
22
@@ -126,35 +128,46 @@ private:
126
128
Keyboard keyboard_;
127
129
};
128
130
```
131
+
<!-- .element: class="fragment fade-in" -->
129
132
130
133
___
131
134
132
135
## Klasy bazowe i pochodne
133
136
134
-
Klasa, po której dziedziczymy, nazywają się <spanclass="fragment highlight-green">**klasą bazową**</span>.
137
+
Klasa, po której dziedziczymy, nazywają się <spanclass="fragment highlight-green">**klasą bazową (base class)**</span>.
138
+
<!-- .element: class="fragment fade-in" -->
135
139
136
-
Klasy, które dziedziczą nazywa się <spanclass="fragment highlight-green">**klasami pochodnymi**</span>.
140
+
Klasa, która dziedziczy nazywa się <spanclass="fragment highlight-green">**klasą pochodną (derived class)**</span>.
141
+
<!-- .element: class="fragment fade-in" -->
137
142
138
143
Inaczej, klasa, po której dziedziczymy to rodzic (parent class).
144
+
<!-- .element: class="fragment fade-in" -->
139
145
140
146
Klasa, która dziedziczy to dziecko (child class).
147
+
<!-- .element: class="fragment fade-in" -->
141
148
142
149
___
143
150
144
-
### Co z metodami klas `Laptop` i `Tablet`, czy można wydzielić kolejną klasę?
151
+
### Co z metodami klas `Laptop` i `Tablet`?
152
+
153
+
#### Czy można wydzielić kolejną klasę?
154
+
<!-- .element: class="fragment fade-in" -->
145
155
146
156
```cpp
147
157
voiddisplay();
148
158
voidgetUserInput();
149
159
```
160
+
<!-- .element: class="fragment fade-in" -->
150
161
151
162
___
152
163
153
164
## Klasa `Screen` i `TouchScreen`
154
165
155
166
Załóżmy, że dodajemy klasę `Screen`. Klasa ta wyświetla na bieżąco interfejs użytkownika.
167
+
<!-- .element: class="fragment fade-in" -->
156
168
157
-
Chcemy też stworzyć klasę reprezentującą ekran dotykowy, który również umożliwia odczyt akcji od użytkownika i ich wyświetlanie.
169
+
Chcemy też stworzyć klasę reprezentującą ekran dotykowy - `TouchScreen`, który również umożliwia odczyt akcji od użytkownika i ich wyświetlanie.
170
+
<!-- .element: class="fragment fade-in" -->
158
171
159
172
<style>
160
173
.container {
@@ -181,6 +194,7 @@ private:
181
194
Monitor monitor_;
182
195
};
183
196
```
197
+
<!-- .element: class="fragment fade-in" -->
184
198
185
199
</div>
186
200
@@ -199,12 +213,14 @@ private:
199
213
Monitor monitor_;
200
214
};
201
215
```
216
+
<!-- .element: class="fragment fade-in" -->
202
217
203
218
</div>
204
219
205
220
</div>
206
221
207
222
### Jak uprościć powyższy kod?
223
+
<!-- .element: class="fragment fade-in" -->
208
224
209
225
___
210
226
@@ -220,7 +236,10 @@ private:
220
236
221
237
Monitor monitor_;
222
238
};
239
+
```
240
+
<!-- .element: class="fragment fade-in" -->
223
241
242
+
```cpp
224
243
class TouchScreen : public Screen {
225
244
public:
226
245
void getUserInput();
@@ -229,10 +248,11 @@ private:
229
248
void displayKeyboard();
230
249
};
231
250
```
251
+
<!-- .element: class="fragment fade-in" -->
232
252
233
253
___
234
254
235
-
## Wielodziedziczenie #1
255
+
## Wielodziedziczenie
236
256
237
257
```cpp
238
258
classScreen {
@@ -279,13 +299,25 @@ class Tablet : public Computer,
279
299
280
300
___
281
301
282
-
## Wielodziedziczenie #2
302
+
## Wielodziedziczenie - disclaimer
303
+
304
+
Wielodziedziczenie to dziedziczenie z kliku klas bazowych.
305
+
306
+
Wybór implementacji zależy od programisty.
307
+
<!-- .element: class="fragment fade-in" -->
308
+
309
+
Nie zawsze wielodziedziczenie będzie lepszym rozwiązaniem.
310
+
<!-- .element: class="fragment fade-in" -->
283
311
284
-
Wybór implementacji zależy od programisty. Nie zawsze wielodziedziczenie będzie lepszym rozwiązaniem. Należy się zawsze zastanowić czy dziedziczenie po konkretnej klasie uprości nam program i czy nie będzie powodować żadnych komplikacji w dalszym procesie rozbudowy naszego programu.
312
+
Należy się zawsze zastanowić czy dziedziczenie po konkretnej klasie uprości nam program i czy nie będzie powodować żadnych komplikacji w dalszym procesie rozbudowy naszego programu.
313
+
<!-- .element: class="fragment fade-in" -->
314
+
315
+
Najwyżej trzeba będzie refaktoryzować program ;)
316
+
<!-- .element: class="fragment fade-in" -->
285
317
286
318
___
287
319
288
-
## Wielodziedziczenie - problemy#1
320
+
## Dziedziczenie - problemy
289
321
290
322
```cpp
291
323
struct Bird {
@@ -308,7 +340,7 @@ struct Hummingbird {
308
340
___
309
341
<!-- .slide: style="font-size: 0.9em" -->
310
342
311
-
## Wielodziedziczenie - problemy #2
343
+
## Dziedziczenie - zasada LSP
312
344
313
345
Jeżeli spróbujemy teraz uprościć klasę poprzez dziedziczenie pojawi się problem:
314
346
@@ -335,4 +367,12 @@ uniknąć podobnych problemów.
335
367
336
368
___
337
369
370
+
### Dla ciekawskich
371
+
372
+
Poczytajcie o zasadzie Liskov Substitution Principle (LSP). Mówi ona jak powinno / nie powinno się projektować kodu obiektowego. Ta zasada została złamana w ostatnim przykładzie.
0 commit comments