choose a pattern for a problem

17
Choose a pattern Choose a pattern for a problem! for a problem! Agile Saturday VI Agile Saturday VI Anton Keks Anton Keks [email protected] [email protected]

Upload: anton-keks

Post on 26-May-2015

932 views

Category:

Technology


0 download

DESCRIPTION

Interactive technical talk for the Agile Saturday VI. Accompanied with live coding. All code is available on github: https://github.com/angryziber/patterns

TRANSCRIPT

Page 1: Choose a pattern for a problem

Choose a patternChoose a patternfor a problem!for a problem!

Agile Saturday VIAgile Saturday VI

Anton KeksAnton [email protected]@codeborne.com

Page 2: Choose a pattern for a problem

The Increasing ComplexityThe Increasing Complexity

Time

Complexity of software systems

New programming paradigmsHigher level of abstraction

HW Assembler Structural (objects+functions?) CPUs Procedural <OOP> ...

Page 3: Choose a pattern for a problem

What are design patterns?What are design patterns?

● Anywhere in the world you can find recurring patterns

● Design patterns

– are building blocks of a system's architecture

– are recurring solutions to design problems that you see over

– identify and specify abstractions that are above the level of single classes and instances

Page 4: Choose a pattern for a problem

Pattern classificationPattern classification

The GOF book defines 3 major types of patterns:– Creational patterns – substitute the new keyword. This

gives your program more flexibility in deciding which objects need to be created for a given case

– Structural patterns - compose groups of objects into larger structures, such as complex user interfaces or accounting data

– Behavioral patterns - define the communication between objects and how the flow is controlled in a complex program.

Page 5: Choose a pattern for a problem

DecoratorDecorator

AdapterAdapter

CompositeComposite

FactoryFactory

BuilderBuilder

PrototypePrototype

StrategyStrategy

StateState

ObserverObserver

IteratorIterator

Page 6: Choose a pattern for a problem

Software Design: The GoodSoftware Design: The Good

● Loose coupling● Immutability● Encapsulation● Short code blocks● Appropriate typing● Duplication avoidance● Simplicity● Consistent terminology ● Clear naming

Page 7: Choose a pattern for a problem

● Loose coupling● Immutability● Encapsulation● Short code blocks● Appropriate typing● Duplication avoidance● Simplicity● Consistent terminology ● Clear naming

Bad, bad, bad!Bad, bad, bad!

Tight coupling

Mutable data structures

Tramp data

Monster functions/methods

String/Integer overuse

Copy-Paste

Over-engineering

Mixture of terms

Runtime surprises

Page 8: Choose a pattern for a problem

Let's get to business!Let's get to business!

● Next slides describe problems– What is given

(existing code)– What we want to achieve

(using a pattern)

● As usual, the code is on github: http://github.com/angryziber/patterns

Page 9: Choose a pattern for a problem

Problem 1: PizzaProblem 1: Pizza

● We have:– A pizzeria– Multitude of options for pizzas: name, toppings,

thickness, size, delivery address, etc● We want:

– Allow users to “order” custom pizzas– Disallow changing the order once the pizza is

already in the oven– Keep the ordering code readable

Page 10: Choose a pattern for a problem

Problem 2: UnzipperProblem 2: Unzipper

● We have: – unzip() method– It is able to decompress a single compressed

stream● We need:

– Support multiple-volume archives– Compressed data is split into multiple floppies

Page 11: Choose a pattern for a problem

Problem 3: MapsProblem 3: Maps

● We have:– Map data of entire Tallinn with all the streets,

buildings, etc– The MapVisualizer class that can draw the full map

on the screen● We want:

– User to see only a section of the map at any given time

– User to be able to move around the map

Page 12: Choose a pattern for a problem

Problem 4: CD PlayerProblem 4: CD Player

● We have:– A CD player with buttons play, stop, next, eject

● We want:– Play to switch the player on– Play again to pause playback, again to resume– Stop to turn off the player– Eject to open the disk tray (if no disk – no playback

possible)– etc, etc, etc

Page 13: Choose a pattern for a problem

Problem 5: Vending MachineProblem 5: Vending Machine

● We have:– A vending machine that can sell any small enough

items● We want:

– To deploy several such machines selling bottles of pepsi, sushi boxes, and Hintai magazines

– Each machine to sell items of one type

Page 14: Choose a pattern for a problem

Problem 6: SpreadsheetProblem 6: Spreadsheet

● We have:– A spreadsheet-type program– Containing a table for entering data and formulas

● We want:– The program to support charts– The charts to be updated automatically if user

changes the data in the table– To sell the chart add-on separately for only $99.99

Page 15: Choose a pattern for a problem

Problem 7: BattlefieldProblem 7: Battlefield

● We have:– A tank– Several types of bullets– Lots of enemies around, e.g. airplanes, other

tanks, guys with Molotov-coctails● We want:

– To survive– To kill 'em all

Page 16: Choose a pattern for a problem

Problem 8: TCP over DNSProblem 8: TCP over DNS

● We have:– A paid Wi-Fi network (e.g. in an airport)– Lots of spare time, but no credit card

● We want:– To be able to read emails and surf Facebook– (Most likely, during our next trip)

● Background info:– Paid Wi-Fi usually resolves DNS just fine– DNS packets can contain any payload

Page 17: Choose a pattern for a problem

Thank you!Thank you!

Codeborne is the only true Codeborne is the only true extreme extreme programmingprogramming company in the region. company in the region.

Come and join us for an experience of Come and join us for an experience of a lifetime you can't find elsewhere!a lifetime you can't find elsewhere!

[email protected]@codeborne.com