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

373
views

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
373
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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. 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?

×