Presentation is loading. Please wait.

Presentation is loading. Please wait.

Component Software Beyond Object-Oriented Programming Clements Szyperski Chapter 7 – Object versus class composition or how to avoid inheritance Alexandre.

Similar presentations


Presentation on theme: "Component Software Beyond Object-Oriented Programming Clements Szyperski Chapter 7 – Object versus class composition or how to avoid inheritance Alexandre."— Presentation transcript:

1 Component Software Beyond Object-Oriented Programming Clements Szyperski Chapter 7 – Object versus class composition or how to avoid inheritance Alexandre Alvaro aa2@cin.ufpe.br Universidade Federal de Pernambuco (UFPE)

2 Agenda Overview Various aspects of Inheritance Problems – Fragile base class problems Approaches to discipline inheritance From class to object composition – Forwarding x Delegation

3 Inheritance – the soup of the day ? Simula 67 - 1970 – Inheritance of implementation – Inheritance of interfaces – Establishment of substitutability Smalltalk - 1983 – Inheritance of implementation – Inheritance of interfaces

4 Inheritance – the soup of the day ? Eiffel – Possible to undefine inheritance interface feature Emerald (1987), Java, C # – Interface and implementation inheritance have been separated COM and OMG IDL – Interface definition language

5 Inheritance – the soup of the day ? Three facets of inheritance: – Subclassing – Subtyping – Promise of substitutability How to avoid inheritance ?

6 More flavors to the soup Multiple Inheritance

7 More flavors to the soup Mixing implementation fragments… Do both superclasses B1 and B2 get their own copy of the state defined by the superclass A ? Diamond inheritance problem

8 More flavors to the soup Mixing implementation fragments… Diamond inheritance problem About C class ?

9 More flavors to the soup Some approaches to discipline… – CLOS (Common Lisp Object System) Linear order of inheritance – C ++ Maintaining the integrity of sub-objects – Java Limited to single implementation inheritance – OMG IDL and COM Not support implementation inheritance at all

10 More flavors to the soup Mixins E

11 More flavors to the soup Mixins Interface B { void X (); void Y (); } abstract class X1 implements B { void X () {... // X2.Y (); } abstract class X2 implements B { void Y () {... }

12 Back to basic ingredients… The fragile base class problem SO Application Base Class(es) Application

13 The fragile base class problem Syntatic – Binary compatibility Compiled classes with new binary releases of superclass – Not need recompilation after syntatic changes – Example: methods may move up in the class hierarchy

14 The fragile base class problem 1ª 2ª 3ª

15 The fragile base class problem 1ª 2ª 3ª

16 The fragile base class problem 1ª 2ª 3ª

17 The fragile base class problem 1ª 2ª 3ª

18 The fragile base class problem Semantic – How can a subclass remain valid in the presence of different version of its superclasses ? Parameters Methods name Return type ContractsVersions Re-entrance

19 Inheritance – more knots than meet the eye abstract class Text {... void write (pos, ch) {.... setCaret (pos); } void setCaret (int pos) { caret = pos; }... } class SimpleText extends Text{... void setCaret (int pos) { int old = caretPos(); if (old != pos) { hideCaret(); super.setCaret(pos); showCaret(); }....

20 Inheritance – more knots than meet the eye abstract class Text {... void write (pos, ch) {.... pos++; } void setCaret (int pos) { caret = pos; }... } class SimpleText extends Text{... void setCaret (int pos) { int old = caretPos(); if (old != pos) { hideCaret(); super.setCaret(pos); showCaret(); }.... X

21 Approaches to discipline inheritance 1) The specialization interface – C ++, Java, C # Protected – Acessible only to subclasses Public – The “client interface” Private – Private to a class, not an object

22 Approaches to discipline inheritance 2) Typing the specialization interface – What are the legal modifications a subclass can apply ? Protected interface – 1993, John Lamping Statically – Acyclic Arranged in layers – Cyclic Form a group

23 Approaches to discipline inheritance 2) Typing the specialization interface – The developer determines the groups or layers specialization interface Text { state caretRep state textRep abstract posToXCoord abstract posToYCorrd concrete caretPos {caretPos} concrete setCaret {caretRep} concrete write {textRep, caretPos, setCaret} concrete delete {textRep, caretPos, setCaret}... } No dependencies

24 Approaches to discipline inheritance 3) Behavioral specification of the specialization interface – Semantic issues – 1995, Stata & Guttag Class as a combined definition of interacting parts objects – Method groups Algebraic specification techniques Notion of behavioral subtyping

25 Approaches to discipline inheritance 3) Behavioral specification of the specialization interface Inheritance Independent classes

26 Approaches to discipline inheritance 3) Behavioral specification of the specialization interface A B C Class Three groups

27 Approaches to discipline inheritance 4) Reuse and cooperation contracts – 1996, Steyaert, et. al. Returned to the idea of statically verifiable annotations – Reuse contract reuse contract Text { abstract posToXCoord posToYCorrd concrete caretPos setCaret write {caretPos, setCaret} delete {caretPos, setCaret}... } Only among methods

28 Approaches to discipline inheritance 4) Reuse and cooperation contracts – Real innovation Set of modification operators – Concretization – Extension – Refinement

29 Approaches to discipline inheritance 5) Representation invariants and methods refinements – 1996, Edwards Generalization of the Stata & Guttag – Overriding a method in a method group – Associating invariants with a class Protected Public Private Etc.

30 Approaches to discipline inheritance 6) Disciplined inheritance to avoid fragile base class problems – 1998, Mikhajlov & Sekerinski

31 Approaches to discipline inheritance 7) Creating correct subclasses without seeing superclass code – 2000, Ruby & Leavens Inverse problem of the semantic FBC problem Inverse problem FBC problem

32 Approaches to discipline inheritance 7) Creating correct subclasses without seeing superclass code – 2000, Ruby & Leavens Inverse problem of the semantic FBC problem Inverse problem FBC problem Fragile subclass problem

33 Approaches to discipline inheritance 7) Creating correct subclasses without seeing superclass code – Provide 3 parts to a class specification Public Protected Automatic analysis of the initial source code of the base class

34 From class to object composition Object A Object B > Forwarding Delegation ? inner object outer object Difference between Inheritance and Forwarding ?

35 Forwarding x Delegation Forwarding – Regular Message Delegation – Self-recursive one – Strengthened – Identity is remenbered What the diference between Forwarding and Delegation ?

36 Forwarding x Delegation InsertChar SetCaret InsertChar delegate(InsertChar) delegate(SetChar) resend(SetChar) ForwardingDelegation

37


Download ppt "Component Software Beyond Object-Oriented Programming Clements Szyperski Chapter 7 – Object versus class composition or how to avoid inheritance Alexandre."

Similar presentations


Ads by Google