Download presentation
Presentation is loading. Please wait.
Published byEmily Turner Modified over 9 years ago
1
Class Examples (Simple, Airplane, Queue, Pile) Copy vs. Clone
2
Class Examples Simple, Airplane, Queue, Pile
3
World’s Simplest Class! class Simple public Procedure setValue(dataIn isoftype in Number) // Precon: Initialization // Purpose: Sets value to dataIn // Postcon: Value is changed Function getValue returnsa Num() // Precon: Initialization // Purpose: Returns value to user // Postcon: No changes to object Procedure Initialize() // Precon: Object exists // Purpose: Initialization // Postcon: Value is defined to be zero LB
4
(continued) protected value isoftype Num Procedure setValue(dataIn isoftype in Number) value <- dataIn endprocedure // setValue Function getValue returnsa Num() getValue returns value endfunction // getValue Procedure Initialize() value <- 0 endprocedure // Initialize endclass // Simple LB
5
Once Written, It’s Easy! Once we’ve written the class… We test it and validate that it works We can then make use of it in any algorithm Notice in the following algorithm examples how little work is done –All manipulation is hidden from the algorithm –All the “details” are abstracted into the object
6
Airplane Example An Airplane knows how to: Take off Land Fly to a destination (and serve a snack) Change its altitude It also has the following attributes Current altitude Whether it’s flying or not
7
Airplane Symbolic Diagram Airplane Initialize TakeOff ChangeAltitude InTheAir Altitude IsFlying ServeSnack Land Fly
8
class Airplane public procedure TakeOff // comments here procedure Land // comments here procedure ChangeAltitude (NewHeight iot in Num) // comments here function IsFying returnsa boolean // comments here procedure Initialize // comments here procedure Fly (destination iot in String) // comments here protected // create the persistent data InTheAir isoftype Boolean Altitude isoftype Num
9
// still in the protected section procedure Initialize InTheAir <- FALSE Altitude <- 0 endprocedure // Initialize procedure TakeOff if InTheAir then print("I'm in the air!") else InTheAir <- TRUE ChangeAltitude(3000) endif endprocedure // TakeOff
10
// still in the protected section procedure ChangeAltitude (NewHeight iot in Num) Altitude <- NewHeight endprocedure // ChangeAltitude procedure Fly (destination iot in String) print(“I’m flying to”, destination) ServeSnack endprocedure // Fly procedure ServeSnack // comments here MAKE PASSENGERS HAPPY endprocedure // ServeSnack
11
// still in the protected section function IsFlying returnsa boolean IsFlying returns InTheAir endfunction // IsFlying procedure Land if InTheAir then InTheAir <- FALSE ChangeAltitude(0) else print("I'm not in the air!") endif endprocedure // Land endclass // Airplane
12
Using the Airplane Class algorithm Airport uses Airplane Cessna1090 isoftype Airplane Cessna1090.Initialize Cessna1090.Takeoff Cessna1090.ChangeAltitude(30000) Cessna1090.Fly(“Baltimore”) Cessna1090.Land endalgorithm
13
The Queue A collection with restricted set of operations to change its state: only modified by adding to one end and deleting from the other. Enqueue Dequeue
14
NumberQueue Symbolic Diagram NumberQueue Initialize Enqueue Dequeue head tail IsEmpty … IsFull
15
class NumberQueue public procedure Enqueue(value iot in Num) // contract information here procedure Dequeue(value iot out Num) // contract - queue not empty procedure Initialize // contract information here function IsEmpty returnsa Boolean // contract information here function IsFull returnsa Boolean // contract information here protected List_type definesa record data isoftype Num next isoftype Ptr toa List_type endrecord // create the persistent data head, tail isoftype Ptr toa List_type
16
// still in the protected section procedure Enqueue(value iot in Num) temp isoftype Ptr toa List_type temp <- new(List_type) temp^.data <- value temp^.next <- NIL if(IsEmpty) then head <- temp else tail^.next <- temp endif tail <- temp endprocedure // Enqueue
17
// still in the protected section procedure Dequeue (value iot out Num) if(IsEmpty) then // violates contract! Error! else value <- head^.data head <- head^.next if(IsEmpty) then tail <- NIL endif endprocedure // Dequeue
18
// still in the protected section function IsEmpty returnsa Boolean IsEmpty returns (head = NIL) endfunction // IsEmpty function IsFull returnsa Boolean IsFull returns FALSE // dynamic endfunction // IsFull procedure Initialize // initialize the persistent data head <- NIL tail <- NIL endprocedure // Initialize endclass // NumberQueue
19
algorithm Store uses NumberQueue temp isoftype num checkout isoftype NumberQueue checkout.Initialize... loop some people enter and leave store randomly exitif ((no people in store) AND (closing_time)) if (someone walks up for service) then checkout.Enqueue(person’s number) endif if (NOT checkout.IsEmpty) then checkout.Dequeue(temp) print(“Now servicing person”, temp) endif endloop endalgorithm // Store
20
Example: Simulating the Lotto We want to define a class that will allow us to simulate the lottery. We want to place elements into random locations in the collection. When we get an item from the collection, we want a random element.
21
A “Pile” Class A data structure in which –Items are inserted somewhere randomly in the middle of the structure –Items are removed from a random location in the structure
22
Pile Symbolic Diagram NumPile Initialize StickOn DigOut Head num_of_things IsEmpty Random …
23
class NumPile public procedure StickOn (the_thing iot in Num) //purpose: put an item on the pile. //pre: none //post: the pile has the item added to it procedure DigOut (the_thing iot out Num) //purpose: get an item off of the pile. //pre: the pile is not empty. // post: the pile has a random element // removed. function IsEmpty returnsa boolean // comments here - contract procedure Initialize // comments here - contract
24
protected PileNode definesa Record thing isoftype Num next isoftype ptr to PileNode endrecord // PileNode head isoftype ptr toa PileNode num_of_things isoftype Num procedure Initialize num_of_things <- 0 head <- NIL endprocedure // Initialize function IsEmpty returnsa boolean IsEmpty returns (head = NIL) endfunction // IsEmpty
25
// still in the protected section function Random returnsa Num // returns a random number <= // num_of_things endfunction // Random procedure StickOn (thing isoftype in Num) place_to_insert isoftype Num place_to_insert <- Random new_node isoftype ptr toa PileNode new_node <- new(PileNode) // loop through pile until place-to- // insert is reached, then insert node num_of_things <- num_of_things + 1 endprocedure // StickOn
26
// still in the protected section procedure DigOut (thing isoftype out Num) thing_to_snag isoftype Num place_to_get isoftype Num place_to_get <- Random // code for looping through pile to // find right thing-to-snag, then // remove it num_of_things <- num_of_things - 1 thing <- thing_to_snag endprocedure // Dig-Out endclass // NumPile
27
Using the Pile Class algorithm Lotto uses NumPile lotto_pile isoftype NumPile lotto_pile.Initialize ticket isoftype Num loop exitif (All Entries Purchased) Get_Entry(ticket) // get input from user lotto_pile.StickOn(ticket) endloop // Now, find one winner lotto_pile.DigOut(ticket) print ("The winning number is", ticket) endalgorithm // Lotto
28
Summary Writing classes involves considerable work in –Design, Implementation, & Testing But once done, algorithms may make use of the classes –Instantiating objects and manipulating them –Hiding the details and implementation –Much of the work is done inside the object
29
Questions?
30
Copy vs. Clone
31
The Scenario Imagine we have an object of type Queue We’d like to duplicate the contents of the object The assignment operator ( <- ) duplicates variables How do we duplicate objects?
32
Representing Objects Objects may have static and dynamic components. q_headq_tail 1113 \\ 9 MyNumQueue
33
Shallow vs. Deep Duplication Copy performs a shallow duplication – duplicating only the static data. Cloning performs a deep duplication – duplicating the static and dynamic data (i.e. following pointers into the heap and duplicating the heap data)
34
Create Two Objects MyNumQueue isoftype Queue(Num) YourNumQueue isoftype Queue(Num) // do some work to fill in MyNumQueue q_headq_tail MyNumQueue q_headq_tail \\ YourNumQueue \\ 1113 \\ 9
35
Copying an Object YourNumQueue <- copy(MyNumQueue) q_headq_tail MyNumQueue q_headq_tail YourNumQueue 1113 \\ 9
36
Risk of Copying an Object YourNumQueue.Enqueue(42) q_headq_tail \\ MyNumQueue q_headq_tail YourNumQueue 42 11139
37
Risk of Copying an Object MyNumQueue.Enqueue(31) q_headq_tail \\ MyNumQueue q_headq_tail YourNumQueue 42 \\ 31 11139
38
Create Two Objects MyNumQueue isoftype Queue(Num) YourNumQueue isoftype Queue(Num) // do some work to fill in MyNumQueue q_headq_tail MyNumQueue q_headq_tail \\ YourNumQueue \\ 1113 \\ 9
39
Cloning an Object YourNumQueue <- clone(MyNumQueue) - or – YourNumQueue <- MyNumQueue q_headq_tail 1113 \\ 9 MyNumQueue q_headq_tail YourNumQueue 1113 \\ 9
40
Summary Duplication of objects: –Shallow: only duplicate static memory –Deep: duplicate static and dynamic memory Copy is shallow duplication Clone is deep duplication Assignment operation on objects is clone
41
Questions
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.