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.

Like this presentation? Why not share!

Stoop ed-subtyping subclassing

on

  • 551 views

 

Statistics

Views

Total Views
551
Views on SlideShare
551
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Stoop ed-subtyping subclassing Stoop ed-subtyping subclassing Presentation Transcript

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