+ All Categories
Home > Documents > Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A...

Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A...

Date post: 30-Sep-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
42
Principles of Object-Oriented Design Prof. Michele Loreti Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie Prof. Michele Loreti Principles of Object-Oriented Design 183 / 453
Transcript
Page 1: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Principles of Object-Oriented Design

Prof. Michele Loreti

Programmazione AvanzataCorso di Laurea in Informatica (L31)Scuola di Scienze e Tecnologie

Prof. Michele Loreti Principles of Object-Oriented Design 183 / 453

Page 2: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

SOLID principles of object-oriented programming.

Single responsibility principle

Open-closed principle

Liskov substitution principle

Interface segregation principle

Dependency inversion principle

One should depend upon abstractions, not concretions!

Prof. Michele Loreti Principles of Object-Oriented Design 184 / 453

Page 3: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

SOLID principles of object-oriented programming.

Single responsibility principle

Open-closed principle

Liskov substitution principle

Interface segregation principle

Dependency inversion principle

One should depend upon abstractions, not concretions!

Prof. Michele Loreti Principles of Object-Oriented Design 184 / 453

Page 4: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

SOLID principles of object-oriented programming.

Single responsibility principle

Open-closed principle

Liskov substitution principle

Interface segregation principle

Dependency inversion principle

One should depend upon abstractions, not concretions!

Prof. Michele Loreti Principles of Object-Oriented Design 184 / 453

Page 5: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

SOLID principles of object-oriented programming.

Single responsibility principle

Open-closed principle

Liskov substitution principle

Interface segregation principle

Dependency inversion principle

One should depend upon abstractions, not concretions!

Prof. Michele Loreti Principles of Object-Oriented Design 184 / 453

Page 6: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

SOLID principles of object-oriented programming.

Single responsibility principle

Open-closed principle

Liskov substitution principle

Interface segregation principle

Dependency inversion principle

One should depend upon abstractions, not concretions!

Prof. Michele Loreti Principles of Object-Oriented Design 184 / 453

Page 7: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

SOLID principles of object-oriented programming.

Single responsibility principle

Open-closed principle

Liskov substitution principle

Interface segregation principle

Dependency inversion principle

One should depend upon abstractions, not concretions!

Prof. Michele Loreti Principles of Object-Oriented Design 184 / 453

Page 8: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Single responsibility principle

A class should have only a single responsibility!

A responsibility is a family of functions that serves one particular actor.

An actor for a responsibility is the single source of change for thatresponsibility.

Prof. Michele Loreti Principles of Object-Oriented Design 185 / 453

Page 9: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Single responsibility principle

A class should have only a single responsibility!

A responsibility is a family of functions that serves one particular actor.

An actor for a responsibility is the single source of change for thatresponsibility.

Prof. Michele Loreti Principles of Object-Oriented Design 185 / 453

Page 10: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Single responsibility principle

A class should have only a single responsibility!

A responsibility is a family of functions that serves one particular actor.

An actor for a responsibility is the single source of change for thatresponsibility.

Prof. Michele Loreti Principles of Object-Oriented Design 185 / 453

Page 11: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Single responsibility principle

Bad example:

p u b l i c c l a s s Order {. . .p u b l i c i n t g e t I d ( ) { . . . }

p u b l i c S t r i n g g e tD e s c r i p t i o n { . . . }

p u b l i c dub l e g e tP r i c e ( ) { . . . }

p u b l i c vo i d p r i n tPage ( ) {. . .

}. . .

}

Prof. Michele Loreti Principles of Object-Oriented Design 186 / 453

Page 12: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Single responsibility principle

Correct refactoring:

p u b l i c c l a s s Order {. . .p u b l i c i n t g e t I d ( ) { . . . }

p u b l i c S t r i n g g e tD e s c r i p t i o n { . . . }

p u b l i c dub l e g e tP r i c e ( ) { . . . }. . .

}

p u b l i c i n t e r f a c e O r d e rP r i n t e r {p u b l i c vo i d p r i n t ( Order o ) ;

}

Prof. Michele Loreti Principles of Object-Oriented Design 187 / 453

Page 13: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Single responsibility principle

p u b l i c c l a s s P l a i nT e x tP r i n t e r implements O r d e rP r i n t e r {p u b l i c vo i d p r i n t ( Order b ) { . . . }

}

p u b l i c c l a s s Htm lP r i n t e r implements O r d e rP r i n t e r {p u b l i c vo i d p r i n t ( Order b ) { . . . }

}

Prof. Michele Loreti Principles of Object-Oriented Design 188 / 453

Page 14: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Single responsibility principle

c l a s s Book {p u b l i c S t r i n g g e t T i t l e ( ) { . . . }p u b l i c S t r i n g getAuthor ( ) { . . . }p u b l i c vo i d turnPage ( ) { . . . }p u b l i c Page ge tCur ren tPage ( ) { . . . }p u b l i c Loca t i on g e tLo c a t i o n ( ) {

// r e t u r n s the p o s i t i o n i n the l i b r a r y// i e . s h e l f number & room number

}}

Question: does the above class violate the SRP?

Prof. Michele Loreti Principles of Object-Oriented Design 189 / 453

Page 15: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Single responsibility principle

c l a s s Book {p u b l i c S t r i n g g e t T i t l e ( ) { . . . }p u b l i c S t r i n g getAuthor ( ) { . . . }p u b l i c vo i d turnPage ( ) { . . . }p u b l i c Page ge tCur ren tPage ( ) { . . . }p u b l i c Loca t i on g e tLo c a t i o n ( ) {

// r e t u r n s the p o s i t i o n i n the l i b r a r y// i e . s h e l f number & room number

}}

Question: does the above class violate the SRP?

Prof. Michele Loreti Principles of Object-Oriented Design 189 / 453

Page 16: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Single responsibility principle

When we design a software solution we should. . .

1. Find and define the actors.

2. Identify the responsibilities that serve those actors.

3. Group our functions and classes so that each has only one allocatedresponsibility.

Prof. Michele Loreti Principles of Object-Oriented Design 190 / 453

Page 17: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Open-closed principles

Software entities should be open for extension,but closed for modification!

The origin of the term is due to Bertrand Meyer who used it in his 1988book Object Oriented Software Construction.

� A module will be said to be open if it is still available for extension.

� A module will be said to be closed if it is available for use by othermodules (well-defined, stable description).

A class is closed, since it may be compiled, stored in a library, baselined,and used by client classes. But it is also open, since any new class mayuse it as parent, adding new features.

Prof. Michele Loreti Principles of Object-Oriented Design 191 / 453

Page 18: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Open-closed principles

Software entities should be open for extension,but closed for modification!

The origin of the term is due to Bertrand Meyer who used it in his 1988book Object Oriented Software Construction.

� A module will be said to be open if it is still available for extension.

� A module will be said to be closed if it is available for use by othermodules (well-defined, stable description).

A class is closed, since it may be compiled, stored in a library, baselined,and used by client classes. But it is also open, since any new class mayuse it as parent, adding new features.

Prof. Michele Loreti Principles of Object-Oriented Design 191 / 453

Page 19: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Open-closed principles

Software entities should be open for extension,but closed for modification!

The origin of the term is due to Bertrand Meyer who used it in his 1988book Object Oriented Software Construction.

� A module will be said to be open if it is still available for extension.

� A module will be said to be closed if it is available for use by othermodules (well-defined, stable description).

A class is closed, since it may be compiled, stored in a library, baselined,and used by client classes. But it is also open, since any new class mayuse it as parent, adding new features.

Prof. Michele Loreti Principles of Object-Oriented Design 191 / 453

Page 20: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Open-closed principles

Software entities should be open for extension,but closed for modification!

The origin of the term is due to Bertrand Meyer who used it in his 1988book Object Oriented Software Construction.

� A module will be said to be open if it is still available for extension.

� A module will be said to be closed if it is available for use by othermodules (well-defined, stable description).

A class is closed, since it may be compiled, stored in a library, baselined,and used by client classes.

But it is also open, since any new class mayuse it as parent, adding new features.

Prof. Michele Loreti Principles of Object-Oriented Design 191 / 453

Page 21: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Open-closed principles

Software entities should be open for extension,but closed for modification!

The origin of the term is due to Bertrand Meyer who used it in his 1988book Object Oriented Software Construction.

� A module will be said to be open if it is still available for extension.

� A module will be said to be closed if it is available for use by othermodules (well-defined, stable description).

A class is closed, since it may be compiled, stored in a library, baselined,and used by client classes. But it is also open, since any new class mayuse it as parent, adding new features.

Prof. Michele Loreti Principles of Object-Oriented Design 191 / 453

Page 22: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Open-closed principles

Bad example:

p u b l i c c l a s s Rec tang l e {p r i v a t e f i n a l doub l e width ;p r i v a t e f i n a l doub l e h e i g h t ;

p u b l i c Rec tang l e ( doub l e width , doub l e h e i g h t ) {t h i s . w idth = width ;t h i s . h e i g h t = he i g h t ;

}

p u b l i c doub l e getWidth ( ) {r e t u r n width ;

}

p u b l i c doub l e ge tHe i gh t ( ) {r e t u r n h e i g h t ;

}}

Prof. Michele Loreti Principles of Object-Oriented Design 192 / 453

Page 23: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Open-closed principles

Bad example:

p u b l i c c l a s s A r e aCa l c u l a t o r {

p u b l i c doub l e computeArea ( Rec tang l e [ ] shapes ) {doub l e a r ea = 0 ;f o r ( i n t i=0 ; i<shapes ; i++ ) {

a r ea += shapes [ i ] . getWidth ( ) ∗ shapes [ i ] . g e tHe i gh t ( ) ;}

}

}

Prof. Michele Loreti Principles of Object-Oriented Design 193 / 453

Page 24: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Open-closed principles

Correct refactoring:

p u b l i c i n t e r f a c e Shape {

p u b l i c doub l e getArea ( ) ;

}

p u b l i c c l a s s A r e aCa l c u l a t o r {

p u b l i c doub l e computeArea ( Shape [ ] shapes ) {doub l e a r ea = 0 ;f o r ( i n t i=0 ; i<shapes ; i++ ) {

a r ea += shapes [ i ] . ge tArea ( ) ;}

}

}

Prof. Michele Loreti Principles of Object-Oriented Design 194 / 453

Page 25: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Open-closed principles

Correct refactoring:

p u b l i c c l a s s Rec tang l e implements Shape {p r i v a t e f i n a l doub l e width ;p r i v a t e f i n a l doub l e h e i g h t ;

p u b l i c Rec tang l e ( doub l e width , doub l e h e i g h t ) {t h i s . w idth = width ;t h i s . h e i g h t = he i g h t ;

}

p u b l i c doub l e getWidth ( ) { r e t u r n width ; }

p u b l i c doub l e ge tHe i gh t ( ) { r e t u r n h e i g h t ; }

p u b l i c doub l e getArea ( ) { r e t u r n width ∗ h e i g h t ; }}

Prof. Michele Loreti Principles of Object-Oriented Design 195 / 453

Page 26: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Open-closed principles

Correct refactoring:

p u b l i c c l a s s C i r c l e implements Shape {p r i v a t e f i n a l doub l e r a d i u s ;

p u b l i c C i r c l ( doub l e r a d i u s ) {t h i s . r a d i u s = r a d i u s ;

}

p u b l i c doub l e ge tRad iu s ( ) {r e t u r n r a d i u s ;

}

p u b l i c doub l e getArea ( ) {r e t u r n Math . PI∗Math . pow( r ad i u s , 2 ) ;

}}

Prof. Michele Loreti Principles of Object-Oriented Design 196 / 453

Page 27: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Liskov substitution principle

Objects in a program should be replaceable with instances of theirsubtypes without altering the correctness of that program!

The concept of this principle was introduced by Barbara Liskov in a 1987conference keynote and later published in a paper together with JannetteWing in 1994.

Their original definition is as follows:

Let q(x) be a property provable about objects x of type T . Then q(y)should be provable for objects y of type S where S is a subtype of T .

Prof. Michele Loreti Principles of Object-Oriented Design 197 / 453

Page 28: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Liskov substitution principle

Objects in a program should be replaceable with instances of theirsubtypes without altering the correctness of that program!

The concept of this principle was introduced by Barbara Liskov in a 1987conference keynote and later published in a paper together with JannetteWing in 1994.

Their original definition is as follows:

Let q(x) be a property provable about objects x of type T . Then q(y)should be provable for objects y of type S where S is a subtype of T .

Prof. Michele Loreti Principles of Object-Oriented Design 197 / 453

Page 29: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Liskov substitution principle

Objects in a program should be replaceable with instances of theirsubtypes without altering the correctness of that program!

The concept of this principle was introduced by Barbara Liskov in a 1987conference keynote and later published in a paper together with JannetteWing in 1994.

Their original definition is as follows:

Let q(x) be a property provable about objects x of type T . Then q(y)should be provable for objects y of type S where S is a subtype of T .

Prof. Michele Loreti Principles of Object-Oriented Design 197 / 453

Page 30: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Liskov substitution principle

Bad example:

p u b l i c c l a s s Rec tang l e implements Shape {p r i v a t e doub l e width = 0 ;p r i v a t e doub l e h e i g h t = 0 ;

p u b l i c doub l e getWidth ( ) { r e t u r n width ; }

p u b l i c doub l e ge tHe i gh t ( ) { r e t u r n h e i g h t ; }

p u b l i c doub l e getArea ( ) { r e t u r n width ∗ h e i g h t ; }

p u b l i c vo i d setWidth ( doub l e width ) { t h i s . w idth = width ;}

p u b l i c vo i d s e tHe i g h t ( doub l e h e i g h t ) { t h i s . h e i g h t =he i g h t ; }

}

Prof. Michele Loreti Principles of Object-Oriented Design 198 / 453

Page 31: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Liskov substitution principle

Bad example:

p u b l i c c l a s s Square ex t end s Rec tang l e {p u b l i c vo i d setWidth ( doub l e width ) {

supe r . se tWidth ( width ) ;s upe r . s e tHe i g h t ( width ) ;

}

p u b l i c vo i d s e tHe i g h t ( doub l e h e i g h t ) {supe r . s e tHe i g h t ( width ) ;s upe r . se tWidth ( width ) ;

}}

Question: do Rectangle and Square classes satisfy the Liskov substitutionprinciple?

Prof. Michele Loreti Principles of Object-Oriented Design 199 / 453

Page 32: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Liskov substitution principle

Answer: NO!

p u b l i c c l a s s C l a s s {

p u b l i c vo i d checkArea ( Rec tang l e r ) {r . se tWidth ( 10 ) ;r . s e tHe i g h t ( 20 ) ;i f ( r . ge tArea ( ) != 200) {

throw new I l l e g a l S t a t e E x c e p t i o n ( ’Bad a r ea ! ’ )}

}

}

Solution? Square is not a subclass of Rectangle!

Prof. Michele Loreti Principles of Object-Oriented Design 200 / 453

Page 33: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Liskov substitution principle

Answer: NO!

p u b l i c c l a s s C l a s s {

p u b l i c vo i d checkArea ( Rec tang l e r ) {r . se tWidth ( 10 ) ;r . s e tHe i g h t ( 20 ) ;i f ( r . ge tArea ( ) != 200) {

throw new I l l e g a l S t a t e E x c e p t i o n ( ’Bad a r ea ! ’ )}

}

}

Solution? Square is not a subclass of Rectangle!

Prof. Michele Loreti Principles of Object-Oriented Design 200 / 453

Page 34: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Liskov substitution principle

Answer: NO!

p u b l i c c l a s s C l a s s {

p u b l i c vo i d checkArea ( Rec tang l e r ) {r . se tWidth ( 10 ) ;r . s e tHe i g h t ( 20 ) ;i f ( r . ge tArea ( ) != 200) {

throw new I l l e g a l S t a t e E x c e p t i o n ( ’Bad a r ea ! ’ )}

}

}

Solution?

Square is not a subclass of Rectangle!

Prof. Michele Loreti Principles of Object-Oriented Design 200 / 453

Page 35: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Liskov substitution principle

Answer: NO!

p u b l i c c l a s s C l a s s {

p u b l i c vo i d checkArea ( Rec tang l e r ) {r . se tWidth ( 10 ) ;r . s e tHe i g h t ( 20 ) ;i f ( r . ge tArea ( ) != 200) {

throw new I l l e g a l S t a t e E x c e p t i o n ( ’Bad a r ea ! ’ )}

}

}

Solution? Square is not a subclass of Rectangle!

Prof. Michele Loreti Principles of Object-Oriented Design 200 / 453

Page 36: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Interface segregation principle

Many client-specific interfaces are betterthan one general-purpose interface!

The interface-segregation principle (ISP) states that no client should beforced to depend on methods it does not use.

Prof. Michele Loreti Principles of Object-Oriented Design 201 / 453

Page 37: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Interface segregation principle

Many client-specific interfaces are betterthan one general-purpose interface!

The interface-segregation principle (ISP) states that no client should beforced to depend on methods it does not use.

Prof. Michele Loreti Principles of Object-Oriented Design 201 / 453

Page 38: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Interface segregation principle

Bad example:

Prof. Michele Loreti Principles of Object-Oriented Design 202 / 453

Page 39: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Interface segregation principle

Correct refactoring:

Prof. Michele Loreti Principles of Object-Oriented Design 203 / 453

Page 40: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Dependency inversion principle

One should depend upon abstractions, not concretions!

The principle states that:

1. High-level modules should not depend on low-level modules. Bothshould depend on abstractions.

2. Abstractions should not depend on details. Details should depend onabstractions.

Prof. Michele Loreti Principles of Object-Oriented Design 204 / 453

Page 41: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

Dependency inversion principle

One should depend upon abstractions, not concretions!

The principle states that:

1. High-level modules should not depend on low-level modules. Bothshould depend on abstractions.

2. Abstractions should not depend on details. Details should depend onabstractions.

Prof. Michele Loreti Principles of Object-Oriented Design 204 / 453

Page 42: Principles of Object-Oriented Designdidattica.cs.unicam.it/lib/exe/fetch.php?media=did... · A class should have only a single responsibility! A responsibility is a family of functions

To be continued. . .

Prof. Michele Loreti Principles of Object-Oriented Design 205 / 453


Recommended