1 / 16

Multiple Inheritance

Multiple Inheritance. Class Structure : D irected A cyclic G raph. Examples in System Modeling. Multiple inheritance facilitates combination of (orthogonal) abstractions. Company plane Airplane ( Pilot’s perspective )

Télécharger la présentation

Multiple Inheritance

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Multiple Inheritance Class Structure : Directed Acyclic Graph L13MI

  2. Examples in System Modeling Multiple inheritance facilitates combination of (orthogonal) abstractions. • Company plane • Airplane (Pilot’s perspective) • (queries) passenger_count, altitude, position, speed, etc. • (commands) take_off, land, set_speed, etc. • Asset (Accountant’s perspective) • (features) purchase_price, resale_value, depreciate, etc. • Dining car • Train car (coach) • Restaurant • Watch calculator L13MI

  3. Multiple inheritance facilitates representation of various roles of an object. • Sofa bed, Mobile home, ... • Knowledge Representation • Clinton is a father. • Clinton is the ex-President of USA. • Nixon was a Republican. • Nixon was a Quaker. • Dolphins are aquatic creatures. • Dolphins are mammals. L13MI

  4. Examples from Software Systems • Window • (Hierarchical Structure) Tree • (features) listOfSubwindows, parentWindow, addWindow, removeWindow, etc. • (Graphical Object) Rectangle • (features) height, width, position, display, hide, etc. L13MI

  5. Linked list (leftmost child right sibling) • Tree • List • (features) countChildren, leftMostChild, addChild, removeChild, etc. • Cell • (features) parent, nextSibling, etc. L13MI

  6. Graphics Example classComposite_Figure extends Figure, LinkedList[Figure] { ... void display() { forEachDo { item.display(); }; } void translate() { … } ...} Illustrates: multiple inheritance, polymorphic data structure, dynamic binding, recursion, etc. L13MI

  7. Design Pattern Describing composite structures using multiple inheritance with a container class as a parent • More Examples • Menus with Submenus • Compound Commands • Graphical Object Groups L13MI

  8. Eiffel’s approach to Multiple Inheritance L13MI

  9. Name Clashes and Feature Renaming • Eiffel bans intra-class overloading. • Name clashes resulting from multiple inheritance can be resolved in the child class using feature renaming mechanism. • Redeclaration/redefinition changes the feature, but keeps the name. Renaming changes the name, but keeps the feature. • Redeclaration is semantic; renaming is syntactic. • Renaming also enables class designers to give locally appropriate names to features. L13MI

  10. Repeated Inheritance A B C • Class D is a descendant of class A in more than one way. E.g., • A = Driver (age, address, birthday(), etc.) • B = French_Driver • C = US_Driver • D = US_French_Driver • Share : age • Replicate : address D L13MI

  11. Multiple Inheritance of Features • A class that inherits differentbut identically named features from different parents is invalid. • Feature renaming may be used to avoid name clash. • Note that this case excludes repeated inheritance. • An attribute coming from repeated ancestor is shared, by default. Feature renaming may be used to replicate it. • In C++, allthe fields of a repeated ancestor are either shared (virtual) or duplicated. L13MI

  12. Transcontinental Drivers in Eiffel class French_US_Driver inherit French_Driver rename address as french_address, violations as french_violations, pay_fee as french_pay_fee end US_Driver rename address as us_address, violations as us_violations, pay_fee as us_pay_fee end feature . . . // shared: age, name, ... end; L13MI

  13. Conflicting Redefinitions • What if a feature f inherited by class D from repeated ancestor A has been redefined in B and/or C? • Conflicts under sharing (two impl., one name) • Problem: Name Clash • Eiffel provides rename, redefine, and undefine to enable a programmer to disambiguate. L13MI

  14. (cont’d) • Conflicts under replication (two impl., two names) • Problem: Ambiguity for Dynamic binding A a = new D(); a.f(); • Eiffel provides select to let the programmer pick the appropriate impl. to run for f() on a D via a A-entity. L13MI

  15. Windows in Eiffel class Window feature display is … end; class Window_with_Border inherit Window feature display is … end; class Window_with_Menu inherit Window feature display is … end; class Window_with_Border_and_Menu inherit Window_with_Border Window_with_Menu feature display is {Window_with_Border} Precursor; {Window_with_Menu} Precursor; end; Problem: Indirectly invokes Window.display twice!! L13MI

  16. (Cont’d) class Window_with_Border_and_Menu inherit Window rename id as window_id select window_id redefine display end Window_with_Border rename id as border_id redefine display end Window_with_Menu rename id as menu_id redefine display end feature display is {Window} Precursor; draw_border; draw_menu; end; end; L13MI

More Related