Choose a pattern for a problem
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Choose a pattern for a problem

  • 1,100 views
Uploaded on

Interactive technical talk for the Agile Saturday VI. ...

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,100
On Slideshare
1,098
From Embeds
2
Number of Embeds
1

Actions

Shares
Downloads
15
Comments
0
Likes
0

Embeds 2

https://twitter.com 2

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Agile Saturday VI Choose a pattern for a problem!Anton Keksanton@codeborne.com
  • 2. The Increasing ComplexityComplexity of software systems TimeNew programming paradigmsHigher level of abstractionHW Assembler Structural (objects+functions?) CPUs Procedural <OOP> ...
  • 3. What are design patterns?● Anywhere in the world you can find recurring patterns● Design patterns – are building blocks of a systems 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
  • 4. Pattern classificationThe 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.
  • 5. DecoratorAdapter Composite Strategy State Observer Factory Iterator Builder Prototype
  • 6. Software Design: The Good● Loose coupling● Immutability● Encapsulation● Short code blocks● Appropriate typing● Duplication avoidance● Simplicity● Consistent terminology● Clear naming
  • 7. Bad, bad, bad!● Loose coupling Tight coupling● Immutability Mutable data structures● Encapsulation Tramp data● Short code blocks Monster functions/methods● Appropriate typing String/Integer overuse● Duplication avoidance Copy-Paste● Simplicity Over-engineering● Consistent terminology Mixture of terms● Clear naming Runtime surprises
  • 8. Lets 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
  • 9. Problem 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
  • 10. Problem 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
  • 11. Problem 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
  • 12. Problem 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
  • 13. Problem 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
  • 14. Problem 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
  • 15. Problem 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
  • 16. Problem 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
  • 17. Thank you!Codeborne is the only true extremeprogramming company in the region.Come and join us for an experience ofa lifetime you cant find elsewhere! job@codeborne.com