0% found this document useful (0 votes)
7 views24 pages

Designing Classes: How To Write Classes in A Way That They Are Easily Understandable, Maintainable and Reusable

Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views24 pages

Designing Classes: How To Write Classes in A Way That They Are Easily Understandable, Maintainable and Reusable

Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd

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. [Link].
• 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