• Like

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Stoop ed-subtyping subclassing

  • 341 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
341
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
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. Design Points - Subclassing vs Subtyping Subclassing vs Subtyping
    • Stéphane Ducasse --- 2010
  • 2. A little problem
    • How to implement a Stack?
  • 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. 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. Consequences...
    • Stack>>removeFirst
    • self shouldNotImplement
    • Stack>>pop
    • ^ super removeFirst
  • 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. Compare the two uses
  • 8. Compare the two replacements
  • 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. 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. 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. 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. 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. 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. 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. 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. Quizz
    • Circle subclass of Point?
    • Poem subclass of OrderedCollection?