designing classes how to write classes in a way that they are easily understandable, maintainable...
Post on 19-Dec-2015
216 views
TRANSCRIPT
![Page 1: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/1.jpg)
Designing classes
How to write classes in a way that they are easily
understandable, maintainable and reusable
4.0
![Page 2: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/2.jpg)
2 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Main concepts to be covered
• Coupling• Cohesion• Responsibility-driven design• Refactoring
![Page 3: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/3.jpg)
3 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Software changes
• Software is not like a novel that is written once and then remains unchanged.
• Software is extended, corrected, maintained, ported, adapted…
• The work is done by different people over time (often decades).
![Page 4: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/4.jpg)
4 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Change or die
• There are only two options for software:– Either it is continuously maintained– or it dies.
• Software that cannot be maintained will be thrown away.
![Page 5: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/5.jpg)
5 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
World of Zuul
![Page 6: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/6.jpg)
6 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
An example
• Add two new directions to the 'World of Zuul':• up• down
• What do you need to change to do this?
![Page 7: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/7.jpg)
7 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Code quality
• Two important concepts for quality of code:– Coupling– Cohesion
![Page 8: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/8.jpg)
8 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Coupling
• Coupling refers to links between separate units of a program.
• If two classes depend closely on many details of each other, we say they are tightly coupled.
• We aim for loose coupling.
![Page 9: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/9.jpg)
9 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Loose coupling
• Loose coupling makes it possible to:– understand one class without
reading others;– change one class without affecting
others.– Thus: improves maintainability.
![Page 10: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/10.jpg)
10 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Cohesion
• Cohesion refers to the the number and diversity of tasks that a single unit is responsible for.
• If each unit is responsible for one single logical task, we say it has high cohesion.
• Cohesion applies to classes and methods.
• We aim for high cohesion.
![Page 11: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/11.jpg)
11 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
High cohesion
• High cohesion makes it easier to:– understand what a class or method
does;– use descriptive names;– reuse classes or methods.
![Page 12: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/12.jpg)
12 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Cohesion of methods
• A method should be responsible for one and only one well defined task.
![Page 13: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/13.jpg)
13 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Cohesion of classes
• Classes should represent one single, well defined entity.
![Page 14: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/14.jpg)
14 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Code duplication
• Code duplication – is an indicator of bad design,– makes maintenance harder,– can lead to introduction of errors
during maintenance.
![Page 15: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/15.jpg)
15 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Responsibility-driven design
• Question: where should we add a new method (which class)?
• Each class should be responsible for manipulating its own data.
• The class that owns the data should be responsible for processing it.
• RDD leads to low coupling.
![Page 16: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/16.jpg)
16 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Localizing change
• One aim of reducing coupling and responsibility-driven design is to localize change.
• When a change is needed, as few classes as possible should be affected.
![Page 17: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/17.jpg)
17 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Thinking ahead
• When designing a class, we try to think what changes are likely to be made in the future.
• We aim to make those changes easy.
![Page 18: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/18.jpg)
18 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Refactoring
• When classes are maintained, often code is added.
• Classes and methods tend to become longer.
• Every now and then, classes and methods should be refactored to maintain cohesion and low coupling.
![Page 19: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/19.jpg)
19 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Refactoring and testing
• When refactoring code, separate the refactoring from making other changes.
• First do the refactoring only, without changing the functionality.
• Test before and after refactoring to ensure that nothing was broken.
![Page 20: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/20.jpg)
20 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Design questions
• Common questions:– How long should a class be?– How long should a method be?
• Can now be answered in terms of cohesion and coupling.
![Page 21: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/21.jpg)
21 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Design guidelines
• A method is too long if it does more then one logical task.
• A class is too complex if it represents more than one logical entity.
• Note: these are guidelines - they still leave much open to the designer.
![Page 22: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/22.jpg)
22 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Enumerated Types
• A language feature.• Uses enum instead of class to
introduce a type name.• Simplest use is to define a set of
significant names.– Alternative to static int constants.
![Page 23: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/23.jpg)
23 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
A basic enumerated type
public enum CommandWord{ // A value for each command word, // plus one for unrecognised commands. GO, QUIT, HELP, UNKNOWN;}
• Each name represents an object of the enumerated type, e.g. CommandWord.HELP. • Enumerated objects are not created directly by the programmer.
![Page 24: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/24.jpg)
24 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Review
• Programs are continuously changed.
• It is important to make this change possible.
• Quality of code requires much more than just performing correct at one time.
• Code must be understandable and maintainable.
![Page 25: Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 4.0](https://reader030.vdocuments.us/reader030/viewer/2022032800/56649d365503460f94a0dee2/html5/thumbnails/25.jpg)
25 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Review
• Good quality code avoids duplication, displays high cohesion, low coupling.
• Coding style (commenting, naming, layout, etc.) is also important.
• There is a big difference in the amount of work required to change poorly structured and well structured code.