Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 24

Designing classes

How to write classes in a way that


they are easily understandable,
maintainable and reusable

3.0
Main concepts to be covered

• Responsibility-driven design
• Coupling
• Cohesion
• Refactoring

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 2
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).

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 3
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.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 4
World of Zuul

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 5
Code quality
• Two important concepts for quality
of code:
– Coupling
– Cohesion

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 6
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.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 7
Loose coupling
• Loose coupling makes it possible to:
– understand one class without reading
others;
– change one class without affecting
others.
– Thus: improves maintainability.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 8
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.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 9
High cohesion
• High cohesion makes it easier to:
– understand what a class or method does;
– use descriptive names;
– reuse classes or methods.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 10
Cohesion of methods

• A method should be responsible for


one and only one well defined task.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 11
Cohesion of classes

• Classes should represent one single,


well defined entity.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 12
Code duplication
• Code duplication
– is an indicator of bad design,
– makes maintenance harder,
– can lead to introduction of errors during
maintenance.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 13
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.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 14
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.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 15
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.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 16
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.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 17
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.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 18
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.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 19
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.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 20
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.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 21
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.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 22
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.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 23
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.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 24

You might also like