design principles: part 1 - computer science · design principles: part 1 engi 5895: software...
TRANSCRIPT
![Page 1: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/1.jpg)
The Need for Design Principles Refactoring Design Principles References
Design Principles: Part 1ENGI 5895: Software Design
Andrew Vardy
Faculty of Engineering & Applied ScienceMemorial University of Newfoundland
January 25, 2011
![Page 2: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/2.jpg)
The Need for Design Principles Refactoring Design Principles References
Outline
1 The Need for Design Principles
2 Refactoring
3 Design PrinciplesThe Single-Responsibility Principle (SRP)The Open-Closed Principle (OCP)
![Page 3: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/3.jpg)
The Need for Design Principles Refactoring Design Principles References
Symptoms of Poor Design
The following are the symptoms of bad software designs, as de�nedin Ch. 7 of [Martin, 2003]:
Rigidity: The design is hard to change
Fragility: The design is easy to break
Immobility: The design is hard to reuse
Viscosity: It is hard to do the right thing (i.e. forced intohacks)
Needless Complexity: Overdesign
Needless Repetition: Mouse abuse
Needless Repetition: (Just kidding)
Opacity: Disorganized expression
Also known as design smells.
![Page 4: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/4.jpg)
The Need for Design Principles Refactoring Design Principles References
Symptoms of Poor Design
The following are the symptoms of bad software designs, as de�nedin Ch. 7 of [Martin, 2003]:
Rigidity: The design is hard to change
Fragility: The design is easy to break
Immobility: The design is hard to reuse
Viscosity: It is hard to do the right thing (i.e. forced intohacks)
Needless Complexity: Overdesign
Needless Repetition: Mouse abuse
Needless Repetition: (Just kidding)
Opacity: Disorganized expression
Also known as design smells.
![Page 5: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/5.jpg)
The Need for Design Principles Refactoring Design Principles References
Symptoms of Poor Design
The following are the symptoms of bad software designs, as de�nedin Ch. 7 of [Martin, 2003]:
Rigidity: The design is hard to change
Fragility: The design is easy to break
Immobility: The design is hard to reuse
Viscosity: It is hard to do the right thing (i.e. forced intohacks)
Needless Complexity: Overdesign
Needless Repetition: Mouse abuse
Needless Repetition: (Just kidding)
Opacity: Disorganized expression
Also known as design smells.
![Page 6: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/6.jpg)
The Need for Design Principles Refactoring Design Principles References
Symptoms of Poor Design
The following are the symptoms of bad software designs, as de�nedin Ch. 7 of [Martin, 2003]:
Rigidity: The design is hard to change
Fragility: The design is easy to break
Immobility: The design is hard to reuse
Viscosity: It is hard to do the right thing (i.e. forced intohacks)
Needless Complexity: Overdesign
Needless Repetition: Mouse abuse
Needless Repetition: (Just kidding)
Opacity: Disorganized expression
Also known as design smells.
![Page 7: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/7.jpg)
The Need for Design Principles Refactoring Design Principles References
Symptoms of Poor Design
The following are the symptoms of bad software designs, as de�nedin Ch. 7 of [Martin, 2003]:
Rigidity: The design is hard to change
Fragility: The design is easy to break
Immobility: The design is hard to reuse
Viscosity: It is hard to do the right thing (i.e. forced intohacks)
Needless Complexity: Overdesign
Needless Repetition: Mouse abuse
Needless Repetition: (Just kidding)
Opacity: Disorganized expression
Also known as design smells.
![Page 8: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/8.jpg)
The Need for Design Principles Refactoring Design Principles References
Symptoms of Poor Design
The following are the symptoms of bad software designs, as de�nedin Ch. 7 of [Martin, 2003]:
Rigidity: The design is hard to change
Fragility: The design is easy to break
Immobility: The design is hard to reuse
Viscosity: It is hard to do the right thing (i.e. forced intohacks)
Needless Complexity: Overdesign
Needless Repetition: Mouse abuse
Needless Repetition: (Just kidding)
Opacity: Disorganized expression
Also known as design smells.
![Page 9: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/9.jpg)
The Need for Design Principles Refactoring Design Principles References
Symptoms of Poor Design
The following are the symptoms of bad software designs, as de�nedin Ch. 7 of [Martin, 2003]:
Rigidity: The design is hard to change
Fragility: The design is easy to break
Immobility: The design is hard to reuse
Viscosity: It is hard to do the right thing (i.e. forced intohacks)
Needless Complexity: Overdesign
Needless Repetition: Mouse abuse
Needless Repetition: (Just kidding)
Opacity: Disorganized expression
Also known as design smells.
![Page 10: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/10.jpg)
The Need for Design Principles Refactoring Design Principles References
Symptoms of Poor Design
The following are the symptoms of bad software designs, as de�nedin Ch. 7 of [Martin, 2003]:
Rigidity: The design is hard to change
Fragility: The design is easy to break
Immobility: The design is hard to reuse
Viscosity: It is hard to do the right thing (i.e. forced intohacks)
Needless Complexity: Overdesign
Needless Repetition: Mouse abuse
Needless Repetition: (Just kidding)
Opacity: Disorganized expression
Also known as design smells.
![Page 11: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/11.jpg)
The Need for Design Principles Refactoring Design Principles References
Symptoms of Poor Design
The following are the symptoms of bad software designs, as de�nedin Ch. 7 of [Martin, 2003]:
Rigidity: The design is hard to change
Fragility: The design is easy to break
Immobility: The design is hard to reuse
Viscosity: It is hard to do the right thing (i.e. forced intohacks)
Needless Complexity: Overdesign
Needless Repetition: Mouse abuse
Needless Repetition: (Just kidding)
Opacity: Disorganized expression
Also known as design smells.
![Page 12: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/12.jpg)
The Need for Design Principles Refactoring Design Principles References
Symptoms of Poor Design
The following are the symptoms of bad software designs, as de�nedin Ch. 7 of [Martin, 2003]:
Rigidity: The design is hard to change
Fragility: The design is easy to break
Immobility: The design is hard to reuse
Viscosity: It is hard to do the right thing (i.e. forced intohacks)
Needless Complexity: Overdesign
Needless Repetition: Mouse abuse
Needless Repetition: (Just kidding)
Opacity: Disorganized expression
Also known as design smells.
![Page 13: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/13.jpg)
The Need for Design Principles Refactoring Design Principles References
Symptoms of Poor Design
The following are the symptoms of bad software designs, as de�nedin Ch. 7 of [Martin, 2003]:
Rigidity: The design is hard to change
Fragility: The design is easy to break
Immobility: The design is hard to reuse
Viscosity: It is hard to do the right thing (i.e. forced intohacks)
Needless Complexity: Overdesign
Needless Repetition: Mouse abuse
Needless Repetition: (Just kidding)
Opacity: Disorganized expression
Also known as design smells.
![Page 14: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/14.jpg)
The Need for Design Principles Refactoring Design Principles References
Software Rots
When the requirements change, the system must change�often inways not anticipated by the initial design. Over time the softwarebegins to acquire design smells... The software rots!
The design should be kept as clean, simple, and as expressiveas possible
Never say, �we'll �x that later�...because you won't!
When a requirement changes, the design should be updated tobe resilient to that kind of change in the future
![Page 15: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/15.jpg)
The Need for Design Principles Refactoring Design Principles References
Software Rots
When the requirements change, the system must change�often inways not anticipated by the initial design. Over time the softwarebegins to acquire design smells... The software rots!
The design should be kept as clean, simple, and as expressiveas possible
Never say, �we'll �x that later�...because you won't!
When a requirement changes, the design should be updated tobe resilient to that kind of change in the future
![Page 16: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/16.jpg)
The Need for Design Principles Refactoring Design Principles References
Software Rots
When the requirements change, the system must change�often inways not anticipated by the initial design. Over time the softwarebegins to acquire design smells... The software rots!
The design should be kept as clean, simple, and as expressiveas possible
Never say, �we'll �x that later�
...because you won't!
When a requirement changes, the design should be updated tobe resilient to that kind of change in the future
![Page 17: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/17.jpg)
The Need for Design Principles Refactoring Design Principles References
Software Rots
When the requirements change, the system must change�often inways not anticipated by the initial design. Over time the softwarebegins to acquire design smells... The software rots!
The design should be kept as clean, simple, and as expressiveas possible
Never say, �we'll �x that later�...because you won't!
When a requirement changes, the design should be updated tobe resilient to that kind of change in the future
![Page 18: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/18.jpg)
The Need for Design Principles Refactoring Design Principles References
Software Rots
When the requirements change, the system must change�often inways not anticipated by the initial design. Over time the softwarebegins to acquire design smells... The software rots!
The design should be kept as clean, simple, and as expressiveas possible
Never say, �we'll �x that later�...because you won't!
When a requirement changes, the design should be updated tobe resilient to that kind of change in the future
![Page 19: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/19.jpg)
The Need for Design Principles Refactoring Design Principles References
Refactoring
How do we modify our designs and our code to prevent rot.Refactoring...
Refactoring
�...the process of changing a software system in such a way that itdoes not alter the external behaviour of the code yet improves itsinternal structure� [Fowler, 1999]
You can refactor code:
e.g. Read ch. 5 of [Martin, 2003]
You can refactor your design:
We will see many examples
![Page 20: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/20.jpg)
The Need for Design Principles Refactoring Design Principles References
Refactoring
How do we modify our designs and our code to prevent rot.Refactoring...
Refactoring
�...the process of changing a software system in such a way that itdoes not alter the external behaviour of the code yet improves itsinternal structure� [Fowler, 1999]
You can refactor code:
e.g. Read ch. 5 of [Martin, 2003]
You can refactor your design:
We will see many examples
![Page 21: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/21.jpg)
The Need for Design Principles Refactoring Design Principles References
Refactoring
How do we modify our designs and our code to prevent rot.Refactoring...
Refactoring
�...the process of changing a software system in such a way that itdoes not alter the external behaviour of the code yet improves itsinternal structure� [Fowler, 1999]
You can refactor code:
e.g. Read ch. 5 of [Martin, 2003]
You can refactor your design:
We will see many examples
![Page 22: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/22.jpg)
The Need for Design Principles Refactoring Design Principles References
Refactoring
How do we modify our designs and our code to prevent rot.Refactoring...
Refactoring
�...the process of changing a software system in such a way that itdoes not alter the external behaviour of the code yet improves itsinternal structure� [Fowler, 1999]
You can refactor code:
e.g. Read ch. 5 of [Martin, 2003]
You can refactor your design:
We will see many examples
![Page 23: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/23.jpg)
The Need for Design Principles Refactoring Design Principles References
Refactoring
How do we modify our designs and our code to prevent rot.Refactoring...
Refactoring
�...the process of changing a software system in such a way that itdoes not alter the external behaviour of the code yet improves itsinternal structure� [Fowler, 1999]
You can refactor code:
e.g. Read ch. 5 of [Martin, 2003]
You can refactor your design:
We will see many examples
![Page 24: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/24.jpg)
The Need for Design Principles Refactoring Design Principles References
Refactoring
How do we modify our designs and our code to prevent rot.Refactoring...
Refactoring
�...the process of changing a software system in such a way that itdoes not alter the external behaviour of the code yet improves itsinternal structure� [Fowler, 1999]
You can refactor code:
e.g. Read ch. 5 of [Martin, 2003]
You can refactor your design:
We will see many examples
![Page 25: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/25.jpg)
The Need for Design Principles Refactoring Design Principles References
Refactoring
How do we modify our designs and our code to prevent rot.Refactoring...
Refactoring
�...the process of changing a software system in such a way that itdoes not alter the external behaviour of the code yet improves itsinternal structure� [Fowler, 1999]
You can refactor code:
e.g. Read ch. 5 of [Martin, 2003]
You can refactor your design:
We will see many examples
![Page 26: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/26.jpg)
The Need for Design Principles Refactoring Design Principles References
The Single-Responsibility Principle (SRP)
A class should have only one responsibility.
OR
A class should have only one reason to change.
A class with several responsibilities creates unnecessary couplingsbetween those responsibilities.
![Page 27: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/27.jpg)
The Need for Design Principles Refactoring Design Principles References
The Single-Responsibility Principle (SRP)
A class should have only one responsibility.
OR
A class should have only one reason to change.
A class with several responsibilities creates unnecessary couplingsbetween those responsibilities.
![Page 28: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/28.jpg)
The Need for Design Principles Refactoring Design Principles References
The Single-Responsibility Principle (SRP)
A class should have only one responsibility.
OR
A class should have only one reason to change.
A class with several responsibilities creates unnecessary couplingsbetween those responsibilities.
![Page 29: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/29.jpg)
The Need for Design Principles Refactoring Design Principles References
The Single-Responsibility Principle (SRP)
A class should have only one responsibility.
OR
A class should have only one reason to change.
A class with several responsibilities creates unnecessary couplingsbetween those responsibilities.
![Page 30: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/30.jpg)
The Need for Design Principles Refactoring Design Principles References
The Single-Responsibility Principle (SRP)
A class should have only one responsibility.
OR
A class should have only one reason to change.
A class with several responsibilities creates unnecessary couplingsbetween those responsibilities.
![Page 31: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/31.jpg)
e.g. Rectangle Class
The Geometry Application is concerned with the mathematicsof geometric shapes
The Graphical Application may also involve some geometry,but it also needs to draw geometric shapes
The Rectangle class has two responsibilities:
Provide a mathematical model of a rectangleRender a rectangle
![Page 32: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/32.jpg)
e.g. Rectangle Class
The Geometry Application is concerned with the mathematicsof geometric shapes
The Graphical Application may also involve some geometry,but it also needs to draw geometric shapes
The Rectangle class has two responsibilities:
Provide a mathematical model of a rectangleRender a rectangle
![Page 33: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/33.jpg)
e.g. Rectangle Class
The Geometry Application is concerned with the mathematicsof geometric shapes
The Graphical Application may also involve some geometry,but it also needs to draw geometric shapes
The Rectangle class has two responsibilities:
Provide a mathematical model of a rectangleRender a rectangle
![Page 34: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/34.jpg)
e.g. Rectangle Class
The Geometry Application is concerned with the mathematicsof geometric shapes
The Graphical Application may also involve some geometry,but it also needs to draw geometric shapes
The Rectangle class has two responsibilities:
Provide a mathematical model of a rectangleRender a rectangle
![Page 35: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/35.jpg)
e.g. Rectangle Class
The Geometry Application is concerned with the mathematicsof geometric shapes
The Graphical Application may also involve some geometry,but it also needs to draw geometric shapes
The Rectangle class has two responsibilities:
Provide a mathematical model of a rectangle
Render a rectangle
![Page 36: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/36.jpg)
e.g. Rectangle Class
The Geometry Application is concerned with the mathematicsof geometric shapes
The Graphical Application may also involve some geometry,but it also needs to draw geometric shapes
The Rectangle class has two responsibilities:
Provide a mathematical model of a rectangleRender a rectangle
![Page 37: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/37.jpg)
[Figure repeated]
Problems created:
Inclusion: The GUI must be included in the GeometryApplication (C++: linked into executable, Java: GUI.class �leincluded in JAR �le)A change required for one application may a�ect the other(e.g. adding a colour attribute)
![Page 38: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/38.jpg)
[Figure repeated]
Problems created:
Inclusion: The GUI must be included in the GeometryApplication (C++: linked into executable, Java: GUI.class �leincluded in JAR �le)A change required for one application may a�ect the other(e.g. adding a colour attribute)
![Page 39: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/39.jpg)
[Figure repeated]
Problems created:
Inclusion: The GUI must be included in the GeometryApplication (C++: linked into executable, Java: GUI.class �leincluded in JAR �le)
A change required for one application may a�ect the other(e.g. adding a colour attribute)
![Page 40: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/40.jpg)
[Figure repeated]
Problems created:
Inclusion: The GUI must be included in the GeometryApplication (C++: linked into executable, Java: GUI.class �leincluded in JAR �le)A change required for one application may a�ect the other(e.g. adding a colour attribute)
![Page 41: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/41.jpg)
Solution:
Separate the two responsibilities (math rep. + drawing) intotwo separate classes
![Page 42: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/42.jpg)
Solution:
Separate the two responsibilities (math rep. + drawing) intotwo separate classes
![Page 43: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/43.jpg)
Solution:
Separate the two responsibilities (math rep. + drawing) intotwo separate classes
![Page 44: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/44.jpg)
e.g. Modem Interface
interface Modem {void dial ( String pno ) ;void hangup ( ) ;void send ( char c ) ;char recv ( ) ;
}
Multiple responsibilities? You could say there are two:
Connection management (dial, hangup)
Data transfer (send, recv)
![Page 45: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/45.jpg)
e.g. Modem Interface
interface Modem {void dial ( String pno ) ;void hangup ( ) ;void send ( char c ) ;char recv ( ) ;
}
Multiple responsibilities? You could say there are two:
Connection management (dial, hangup)
Data transfer (send, recv)
![Page 46: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/46.jpg)
e.g. Modem Interface
interface Modem {void dial ( String pno ) ;void hangup ( ) ;void send ( char c ) ;char recv ( ) ;
}
Multiple responsibilities? You could say there are two:
Connection management (dial, hangup)
Data transfer (send, recv)
![Page 47: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/47.jpg)
e.g. Modem Interface
interface Modem {void dial ( String pno ) ;void hangup ( ) ;void send ( char c ) ;char recv ( ) ;
}
Multiple responsibilities? You could say there are two:
Connection management (dial, hangup)
Data transfer (send, recv)
![Page 48: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/48.jpg)
If connection management and data transfer are consideredseparate responsibilities then we can provide the following solution:
However, what if connection management and data transfer alwayschange together? Then Modem has only one reason for change andcan be left as is. To modify Modem in this case would smell ofneedless complexity.
![Page 49: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/49.jpg)
If connection management and data transfer are consideredseparate responsibilities then we can provide the following solution:
However, what if connection management and data transfer alwayschange together? Then Modem has only one reason for change andcan be left as is. To modify Modem in this case would smell ofneedless complexity.
![Page 50: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/50.jpg)
If connection management and data transfer are consideredseparate responsibilities then we can provide the following solution:
However, what if connection management and data transfer alwayschange together? Then Modem has only one reason for change andcan be left as is. To modify Modem in this case would smell ofneedless complexity.
![Page 51: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/51.jpg)
[Figure repeated]
Consider our solution again. Modem Implementation has tworesponsibilities! Isn't this bad? Yes but...
This may be unavoidable due to h/w or OS constraints
Even if Modem Implementation changes, other classes in thesystem should remain una�ected
![Page 52: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/52.jpg)
[Figure repeated]
Consider our solution again. Modem Implementation has tworesponsibilities! Isn't this bad? Yes but...
This may be unavoidable due to h/w or OS constraints
Even if Modem Implementation changes, other classes in thesystem should remain una�ected
![Page 53: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/53.jpg)
[Figure repeated]
Consider our solution again. Modem Implementation has tworesponsibilities! Isn't this bad? Yes but...
This may be unavoidable due to h/w or OS constraints
Even if Modem Implementation changes, other classes in thesystem should remain una�ected
![Page 54: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/54.jpg)
The Need for Design Principles Refactoring Design Principles References
The Open-Closed Principle (OCP)
Software entities (classes, modules, functions, etc.)
should be open for extension, but closed for modi�cation.
OR
To change behaviour, add new code rather than changing
existing code.
How? Abstraction.
![Page 55: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/55.jpg)
The Need for Design Principles Refactoring Design Principles References
The Open-Closed Principle (OCP)
Software entities (classes, modules, functions, etc.)
should be open for extension, but closed for modi�cation.
OR
To change behaviour, add new code rather than changing
existing code.
How? Abstraction.
![Page 56: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/56.jpg)
The Need for Design Principles Refactoring Design Principles References
The Open-Closed Principle (OCP)
Software entities (classes, modules, functions, etc.)
should be open for extension, but closed for modi�cation.
OR
To change behaviour, add new code rather than changing
existing code.
How? Abstraction.
![Page 57: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/57.jpg)
e.g. Client Server
With regards to the Client, the following design does not conformto the OCP.
If we want the Client to use a di�erent Server, we must change theClient. However, the following design resolves this problem:
![Page 58: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/58.jpg)
e.g. Client Server
With regards to the Client, the following design does not conformto the OCP.
If we want the Client to use a di�erent Server, we must change theClient. However, the following design resolves this problem:
![Page 59: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/59.jpg)
e.g. Client Server
With regards to the Client, the following design does not conformto the OCP.
If we want the Client to use a di�erent Server, we must change theClient. However, the following design resolves this problem:
![Page 60: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/60.jpg)
The DrawShape function violates the OCP:
class Shape {enum ShapeType {SQUARE , CIRCLE} itsType ;Shape ( ShapeType t ) : itsType ( t ) {}
} ;
class Circle : public Shape {Circle ( ) : Shape ( CIRCLE ) {} ;void Draw ( ) ;// . . .
} ;
class Square : public Shape {Square ( ) : Shape ( SQUARE ) {} ;void Draw ( ) ;// . . .
} ;
void DrawShape ( const Shape& s ) {if ( s . itsType == Shape : : SQUARE )
static_cast<const Square&>(s ) . Draw ( ) ;else if ( s . itsType == Shape : : CIRCLE )
static_cast<const Circle&>(s ) . Draw ( ) ;}
New derivatives of Shape require changes to DrawShape.
![Page 61: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/61.jpg)
The DrawShape function violates the OCP:
class Shape {enum ShapeType {SQUARE , CIRCLE} itsType ;Shape ( ShapeType t ) : itsType ( t ) {}
} ;
class Circle : public Shape {Circle ( ) : Shape ( CIRCLE ) {} ;void Draw ( ) ;// . . .
} ;
class Square : public Shape {Square ( ) : Shape ( SQUARE ) {} ;void Draw ( ) ;// . . .
} ;
void DrawShape ( const Shape& s ) {if ( s . itsType == Shape : : SQUARE )
static_cast<const Square&>(s ) . Draw ( ) ;else if ( s . itsType == Shape : : CIRCLE )
static_cast<const Circle&>(s ) . Draw ( ) ;}
New derivatives of Shape require changes to DrawShape.
![Page 62: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/62.jpg)
The DrawShape function violates the OCP:
class Shape {enum ShapeType {SQUARE , CIRCLE} itsType ;Shape ( ShapeType t ) : itsType ( t ) {}
} ;
class Circle : public Shape {Circle ( ) : Shape ( CIRCLE ) {} ;void Draw ( ) ;// . . .
} ;
class Square : public Shape {Square ( ) : Shape ( SQUARE ) {} ;void Draw ( ) ;// . . .
} ;
void DrawShape ( const Shape& s ) {if ( s . itsType == Shape : : SQUARE )
static_cast<const Square&>(s ) . Draw ( ) ;else if ( s . itsType == Shape : : CIRCLE )
static_cast<const Circle&>(s ) . Draw ( ) ;}
New derivatives of Shape require changes to DrawShape.
![Page 63: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/63.jpg)
The use of virtual methods solves this problem:
class Shape {public :
virtual void Draw ( ) const = 0 ;} ;
class Square : public Shape {public :
virtual void Draw ( ) const ;// . . .
} ;
class Circle : public Shape {public :
virtual void Draw ( ) const ;// . . .
} ;
void DrawShape ( const Shape& s ) {s . Draw ( ) ;
}
![Page 64: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/64.jpg)
The use of virtual methods solves this problem:
class Shape {public :
virtual void Draw ( ) const = 0 ;} ;
class Square : public Shape {public :
virtual void Draw ( ) const ;// . . .
} ;
class Circle : public Shape {public :
virtual void Draw ( ) const ;// . . .
} ;
void DrawShape ( const Shape& s ) {s . Draw ( ) ;
}
![Page 65: Design Principles: Part 1 - Computer Science · Design Principles: Part 1 ENGI 5895: Software Design Andrew Vardy ... 2 Refactoring 3 Design Principles The Single-Responsibility Principle](https://reader033.vdocuments.us/reader033/viewer/2022052721/5f0a8e147e708231d42c352a/html5/thumbnails/65.jpg)
The Need for Design Principles Refactoring Design Principles References
References
Martin Fowler. Refactoring: Improving the Design of Existing Code.Addison-Wesley, 1999.
Robert C. Martin. Agile Software Development: Principles,
Patterns, and Practices. Prentice Hall, 2003.