16
ceg860 (Prasad) L13MI 1 Multiple Inheritance Class Structure : D Directed A Acyclic G Graph

Multiple Inheritance

Embed Size (px)

DESCRIPTION

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 ) - PowerPoint PPT Presentation

Citation preview

Page 1: Multiple Inheritance

ceg860 (Prasad) L13MI 1

Multiple Inheritance

Class Structure : DDirected AAcyclic GGraph

Page 2: Multiple Inheritance

ceg860 (Prasad) L13MI 2

Examples in System Modeling Multiple inheritance facilitates combinationcombination

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

Page 3: Multiple Inheritance

ceg860 (Prasad) L13MI 3

Multiple inheritance facilitates representation of various rolesroles 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.

Page 4: Multiple Inheritance

ceg860 (Prasad) 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.

Page 5: Multiple Inheritance

ceg860 (Prasad) L13MI 5

• Tree • List

» (features) countChildren, leftMostChild, addChild, removeChild, etc.

• Cell» (features) parent, nextSibling, etc.

Linked list(leftmost child right sibling)

Page 6: Multiple Inheritance

ceg860 (Prasad) L13MI 6

Graphics Exampleclass Composite_FigureComposite_Figure extends Figure, LinkedList[Figure] { ... void display() { forEachDo { item.display(); }; }

void translate() { … }...}

Illustrates: multiple inheritance, polymorphic

data structure, dynamic binding, recursion, etc.

Page 7: Multiple Inheritance

ceg860 (Prasad) 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

Page 8: Multiple Inheritance

ceg860 (Prasad) L13MI 8

Eiffel’s approach to Multiple Inheritance

Page 9: Multiple Inheritance

ceg860 (Prasad) 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 renamingfeature 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.

Page 10: Multiple Inheritance

ceg860 (Prasad) L13MI 10

Repeated Inheritance

• 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

ShareShare : age ReplicateReplicate : address

A

D

B C

Page 11: Multiple Inheritance

ceg860 (Prasad) L13MI 11

Multiple Inheritance of Features

• A class that inherits different but 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++, all the fields of a repeated ancestor are either shared (virtual) or duplicated.

Page 12: Multiple Inheritance

ceg860 (Prasad) L13MI 12

Transcontinental Drivers in Eiffel classclass French_US_Driver inheritinherit French_Driver renamerename address asas french_address, violations asas french_violations, pay_fee asas french_pay_fee endend

US_Driver renamerename address asas us_address, violations asas us_violations, pay_fee asas us_pay_fee endend

featurefeature . . . // shared: age, name, ... endend;

Page 13: Multiple Inheritance

ceg860 (Prasad) 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.

Page 14: Multiple Inheritance

ceg860 (Prasad) 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.

Page 15: Multiple Inheritance

ceg860 (Prasad) L13MI 15

Windows in Eiffelclassclass Windowfeature display is … end;

classclass Window_with_Border inheritinherit Windowfeature display is … end;

classclass Window_with_Menu inheritinherit Windowfeature display is … end;

classclass Window_with_Border_and_Menu inheritinherit Window_with_Border

Window_with_Menu featurefeature display isis {Window_with_Border} Precursor; {Window_with_Menu} Precursor; end;

Problem: Indirectly invokes Window.display Window.display twice!!!!

Page 16: Multiple Inheritance

ceg860 (Prasad) L13MI 16

(Cont’d) classclass Window_with_Border_and_Menu inheritinherit WindowWindow

renamerename id asas window_id selectselect window_id redefineredefine display endend

Window_with_Border renamerename id asas border_id redefineredefine display endend

Window_with_Menu renamerename id asas menu_id redefineredefine display endend featurefeature

display isis {Window} Precursor; draw_border; draw_menu; end; endend;