choose a pattern for a problem

Post on 26-May-2015

932 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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

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

Agile Saturday VIAgile Saturday VI

Anton KeksAnton Keksanton@codeborne.comanton@codeborne.com

The Increasing ComplexityThe Increasing Complexity

Time

Complexity of software systems

New programming paradigmsHigher level of abstraction

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

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

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.

DecoratorDecorator

AdapterAdapter

CompositeComposite

FactoryFactory

BuilderBuilder

PrototypePrototype

StrategyStrategy

StateState

ObserverObserver

IteratorIterator

Software Design: The GoodSoftware Design: The Good

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

● 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

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

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

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

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

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

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

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

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

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

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!

job@codeborne.comjob@codeborne.com

top related