Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 3.

Slides:



Advertisements
Similar presentations
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 5.
Advertisements

Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session 5 6 October 2008.
1 Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 13.
Chair of Software Engineering Concurrent Object-Oriented Programming Prof. Dr. Bertrand Meyer Exercise Session 1: Eiffel Introduction.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 7: References and Assignment.
Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session November 2008.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 6.
1 Introductions to: - Each other - Object-Oriented Programming (OOP) - Java CSSE 220—Object-Oriented Software Development Rose-Hulman Institute of Technology.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 2: Dealing with Objects I.
Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session 4 30 September 2008.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 17: Topological Sort Algorithm.
Fundamentals of Software Development 1Slide 1 Acrobat Games – Debriefing: Interfaces For each type of object, what operations can that object do?For each.
1 Advanced Material The following slides contain advanced material and are optional.
Principles of Object-Oriented Software Development The language Eiffel.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 6: Object Creation.
Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session 3 29 September 2008.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 4: The Interface of a Class.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 4.
Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session 6 7 October 2008.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 4: The Interface of a Class.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 9.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 4.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 18: Undo/Redo.
Chair of Software Engineering Concurrent Object-Oriented Programming Prof. Dr. Bertrand Meyer Lecture 9: Contracts and Inheritance (based on work with.
Chair of Software Engineering 1 Introduction to Programming Tuples and Agents Exercise Session 1 and 2 December 2008.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 7: References and Assignment.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 4.
1 Advanced Material The following slides contain advanced material and are optional.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 6: Object Creation.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 3.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 10.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 5.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 7.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 9.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 11.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 10.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 9: Abstraction.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 3.
1 Abstraction  Identify important aspects and ignore the details  Permeates software development programming languages are abstractions built on hardware.
© The McGraw-Hill Companies, 2006 Chapter 4 Implementing methods.
Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session October 2008.
By the end of this session you should be able to...
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 5.
Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session October 2008.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 9.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 5.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 4.
1 CS161 Introduction to Computer Science Topic #9.
M1G Introduction to Programming 2 5. Completing the program.
C++ / G4MICE Course Session 1 - Introduction Edit text files in a UNIX environment. Use the g++ compiler to compile a single C++ file. Understand the C++
Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session October 2008.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 3.
Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session October 2008.
ANU COMP2110 Software Design in 2003 Lecture 10Slide 1 COMP2110 Software Design in 2004 Lecture 12 Documenting Detailed Design How to write down detailed.
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 4.
Fundamentals of Software Development 1Slide 1 Acrobat Games: An introduction to object-oriented design We need 11 volunteers – –BasicAcrobat x 3 – –ProudAcrobat.
DBC NOTES. Design By Contract l A contract carries mutual obligations and benefits. l The client should only call a routine when the routine’s pre-condition.
Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session October 2008.
You are an Acrobat When you are asked to Clap, you will be given a number. Clap your hands that many times. When you are asked to Twirl, you will be given.
© Bertrand Meyer and Yishai Feldman Notice Some of the material is taken from Object-Oriented Software Construction, 2nd edition, by Bertrand Meyer (Prentice.
Design by Contract Jim Fawcett CSE784 – Software Studio
Design by Contract Jim Fawcett CSE784 – Software Studio
Einführung in die Programmierung Introduction to Programming Prof. Dr
Einführung in die Programmierung Introduction to Programming Prof. Dr
The following slides contain advanced material and are optional.
Einführung in die Programmierung Introduction to Programming Prof. Dr
Einführung in die Programmierung Introduction to Programming Prof. Dr
Einführung in die Programmierung Introduction to Programming Prof. Dr
Einführung in die Programmierung Introduction to Programming Prof. Dr
Einführung in die Programmierung Introduction to Programming Prof. Dr
Presentation transcript:

Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Exercise Session 3

2 Today  We will revisit classes, features and objects.  We will see how program execution starts.  We will play a game.

3 Static view  A program consists of a set of classes.  Features are declared in classes. They define operations on objects constructed from the class.  Queries answer questions. They have a result type.  Commands execute actions. They do not have a result type.  Terms “class” and “type” used interchangeably for now.

4 Dynamic view  At runtime we have a set of objects (instances) constructed from the classes.  An object has a type that is described in a class.  Objects interact with each other by calling features on each other.

5 Static view vs. dynamic view  Queries (attributes and functions) have a return type. However, when executing the query, you get an object.  Routines have formal arguments of certain types. During the execution you pass objects as actual arguments in a routine call.  During the execution local variables declared in a routine are objects. They all have certain types.

6 Declaring the type of an object  The type of any object you use in your program must be declared somewhere.  Where can such declarations appear in a program?  in feature declarations formal argument types return type for queries  in the local clauses of routines This is where you declare any objects that only the routine needs and knows.

7 Declaring the type of an object class DEMO feature procedure_name (a1: T1; a2, a3: T2) -- Comment local l1: T3 do … end function_name (a1: T1; a2, a3: T2): T3 -- Comment do … end attribute_name: T3 -- Comment end formal argument types local variable types return type

8 Exercise: Find the classes / objects class game feature map_name: string -- Name of the map to be loaded for the game last_player: player -- Last player that moved players: player_list -- List of players in this game.... Hands-On

9 Exercise: Find the classes / objects feature is_occupied (a_location: traffic_place): boolean -- Check if `a_location' is occupied by some flat hunter. require a_location_exists: a_location /= Void local old_cursor: cursor do Result := False -- Remember old cursor position. old_cursor := players.cursor... Hands-On

10 Exercise: Find the classes / objects -- Loop over all players to check if one occupies -- `a_location'. from players.start -- do not consider estate agent, hence skip the first -- entry in `players'. players.forth until players.after or Result loop if players.item.location = a_location then Result := True end players.forth end -- Restore old cursor position. players.go_to(old_cursor) end Hands-On

11 Who are Adam and Eve?  Who creates the first object? The runtime creates a so called root object.  The root object creates other objects, which in turn create other objects, etc.  You define the type of the root object in the project settings.  You select a creation procedure of the root object as the first feature to be executed.

12 Acrobat game  We will play a little game now.  Everyone will be an object.  There will be different roles. Hands-On

13 You are an acrobat  When you are asked to Clap, you will be given a number. Clap your hands that many times.  When you are asked to Twirl, you will be given a number. Turn completely around that many times.  When you are asked for Count, announce how many actions you have performed. This is the sum of the numbers you have been given to date.

14 You are an ACROBAT class ACROBAT feature clap (n: INTEGER) do -- Clap `n’ times and adjust `count’. end twirl (n: INTEGER) do -- Twirl `n’ times and adjust `count’. end count: INTEGER end

15 You are an acrobat with a buddy  You will get someone else as your Buddy.  When you are asked to Clap, you will be given a number. Clap your hands that many times. Pass the same instruction to your Buddy.  When you are asked to Twirl, you will be given a number. Turn completely around that many times. Pass the same instruction to your Buddy.  If you are asked for Count, ask your Buddy and answer with the number he tells you.

16 You are an ACROBAT_WITH_BUDDY class ACROBAT_WITH_BUDDY inherit ACROBAT redefine twirl, clap, count end create make feature make (p: ACROBAT) do -- Remember `p’ being the buddy. end clap (n: INTEGER) do -- Clap `n’ times and forward to buddy. end

17 You are an ACROBAT_WITH_BUDDY twirl (n: INTEGER) do -- Twirl `n’ times and forward to buddy. end count: INTEGER do -- Ask buddy and return his answer. end buddy: ACROBAT end

18 You are an author  When you are asked to Clap, you will be given a number. Clap your hands that many times. Say “Thank You.” Then take a bow (as dramatically as you like).  When you are asked to Twirl, you will be given a number. Turn completely around that many times. Say “Thank You.” Then take a bow (as dramatically as you like).  When you are asked for Count, announce how many actions you have performed. This is the sum of the numbers you have been given to date.

19 You are an AUTHOR class AUTHOR inherit ACROBAT redefine clap, twirl end feature clap (n: INTEGER) do -- Clap `n’ times say thanks and bow. end twirl (n: INTEGER) do -- Twirl `n’ times say thanks and bow. end

20 You are a curmudgeon  When given any instruction (Twirl or Clap), ignore it, stand up and say (as dramatically as you can) “I REFUSE”.  If you are asked for Count, always answer with 0.  Then sit down again if you were originally sitting.

21 You are a CURMUDGEON class CURMUDGEON inherit ACROBAT redefine clap, twirl end feature clap (n: INTEGER) do -- Say “I refuse”. end twirl (n: INTEGER) do -- Say “I refuse”. end

22 I am the root object  I got created by the runtime.  I am executing the first feature.

23 I am a DIRECTOR class DIRECTOR create prepare_and_play feature prepare_and_play do -- See following slides. end

24 Let’s play

25 I am the root object prepare_and_play local acrobat1, acrobat2, acrobat3 : ACROBAT partner1, partner2: ACROBAT_WITH_BUDDY author1: AUTHOR curmudgeon1: CURMUDGEON do create acrobat1 create acrobat2 create acrobat3 create partner1.make (acrobat1) ‏ create partner2.make (partner1) ‏ create author1 create curmudgeon1 author1.clap (4) ‏ partner1.twirl (2) ‏ curmudgeon1.clap (7) ‏ acrobat2.clap (curmudgeon1.count) ‏ acrobat3.twirl (partner2.count) ‏ partner1.buddy.clap (partner1.count) ‏ partner2.clap (2) end

26 Concepts seen Asking a question to a personQuery Call Telling person to behave according to a specification Classes with Features E.g. how many times to clapArguments Telling a person to do somethingCommand Call Telling different people to do the same has different outcomes Polymorphism What queries What commands Interface PeopleObjects GameEiffel

27 Concepts seen All people were some kind of ACROBAT Inheritance Persons need to be born and need to be named Creation E.g. partner1.buddy.clap (2)Chains of feature calls Names for the peopleEntities E.g. count in ACROBAT_WITH_BUDDY Return value GameEiffel

28 Advanced Material The following slides contain advanced material and are optional.

29 Outline  Invariants  Marriage problems  Violating the invariant

30 Invariants explained in 60 seconds  Consistency requirements for a class  Established after object creation  Hold, when an object is visible  Entry of a routine  Exit of a routine class ACCOUNT feature balance: INTEGER invariant balance >= 0 end

31 Public interface of person (without contracts) class PERSON feature spouse: PERSON -- Spouse of Current. marry (a_other: PERSON) -- Marry `a_other’. end class MARRIAGE feature make local alice: PERSON bob: PERSON do create alice create bob bob.marry (alice) end

32 Write the contracts class PERSON feature spouse: PERSON marry (a_other: PERSON) require ?? ensure ?? invariant ?? end Hands-On

33 A possible solution class PERSON feature spouse: PERSON marry (a_other: PERSON) require a_other /= Void a_other.spouse = Void spouse = Void ensure spouse = a_other a_other.spouse = Current end invariant spouse /= Void implies spouse.spouse = Current end

34 Implementing marry class PERSON feature spouse: PERSON marry (a_other: PERSON) require a_other /= Void a_other.spouse = Void spouse = Void do ?? ensure spouse = a_other a_other.spouse = Current end invariant spouse /= Void implies spouse.spouse = Current end

35 Implementing marry I class PERSON feature spouse: PERSON marry (a_other: PERSON) require a_other /= Void a_other.spouse = Void spouse = Void do a_other.spouse := Current spouse := a_other ensure spouse = a_other a_other.spouse = Current end invariant spouse /= Void implies spouse.spouse = Current end Hands-On Compiler Error: No assigner command

36 class PERSON feature spouse: PERSON marry (a_other: PERSON) require a_other /= Void a_other.spouse = Void spouse = Void do a_other.set_spouse (Current) spouse := a_other ensure spouse = a_other a_other.spouse = Current end set_spouse (a_person: PERSON) do spouse := a_person end invariant spouse /= Void implies spouse.spouse = Current end Implementing marry II Hands-On local bob, alice: PERSON do create bob; create alice bob.marry (alice) bob.set_spouse (Void) -- invariant of alice? end

37 Implementing marry III class PERSON feature spouse: PERSON marry (a_other: PERSON) require a_other /= Void a_other.spouse = Void spouse = Void do a_other.set_spouse (Current) spouse := a_other ensure spouse = a_other a_other.spouse = Current end feature {PERSON} set_spouse (a_person: PERSON) do spouse := a_person end invariant spouse /= Void implies spouse.spouse = Current end Hands-On Invariant of a_other? Violated after call to set_spouse

38 Implementing marry : final version class PERSON feature spouse: PERSON marry (a_other: PERSON) require a_other /= Void a_other.spouse = Void spouse = Void do spouse := a_other a_other.set_spouse (Current) ensure spouse = a_other a_other.spouse = Current end feature {PERSON} set_spouse (a_person: PERSON) do spouse := a_person end invariant spouse /= Void implies spouse.spouse = Current end

39 Ending the marriage class PERSON feature spouse: PERSON divorce require spouse /= Void do spouse.set_spouse (Void) spouse := Void ensure spouse = Void (old spouse).spouse = Void end invariant spouse /= Void implies spouse.spouse = Current end Hands-On

40 Violating the invariant  See demo

41 What we have seen  Invariant should only depend on Current object  If invariant depends on other objects  Take care who can change state  Take care in which order you change state  Invariant can be temporarily violated  You can still call features on Current object  Take care calling other objects, they might call back Although writing invariants is not that easy, they are necessary to do formal proofs. This is also the case for loop invariants (which will come later).