37
1 COS 260 DAY 12 Tony Gauvin

1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

Embed Size (px)

DESCRIPTION

Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 5.0

Citation preview

Page 1: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

1

COS 260 DAY 12

Tony Gauvin

Page 2: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

2

Agenda• Questions?• 5th Mini quiz

– Chapter 5 40 min • Assignment 3 Due • Assignment 4 will be posted later (next

week) – If you are bored, Exercises 6.34, 6.35, 6.36 and

6.37 will be part of assignment 4 • Capstone Proposals Over Due • Discuss Designing Classes

Page 3: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

Designing classes

How to write classes in a way that they are easily

understandable, maintainable and reusable

5.0

Page 4: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

4

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

Page 5: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

5

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

Page 6: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

6

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

Page 7: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

7

World of Zuul

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

Explore zuul-bad

Page 8: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

8

The Zuul Classes• Game: The starting point and main

control loop.• Room: A room in the game.• Parser: Reads user input.• Command: A user command.• CommandWords: Recognized

user commands.

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

Page 9: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

9

Code and design quality• If we are to be critical of code

quality, we need evaluation criteria.

• Two important concepts for assessing the quality of code are:– Coupling– Cohesion

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

Page 10: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

10

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.• A class diagram provides (limited)

hints at the degree of coupling.Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 11: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

11

Cohesion• Cohesion refers to 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.

• We aim for high cohesion.• ‘Unit’ applies to classes, methods

and modules (packages).Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 12: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

12

Code Duplication• Examine Class Game for code

duplications• How can we fix the problem?• Elimination of duplication fixes

Bad Cohesion – One task per method– One entity per class

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

Page 13: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

13

An example to test quality• Add two new directions to the 'World

of Zuul':• “up”• “down”

• What do you need to change to do this? – Which classes

• How easy are the changes to apply thoroughly?

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

Page 14: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

14

Up/down Extension• Use of a HashMap for each room to store exits

(directions and adjacent rooms )– Key is a direction– Value is a (another) room

• exits.get(north) would return room that is north of the current room

• We then can add as many exist as want by add to the “exits” HashMap

• Would require changes to many classes (tight coupling)

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

Page 15: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

Designing classes

Coupling, cohesion, and responsibility-driven design

Page 16: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

16

Coupling (reprise)• 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.• A class diagram provides (limited)

hints at the degree of coupling.Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 17: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

17

Loose coupling• We aim for loose coupling.• Loose coupling makes it possible to:

– understand one class without reading others;

– change one class with little or no effect on other classes.

• Thus: loose coupling increases maintainability.

• Encapsulation helps reduce coupling

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

Page 18: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

18

Tight coupling• We try to avoid tight coupling.• Changes to one class bring a

cascade of changes to other classes.

• Classes are harder to understand in isolation.

• Flow of control between objects of different classes is complex.

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

Page 19: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

19

Cohesion (reprise)• Cohesion refers to 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.

• We aim for high cohesion.• ‘Unit’ applies to classes, methods

and modules (packages).Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 20: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

20

High cohesion• We aim for high cohesion.• High cohesion makes it easier to:

– understand what a class or method does;

– use descriptive names for variables, methods and classes;

– reuse classes and methods.

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

Page 21: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

21

Loose cohesion• We aim to avoid loosely cohesive

classes and methods.• Methods perform multiple tasks.• Classes have no clear identity.• Every part of class should refer to

ONE thing

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

Page 22: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

22

Cohesion applied at different levels

• Class level:– Classes should represent one single,

well defined entity.• Method level:

– 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

Page 23: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

23

Code duplication• Code duplication

– is an indicator of bad design,– makes maintenance harder,– can lead to introduction of errors during

maintenance.• Very frustrating to Trouble Shoot to

maintain code that has duplications. You can’t just fix one part you have find all the duplications

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

Page 24: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

24

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.• encapsulation!

• RDD leads to low coupling.

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

Page 25: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

25

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

Page 26: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

26

Implicit coupling • Occurs when one class depends on the

internal information of another class• Example add a new command to the

game world-of-zuul – Add to CommandWord class– Modify Game class

• Add new method for command• Add new command method to

processCommand method logic • What else?

Objects First with Java - A Practica l Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 27: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

27

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.

• One pattern often seen• Text based game becomes GUI

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

Page 28: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

28

Model View Controller • Originates from Smalltalk (basis

for most modern object oriented programming languages)

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

Page 29: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

29

Cohesion in Depth • Cohesion of Methods

– One method one task• Cohesion of Classes

– One class one well defined entity• Cohesion for readability & reuse

– Proper naming and class Division provides for easier to understand and reuse code.

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

Page 30: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

30

Refactoring• When classes are maintained,

often code is added.• Classes and methods tend to

become longer. (bloat code) • 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

Page 31: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

31

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

Page 32: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

32

Design questions• Common questions:

– How long should a class be?– How long should a method be?

• These 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

Page 33: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

33

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

Page 34: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

34

Enumerated Types• A language feature.• Uses enum instead of class to

introduce a type name.• Their simplest use is to define a

set of significant names.– Alternative to static int constants.– When the constants’ values would

be arbitrary.Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 35: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

35

A basic enumerated type

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

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

enum type, e.g., CommandWord.HELP. • Enum objects are not created directly.• Enum definitions can also have fields,

constructors and methods.

Page 36: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

36

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

Page 37: 1 COS 260 DAY 12 Tony Gauvin. 2 Agenda Questions? 5 th Mini quiz –Chapter 5 40 min Assignment 3 Due Assignment 4 will be posted later (next week) –If

37

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