Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chair of Software Engineering OOSC - Lecture 21 1 Object-Oriented Software Construction Bertrand Meyer.

Similar presentations


Presentation on theme: "Chair of Software Engineering OOSC - Lecture 21 1 Object-Oriented Software Construction Bertrand Meyer."— Presentation transcript:

1 Chair of Software Engineering OOSC - Lecture 21 1 Object-Oriented Software Construction Bertrand Meyer

2 Chair of Software Engineering OOSC - Lecture 21 2 Lecture 21: Typing issues, covariance

3 Chair of Software Engineering OOSC - Lecture 21 3 The America Conjecture (Pierre America at TOOLS Europe 1990)  One can have at most two of the three properties of:  Static typing.  Substitutivity.  Covariance.  Can we disprove the America conjecture?

4 Chair of Software Engineering OOSC - Lecture 21 4 Typing: A simple problem!  The basic operation of object-oriented computation: x.f (arg)

5 Chair of Software Engineering OOSC - Lecture 21 5 The typing problem  When, and how, do we know that:  There is a feature applicable to OBJ and corresponding to f?  arg is an acceptable argument for that feature?

6 Chair of Software Engineering OOSC - Lecture 21 6 Terminology x: Entity. OBJ: The object attached to x at some time during execution. f: Routine (One of the two forms of feature; the other is attributes.) xOBJ

7 Chair of Software Engineering OOSC - Lecture 21 7 Typing vs. binding  What do we know about the feature to be called?  Static typing: At least one  Dynamic binding: The right one  Example: my_aircraft.lower_landing_gear

8 Chair of Software Engineering OOSC - Lecture 21 8 Inheritance and typing AIRCRAFT * PLANE * COPTER * BOEINGAIRBUS A_320 B_747B_737 B_747_400 * deferred + effected ++ redefined lower_landing_gear* lower_landing_gear++ lower_landing_gear+

9 Chair of Software Engineering OOSC - Lecture 21 9 Cost of correcting errors (Boehm) RequirementsDesignCodeDevelopmentAcceptanceOperation test SMALL PROJECTS LARGE PROJECTS

10 Chair of Software Engineering OOSC - Lecture 21 10 Typing rules (all locally checkable)  Declaration rule.  Call rule.  Attachment rule.  (For the precise formulations see Eiffel: The Language.)

11 Chair of Software Engineering OOSC - Lecture 21 11 Declaration rule  Every entity must be declared as being of a certain type.  For example: x: AIRCRAFT n: INTEGER ba1: BANK_ACCOUNT

12 Chair of Software Engineering OOSC - Lecture 21 12 Call rule  If a class C contains the call x.f  there must be a feature of name f in the base class of the type of x, and that feature must be available (exported) to C.

13 Chair of Software Engineering OOSC - Lecture 21 13 Attachment rule  In an assignment x := y, or the corresponding argument passing, the base class of the type of y must be a descendant of the base class of the type of x.

14 Chair of Software Engineering OOSC - Lecture 21 14 For typing to be acceptable  No exception to type ee-rules (“casts”).  Multiple inheritance  Unconstrained genericity: class LIST [G]...  Constrained genericity: class VECTOR [G –> NUMERIC]...

15 Chair of Software Engineering OOSC - Lecture 21 15 For typing to be acceptable (cont’d)  Assignment attempt: x ?= y  Contracts, to clarify the semantics and include constraints other than typing (e.g. numerical ranges).  Covariance for routine arguments.  Anchored declarations (like x) to avoid endless redeclarations.

16 Chair of Software Engineering OOSC - Lecture 21 16 Multiple inheritance DOCUMENTMESSAGE MAILABLE_ DOCUMENT

17 Chair of Software Engineering OOSC - Lecture 21 17 A class hierarchy DRIVER BIKER TRUCKER HEAVY_TRUCKER partner: DRIVER share (other: DRIVER) partner++ share++ partner++ share++ partner++ share++

18 Chair of Software Engineering OOSC - Lecture 21 18 Choosing a partner class DRIVER feature partner: DRIVER -- This driver’s alternate share (other: DRIVER) is -- Choose other as alternate. require other /= Void do partner := other end... end

19 Chair of Software Engineering OOSC - Lecture 21 19 d1, d2: DRIVER... d1.share (d2) A typical call

20 Chair of Software Engineering OOSC - Lecture 21 20 Specializing class TRUCKER inherit DRIVER redefine partner end feature partner: TRUCKER -- This driver’s alternate.... end

21 Chair of Software Engineering OOSC - Lecture 21 21 The need for covariance class TRUCKER inherit DRIVER redefine partner, share end feature partner: TRUCKER -- This driver’s alternate. share (other: TRUCKER) is -- Choose other as alternate. require other /= Void do partner := other end end

22 Chair of Software Engineering OOSC - Lecture 21 22 Direct covariance DRIVER BIKER TRUCKER HEAVY_TRUCKER partner: DRIVER share (other: DRIVER) partner++ share++ partner++ share++ partner++ share++

23 Chair of Software Engineering OOSC - Lecture 21 23  Anchored declarations: class TRUCKER inherit DRIVER redefine partner, share end feature partner: TRUCKER -- This driver’s alternate. share (other: like partner) is -- Choose other as alternate. require other /= Void do partner := other end end Avoiding redefinition avalanche

24 Chair of Software Engineering OOSC - Lecture 21 24 End of lecture 22


Download ppt "Chair of Software Engineering OOSC - Lecture 21 1 Object-Oriented Software Construction Bertrand Meyer."

Similar presentations


Ads by Google