Your SlideShare is downloading. ×
Stoop ed-subtyping subclassing
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. Stéphane Ducasse 1 Stéphane Ducasse Design Points - Subclassing vs Subtyping 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?