Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Object Calisthenics
October 2016
Peter Kofler, ‘Code Cop’
@codecopkofler
www.code-cop.org
Copyright Peter Kofler, licensed...
Peter Kofler
• Ph.D. (Appl. Math.)
• Professional Software
Developer for 15+ years
• “fanatic about code quality”
• Freela...
I help development teams with
PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
●
Professionalism
●
Quality and
Produc...
Mentoring
PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
●
Pair Programming
●
Programming
Workshops
●
Deliberate
Pr...
Developing Quality
Software Developers
Agenda
●
Concepts of OO
●
Encapsulation
●
Coupling and
Cohesion
●
Coding Exercise
“Object Calisthenics”
PETER KOFLER, CODE...
Discussion
●
What is Object Orientation?
●
What are its
basic features?
PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUAL...
OOP is based on
●
Abstraction
●
Encapsulation
●
Polymorphy
●
Inheritance
●
Coupling
●
Cohesion
PETER KOFLER, CODE-COP.ORG ...
Abstraction
●
“A class should capture one and only
one key abstraction.”
●
Avoid Primitive Obsession.
●
Single Responsibil...
Encapsulation
●
“Objects are defined by what they do, not
what they contain.“
●
All data should be hidden within its class...
Polymorphy
●
Avoid switch statements (Type Code).
●
“Explicit case on the type of an object
(instanceof) is usually an err...
Inheritance
●
„Inheritance should only be used to
model a specialization hierarchy.“
●
“IS A ...“ vs. „HAS A ...“ means th...
Composition
over
Inheritance
Low Coupling
●
“Minimize the number of classes with which
another class collaborates.“
●
“Minimize the number of messages ...
High Cohesion
●
“Most of the methods defined on a class
should be using most of the data members
most of the time.“
●
Rela...
Jeff Bay's Object Calisthenics
1. Only One Level Of Indentation Per Method.
2. Don’t Use The else Keyword.
3. Wrap All Pri...
Try it yourself
PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
Coding Dojo Mindset
●
Safe place outside
work
●
We are here to learn
●
Need to slow down
●
Focus on doing it right
●
Colla...
Rules
PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
Pair Programming & TDD
●
regular Pair Programming
●
do not talk for too long
●
do not interrupt the other
●
no “keyboard h...
LCD Numbers
PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
Assignment
● Create an LCD string representation of an integer value using
a 4x7 grid of space, minus and pipe characters ...
“Calisthenics” Constraint
PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
Jeff Bay's Object Calisthenics
1. Only One Level Of Indentation Per Method.
2. Don’t Use The else Keyword.
3. Wrap All Pri...
Prepare
●
Find a pair.
●
Choose a programming language.
●
Get the Java project or create new one.
●
Implement LCD Numbers....
Don't Focus on
Getting it Done.
F0cus on Doing
It Perfectly.
→Practice
Closing Circle
●
What did you learn today?
●
What surprised you today?
●
What will you do
differently in the
future?
PETER...
Peter Kofler
@codecopkofler
www.code-cop.org
PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
CC Images
● Bruce http://www.flickr.com/photos/sherpas428/4350620602/
● pairing http://www.flickr.com/photos/dav/94735395/...
Upcoming SlideShare
Loading in …5
×

Coding Dojo Object Calisthenics (2016)

244 views

Published on

Overview of rules of Object Orientation with an exercise Object Calisthenics.

Published in: Technology
  • Be the first to comment

Coding Dojo Object Calisthenics (2016)

  1. 1. Object Calisthenics October 2016 Peter Kofler, ‘Code Cop’ @codecopkofler www.code-cop.org Copyright Peter Kofler, licensed under CC-BY.
  2. 2. Peter Kofler • Ph.D. (Appl. Math.) • Professional Software Developer for 15+ years • “fanatic about code quality” • Freelance Code Mentor PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  3. 3. I help development teams with PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY ● Professionalism ● Quality and Productivity ● Continuous Improvement
  4. 4. Mentoring PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY ● Pair Programming ● Programming Workshops ● Deliberate Practice, e.g. Coding Dojos
  5. 5. Developing Quality Software Developers
  6. 6. Agenda ● Concepts of OO ● Encapsulation ● Coupling and Cohesion ● Coding Exercise “Object Calisthenics” PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  7. 7. Discussion ● What is Object Orientation? ● What are its basic features? PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  8. 8. OOP is based on ● Abstraction ● Encapsulation ● Polymorphy ● Inheritance ● Coupling ● Cohesion PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  9. 9. Abstraction ● “A class should capture one and only one key abstraction.” ● Avoid Primitive Obsession. ● Single Responsibility Principle (SRP). ● Wrap All Primitives And Strings. (OC#3) ● First Class Collections. (OC#4) ● Keep All Entities Small. (OC#7) PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  10. 10. Encapsulation ● “Objects are defined by what they do, not what they contain.“ ● All data should be hidden within its class. ● Tell, Don't Ask. ● e.g. ● All fields must be private. ● No Getters/Setters/Properties. (OC#9) PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  11. 11. Polymorphy ● Avoid switch statements (Type Code). ● “Explicit case on the type of an object (instanceof) is usually an error.” ● Open Closed Principle (OCP). ● e.g. ● Avoid switch statements. ● Don’t Use The else Keyword. (OC#2) PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  12. 12. Inheritance ● „Inheritance should only be used to model a specialization hierarchy.“ ● “IS A ...“ vs. „HAS A ...“ means the subclass “IS exactly the same AS …” ● Inheritance hierarchies should be shallow. (2-3) ● See Liskov Substitution Principle (LSP). PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  13. 13. Composition over Inheritance
  14. 14. Low Coupling ● “Minimize the number of classes with which another class collaborates.“ ● “Minimize the number of messages sent between a class and its collaborator.“ ● Law of Demeter (“Only talk to friends”). ● See Interface Segregation Principle (ISP). ● e.g. ● One Dot (dereference) Per Line. (OC#5) PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  15. 15. High Cohesion ● “Most of the methods defined on a class should be using most of the data members most of the time.“ ● Related data and behaviour in one place. ● e.g. ● Don’t Abbreviate (long names). (OC#6) ● Keep All Entities Small. (OC#7) ● Max Two Instance Variables. (OC#8) PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  16. 16. Jeff Bay's Object Calisthenics 1. Only One Level Of Indentation Per Method. 2. Don’t Use The else Keyword. 3. Wrap All Primitives And Strings. 4. First Class Collections. 5. One Dot/Arrow (dereference) Per Line. 6. Don’t Abbreviate (long names). 7. Keep All Entities Small. (50 LoC per class) 8. Not More Than Two Instance Variables. 9. No Getters/Setters/Properties. PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  17. 17. Try it yourself PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  18. 18. Coding Dojo Mindset ● Safe place outside work ● We are here to learn ● Need to slow down ● Focus on doing it right ● Collaborative Game PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  19. 19. Rules PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  20. 20. Pair Programming & TDD ● regular Pair Programming ● do not talk for too long ● do not interrupt the other ● no “keyboard hugging“ ● use TDD (or at least “sort of” TDD) ● write a test before you write code ● refactor mercilessly ● no debugger PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  21. 21. LCD Numbers PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  22. 22. Assignment ● Create an LCD string representation of an integer value using a 4x7 grid of space, minus and pipe characters for each digit. ● Each digit is shown below (dot instead of space) .--......--..--......--..--..--..--..--. |..|...|...|...||..||...|......||..||..| |..|...|...|...||..||...|......||..||..| .........--..--..--..--..--......--..--. |..|...||......|...|...||..|...||..|...| |..|...||......|...|...||..|...||..|...| .--......--..--......--..--......--..--. ● Bar size should be adjustable. The default value is 2. PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  23. 23. “Calisthenics” Constraint PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  24. 24. Jeff Bay's Object Calisthenics 1. Only One Level Of Indentation Per Method. 2. Don’t Use The else Keyword. 3. Wrap All Primitives And Strings. 4. First Class Collections. 5. One Dot/Arrow (dereference) Per Line. 6. Don’t Abbreviate (long names). 7. Keep All Entities Small. (50 LoC per class) 8. Not More Than Two Instance Variables. 9. No Getters/Setters/Properties. PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  25. 25. Prepare ● Find a pair. ● Choose a programming language. ● Get the Java project or create new one. ● Implement LCD Numbers. PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  26. 26. Don't Focus on Getting it Done. F0cus on Doing It Perfectly.
  27. 27. →Practice
  28. 28. Closing Circle ● What did you learn today? ● What surprised you today? ● What will you do differently in the future? PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  29. 29. Peter Kofler @codecopkofler www.code-cop.org PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  30. 30. CC Images ● Bruce http://www.flickr.com/photos/sherpas428/4350620602/ ● pairing http://www.flickr.com/photos/dav/94735395/ ● agenda http://www.flickr.com/photos/24293932@N00/2752221871/ ● wants you http://www.flickr.com/photos/shutter/105497713/ ● city http://www.flickr.com/photos/42311564@N00/2411037726/ ● hands https://www.flickr.com/photos/ninahiironniemi/497993647/ ● dojo http://www.flickr.com/photos/49715404@N00/3267627038/ ● rule http://www.flickr.com/photos/phunk/4188827473 ● LCD https://www.flickr.com/photos/ta3/3275907319/ ● calisthenics https://www.flickr.com/photos/snickclunk/18522120656/ PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

×