coupling and cohesion - teleki.net · steventeleki coupling & cohesion: pillars of software...

28
StevenTeleki Coupling & Cohesion: Pillars of Software Development © 2002-2014 Steven Teleki. All rights reserved. 21 February 2014 Coupling & Cohesion Pillars of Software Development 1 Steven Teleki Managing Director of Engineering , The Advisory Board Company Past Chair, IEEE Computer Society, Austin Chapter StevenTeleki Coupling & Cohesion: Pillars of Software Development © 2002-2014 Steven Teleki. All rights reserved. 21 February 2014 Twitter Version Composing a software system from weakly coupled and highly cohesive components will increase code quality and developer productivity. 2

Upload: others

Post on 26-Jun-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Coupling & CohesionPillars of Software Development

!1

Steven TelekiManaging Director of Engineering, The Advisory Board Company

Past Chair, IEEE Computer Society, Austin Chapter

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Twitter Version

Composing a software system from weakly coupled and highly cohesive components will increase code quality and developer productivity.

!2

Page 2: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Agenda

Composing a software system from weakly coupled and highly cohesive components will increase code quality and developer productivity.

coupled cohesivecomponentsquality productivity

code examples

!3

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Coupling

Composing a software system from weakly coupled and highly cohesive components will increase code quality and developer productivity.

coupled

!4

Page 3: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Dictionary: Coupling

coupling (ˈkʌplɪŋ)"

— n"

1. a mechanical device that connects two things"

2. a device for connecting railway cars or trucks together"

3. ...

coupling. Dictionary.com. Collins English Dictionary - Complete & Unabridged 10th Edition. HarperCollins Publishers. http://dictionary.reference.com/browse/coupling (accessed: December 28, 2011).

!5

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Railway Coupling

!6

Page 4: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Parasitic Coupling

Smith, Douglas C. The Square Shielded Loop. http://emcesd.com/tt2008/tt070508.htm Web. 26 Dec 2011.

Loops for Coupling Measurement

!7

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Myers on Coupling

“Coupling is a measure of the relationship among modules.”

Myers, Glenford. Reliable Software Through Composite Design. New York: Petrocelli/Charter, 1975. Print.

!8

Page 5: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Kernighan and Plaguer on Coupling

“... the modules are kept as uncoupled as possible, and the coupling that exists is kept visible.”

Kernighan, Brian W. and P.J. Plauger. Software Tools. Reading: Addison-Wesley, 1976. Print.

!9

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Meyer on Coupling

Two rules of modularity:"

“Few Interfaces: Every module should communicate with as few others as possible.”!

“Small Interfaces or Weak Coupling: If two modules communicate, they should exchange as little information as possible.”

Meyer, Bertrand. Object-Oriented Software Construction, 2nd Ed. Upper Saddle River: Prentice Hall PTR, 1997. Print.

!10

Page 6: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Lakos on Coupling

“Physical” vs. “logical” coupling"

“Insulation is the process of avoiding or removing unnecessary compile-time coupling.”

Lakos, John. Large-Scale C++ Software Design. Reading: Addison-Wesley, 1996. Print.

!11

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

McConnell on Coupling

“Coupling describes how tightly a class or routine is related to other classes or routines.”

McConnell, Steve. Code Complete 2. Redmond: Microsoft Press, 2004. Print.

!12

Page 7: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Kinds of Coupling

• Simple-data-parameter coupling: all data are primitive data types."

• Simple-object coupling: “has-a”"

• Object-parameter coupling: parameter is a non-primitive object"

• Semantic coupling: relying on some knowledge non-deducible from code

McConnell, Steve. Code Complete 2. Redmond: Microsoft Press, 2004. Print.

!13

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Larman on Coupling

“Coupling is a measure of how strongly one element is connected to, has knowledge of, or relies on other elements.”

Larman, Craig. Applying UML and Patterns 3rd Ed. Upper Saddle River: Prentice Hall PTR, 2005. Print.

!14

Page 8: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Dependencies

Dependency is used as a synonym for coupling.

!15

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

M depends-on N

is-aclass%M%extends%N%{class%M%implements%N%{

N%n1;N%f(N%n2)%{

N%n3;}

}

implements-a

has-a

parameter coupling

local coupling

!16

Page 9: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Cohesion

Composing a software system from weakly coupled and highly cohesive components will increase code quality and developer productivity.

cohesive

!17

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Dictionary: Cohesion

cohesion (kəʊˈhiːʒən)"

— n"

1. the act or state of cohering; tendency to unite

cohesion. Dictionary.com. Collins English Dictionary - Complete & Unabridged 10th Edition. HarperCollins Publishers. http://dictionary.reference.com/browse/coupling (accessed: December 28, 2011).

!18

Page 10: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Dictionary: Cohere

cohere (kəʊˈhɪə) "

— vb"

1. to hold or stick firmly together"

2. to be connected logically; be consistent"

3. physics to be held together by the action of molecular forces

cohere. Dictionary.com. Collins English Dictionary - Complete & Unabridged 10th Edition. HarperCollins Publishers. http://dictionary.reference.com/browse/coupling (accessed: December 28, 2011).

!19

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Cohesion in Military

“The bonding together of members of an organization in such a way as to sustain their will and commitment to each other, their unit and the mission.”!

- Earnest G. Cunningham

Powell, Kenneth, et.al. Unit Cohesion, Cross Leveling and Readiness. BCP International Limited. 2006.

!20

Page 11: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Myers on Cohesion

“Module strength is a measure of the relationship among elements in individual modules.”

Myers, Glenford. Reliable Software Through Composite Design. New York: Petrocelli/Charter, 1975. Print.

!21

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Kernighan and Plaguer on Cohesion

“Each module is also cohesive: it has good reasons for being a separate entity. It is not a tangle of multiple functions lumped arbitrarily, nor is it a displaced fragment of some other module.”

Kernighan, Brian W. and P.J. Plauger. Software Tools. Reading: Addison-Wesley, 1976. Print.

!22

Page 12: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Constantine & Yourdon on Cohesion

“Cohesion of each module -- how tightly bound or related its internal elements are to one another.”

Constantine, Larry and Ed Yourdon. Structured Design. Englewood Cliffs: Prentice Hall, 1979. Print.

•Coincidental"• Logical"•Temporal"•Procedural"•Communicational"• Sequential"• Functional

!23

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

McConnell on Cohesion

“Cohesion refers to how closely all the routines in a class or all the code in a routine support a central purpose-how focused the class is.”

McConnell, Steve. Code Complete 2. Redmond: Microsoft Press, 2004. Print.

!24

Page 13: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Larman on Cohesion

“Cohesion (or more specifically functional cohesion) is a measure of how strongly related and focused the responsibilities of an element are.”

Larman, Craig. Applying UML and Patterns 3rd Ed. Upper Saddle River: Prentice Hall PTR, 2005. Print.

!25

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Coupling & Cohesion

Practical definitions:"

Coupling is any relationship between two software parts."

Cohesion is the degree to which the responsibilities of a software part form a meaningful unit.

!26

Page 14: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014 !27

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014 !28

Design Patterns are Patterns of Coupling & Cohesion

Builder

Gamma, Erich et. al. Design Patterns. Reading: Addison Wesley, 1995. Print.

Page 15: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Components

Composing a software system from weakly coupled and highly cohesive components will increase code quality and developer productivity.components

!29

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Modular DesignBuild the system from cooperating components.

!30

Page 16: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

“Language shapes the way we think, and determines what we can think about.”

— B.L. Whorf

Stroustrup, Bjarne. The C++ Programming Language. Reading: Addison-Wesley, 1987. Print.

!31

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Terminology

System

Subsystem

Module

Component

Class

Abstract Data Type (ADT)

Represent Entities from"the Problem Domain

!32

Page 17: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

SubsystemD

ComponentJ

System AnatomySystemA

SubsystemC

SubsystemDSubsystemB

ModuleE

ModuleF

ModuleG

ModuleG

ComponentJ

ComponentH

ComponentI

ClassK

ClassM

ClassL

!33

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Typical Sizes

‣ 250 (100 - 400) KLOC"

‣ 50 (20 -100) KLOC"

‣ 20 (10 - 40) KLOC"

‣ 2 (1 - 4) KLOC"

‣ 200 (100 - 1K) LOC

System

Subsystem

Module

Component

Class

!34

Page 18: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Version, Version, Version

• Version at the Module or Subsystem level"

• Major, Minor, Revision, Build"

• Pretend that each versioned part is an independent project, like an “open source” project (even if only used “in-house”)

!35

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Quality & Productivity

Composing a software system from weakly coupled and highly cohesive components will increase code quality and developer productivity.quality productivity

!36

Page 19: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Quality & productivity are tightly connected.

!37

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

“To produce a high-quality software system, each of the system’s parts must also be of high quality.”

— Watts S. Humphrey

!38

Page 20: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

The Challenge

Shorten the product lifecycle while at the same time reduce the number of post-release defects.

!39

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

The organization’s performance curve

Find the Optimum

Post-Release"Defects"(count)

Product Development "Cycle (time)

!40

Page 21: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Some Data

• System Size: 70 - 350 KLOC"

• Defect Density: 340 - 24,000 def/MLOC"

• Average Defect Fix Time: 1 - 32 hours

!41

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Code ExampleAn attempt to show these concepts "

on a small-scale program

!42

Page 22: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

The Problem

• Generate the license plate to be issued"

• Follow a pattern, like: LDD-LLL"

• Save/Load license plate is provided

1. TODO: Initialize the system"

2. TODO: Generate next plate

!43

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Example

• Current pattern:"

• Last plate issued: "

• Next plate will be:

LDD#LLL$

M59#ZZZ$

M60#AAA

L - letters [A..Z]"D - digits [0..9]

!44

Page 23: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Solution 1: One Routine$$$$private$static$void$solution1()${$$$$$$$String$plateTemplate$$=$"LDDLLL";$$$$$$$String$plateValue$$$$$=$"M59ZZZ";$$$$$$$String$nextPlateValue$=$"";$!$$$$$$System.out.println(plateValue);$$$$$$$char$c;$$$$$$$boolean$carry$=$true;$!$$$$$$int$numPositions$=$plateTemplate.length();$$$$$$$for$(int$i$=$numPositions$#$1;$i$>=$0;$i##)${$$$$$$$$$$$if$(carry)${$$$$$$$$$$$$$$$carry$=$false;$$$$$$$$$$$$$$$c$=$plateValue.charAt(i);$$$$$$$$$$$$$$$c$=$++c;$$$$$$$$$$$$$$$switch$(plateTemplate.charAt(i))${$$$$$$$$$$$$$$$case$'L':$$$$$$$$$$$$$$$$$$$if$(c$>$'Z')${$$$$$$$$$$$$$$$$$$$$$$$c$=$'A';$$$$$$$$$$$$$$$$$$$$$$$carry$=$true;$$$$$$$$$$$$$$$$$$$}$$$$$$$$$$$$$$$$$$$break;$$$$$$$$$$$$$$$case$'D':$$$$$$$$$$$$$$$$$$$if$(c$>$'9')${$$$$$$$$$$$$$$$$$$$$$$$c$=$'0';$$$$$$$$$$$$$$$$$$$$$$$carry$=$true;$$$$$$$$$$$$$$$$$$$}$$$$$$$$$$$$$$$$$$$break;$$$$$$$$$$$$$$$}$$$$$$$$$$$}$else$$$$$$$$$$$$$$$c$=$plateValue.charAt(i);$$$$$$$$$$$nextPlateValue$=$c$+$nextPlateValue;$$$$$$$}$$$$$$$System.out.println(nextPlateValue);$$$$$}

!45

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014 !46

Solution 2: Object-Oriented

Page 24: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Additional Requirements for License Plates

1. Support changing patterns"

2. Support graphics"

3. Support additional characters

!47

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Requirements Evolve

• Current pattern:"

• Last plate issued: "

• Next plate will be:

GLL#LDDD$

kRM#Z999$

kRN#A000

L - letters [A..Z]"D - digits [0..9]"G - graphics [a..z]

!48

Page 25: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Solution 1 Revisited$$$$private$static$void$solution1()${$$$$$$$String$plateTemplate$$=$"LDDLLL";$$$$$$$String$plateValue$$$$$=$"M59ZZZ";$$$$$$$String$nextPlateValue$=$"";$!$$$$$$System.out.println(plateValue);$$$$$$$char$c;$$$$$$$boolean$carry$=$true;$!$$$$$$int$numPositions$=$plateTemplate.length();$$$$$$$for$(int$i$=$numPositions$#$1;$i$>=$0;$i##)${$$$$$$$$$$$if$(carry)${$$$$$$$$$$$$$$$carry$=$false;$$$$$$$$$$$$$$$c$=$plateValue.charAt(i);$$$$$$$$$$$$$$$c$=$++c;$$$$$$$$$$$$$$$switch$(plateTemplate.charAt(i))${$$$$$$$$$$$$$$$case$'L':$$$$$$$$$$$$$$$$$$$if$(c$>$'Z')${$$$$$$$$$$$$$$$$$$$$$$$c$=$'A';$$$$$$$$$$$$$$$$$$$$$$$carry$=$true;$$$$$$$$$$$$$$$$$$$}$$$$$$$$$$$$$$$$$$$break;$$$$$$$$$$$$$$$case$'D':$$$$$$$$$$$$$$$$$$$if$(c$>$'9')${$$$$$$$$$$$$$$$$$$$$$$$c$=$'0';$$$$$$$$$$$$$$$$$$$$$$$carry$=$true;$$$$$$$$$$$$$$$$$$$}$$$$$$$$$$$$$$$$$$$break;$$$$$$$$$$$$$$$}$$$$$$$$$$$}$else$$$$$$$$$$$$$$$c$=$plateValue.charAt(i);$$$$$$$$$$$nextPlateValue$=$c$+$nextPlateValue;$$$$$$$}$$$$$$$System.out.println(nextPlateValue);$$$$$}

$$$$private$static$void$solution1()${$$$$$$$String$plateTemplate$$=$"GLLLDDD";$$$$$$$String$plateValue$$$$$=$"kRMZ999";$$$$$$$String$nextPlateValue$=$"";$!$$$$$$System.out.println(plateValue);$$$$$$$char$c;$$$$$$$boolean$carry$=$true;$!$$$$$$int$numPositions$=$plateTemplate.length();$$$$$$$for$(int$i$=$numPositions$#$1;$i$>=$0;$i##)${$$$$$$$$$$$if$(carry)${$$$$$$$$$$$$$$$carry$=$false;$$$$$$$$$$$$$$$c$=$plateValue.charAt(i);$$$$$$$$$$$$$$$c$=$++c;$$$$$$$$$$$$$$$switch$(plateTemplate.charAt(i))${$$$$$$$$$$$$$$$case$'L':$$$$$$$$$$$$$$$$$$$if$(c$>$'Z')${$$$$$$$$$$$$$$$$$$$$$$$c$=$'A';$$$$$$$$$$$$$$$$$$$$$$$carry$=$true;$$$$$$$$$$$$$$$$$$$}$$$$$$$$$$$$$$$$$$$break;$$$$$$$$$$$$$$$case$'D':$$$$$$$$$$$$$$$$$$$if$(c$>$'9')${$$$$$$$$$$$$$$$$$$$$$$$c$=$'0';$$$$$$$$$$$$$$$$$$$$$$$carry$=$true;$$$$$$$$$$$$$$$$$$$}$$$$$$$$$$$$$$$$$$$break;$$$$$$$$$$$$$$$case$'G':$$$$$$$$$$$$$$$$$$$if$(c$>$'z')${$$$$$$$$$$$$$$$$$$$$$$$c$=$'a';$$$$$$$$$$$$$$$$$$$$$$$carry$=$true;$$$$$$$$$$$$$$$$$$$}$$$$$$$$$$$$$$$$$$$break;$$$$$$$$$$$$$$$}$$$$$$$$$$$}$else$$$$$$$$$$$$$$$c$=$plateValue.charAt(i);$$$$$$$$$$$nextPlateValue$=$c$+$nextPlateValue;$$$$$$$}$$$$$$$System.out.println(nextPlateValue);$

!49

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Solution 2 Revisited

$$$$public$static$SymbolSet$CreateSymbolSet(SymbolType$aType)${$$$$$$$$$if(aType==SymbolType.LETTERS)$$$$$$$$$$$$$return$new$SymbolSetLetters();$$$$$$$$$else$if(aType==SymbolType.DIGITS)$$$$$$$$$$$$$return$new$SymbolSetDigits();$$$$$$$$$else$if(aType==SymbolType.GRAPHICS)$$$$$$$$$$$$$return$new$SymbolSetGraphics();$$$$$$$$$return$null;$$$$$}

$$$$public$static$final$SymbolType$GRAPHICS$=$new$SymbolType("graphics");

!50

Page 26: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Conclusion

!51

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Coupling & Cohesion

Practical definitions:"

Coupling is any relationship between two software parts."

Cohesion is the degree to which the responsibilities of a software part form a meaningful unit.

!52

Page 27: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

High Cohesion"& Low Coupling

Improved"Software"Quality

Increased"Developer"

Productivity

!53

First Order Principle of Software Development: Increase Cohesion & Reduce Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

“To achieve quality, there is no substitute for knowledge.”

— W. Edwards Deming

!54

Page 28: Coupling and Cohesion - teleki.net · StevenTeleki Coupling & Cohesion: Pillars of Software Development 21 February 2014 © 2002-2014 Steven Teleki. All rights reserved. Coupling

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

The only source of agility is knowledge.

!55

StevenTeleki Coupling & Cohesion: Pillars of Software Development

© 2002-2014 Steven Teleki. All rights reserved.21 February 2014

Your)Le,ers)&)Comments)are)Welcome!

!56

!

Steven Teleki

[email protected]

Visit: http://steven.teleki.net/

•Software Development Reading List

•Slides from this talk and previous talks

Connect on LinkedIn and Twitter (SteveTeleki)