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

  • 574 views

 

Statistics

Views

Total Views
574
Views on SlideShare
574
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?