rabbit-slide-giosakti-201711-patterns-software-engineering 2017.11.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rabbit +1 -0
- data/README.md +35 -0
- data/Rakefile +21 -0
- data/config.yaml +24 -0
- data/images/a_pattern_language.jpg +0 -0
- data/images/abstract_factory.png +0 -0
- data/images/adapter_pattern.png +0 -0
- data/images/christopher_alexander.jpg +0 -0
- data/images/design_patterns_gof.jpg +0 -0
- data/images/mvc_sketch.png +0 -0
- data/images/observer_pattern.png +0 -0
- data/patterns-software-engineering.rab +605 -0
- data/pdf/201711-patterns-software-engineering-201711-patterns-software-engineering.pdf +0 -0
- data/theme.rb +24 -0
- metadata +87 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5266d7366c422cffe54bc00585262c92f6f522a6
|
4
|
+
data.tar.gz: b85da1be39d8d486d97fd457dead2d70d5de18f4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8f00c0df83f541f2e69bd9618b85e803fa03a3650ee3b80fdbabe0314d7c1e0f841bcf0b8b4f25d2cd11260abb009c23499b21250f62bbccd87157391ef6583a
|
7
|
+
data.tar.gz: 40f2a07f2f6baa70812b996c4586689143135071b81e54b1ca91de5dc13d14b66b18b704b94679644368e9f5b8233857544bf30f7aa195d3ae4cd9e5ede9664d
|
data/.rabbit
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
patterns-software-engineering.rab
|
data/README.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# Patterns in Software Engineering
|
2
|
+
This talk gives intro about patterns in software engineering
|
3
|
+
|
4
|
+
## License
|
5
|
+
|
6
|
+
### Slide
|
7
|
+
|
8
|
+
MIT
|
9
|
+
|
10
|
+
Use the followings for notation of the author:
|
11
|
+
|
12
|
+
* Giovanni Sakti
|
13
|
+
|
14
|
+
## For author
|
15
|
+
|
16
|
+
### Show
|
17
|
+
|
18
|
+
rake
|
19
|
+
|
20
|
+
### Publish
|
21
|
+
|
22
|
+
rake publish
|
23
|
+
|
24
|
+
# or for rubygems only
|
25
|
+
rake publish:rubygems
|
26
|
+
|
27
|
+
## For viewers
|
28
|
+
|
29
|
+
### Install
|
30
|
+
|
31
|
+
gem install rabbit-slide-giosakti-201711-patterns-software-engineering
|
32
|
+
|
33
|
+
### Show
|
34
|
+
|
35
|
+
rabbit rabbit-slide-giosakti-201711-patterns-software-engineering.gem
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require "rabbit/task/slide"
|
2
|
+
|
3
|
+
# Edit ./config.yaml to customize meta data
|
4
|
+
|
5
|
+
spec = nil
|
6
|
+
Rabbit::Task::Slide.new do |task|
|
7
|
+
spec = task.spec
|
8
|
+
spec.files += Dir.glob("images/**/*.*")
|
9
|
+
# spec.files -= Dir.glob("private/**/*.*")
|
10
|
+
|
11
|
+
# You may include other themes here
|
12
|
+
# spec.add_runtime_dependency("rabbit-theme-nyankosakana")
|
13
|
+
spec.add_runtime_dependency("rabbit-theme-starqle")
|
14
|
+
# spec.add_runtime_dependency("rabbit-theme-yart")
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Tag #{spec.version}"
|
18
|
+
task :tag do
|
19
|
+
sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
|
20
|
+
sh("git", "push", "--tags")
|
21
|
+
end
|
data/config.yaml
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
---
|
2
|
+
id: 201711-patterns-software-engineering
|
3
|
+
base_name: 201711-patterns-software-engineering
|
4
|
+
tags:
|
5
|
+
- rabbit
|
6
|
+
- patterns
|
7
|
+
- design patterns
|
8
|
+
- architectural patterns
|
9
|
+
presentation_date: 2017-11-23
|
10
|
+
version: 2017.11.21.1
|
11
|
+
licenses:
|
12
|
+
- MIT
|
13
|
+
slideshare_id:
|
14
|
+
speaker_deck_id:
|
15
|
+
ustream_id:
|
16
|
+
vimeo_id:
|
17
|
+
youtube_id:
|
18
|
+
author:
|
19
|
+
markup_language: :rd
|
20
|
+
name: Giovanni Sakti
|
21
|
+
email: giosakti@gmail.com
|
22
|
+
rubygems_user: giosakti
|
23
|
+
slideshare_user:
|
24
|
+
speaker_deck_user: giosakti
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,605 @@
|
|
1
|
+
= Patterns
|
2
|
+
|
3
|
+
: subtitle
|
4
|
+
in Software Engineering
|
5
|
+
: author
|
6
|
+
Giovanni Sakti
|
7
|
+
: institution
|
8
|
+
Starqle
|
9
|
+
% : content-source
|
10
|
+
% id_ruby
|
11
|
+
% : date
|
12
|
+
% 2017-11-01
|
13
|
+
: theme
|
14
|
+
starqle
|
15
|
+
|
16
|
+
= Patterns
|
17
|
+
|
18
|
+
(('tag:center'))What is Patterns?
|
19
|
+
|
20
|
+
== properties
|
21
|
+
: hide-title
|
22
|
+
true
|
23
|
+
|
24
|
+
= Patterns
|
25
|
+
|
26
|
+
# blockquote
|
27
|
+
# title = Christopher Alexander
|
28
|
+
Patterns describes a problem, which occurs over and over again in our environment and then desribes the core of the solution to that problem...
|
29
|
+
|
30
|
+
= Patterns
|
31
|
+
|
32
|
+
# blockquote
|
33
|
+
# title = Christopher Alexander
|
34
|
+
...in such a way that you can use this solution a million times over without ever doing it the same way twice.
|
35
|
+
|
36
|
+
= Patterns
|
37
|
+
|
38
|
+
(('tag:center'))Okay, but who is Christopher Alexander?
|
39
|
+
|
40
|
+
== properties
|
41
|
+
: hide-title
|
42
|
+
true
|
43
|
+
|
44
|
+
= Patterns
|
45
|
+
|
46
|
+
# image
|
47
|
+
# src = images/christopher_alexander.jpg
|
48
|
+
# keep_ratio = true
|
49
|
+
# width = 300
|
50
|
+
(('tag:center'))Christopher Alexander is an ((*Architect*))
|
51
|
+
|
52
|
+
== properties
|
53
|
+
: hide-title
|
54
|
+
true
|
55
|
+
|
56
|
+
= Patterns
|
57
|
+
|
58
|
+
(('tag:center'))He authored widely-influential book in 1977.
|
59
|
+
|
60
|
+
== properties
|
61
|
+
: hide-title
|
62
|
+
true
|
63
|
+
|
64
|
+
= Patterns
|
65
|
+
|
66
|
+
# image
|
67
|
+
# src = images/a_pattern_language.jpg
|
68
|
+
# keep_ratio = true
|
69
|
+
# height = 400
|
70
|
+
|
71
|
+
== properties
|
72
|
+
: hide-title
|
73
|
+
true
|
74
|
+
|
75
|
+
= Patterns
|
76
|
+
|
77
|
+
(('tag:center'))The book influences multiple disciplines including software engineering.
|
78
|
+
|
79
|
+
== properties
|
80
|
+
: hide-title
|
81
|
+
true
|
82
|
+
|
83
|
+
= Patterns
|
84
|
+
|
85
|
+
(('tag:center'))So, what is patterns from the viewpoint of software engineering?
|
86
|
+
|
87
|
+
== properties
|
88
|
+
: hide-title
|
89
|
+
true
|
90
|
+
|
91
|
+
= Patterns
|
92
|
+
|
93
|
+
(('tag:center'))Patterns are ((*distilled commonalities*)) that you find in software.
|
94
|
+
|
95
|
+
= Patterns
|
96
|
+
|
97
|
+
(('tag:center'))It allows us to deconstruct a large complex structure and build using the pattern itself.
|
98
|
+
|
99
|
+
= Patterns
|
100
|
+
|
101
|
+
(('tag:center'))Patterns contain solution that have ((*developed*)) and ((*evolved*)) over time.
|
102
|
+
|
103
|
+
= Patterns
|
104
|
+
|
105
|
+
(('tag:center'))It is rarely designs that people tend to get initially.
|
106
|
+
|
107
|
+
= Reusability
|
108
|
+
|
109
|
+
(('tag:center'))We know that designing software is ((*hard*)).
|
110
|
+
|
111
|
+
== properties
|
112
|
+
: hide-title
|
113
|
+
true
|
114
|
+
|
115
|
+
= Reusability
|
116
|
+
|
117
|
+
(('tag:center'))Designing software with reusable components are even ((*harder*)).
|
118
|
+
|
119
|
+
== properties
|
120
|
+
: hide-title
|
121
|
+
true
|
122
|
+
|
123
|
+
= Reusability
|
124
|
+
|
125
|
+
(('tag:center'))Your design should be ((*specific*)) to the problem at hand, but ((*general enough*)) to address future problems and requirements.
|
126
|
+
|
127
|
+
== properties
|
128
|
+
: hide-title
|
129
|
+
true
|
130
|
+
|
131
|
+
= Reusability
|
132
|
+
|
133
|
+
(('tag:center'))Reusable & flexible design is ((*difficult*)), if not ((*impossible*)), to get "right" the first time.\n\n Even for experienced designer.
|
134
|
+
|
135
|
+
== properties
|
136
|
+
: hide-title
|
137
|
+
true
|
138
|
+
|
139
|
+
= Reusability
|
140
|
+
|
141
|
+
(('tag:center'))Instead, experienced designer won't try to solve every problem from scratch.
|
142
|
+
|
143
|
+
= Reusability
|
144
|
+
|
145
|
+
(('tag:center'))They will try to ((*reuse*)) existing solution instead.
|
146
|
+
|
147
|
+
= Reusability
|
148
|
+
|
149
|
+
(('tag:center'))So, patterns help designer gets a design "right" ((*faster*)).
|
150
|
+
|
151
|
+
= Expectations
|
152
|
+
|
153
|
+
(('tag:center'))What can learning patterns help you?
|
154
|
+
|
155
|
+
== properties
|
156
|
+
: hide-title
|
157
|
+
true
|
158
|
+
|
159
|
+
= Expectations
|
160
|
+
|
161
|
+
(('tag:center'))Common design vocabulary
|
162
|
+
|
163
|
+
= Expectations
|
164
|
+
|
165
|
+
(('tag:center'))Documentation and learning aid
|
166
|
+
# help in understanding complex system
|
167
|
+
|
168
|
+
= Expectations
|
169
|
+
|
170
|
+
(('tag:center'))An adjunct to existing methods
|
171
|
+
# adjunct == supplementary
|
172
|
+
|
173
|
+
= Expectations
|
174
|
+
|
175
|
+
(('tag:center'))A target for refactoring
|
176
|
+
|
177
|
+
= Expectations
|
178
|
+
|
179
|
+
* Common design vocabulary
|
180
|
+
* Documentation and learning aid
|
181
|
+
* An adjunct to existing methods
|
182
|
+
* A target for refactoring
|
183
|
+
|
184
|
+
= Patterns Essential Elements
|
185
|
+
|
186
|
+
(('tag:center'))Patterns Essential Elements
|
187
|
+
|
188
|
+
== properties
|
189
|
+
: hide-title
|
190
|
+
true
|
191
|
+
|
192
|
+
= Patterns Essential Elements
|
193
|
+
|
194
|
+
(('tag:center'))An excellently documented patterns will have several elements attached to it.
|
195
|
+
|
196
|
+
= Patterns Essential Elements
|
197
|
+
|
198
|
+
(('tag:center'))Which you can use to learn more about them.
|
199
|
+
|
200
|
+
= Patterns Essential Elements
|
201
|
+
|
202
|
+
* Name
|
203
|
+
* Intent
|
204
|
+
* Sketch
|
205
|
+
|
206
|
+
= Patterns Essential Elements (cont'd)
|
207
|
+
|
208
|
+
* Problem
|
209
|
+
* Solution
|
210
|
+
* Consequence(s)
|
211
|
+
|
212
|
+
= Patterns Essential Elements (cont'd)
|
213
|
+
|
214
|
+
* When to Use It
|
215
|
+
* Example(s)
|
216
|
+
|
217
|
+
= Patterns Categories
|
218
|
+
|
219
|
+
(('tag:center'))Patterns Categories
|
220
|
+
|
221
|
+
== properties
|
222
|
+
: hide-title
|
223
|
+
true
|
224
|
+
|
225
|
+
= Patterns Categories
|
226
|
+
|
227
|
+
(('tag:center'))There are several categories of patterns, based on the ((*level*)) in which they reside.
|
228
|
+
|
229
|
+
= Patterns Categories
|
230
|
+
|
231
|
+
From "lowest" level to "highest" level\n
|
232
|
+
|
233
|
+
* Programming Paradigms
|
234
|
+
* Design Patterns
|
235
|
+
* Architectural Patterns
|
236
|
+
|
237
|
+
= Patterns Categories
|
238
|
+
|
239
|
+
(('tag:center'))We'll try to discuss it one-by-one.
|
240
|
+
|
241
|
+
= Programming Paradigms
|
242
|
+
|
243
|
+
(('tag:center'))Programming paradigms
|
244
|
+
|
245
|
+
== properties
|
246
|
+
: hide-title
|
247
|
+
true
|
248
|
+
|
249
|
+
= Programming Paradigms
|
250
|
+
|
251
|
+
(('tag:center'))Programming paradigms((-Such as: OO, Functional or Procedural-)), in a way, is a pattern.
|
252
|
+
|
253
|
+
= Programming Paradigms
|
254
|
+
|
255
|
+
(('tag:center'))To be precise, programming paradigms is the ((*smallest*)) and ((*lowest*)) level of patterns possible.
|
256
|
+
|
257
|
+
= Programming Paradigms
|
258
|
+
|
259
|
+
(('tag:center'))Programming paradigms are most likely to ((*influence*)) patterns that reside above it.
|
260
|
+
|
261
|
+
= Programming Paradigms
|
262
|
+
|
263
|
+
(('tag:center'))And because programming paradigms are ((*tightly coupled*)) to programming language..
|
264
|
+
|
265
|
+
= Programming Paradigms
|
266
|
+
|
267
|
+
(('tag:center'))..our pick of programming language may ((*influence*)) the way we design our software.
|
268
|
+
|
269
|
+
= Design Patterns
|
270
|
+
|
271
|
+
(('tag:center'))Design Patterns
|
272
|
+
|
273
|
+
== properties
|
274
|
+
: hide-title
|
275
|
+
true
|
276
|
+
|
277
|
+
= Design Patterns
|
278
|
+
|
279
|
+
(('tag:center'))Design patterns are code-level commonalities.
|
280
|
+
|
281
|
+
= Design Patterns
|
282
|
+
|
283
|
+
(('tag:center'))Providing schemes for refining & building smaller subsystems.
|
284
|
+
|
285
|
+
= Design Patterns
|
286
|
+
|
287
|
+
(('tag:center'))Design patterns are ((*medium-scale tactics*)) that flesh out some of the structure & behaviour of entities and their relationships.
|
288
|
+
|
289
|
+
= Design Patterns
|
290
|
+
|
291
|
+
(('tag:center'))As we discuss previously, design patterns may be ((*influenced*)) by programming paradigms.
|
292
|
+
|
293
|
+
= Design Patterns
|
294
|
+
|
295
|
+
(('tag:center'))Some design patterns can be very ((*important*)) or pale to ((*insignificance*)) due to language that we use.
|
296
|
+
|
297
|
+
= Design Patterns
|
298
|
+
|
299
|
+
(('tag:center'))Design patterns can be categorized further.
|
300
|
+
|
301
|
+
= Design Patterns
|
302
|
+
|
303
|
+
(('tag:center'))But first let us discuss about the last category of pattern.
|
304
|
+
|
305
|
+
== properties
|
306
|
+
: hide-title
|
307
|
+
true
|
308
|
+
|
309
|
+
= Architectural Patterns
|
310
|
+
|
311
|
+
(('tag:center'))Architectural Patterns
|
312
|
+
|
313
|
+
== properties
|
314
|
+
: hide-title
|
315
|
+
true
|
316
|
+
|
317
|
+
= Architectural Patterns
|
318
|
+
|
319
|
+
(('tag:center'))Architectural patterns on the other hand, are commonalities at ((*higher level*)) than design patterns.
|
320
|
+
|
321
|
+
= Architectural Patterns
|
322
|
+
|
323
|
+
(('tag:center'))Architectural patterns are ((*high level strategies*)).
|
324
|
+
|
325
|
+
= Architectural Patterns
|
326
|
+
|
327
|
+
Architectural patterns concerns:
|
328
|
+
|
329
|
+
* Large-scale components
|
330
|
+
* Global properties
|
331
|
+
* Mechanism of a system
|
332
|
+
|
333
|
+
= Architectural Patterns
|
334
|
+
|
335
|
+
(('tag:center'))One of the most well-known architectural pattern is the ((*MVC architecture*)).
|
336
|
+
|
337
|
+
= MVC Architecture
|
338
|
+
|
339
|
+
(('tag:center'))MVC intents are to promote efficient code reuse and parallel development.
|
340
|
+
|
341
|
+
= MVC Architecture
|
342
|
+
|
343
|
+
# image
|
344
|
+
# src = images/mvc_sketch.png
|
345
|
+
# keep_ratio = true
|
346
|
+
# width = 550
|
347
|
+
|
348
|
+
= MVC Architecture
|
349
|
+
|
350
|
+
(('tag:center'))It tries to solve the problem of tightly-coupled relation between UI codes and logic that hinders reusability.
|
351
|
+
|
352
|
+
= MVC Architecture
|
353
|
+
|
354
|
+
(('tag:center'))It does so by separating codes into ((*three concerns*)): models, views and controllers.
|
355
|
+
|
356
|
+
= MVC Architecture
|
357
|
+
|
358
|
+
(('tag:center'))Notice that we already discuss about the name, intent, sketch, problem and solution provided by a pattern.
|
359
|
+
|
360
|
+
= Design Patterns Categories
|
361
|
+
|
362
|
+
(('tag:center'))Design Patterns Categories
|
363
|
+
|
364
|
+
== properties
|
365
|
+
: hide-title
|
366
|
+
true
|
367
|
+
|
368
|
+
= Design Patterns Categories
|
369
|
+
|
370
|
+
(('tag:center'))In arguably the most influential book on design patterns (The ((*GoF book*))),
|
371
|
+
|
372
|
+
= Design Patterns Categories
|
373
|
+
|
374
|
+
# image
|
375
|
+
# src = images/design_patterns_gof.jpg
|
376
|
+
# keep_ratio = true
|
377
|
+
# height = 400
|
378
|
+
|
379
|
+
= Design Patterns Categories
|
380
|
+
|
381
|
+
the authors categorize design patterns into three categories\n
|
382
|
+
|
383
|
+
* Creational
|
384
|
+
* Structural
|
385
|
+
* Behavioural
|
386
|
+
|
387
|
+
= Creational Patterns
|
388
|
+
|
389
|
+
(('tag:center'))Creational Patterns
|
390
|
+
|
391
|
+
== properties
|
392
|
+
: hide-title
|
393
|
+
true
|
394
|
+
|
395
|
+
= Creational Patterns
|
396
|
+
|
397
|
+
(('tag:center'))Creational patterns concern about object creation.
|
398
|
+
|
399
|
+
= Creational Patterns
|
400
|
+
|
401
|
+
(('tag:center'))It ((*abstract*)) the ((*instantiation*)) process.
|
402
|
+
|
403
|
+
= Creational Patterns
|
404
|
+
|
405
|
+
(('tag:center'))They help make a system ((*independent*)) on how its objects are created, composed and represented.
|
406
|
+
|
407
|
+
= Creational Patterns
|
408
|
+
|
409
|
+
(('tag:center'))Useful when creating objects with particular behaviour ((*requires more*)) than simply instantiation a class.
|
410
|
+
|
411
|
+
= Creational Patterns
|
412
|
+
|
413
|
+
(('tag:center'))Favour system that prefer to use ((*object composition*)) instead of class inheritance.
|
414
|
+
|
415
|
+
= Creational Patterns
|
416
|
+
|
417
|
+
(('tag:center'))Example: Abstract Factory
|
418
|
+
|
419
|
+
= Abstract Factory
|
420
|
+
|
421
|
+
(('tag:center'))Provide an interface for creating families of related or dependent objects without specifying their concrete class.
|
422
|
+
|
423
|
+
= Abstract Factory
|
424
|
+
|
425
|
+
# image
|
426
|
+
# src = images/abstract_factory.png
|
427
|
+
# keep_ratio = true
|
428
|
+
# width = 640
|
429
|
+
|
430
|
+
== properties
|
431
|
+
: hide-title
|
432
|
+
true
|
433
|
+
|
434
|
+
= Structural Patterns
|
435
|
+
|
436
|
+
(('tag:center'))Structural Patterns
|
437
|
+
|
438
|
+
== properties
|
439
|
+
: hide-title
|
440
|
+
true
|
441
|
+
|
442
|
+
= Structural Patterns
|
443
|
+
|
444
|
+
(('tag:center'))Structural patterns deal with the ((*compositions*)) of classes or objects to ((*form larger structures*)).
|
445
|
+
|
446
|
+
= Structural Patterns
|
447
|
+
|
448
|
+
(('tag:center'))Example: Adapter
|
449
|
+
|
450
|
+
= Adapter
|
451
|
+
|
452
|
+
(('tag:center'))((*Convert the interface*)) of a class into another interface clients expect.
|
453
|
+
|
454
|
+
= Adapter
|
455
|
+
|
456
|
+
(('tag:center'))Adapter lets classes ((*work together*)) that ((*couldn't otherwise*)) because of incompatible interfaces.
|
457
|
+
|
458
|
+
= Adapter
|
459
|
+
|
460
|
+
# image
|
461
|
+
# src = images/adapter_pattern.png
|
462
|
+
# keep_ratio = true
|
463
|
+
# width = 550
|
464
|
+
|
465
|
+
== properties
|
466
|
+
: hide-title
|
467
|
+
true
|
468
|
+
|
469
|
+
= Behavioural Patterns
|
470
|
+
|
471
|
+
(('tag:center'))Behavioural Patterns
|
472
|
+
|
473
|
+
== properties
|
474
|
+
: hide-title
|
475
|
+
true
|
476
|
+
|
477
|
+
= Behavioural Patterns
|
478
|
+
|
479
|
+
(('tag:center'))Behavioural patterns characterize the way in which classes or objects ((*interact*)) and ((*distribute responsibility*)).
|
480
|
+
|
481
|
+
= Behavioural Patterns
|
482
|
+
|
483
|
+
(('tag:center'))Not just patterns of classes and objects but also the patterns of ((*communication*)) between them.
|
484
|
+
|
485
|
+
= Behavioural Patterns
|
486
|
+
|
487
|
+
(('tag:center'))Example: Observer or Pub-Sub
|
488
|
+
|
489
|
+
= Observer
|
490
|
+
|
491
|
+
(('tag:center'))Define ((*one-to-many dependency*)) between objects.
|
492
|
+
|
493
|
+
= Observer
|
494
|
+
|
495
|
+
(('tag:center'))When one object change state, all its ((*dependents are notified*)) and updated automatically.
|
496
|
+
|
497
|
+
= Observer
|
498
|
+
|
499
|
+
# image
|
500
|
+
# src = images/observer_pattern.png
|
501
|
+
# keep_ratio = true
|
502
|
+
# width = 720
|
503
|
+
|
504
|
+
== properties
|
505
|
+
: hide-title
|
506
|
+
true
|
507
|
+
|
508
|
+
= Design Patterns Categories
|
509
|
+
|
510
|
+
(('tag:center'))There are no limits in defining design pattern categories, what we just discussed is just a (famous) example.
|
511
|
+
|
512
|
+
= Utilizing Patterns
|
513
|
+
|
514
|
+
(('tag:center'))How to Utilize Patterns Properly?
|
515
|
+
|
516
|
+
== properties
|
517
|
+
: hide-title
|
518
|
+
true
|
519
|
+
|
520
|
+
= Utilizing Patterns
|
521
|
+
|
522
|
+
(('tag:center'))Consider how patterns solve the problems
|
523
|
+
|
524
|
+
= Utilizing Patterns
|
525
|
+
|
526
|
+
(('tag:center'))Scan intent and sketch sections
|
527
|
+
|
528
|
+
= Utilizing Patterns
|
529
|
+
|
530
|
+
(('tag:center'))Study how patterns relate with each other
|
531
|
+
|
532
|
+
= Utilizing Patterns
|
533
|
+
|
534
|
+
(('tag:center'))Study patterns of like purpose
|
535
|
+
|
536
|
+
= Utilizing Patterns
|
537
|
+
|
538
|
+
(('tag:center'))Examine a cause of redesign
|
539
|
+
|
540
|
+
= Utilizing Patterns
|
541
|
+
|
542
|
+
(('tag:center'))Consider what should be variable in your design
|
543
|
+
|
544
|
+
= Anti-patterns
|
545
|
+
|
546
|
+
(('tag:center'))Anti-patterns
|
547
|
+
|
548
|
+
== properties
|
549
|
+
: hide-title
|
550
|
+
true
|
551
|
+
|
552
|
+
= Anti-patterns
|
553
|
+
|
554
|
+
(('tag:center'))There are also patterns that have negative consequences when it is present in our software
|
555
|
+
|
556
|
+
= Anti-patterns
|
557
|
+
|
558
|
+
(('tag:center'))It is called the ((*anti-patterns*))
|
559
|
+
|
560
|
+
= Anti-patterns
|
561
|
+
|
562
|
+
(('tag:center'))Anti-patterns are common response to a recurring problem that is usually ((*ineffective*)) and risks being highly ((*counterproductive*)).
|
563
|
+
|
564
|
+
= Anti-patterns
|
565
|
+
|
566
|
+
(('tag:center'))Example: Big ball of mud
|
567
|
+
|
568
|
+
= Big ball of mud
|
569
|
+
|
570
|
+
(('tag:center'))Software system that ((*lacks*)) a perceivable ((*architecture*)).
|
571
|
+
|
572
|
+
= Big ball of mud
|
573
|
+
|
574
|
+
(('tag:center'))Although undesirable from a software engineering PoV, such systems are common in practice.
|
575
|
+
|
576
|
+
= Big ball of mud
|
577
|
+
|
578
|
+
(('tag:center'))Due to business pressure, developers turnover and code entropy.
|
579
|
+
|
580
|
+
= Thanks
|
581
|
+
|
582
|
+
(('tag:center'))Thanks!
|
583
|
+
|
584
|
+
== properties
|
585
|
+
: hide-title
|
586
|
+
true
|
587
|
+
|
588
|
+
# Some extra notes
|
589
|
+
|
590
|
+
# Art of creating patterns
|
591
|
+
# To divide up many pieces of advice into relatively independent chunks so that you can refer to them and discuss them more or less separately
|
592
|
+
|
593
|
+
# Some common causes of redesign:
|
594
|
+
# - Creating an object by specifying a class explicitly
|
595
|
+
# - Dependence on specific operations
|
596
|
+
# - Dependence on hardware or software platform
|
597
|
+
# - Dependence on object representations or implementations
|
598
|
+
# - Algorithmic dependencies
|
599
|
+
# - Tight coupling
|
600
|
+
# - Extending functionality by subclassing
|
601
|
+
# - Inability to alter class conveniently
|
602
|
+
|
603
|
+
# Patterns are sometimes embedded in framework:
|
604
|
+
# - People who know the patterns gain insight into framework faster
|
605
|
+
# - People who don't know get benefit from patterns that was enforced by the framework
|
Binary file
|
data/theme.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
@margin_left = screen_x(1)
|
2
|
+
@margin_right = screen_x(1)
|
3
|
+
|
4
|
+
# @title_slide_title_font_size = @large_font_size
|
5
|
+
# @title_slide_subtitle_font_size = @small_font_size
|
6
|
+
|
7
|
+
match(Slide, HeadLine) do |headlines|
|
8
|
+
headlines.horizontal_centering = true
|
9
|
+
|
10
|
+
# This code below already available as default theme
|
11
|
+
# I put it here to show on how to style specific slide
|
12
|
+
# headlines.each do |headline|
|
13
|
+
# slide = headline.slide
|
14
|
+
# headline.hide if slide["hide-title"] == true
|
15
|
+
# end
|
16
|
+
end
|
17
|
+
|
18
|
+
match(Slide, Body) do |bodies|
|
19
|
+
bodies.vertical_centering = true
|
20
|
+
end
|
21
|
+
|
22
|
+
include_theme("default")
|
23
|
+
# include_theme("rabbit-theme-nyankosakana")
|
24
|
+
# include_theme("rabbit-theme-yart")
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rabbit-slide-giosakti-201711-patterns-software-engineering
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2017.11.21.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Giovanni Sakti
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-11-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rabbit
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.0.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.0.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rabbit-theme-starqle
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: ''
|
42
|
+
email:
|
43
|
+
- giosakti@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- ".rabbit"
|
49
|
+
- README.md
|
50
|
+
- Rakefile
|
51
|
+
- config.yaml
|
52
|
+
- images/a_pattern_language.jpg
|
53
|
+
- images/abstract_factory.png
|
54
|
+
- images/adapter_pattern.png
|
55
|
+
- images/christopher_alexander.jpg
|
56
|
+
- images/design_patterns_gof.jpg
|
57
|
+
- images/mvc_sketch.png
|
58
|
+
- images/observer_pattern.png
|
59
|
+
- patterns-software-engineering.rab
|
60
|
+
- pdf/201711-patterns-software-engineering-201711-patterns-software-engineering.pdf
|
61
|
+
- theme.rb
|
62
|
+
homepage: http://slide.rabbit-shocker.org/authors/giosakti/201711-patterns-software-engineering/
|
63
|
+
licenses:
|
64
|
+
- MIT
|
65
|
+
metadata: {}
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements: []
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 2.6.13
|
83
|
+
signing_key:
|
84
|
+
specification_version: 4
|
85
|
+
summary: Patterns in Software Engineering This talk gives intro about patterns in
|
86
|
+
software engineering
|
87
|
+
test_files: []
|