Presentation is loading. Please wait.

Presentation is loading. Please wait.

Stéphane Ducasse 1 Design Points - Subclassing vs Subtyping Stéphane Ducasse --- 2010.

Similar presentations


Presentation on theme: "Stéphane Ducasse 1 Design Points - Subclassing vs Subtyping Stéphane Ducasse --- 2010."— Presentation transcript:

1 Stéphane Ducasse stephane.ducasse@inria.fr http://stephane.ducasse.free.fr/ 1 Design Points - Subclassing vs Subtyping Stéphane Ducasse --- 2010

2 S.Ducasse 2 A little problem How to implement a Stack?

3 S.Ducasse 3 Stack subclass of OrderedCollection Stack>>pop ^ self removeFirst Stack>>push: anObject self addFirst: anObject Stack>>top ^ self first Stack>>size, Stack>>includes: are free, inherited from

4 S.Ducasse 4 Wait! but What do we do with all the rest of the interface of OrderedCollection? a Stack IS NOT an OrderedCollection! We cannot substitute an OrderedCollection by a Stack Some messages do not make sense on Stack Stack new addLast: anObject Stack new last So we have to block a lot of methods...

5 S.Ducasse 5 Consequences... Stack>>removeFirst self shouldNotImplement Stack>>pop ^ super removeFirst

6 S.Ducasse 6 The Problem There is not a simple relationship between Stack and OrderedCollection Stack interface is not an extension or subset of OrderedCollection interface Compare with CountingStack a subclass of Stack CountingStack interface is an extension of Stack interface

7 S.Ducasse 7 Compare the two uses

8 S.Ducasse 8 Compare the two replacements

9 S.Ducasse 9 A Better Approach By defining the class Stack that uses OrderedCollection Object subclass: Stack instVarNames: ‘elements’ Stack>>push: anElement elements addFirst: anElement Stack>>pop element isEmpty ifFalse: [^ element removeFirst]

10 S.Ducasse 10 Inheritance and Polymorphism Polymorphism works best with conforming/substituable interfaces Inheritance creates families of classes with similar interfaces An abstract class describes an interface fulfilled by its subclasses Inheritance helps software reuse by making polymorphism easier

11 S.Ducasse 11 About subtyping and subclassing You have only extends or subclass: in programming language. But they can be used to define a subclassing or subtyping relationship.

12 S.Ducasse 12 Subtyping Inheritance Reuse of specifications A subclass refines superclass specifications A program that works with Numbers will work with Fractions. A program that works with Collections will work with Arrays.

13 S.Ducasse 13 Subclassing Inheritance for code reuse Dictionary is a subclass of Set Semaphore is a subclass of LinkedList No relationship between the interfaces of the classes Subclass reuses code from superclass, but has a different specification. It cannot be used everywhere its superclass is used. Usually overrides a lot of code. ShouldNotImplement use is a bad smell…

14 S.Ducasse 14 Inheritance for Code Reuse Inheritance for code reuse is good for rapid prototyping getting application done quickly. Bad for: easy to understand systems reusable software application with long life-time.

15 S.Ducasse 15 Subtyping Essence You reuse specification You should be able to substitute an instance by one of its subclasses (more or less) There is a relationship between the interfaces of the class and its superclass

16 S.Ducasse 16 How to Choose? Favor subtyping When you are in a hurry, do what seems easiest. Clean up later, make sure classes use “is-a-subtype” relationship, not just “is-implemented-like”. Is-a-subtype is a design decision, the compiler only enforces is-implemented-like!!!

17 S.Ducasse 17 Quizz – Circle subclass of Point? – Poem subclass of OrderedCollection?


Download ppt "Stéphane Ducasse 1 Design Points - Subclassing vs Subtyping Stéphane Ducasse --- 2010."

Similar presentations


Ads by Google