Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 12: More on references and.

Similar presentations


Presentation on theme: "Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 12: More on references and."— Presentation transcript:

1 Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 12: More on references and the dynamic model

2 2 Purpose of this lecture Few really new concepts, but gain a better understanding of the tricky matter of references Reminder on garbage collection and associated concepts

3 3 Assignment Replaces a value by another x y 2 0 p. set_coordinates (2, 1) 0 1 p

4 4 Setting fields (in routines of the class) class POSITION feature –– Access x: REAL -- Horizontal position y: REAL -- Vertical position feature –– Element change set_coordinates (xval, yval: REAL) -- Set coordinates to (`xval', `yval'). require x_positive: xval >= 0 y_positive: yval >= 0 do ensure x_set: x = xval y_set: y = yval end x := xval y := yval

5 5 class LINKED_CELL feature item : INTEGER right : LINKED_CELL set_fields (n : INTEGER ; r : LINKED_CELL) -- Reset both fields. do item := n right := r end Effect of an assignment Reference types: reference assignment Expanded types: value copy item right i tem := n right := r t, u : LINKED_CELL create t ; create u t. set_fields (25, u) 3 See LINKABLE in EiffelBase t 0 u  t. set_fields (25, u) 25 0

6 6 A linked list of strings Haldenegg item right Central item right Haupt- bahnhof item right (LINKABLE) first_element last_element active count 3 Parade- platz item right : inserting at the end (LINKABLE) 4

7 7 Inserting an item at the end extend (v : STRING) -- Add v to end. -- Do not move cursor. local p : LINKABLE [STRING] do create p. make (v) if is_empty then first_element := p active := p else last_element. put_right ( p) if after then active := p end end last_element := p count := count + 1 end

8 8 Exercise (uses loops) Reverse a list! Halden- egg item right Central Haupt- bahnhof last_element first_element count 3 (LINKABLE) (LINKED_LIST) Parade- platz

9 9 Reversing a list 1 2 3 4 5 1 2 3 4 5

10 10 Reversing a list from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot. right first_element. put_right (i ) end first_element pivot right i 12345

11 11 Reversing a list from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot. right first_element. put_right (i ) end first_element pivot right i 12345

12 12 Reversing a list from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot. right first_element. put_right (i ) end first_element pivot right i 12345

13 13 Reversing a list from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot. right first_element. put_right (i ) end first_element pivot right i 12345

14 14 i i pivot Reversing a list from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot. right first_element. put_right (i ) end first_element right 12345

15 15 The loop invariant from pivot := first_element first_element := Void until pivot = Void loop i := first_element first_element := pivot pivot := pivot. right first_element. put_right (i ) end first_element pivot right i 12345 Invariant: from first_element following right, initial items in inverse order; from pivot, rest of items in original order

16 16 The trouble with reference assignment A comfortable mode of reasoning: -- Here SOME_PROPERTY holds of a “Apply SOME_OPERATION to b” -- Here SOME_PROPERTY still holds of a This applies to “expanded” values, e.g. integers -- Here P (a) holds OP (b) -- Here P (a) still holds of a

17 17 Dynamic aliasing a, b: LINKABLE [STRING] create a.... a. put ("Haldenegg") ‏ b := a -- Here a. item has value "Haldenegg" b. put ("Paradeplatz") ‏ -- Here a. item has value ????? Haldenegg item right a b

18 18 On the other hand... -- I heard that the boss’s cousin earns less -- than 50,000 francs a year “Raise Caroline’s salary by 1 franc” -- ????? Metaphors:  “The beautiful daughter of Leda”  “Menelas’s spouse”  “Paris’s lover” = Helen of Troy

19 19 Practical advice Reference assignment is useful It’s also potentially tricky As much as possible, leave it to specialized libraries of general data structures

20 20 Variants of assignment and copy Reference assignment (a and b of reference types): b := a Object duplication (shallow): c := a. twin Object duplication (deep): d := a. deep_twin Also: shallow field-by-field copy (no new object is created): e. copy (a) ‏

21 21 Shallow and deep cloning Initial situation: Result of: b := a c := a. twin d := a. deep_twin “Almaviva” name landlord loved_one O1 “Figaro” O2 “Susanna” O3 b “Almaviva” O4 c “Almaviva” O5 “Figaro” O6 “Susanna” O7 d a

22 22 Where do these mechanisms come from? Class ANY in the Eiffel “Kernel Library” Every class that doesn’t explicitly inherit from another is considered to inherit from ANY As a result, every class is a descendant of ANY.

23 23 Completing the inheritance structure A BDEC ANY NONE Inherits from

24 24 A related mechanism: Persistence a. store (file) ‏.... b := retrieved (file) Storage is automatic. Persistent objects identified individually by keys. These features come from the library class STORABLE. Needs to be improved, see “ “object test”

25 25 Objects and references States of a reference: Operations on references: create p p := q p := Void if p = Void then... VOIDATTACHED create p p := q (where q is attached) ‏ p := Void p := q (where q is void) ‏ p ATTACHED p VOID

26 26 The object-oriented form of call some_target. some_feature (some_arguments) ‏ For example: Paris. display Line6. extend (Station_Parade_Platz) ‏ x := a. plus (b) ???????

27 27 Infix and prefix operators In a − b the − operator is “infix” (written between operands) ‏ In − b the − operator is “prefix” (written before the operand) ‏

28 28 Operator features expanded class INTEGER feature plus alias "+" (other : INTEGER): INTEGER -- Sum with other do... end times alias “*“ (other : INTEGER): INTEGER -- Product by other do... end minus alias “-" : INTEGER -- Unary minus do... end... end Calls such as i.plus (j) can now be written i + j

29 29 Reading assignment for next week Chapters on  Syntax (11)  Inheritance (16)

30 30 What we have seen  Playing with references: list reversal  Dynamic aliasing and the difficulties of pointers & references  Overall inheritance structure  Copy, clone and storage operations  Persistence closure  Infix & prefix operators


Download ppt "Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 12: More on references and."

Similar presentations


Ads by Google