Stéphane Ducasse 1
Stéphane Ducasse
stephane.ducasse@inria.fr
http://stephane.ducasse.free.fr/
Design Points -
Subclassing...
S.Ducasse 2
A little problem
How to implement a Stack?
S.Ducasse 3
Stack subclass of OrderedCollection
Stack>>pop
^ self removeFirst
Stack>>push: anObject
self addFirst: anObjec...
S.Ducasse 4
Wait! but
• What do we do with all the rest of the interface of
OrderedCollection?
• a Stack IS NOT an Ordered...
S.Ducasse 5
Consequences...
Stack>>removeFirst
self shouldNotImplement
Stack>>pop
^ super removeFirst
S.Ducasse 6
The Problem
• There is not a simple relationship between Stack and
OrderedCollection
• Stack interface is not ...
S.Ducasse 7
Compare the two uses
S.Ducasse 8
Compare the two replacements
S.Ducasse 9
A Better Approach
By defining the class Stack that uses
OrderedCollection
Object subclass: Stack
instVarNames:...
S.Ducasse 10
Inheritance and Polymorphism
• Polymorphism works best with conforming/substituable
interfaces
• Inheritance ...
S.Ducasse 11
About subtyping and subclassing
• You have only extends or subclass: in programming
language.
• But they can ...
S.Ducasse 12
Subtyping Inheritance
• Reuse of specifications
• A subclass refines superclass specifications
• A program th...
S.Ducasse 13
Subclassing
• Inheritance for code reuse
• Dictionary is a subclass of Set
• Semaphore is a subclass of Linke...
S.Ducasse 14
Inheritance for Code Reuse
• Inheritance for code reuse is good for
• rapid prototyping
• getting application...
S.Ducasse 15
Subtyping Essence
• You reuse specification
• You should be able to substitute an instance by one of its
subc...
S.Ducasse 16
How to Choose?
• Favor subtyping
• When you are in a hurry, do what seems easiest.
• Clean up later, make sur...
S.Ducasse 17
Quizz
– Circle subclass of Point?
– Poem subclass of OrderedCollection?
Upcoming SlideShare
Loading in...5
×

Stoop ed-subtyping subclassing

395

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
395
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Stoop ed-subtyping subclassing

  1. 1. Stéphane Ducasse 1 Stéphane Ducasse stephane.ducasse@inria.fr http://stephane.ducasse.free.fr/ Design Points - Subclassing vs Subtyping Subclassing vs Subtyping Stéphane Ducasse --- 2010
  2. 2. S.Ducasse 2 A little problem How to implement a Stack?
  3. 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. 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. 5. S.Ducasse 5 Consequences... Stack>>removeFirst self shouldNotImplement Stack>>pop ^ super removeFirst
  6. 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. 7. S.Ducasse 7 Compare the two uses
  8. 8. S.Ducasse 8 Compare the two replacements
  9. 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. 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. 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. 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. 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. 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. 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. 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. 17. S.Ducasse 17 Quizz – Circle subclass of Point? – Poem subclass of OrderedCollection?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×