Download presentation
Presentation is loading. Please wait.
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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.