einführung in die programmierung introduction to programming prof. dr. bertrand meyer

40
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 7: References and Assignment

Upload: dewitt

Post on 26-Feb-2016

15 views

Category:

Documents


0 download

DESCRIPTION

Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer. Lecture 7: References and Assignment. Program for today. How do we modify objects?. How it all starts. Root creation procedure may: Create new objects - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

Chair of Software Engineering

Einführung in die ProgrammierungIntroduction to Programming

Prof. Dr. Bertrand Meyer

Lecture 7: References and Assignment

Page 2: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

2

Program for todayHow do we modify objects?

Page 3: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

3

Executing a system consists of creating a root object, which is an instance of a designated class from the system, called its root class, using a designated creation procedure of that class, called its root procedure.

How it all starts

Root creation procedure may: Create new objects Call features on them, which may create

other objects Etc.

Page 4: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

4

Classes and objects At run time: objects (software machines)

In the program text: classes

Each class describes a set of possible run-time objects.

Page 5: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

5

Object structureAn object is made of fieldsEach field is a value, which is either:

A basic value: integer, character, “real” number...(known as an expanded value)

A reference to another object

(STOP)

station

nextsegment

(STOP)

(SEGMENT)

upper_left

(STATION )

lower_right

(POSITION)

x23.5

y-34.9(POSITION)

Page 6: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

6

Two kinds of typeReference types; value of any entity is a reference.

b : STATION

Expanded types; value of an entity is an object.

d : E_STATION

b

(STATION )

(E_STATION )

d

Page 7: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

7

Expanded classesA class may be declared as

expanded class E_STATION ... The rest as in STATION ...

Then any entity declared

d : E_STATION

has the expanded semantics just described.

Page 8: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

8

Basic types as expanded classesexpanded class INTEGER ...

(internally: INTEGER_32, INTEGER_64 etc.)expanded class BOOLEAN ... expanded class CHARACTER ... expanded class REAL ...

(internally: REAL_32, REAL_64 etc.)

n : INTEGER

Page 9: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

9

InitializationAutomatic initialization rules:

0 for numbers (integers, reals) “Null” character for characters False for booleans

Void for references

These rules apply to: Fields (from class attributes), on object creation Local variables, on start of routine execution

(includes Result)

Page 10: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

10

References may cause cycles

O1"Almaviv

a"name

landlord

loved_one

"Figaro" "Susanna"

O3O2

landlord

loved_one

name

landlord

loved_one

name

Page 11: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

11

Strings are objects

The name field is a reference field

O1"Almaviv

a"name

landlord

loved_one

‘A’‘l’‘m’‘a’‘v’‘i’‘v’‘a’

Page 12: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

12

classPOSITION

feature – Accessx : REAL

-- Horizontal position y : REAL

-- Vertical positionfeature – Element change

set_position (xval, yval: REAL)-- Set coordinates to (`xval', `yval').

requirex_positive: xval >= 0y_positive: yval >= 0

dox := xvaly := yval

ensurex_set: x = xvaly_set: y = yval

endend

Attributes are features of the class

Another attribute

Fields reflect attributes of the class

An attribute

Page 13: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

13

Setting fields (in a routine of the class)class

POSITIONfeature – Access

x : REAL-- Horizontal position

y : REAL-- Vertical position

feature – Element changeset (xval, yval : REAL)

-- Set coordinates to [xval, yval ].requirex_positive : xval >= 0

y_positive : yval >= 0do

ensurex_set : x = xvaly_set : y = yval

endend

Page 14: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

14

classPOSITION

feature – Access x : REAL

-- Horizontal position y : REAL

-- Vertical positionfeature – Element change

set (xval, yval : REAL)-- Set coordinates to [xval, yval ].

requirex_positive : xval >= 0y_positive : yval >= 0

do

ensurex_set : x = xvaly_set : y = yvalendend

x := xvaly := yval

Setting fields (in routines of the class)

Page 15: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

15

class STATION feature

x, y : REAL-- Coordinates of station

centersize : REAL

-- Size of bounding squareupper_left : POSITION

-- Upper-left position of bounding square

adjust_positions-- Set positions of bounding

squaredo

upper_left . set (x – size/2, y + size/2)

... end

end

What you may do

Station center

Bounding square

size

Page 16: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

16

In POSITION itself:move (dx, dy : REAL)

-- Move by dx horizontally, dy verticallyrequire

... [Please complete!] ...do

set (x + dx, y + dy)ensure

... [Please complete!] ...end

In another class, e.g. STATION

upper_left : POSITION

adjust_positions do

upper_left.set (x – size/2, y + size/2) ...

end

Feature callsIn POSITION , assume

set (xval, yval : REAL)

...do ...end

Qualified call

Unqualified call

Page 17: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

17

The current objectAt every moment during execution, operations are being performed on a current object

Initially: the root object. Then: An unqualified call such as set (u, v) applies to

the current object A qualified call such as x.set (u, v) causes the

object attached to x to become the current object. After the call the previous current object becomes current again

To denote the current object: use Current

Page 18: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

18

Root object

Root procedure

obj1

obj2

r1

r2create obj1.r1

create obj2.r2

Executing a system

Page 19: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

19

Current objectAt any time during execution, there is a current object, on which the current feature is being executed

Initially it is the root object

During a “qualified” call x.f (a), the new current object is the one attached to x.

At the end of such a call, the previous current object resumes its role.

“General relativity”

Page 20: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

20

In STATION :adjust_positions

do

upper_left . set (x – size/2, y + size/2)...

end

upper_left : POSITION

Feature calls

Page 21: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

21

The client relationBecause class STATION has a feature

upper_left : POSITION

(and calls of the form upper_left . set (...) ),

STATION is a client of class POSITION

Page 22: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

22

Client and inheritance, graphically

InheritanceClient

Page 23: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

23

EntitiesAn entity is a name in the program that denotes possible run-time values

Some entities are constant

Others are variable: Attributes Local variables

Page 24: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

24

target := source

source is an expression: Call to a query:

position upper_left.position

Arithmetic or boolean expression: a + (b * c) (a < b) and (c = d )

target may be: An attribute Result in a function A “local variable” of a routine (not yet seen)

Changing variable values: assignment

Page 25: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

25

set (xval, yval : REAL)do

end

x := xvaly := yval

Assignment

Replaces a value by another

x

y

2

0

p.set (2, 1)0

1

p

Page 26: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

26

classPOSITION

feature – Access x : REAL

-- Horizontal position y : REAL

-- Vertical positionfeature – Element change

set (xval, yval : REAL)-- Set coordinates to [xval, yval ].

requirex_positive : xval >= 0y_positive : yval >= 0

do

ensurex_set : x = xvaly_set : y = yvalendend

x := xvaly := yval

Setting fields (in routines of the class)

Page 27: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

27

x := y

if x = y then...

if x = Current then...

Do not confuse assignment with equality

Page 28: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

28

What to do with unreachable objectsReference assignments maymake some objects useless

Two possible approaches: Manual “free” (C++, Pascal) Automatic garbage collection (Eiffel, Oberon,

Java, .NET)

“Almaviva”namelandlord

loved_one

aO1

“Figaro”O2 “Susanna”O3

Page 29: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

29

The C programmer’s viewNewsgroup posting by Ian Stephenson, 1993 (as cited in Object-Oriented Software Construction, 2nd edition):

I say a big NO ! Leaving an unreferenced object around is BAD PROGRAMMING. Object pointers ARE like ordinary pointers — if you allocate an object you should be responsible for it, and free it when its finished with. (Didn't your mother always tell you to put your toys away when you'd finished with them?)

Page 30: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

30

Arguments for automatic collectionManual reclamation is dangerous for reliability.

Wrong “frees” are among the most difficult bugs to detect and correct.

Manual reclamation is tedious. Modern garbage collectors have acceptable performance overhead. GC is tunable: disabling, activation, parameterization....

Page 31: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

31

Properties of a garbage collector (GC)Consistency (never reclaim a reachable object). Completeness (reclaim every unreachable object – eventually).

Consistency (also called safety) is an absolute requirement. Better no GC than an unsafe GC. But: safe automatic garbage collection is hard in C-based languages.

Page 32: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

32

class TWO_VALUES feature item : INTEGER right : TWO_VALUES set (n : INTEGER ; r : TWO_VALUES) -- Reset both fields do item := n right := r endend

Effect of an assignmentReference types: reference assignmentExpanded types: value copy

3item

right

item := nright := r

t : TWO_VALUES...create t...

t.set (25, Void)

Page 33: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

33

Assignmentclass STATION feature

location : POSITIONname : STRINGlength : REAL

set_all ( p : POSITION ; l : REAL ; n : STRING )do

location := plength := lname := n

endend

Page 34: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

34

A linked list of strings

Haldenegg

item right

Central

item right

Haupt-bahnhof

item right

(LINKABLE) (LINKABLE) (LINKABLE)

first_element last_element

active

count 3

Parade-platz

item right

: inserting at the end

(LINKABLE)

4

Page 35: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

35

Inserting an item at the endextend (v : STRING)

-- Add v to end.-- Do not move cursor.

localp : LINKABLE [STRING]

docreate p.make (v)if is_empty then

first_element := pactive := p

elselast_element.put_right ( p)if after then active := p end

endlast_element := pcount := count + 1

end

Page 36: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

36

LINKABLE cellsclass LINKABLE feature

itemC: STRING-- Value in this cell

right : LINKABLE-- Cell, if any, to which this one is chained

put_right (other : like Current)-- Put other to the right of current cell.

doright := other

ensurechained : right = other

endend

Haldenegg

item right

Page 37: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

37

Local variables (in routines)A form of entity (they are also called “local entities”)

Just declare them on entry to a routine:

r (...)-- Header comment

require...

localx : REALm : STATION

do... Can use x and m here ...

ensure...

end

Local variables include Result for a function

Page 38: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

38

Exercise (uses loops)Reverse a list!

Halden-eggitem right

Central

Haupt-bahnhof

last_element

first_element

count3

(LINKABLE)

(LINKED_LIST)

Parade-

platz

Page 39: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

39

Reading assignment for next 2 weeksControl structures: chapter 7

Page 40: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

40

What we have seen

The current object

Expanded vs reference types

Assignment:For referencesFor expanded values

Linked data structures

A glimpse of conditional instructions