Stoop ed-subtyping subclassing


Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Stoop ed-subtyping subclassing

  1. 1. Stéphane Ducasse 1 Stéphane Ducasse 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?