program realisation 2 today s topics http win tue nl
play

Program Realisation 2 Todays Topics - PowerPoint PPT Presentation

Program Realisation 2 Todays Topics http://www.win.tue.nl/hemerik/2IP20/ Lecture 5 Inheritance revisited Kees Hemerik Dynamic variables : heap, pointer type T , New , Dispose Tom Verhoe ff Informatics Thriller: My Life among the


  1. Program Realisation 2 Today’s Topics http://www.win.tue.nl/˜hemerik/2IP20/ Lecture 5 • Inheritance revisited Kees Hemerik • Dynamic variables : heap, pointer type ˆT , New , Dispose Tom Verhoe ff Informatics Thriller: My Life among the Pointers Technische Universiteit Eindhoven Faculteit Wiskunde en Informatica • Linear dynamic data structures with pointers: Linked Lists Software Engineering & Technology Feedback to T.Verhoeff@TUE.NL � 2007, T. Verhoe ff @ TUE.NL c 1 Program Realization 2: Lecture 5 � 2007, T. Verhoe ff @ TUE.NL c 2 Program Realization 2: Lecture 5 Inheritance Revisited Dynamic Method Binding: Advanced Example Inheritance is a mechanism with many faces. We use it only for: 1 type 2 TParent = class (TObject) procedure M; virtual ; { possibly abstract; } 3 4 procedure D; virtual ; • Multiple co-existing implementations of an ADT end ; { class TParent } 5 6 Parent : no fields; methods are virtual , usually also abstract 7 TChild = class (TParent) procedure M; override ; 8 Child : same contract; private fields; override the methods 9 end ; { class TChild } 10 11 procedure TParent.M; begin Write(’TParent.M ’) end ; { omit if abstract } • Subtyping (specialization; substitutability principle; e.g. VCL) 12 13 procedure TParent.D; begin M ; M end ; Parent : usually has private fields and virtual methods 14 15 procedure TChild.M; begin Write(’TChild.M ’) end ; Child : stronger contract: weaker pre, stronger post; 16 17 begin may add fields, add/ override methods with TChild.Create do D { outputs: ’TChild.M TChild.M ’ } 18 � 2007, T. Verhoe ff @ TUE.NL c 3 Program Realization 2: Lecture 5 � 2007, T. Verhoe ff @ TUE.NL c 4 Program Realization 2: Lecture 5

  2. Inheritance: Create, Destroy Inheritance Advice 1 type TChild = class (TParent) ... end ; 2 3 4 constructor TChild.Create; Reasoning about inheritance: begin 5 inherited Create { takes care of fields in TParent } 6 ; { create/initialize fields specific to TChild } 7 • In terms of the contracts end ; { Create } 8 9 10 destructor TChild.Destroy; • Not in terms of “how it works” begin 11 { free fields specific to TChild } 12 ; inherited Destroy { takes care of fields in TParent } 13 end ; { Destroy } 14 � 2007, T. Verhoe ff @ TUE.NL c 5 Program Realization 2: Lecture 5 � 2007, T. Verhoe ff @ TUE.NL c 6 Program Realization 2: Lecture 5 Static Memory Allocation and Deallocation Dynamic Memory Allocation and Deallocation 1 procedure UseA; 1 var var A : VeryBigTypeA; 2 p : ˆ VeryBigTypeA; { pointer } 2 begin { A allocated } 3 q : ˆ VeryBigTypeB; { pointer } 3 1 var ’Use A’ 4 4 A : VeryBigTypeA; 2 end ; { A deallocated } 5 { p, q allocated } 5 begin B : VeryBigTypeB; 3 6 New(p) { pˆ allocated } 6 4 7 procedure UseB; 7 ; ’Use pˆ’ 5 begin { A, B allocated } var B : VeryBigTypeB; 8 8 ; Dispose(p) { pˆ deallocated } ’Use A’ 6 begin { B allocated } 9 9 7 ; ’Use B’ ’Use B’ 10 10 ; New(q) { qˆ allocated } 8 end { A, B deallocated } end ; { B deallocated } 11 11 ; ’Use qˆ’ 12 12 ; Dispose(q) { qˆ deallocated } 13 begin UseA ; UseB end { p, q deallocated } 13 end � 2007, T. Verhoe ff @ TUE.NL c 7 Program Realization 2: Lecture 5 � 2007, T. Verhoe ff @ TUE.NL c 8 Program Realization 2: Lecture 5

  3. Memory Organization: Stack and Heap Pascal Pointer Type type PT = ˆT; { pointer type for type T, T must be a type name } Dynamic variable xˆ H E Gaps possible A P Set of values for ˆT : pointers to dynamic variables of type T , Dynamic variable xˆ.tˆ including the special pointer nil , pointing to nothing ❄ Unused Dynamic variables exist on the heap , which grows toward the stack. ✻ S Memory management of the heap is up to the program (not the Local variables Mb T compiler). Local variables Ma A C Global variables K N.B. Static variables exist on the stack, managed by the compiler, based on block invocations. � 2007, T. Verhoe ff @ TUE.NL c 9 Program Realization 2: Lecture 5 � 2007, T. Verhoe ff @ TUE.NL c 10 Program Realization 2: Lecture 5 Pascal Pointer Type Operations Costs of Pointers Operations on ˆT ( p, q expressions of type ˆT ) Memory usage for var p: ˆT : • pˆ (dereferencing) : pre : p <> nil • p = nil : O (1) , generally 4 bytes ret : the variable of type T pointed to by p • p <> nil : O (1) + memory usage for pˆ (except when sharing ) • p := q (assignment): pre : q = Q post : p = Q (N.B. aliasing!) Speed of operations: • New(p) : pre : true; post : p points to newly allocated, uninitialized dynamic variable of type T • nil , p = q , p := q : O (1) • Dispose(p) : pre : p = P /\ P <> nil • New(p) , Dispose(p) : depends on heap manager post : p is undefined, variable Pˆ is deallocated � 2007, T. Verhoe ff @ TUE.NL c 11 Program Realization 2: Lecture 5 � 2007, T. Verhoe ff @ TUE.NL c 12 Program Realization 2: Lecture 5

  4. Embedding and Nesting with Pointers Recursion with Pointers: Linked List 1 var 5 NodeP = ˆNode; { pointer to a node } (*ADDED*) 6 Node = record { node in linked list of windows } (*ADDED*) p: ˆT { plain pointer } 2 7 xl, yl, xh, yh: Integer; { coordinates of window } (*ADDED*) a: array [ Char ] of ˆT { embedded pointers } 3 tail: NodeP; { pointer to next window, if not nil } (*ADDED*) 8 4 9 end ; (*ADDED*) 5 type R = record p: ˆT end ; { embedded pointer } 6 ✲ 200, 0, 400, 100 ✲ 200, 0, 400, 100 w w 7 r r 8 var ❄ ❄ q: ˆR { nested pointers } 9 u ✲ u 100, 50, 300, 150 100, 50, 300, 150 ❆ ❆ 10 ❆ r r ❆ 11 begin ❆ ❄ ❆ ❆ ❄ ... pˆ ... { is of type T } 12 ❆ v ✲ v ✲ ❆ ❯ 0, 100, 200, 200 0, 100, 200, 200 ... a[’c’]ˆ ... { is of type T } 13 r r ... qˆ.pˆ ... { is of type T } 14 ❄ ❄ � 2007, T. Verhoe ff @ TUE.NL c 13 Program Realization 2: Lecture 5 � 2007, T. Verhoe ff @ TUE.NL c 14 Program Realization 2: Lecture 5 Traversing a Linked List Find Last Node of a Non-Empty Linked List 1 function Count(p: NodeP): Integer; 1 function FindLast(p: NodeP): NodeP; // pre: p points to nil-terminated tail-linked list // pre: p <> nil points to nil-terminated tail-linked list 2 2 // ret: length of list pointed to by p // ret: pointer to last element in list 3 3 begin begin 4 4 Result := 0 Result := p 5 5 6 6 // inv: Result + length of list(p) = length of (initial p) { inv: Result <> nil } 7 7 ; while p <> nil do begin ; while Resultˆ.tail <> nil do begin 8 8 Result := Result + 1 Result := Resultˆ.tail 9 9 ; p := pˆ.tail 10 10 end end { Resultˆ.tail = nil } 11 11 12 12 end ; { Count } end ; { FindLast } 13 13 � 2007, T. Verhoe ff @ TUE.NL c 15 Program Realization 2: Lecture 5 � 2007, T. Verhoe ff @ TUE.NL c 16 Program Realization 2: Lecture 5

  5. Bounded Linear Search on a Linked List ‘Cons’ an New Element to a Linked List 1 function Find(p: NodeP; ...): NodeP; // pre: p points to nil-terminated tail-linked list 2 1 procedure Cons( var p: NodeP; const v: TValue); // ret: pointer to first element in list satisfying ..., 3 // pre: p points to nil-terminated tail-linked list 2 // if such an element occurs in the list, else nil 4 // post: p points to list with v added in front 3 begin 5 var 4 Result := nil 6 q: NodeP; { to create new node } 5 7 ; while p <> Result do begin { p <> nil } begin 8 6 if ... pˆ ... then { pˆ satisfies search condition } New(q) 9 7 Result := p 10 ; qˆ.value := v 8 11 else ; qˆ.tail := p 9 p := pˆ.tail 12 ; p := q 10 13 end end ; { Cons } 11 14 end ; { Find } 15 � 2007, T. Verhoe ff @ TUE.NL c 17 Program Realization 2: Lecture 5 � 2007, T. Verhoe ff @ TUE.NL c 18 Program Realization 2: Lecture 5 ‘Cons’ an New Element to a Linked List (2) Delete First Element from a Linked List 1 procedure Cons( var p: NodeP; const v: TValue); 1 procedure DeleteFirst( var p: NodeP); // pre: p points to nil-terminated tail-linked list // pre: p <> nil points to nil-terminated tail-linked list 2 2 // post: p points to list with v added in front // post: p points to list minus first element 3 3 var var 4 4 q: NodeP; { to save initial value of p } q: NodeP; { to save pˆ.tail } 5 5 begin begin 6 6 q := p q := pˆ.tail (* p := pˆ.tail may cause memory leak *) 7 7 ; New(p) { if necessary, dispose pˆ.value here } 8 8 ; pˆ.value := v ; Dispose(p) (* can’t do this first, because then p undefined 9 9 ; pˆ.tail := q ; p := q 10 10 end ; { Cons } end ; { DeleteFirst } 11 11 � 2007, T. Verhoe ff @ TUE.NL c 19 Program Realization 2: Lecture 5 � 2007, T. Verhoe ff @ TUE.NL c 20 Program Realization 2: Lecture 5

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend