0
What Is Subclassing?




Subclassing is a process in which a new class is derived from an old one. It
is a distinct concep...
Subclassing = Subtyping




     Subtypes are not required to share any code with their supertypes.




 Michal P´se (CTU ...
Subclassing = Subtyping




     Subtypes are not required to share any code with their supertypes.
     On the other hand...
Subclassing = Subtyping




     Subtypes are not required to share any code with their supertypes.
     On the other hand...
The Fallacy of Current Industrial Programming Languages




In Java (and many other languages)
      subclassing implies s...
Example




void DFS(Node n) {
  addToStack( n);
  while ( stackNotEmpty()) {
    n = removeFromStack();
    processNode( ...
Example




                                                                  Obviously, addToStack
void DFS(Node n) {
   ...
Example




                                                                  Obviously, addToStack
void DFS(Node n) {
   ...
Example (II)




     Not in Java—the new subtype would break the contract of the
     supertype.




 Michal P´se (CTU in...
Example (II)




     Not in Java—the new subtype would break the contract of the
     supertype.
     However, it is perf...
Subclassing = Specialization




     Subclassing does not imply specialization—subclass does not have to
     be a specia...
Subclassing = Specialization




     Subclassing does not imply specialization—subclass does not have to
     be a specia...
Subclassing = Specialization




     Subclassing does not imply specialization—subclass does not have to
     be a specia...
Subclassing = Composition




     Subclassing and composition both facilitate code reuse.
     Is there anything that can...
Poor Man’s Inheritance



class Foo {                                         class Qux {
  void bar() {...}              ...
Poor Man’s Inheritance



class Foo {                                         class Qux {
  void bar() {...}              ...
The Essence of Inheritance




So what exactly is inheritance?




  Michal P´se (CTU in Prague)
          ıˇ             ...
The Essence of Inheritance




So what exactly is inheritance?
      Inheritance is a mechanism facilitating code reuse.

...
The Essence of Inheritance




So what exactly is inheritance?
      Inheritance is a mechanism facilitating code reuse.
 ...
The Essence of Inheritance




So what exactly is inheritance?
      Inheritance is a mechanism facilitating code reuse.
 ...
Implementation of Inheritance




     C++: virtual methods table.




 Michal P´se (CTU in Prague)
         ıˇ           ...
Implementation of Inheritance




     C++: virtual methods table.
     In Smalltalk: method dictionary.




 Michal P´se ...
Implementation of Inheritance




     C++: virtual methods table.
     In Smalltalk: method dictionary.
     In systems w...
See




Taivalsaari, A. On the notion of inheritance. ACM Computing Surveys
28, 3 (Sep. 1996), 438–479.
http://doi.acm.org...
Inheritance
Upcoming SlideShare
Loading in...5
×

Inheritance

737

Published on

Published in: Education, Technology, Travel
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
737
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
41
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Inheritance"

  1. 1. What Is Subclassing? Subclassing is a process in which a new class is derived from an old one. It is a distinct concept from (subtype) polymorphism, generalization/specialization and composition. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 2 / 12
  2. 2. Subclassing = Subtyping Subtypes are not required to share any code with their supertypes. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 3 / 12
  3. 3. Subclassing = Subtyping Subtypes are not required to share any code with their supertypes. On the other hand, subtypes are required to stick to the contract of their supertype (the Liskov substition principle). Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 3 / 12
  4. 4. Subclassing = Subtyping Subtypes are not required to share any code with their supertypes. On the other hand, subtypes are required to stick to the contract of their supertype (the Liskov substition principle). Subtyping only concerns behavior, subclassing only concerns code. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 3 / 12
  5. 5. The Fallacy of Current Industrial Programming Languages In Java (and many other languages) subclassing implies subtyping, in other words, every subclass has to stick to the contract of its parent class. That severly limits possible code reuse! Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 4 / 12
  6. 6. Example void DFS(Node n) { addToStack( n); while ( stackNotEmpty()) { n = removeFromStack(); processNode( n); for ( Node c: n.children()) addToStack( c); } } Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 5 / 12
  7. 7. Example Obviously, addToStack void DFS(Node n) { inserts a node at the addToStack( n); beginning of a list and while ( stackNotEmpty()) { removeFromStack removes n = removeFromStack(); a node from the beginning processNode( n); of that list. for ( Node c: n.children()) addToStack( c); } } Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 5 / 12
  8. 8. Example Obviously, addToStack void DFS(Node n) { inserts a node at the addToStack( n); beginning of a list and while ( stackNotEmpty()) { removeFromStack removes n = removeFromStack(); a node from the beginning processNode( n); of that list. for ( Node c: n.children()) addToStack( c); Is it correct to override } addToStack to insert a } node at the end of the list? Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 5 / 12
  9. 9. Example (II) Not in Java—the new subtype would break the contract of the supertype. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 6 / 12
  10. 10. Example (II) Not in Java—the new subtype would break the contract of the supertype. However, it is perfectly legitimate in languages where subclassing does not imply subtyping—the new class simply isn’t type-compatible with the old one. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 6 / 12
  11. 11. Subclassing = Specialization Subclassing does not imply specialization—subclass does not have to be a specialized version of superclass. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 7 / 12
  12. 12. Subclassing = Specialization Subclassing does not imply specialization—subclass does not have to be a specialized version of superclass. Specialization does not imply subclassing—a specialized version of object does not have to share code with the base case. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 7 / 12
  13. 13. Subclassing = Specialization Subclassing does not imply specialization—subclass does not have to be a specialized version of superclass. Specialization does not imply subclassing—a specialized version of object does not have to share code with the base case. In fact, subtyping and specialization are distinct notions as well. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 7 / 12
  14. 14. Subclassing = Composition Subclassing and composition both facilitate code reuse. Is there anything that can be achieved by subclassing and not achieved by composition or vice versa? Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 8 / 12
  15. 15. Poor Man’s Inheritance class Foo { class Qux { void bar() {...} Foo foo = new Foo(); int baz() {...} void bar() { } foo.bar(); } int baz() { return foo.baz(); } } Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 9 / 12
  16. 16. Poor Man’s Inheritance class Foo { class Qux { void bar() {...} Foo foo = new Foo(); int baz() {...} void bar() { } foo.bar(); } int baz() { return foo.baz(); } } Emulation of inheritance using composition is far from perfect—method overriding can be emulated only in the simplest cases. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 9 / 12
  17. 17. The Essence of Inheritance So what exactly is inheritance? Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 10 / 12
  18. 18. The Essence of Inheritance So what exactly is inheritance? Inheritance is a mechanism facilitating code reuse. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 10 / 12
  19. 19. The Essence of Inheritance So what exactly is inheritance? Inheritance is a mechanism facilitating code reuse. It can be thought about as the C-style include with overriding. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 10 / 12
  20. 20. The Essence of Inheritance So what exactly is inheritance? Inheritance is a mechanism facilitating code reuse. It can be thought about as the C-style include with overriding. It enables reuse even in ways the original code creator never imagined. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 10 / 12
  21. 21. Implementation of Inheritance C++: virtual methods table. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 11 / 12
  22. 22. Implementation of Inheritance C++: virtual methods table. In Smalltalk: method dictionary. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 11 / 12
  23. 23. Implementation of Inheritance C++: virtual methods table. In Smalltalk: method dictionary. In systems with runtime: inline cache. Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 11 / 12
  24. 24. See Taivalsaari, A. On the notion of inheritance. ACM Computing Surveys 28, 3 (Sep. 1996), 438–479. http://doi.acm.org/10.1145/243439.243441 Michal P´se (CTU in Prague) ıˇ Object Programming Lect. 4: Inheritance October 19, 2010 12 / 12
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×