l11: coupling, cohesion, visibility -...

24
L11: Coupling, Cohesion, Visibility Dependency Coupling Internal data coupling Global data coupling Control (or sequence) coupling Component coupling Parameter coupling Subclass coupling Cohesion Coincidental cohesion Logical cohesion Temporal cohesion Communication cohesion Sequential cohesion Functional cohesion Data cohesion Visibility: visibility & access and friends Chapter 23 of Budd SFDV4001 / L11 - Coupling, Cohesion & Visibility / 1

Upload: others

Post on 11-Jun-2020

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

L11: Coupling, Cohesion, Visibility• Dependency

• Coupling

Internal data coupling

Global data coupling

Control (or sequence) coupling

Component coupling

Parameter coupling

Subclass coupling

• Cohesion

Coincidental cohesion

Logical cohesion

Temporal cohesion

Communication cohesion

Sequential cohesion

Functional cohesion

Data cohesion

• Visibility: visibility & access and friends

• Chapter 23 of Budd

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 1

Page 2: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Dependency

• If an object cannot meaningfully exist without another object, it is said to be dependent on the second object.

• Eg a child class is almost always dependent on its parent.

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 2

Page 3: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Coupling

• Internal data coupling• Global data coupling• Control (or sequence) coupling• Component coupling• Parameter coupling• Subclass coupling

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 3

Page 4: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Internal Data Coupling

class Sneaky {public:

void sneak(){ luke->father=“darth”;};

private:Luke *luke;

};

class Luke {public:

Luke() { father = “anakin”;};string father;

};

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 4

Page 5: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Global Data Coupling

• Two or more classes are bound together by their reliance on common global data structures

double todaysDow;class One {public: void setDow(){

todaysDow=10534; }};

class Two {public: void printDow(){ cout << todaysDow; }};

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 5

Page 6: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Global Data Coupling

• File scope• Namespace scope• Program scope

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 6

Page 7: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Control Coupling

• When one class must perform operations in a fixed order, but the order is controlled elsewhere

class MyClass {public:

void doFirst(){...};void doSecond(){...};void doThird(){...};

}

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 7

Page 8: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Component Coupling

• One class maintains a data field or value that is an instance of another class.

• Ideally this relationship should be one way.

class Set {...

private:List data;

};

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 8

Page 9: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Parameter Coupling

• When one class must invoke routines from another via parameters.

class MyClass {public: void doSomething(Set aSet){

... }};

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 9

Page 10: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Subclass Coupling

• Describes the relationship between a class and its parent.

class Parent {...};

class Child: public Parent {...};

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 10

Page 11: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Rules to Reduce Coupling

• Always access data members through accessor methods. Eg getFather, setFather.

• Advantages?

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 11

Page 12: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Rules to Reduce Coupling

• Within a class method only access:– arguments– instance variables– local variables

• Try to reduce the number of classes each class knows about.

• Use namespaces for global data.

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 12

Page 13: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Cohesion

• Coincidental cohesion• Logical cohesion• Temporal cohesion• Communication cohesion• Sequential cohesion• Functional cohesion• Data cohesion

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 13

Page 14: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Coincidental Cohesion

• Elements of a class are grouped for no apparent reason.

• A class consists of methods that are not related.

• Usually a sign of poor design.

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 14

Page 15: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Logical Cohesion

• Occurs when there is logical connection among the elements of the class but no actual connection in either data or control.

• Eg a library of mathematical functions

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 15

Page 16: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Temporal Cohesion

• Elements are bound together because they all must be used at approximately the same time.

• Eg a class that performs program initialisation.

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 16

Page 17: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Communications cohesion

• Methods are grouped together because they all access the same input/output data or device.

• The class acts as a device manager.• Eg a Proxy class

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 17

Page 18: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Sequential Cohesion

• Elements are linked by the necessity to be activated in a particular order.

• Often used to attempt to avoid sequential coupling.

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 18

Page 19: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Function Cohesion

• The elements of a class all relate to the performance of a single function.

• Very desirable form of cohesion

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 19

Page 20: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Data Cohesion

• A class defines a set of data values and exports routines that manipulate the data structure.

• The embodiment of an ADT• Eg vector, list etc

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 20

Page 21: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Visibility

• An object is visible in a certain context if its name is legal and denotes the object.

• I.e., the object is in scope.

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 21

Page 22: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Access and Visibility

class Sneaky {private:

int safe;public:

Sneaky(){safe=10;};int &sorry(){return safe;};print(){cout << safe << endl;}

};

Sneaky x;x.sorry() = 1;x.print();int y = x.sorry(); y = 2;x.print();int &z = x.sorry();z = 3;x.print();

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 22

Page 23: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Friends

• C++ has a notion of friend functions and classes.

• A friend function is a function that can access a classes private parts.

• Can be useful but easily abused!

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 23

Page 24: L11: Coupling, Cohesion, Visibility - sfdv4001.wdfiles.comsfdv4001.wdfiles.com/local--files/lectures/L11... · L11: Coupling, Cohesion, Visibility • Dependency • Coupling Internal

Example

class Matrix {float data[4][4];

public:friend Vector operator*(const Matrix&, const Vector&);

};class Vector {

float data[4];public:

friend Vector operator*(const Matrix&, const Vector&);

}

Vector operator*(const Matrix& m, const Vector& v);

SFDV4001 / L11 - Coupling, Cohesion & Visibility / 24