Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... ·...

43
Fondamenti della Programmazione: Metodi Evoluti Prof. Enrico Nardelli Esercitazione 2 versione originale: http://touch.ethz.ch

Transcript of Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... ·...

Page 1: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

Fondamenti della Programmazione: Metodi Evoluti Prof. Enrico Nardelli

Esercitazione 2

versione originale: http://touch.ethz.ch

Page 2: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

Today

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

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 2

Page 3: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

Static view

A program consists of a set of classes.

Features are declared in classes. They define operations on objects created from classes.

Queries answer questions. The answer is provided in a variable called Result.

Commands execute actions. They do not provide any result, so there is no variable called Result that we can use.

Another name for a class is type. Class and Type are not exactly the same, but they are close enough for now, and we will learn the difference later on. ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 3

Page 4: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

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.

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 4

Page 5: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

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 type

local variable type

return type

return type

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 5

formal argument type

formal argument type

formal argument type

Page 6: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

Dynamic view

When the program is being executed (at

“runtime”) we have a set of objects (instances) created from the classes (types).

The creation of an object implies that a piece of memory is allocated in the computer to represent the object itself.

Objects interact with each other by calling features on each other.

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 6

Page 7: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

Static view vs. dynamic view

Queries (attributes and functions) have a result

type. When executing the query, you get an object of that type.

Routines have formal arguments of certain types. During the execution you pass objects of the same (or compatible) type as actual arguments to a routine call.

Local variables are declared in their own section, associating names with types. Invoking a local returns the current object of that type referred to by that variable.

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 7

Page 8: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

How it all starts

Root procedure may:

Create new objects Call features on them, which may create other

objects Etc.

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.

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 8

Page 9: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

Root object

Root procedure

obj1

obj2

r1

r2 create obj1.r1

create obj2.r2

Executing a system

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 9

Page 10: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

Specifying the root

How to specify the root class and root creation procedure of a system? Use EiffelStudio Project -> Project Settings -> Target -> General -> Root

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 10

Page 11: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

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 (class) of the root object in

the project settings Project -> Project Settings -> Target: project -> Root

How is the root object created? The runtime calls a creation procedure of the

root object You select this creation procedure of the root

object Project -> Project Settings -> Target: project -> Root

The application exits at the end of this creation procedure

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 11

Page 12: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

Acrobat game

We will play a little game now. Everyone will be an object. There will be different roles.

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 12

Page 13: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

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.

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 13

Page 14: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an ACROBAT – initial version 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 -- Total # of times clapped or twirled. end

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 14

Page 15: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an ACROBAT – adding invariants class ACROBAT feature clap (n: INTEGER) -- Clap `n’ times and adjust `count’. require n>0 do -- to be completed ensure count = old count + n end twirl (n: INTEGER) -- Twirl `n’ times and adjust `count’. require n>0 do -- to be completed ensure count = old count + n end count: INTEGER -- Total # of times clapped or twirled. end ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 15

Page 16: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an ACROBAT – implementation

Open EiffelStudio, copy-paste the code,

and complete it !

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 16

Page 17: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

I am the root object

I got created by the runtime. I am executing the first feature.

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 17

Page 18: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

I am a DIRECTOR

class DIRECTOR create prepare_and_play feature prepare_and_play do -- See following slides. end

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 18

Page 19: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

I am the root object (version 1) prepare_and_play local mario, luigi, piero: ACROBAT do create mario create luigi create piero mario.clap (3) luigi.clap (4) piero.clap (5) mario.twirl (3) luigi.twirl (4) piero.twirl (5) mario.count luigi.count piero.count end • N.B. Allow objects to give feedback to what happens to them by printing it. For example: print ("%Nmario.count = "); print(mario.count)

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 19

Page 20: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an acrobat with a copycat

You will have someone else as your Copycat. N.B. asymmetric relation!

When you are asked to Clap, you will be given a number. Clap your hands that many times. Pass the same instruction to your Copycat.

When you are asked to Twirl, you will be given a number. Turn completely around that many times. Pass the same instruction to your Copycat.

If you are asked for Count, ask your Copycat and answer with the number he tells you.

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 20

Page 21: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an ACROBAT_WITH_COPYCAT – initial(1)

class ACROBAT_WITH_COPYCAT inherit ACROBAT redefine twirl, clap, count end create make feature copycat: ACROBAT make (p: ACROBAT) do -- Remember `p’ being the copycat. end ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 21

Page 22: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an ACROBAT_WITH_COPYCAT – initial(2)

clap (n: INTEGER) do -- Clap `n’ times and forward to copycat. end twirl (n: INTEGER) do -- Twirl `n’ times and forward to copycat. end count: INTEGER do -- Ask copycat and return his answer. end end

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 22

Page 23: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an ACROBAT_WITH_COPYCAT – invariants(1)

class ACROBAT_WITH_COPYCAT inherit ACROBAT redefine twirl, clap, count end create make feature copycat: ACROBAT make (p: ACROBAT) -- Remember `p’ being the copycat. require p /= Void do -- to be completed ensure copycat = p end ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 23

Page 24: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an ACROBAT_WITH_COPYCAT – invariants(2)

clap (n: INTEGER) -- Clap `n’ times and forward to copycat. do -- to be completed end twirl (n: INTEGER) -- Twirl `n’ times and forward to copycat. do -- to be completed end count: INTEGER -- Ask copycat and return his answer. do -- to be completed end end ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 24

Page 25: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an ACROBAT_WITH_COPYCAT – implementation

Open EiffelStudio, copy-paste the code,

and complete it !

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 25

Page 26: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

Cannot redefine an attribute in descendants!

Not allowed by the language definition. Performance degradation: replacing a simple

memory access with a function call It might make things slower for incremental

compiler and slow down dynamic access to entities. It might break code in ancestors where attribute

is assigned a value to Choice might change in the future (even if unlikely)

SOLUTION Hide the attribute in the ancestor Expose a function which is inherited and redefined

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 26

Page 27: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an ACROBAT – new solution (1) class ACROBAT feature {NONE} internal_count: INTEGER -- Store value of a private counter. add_count (n: INTEGER) -- Change value of the private counter. require n > 0 do internal_count := internal_count + n ensure internal_count = old internal_count + n end feature count: INTEGER -- Total # of times clapped or twirled. do Result := internal_count end ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 27

Page 28: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an ACROBAT – new solution (2) clap (n: INTEGER) -- Clap `n’ times and adjust `count’. require n>0 do add_count(n) ensure count = old count + n end twirl (n: INTEGER) -- Twirl `n’ times and adjust `count’. require n>0 do add_count(n) ensure count = old count + n end end

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 28

Page 29: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an ACROBAT_WITH_COPYCAT – new sol. (1) class ACROBAT_WITH_COPYCAT inherit ACROBAT redefine twirl, clap, count end create make feature count: INTEGER -- Ask copycat and return his answer. do Result := copycat.count end copycat: ACROBAT make (p: ACROBAT) -- Remember `p’ being the copycat. require p /= Void do copycat := p ensure copycat = p end ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 29

Page 30: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an ACROBAT_WITH_COPYCAT – new sol. (2) clap (n: INTEGER) -- Clap `n’ times and forward to copycat. require n>0 do add_count(n) copycat.clap(n) ensure count = old count + n end twirl (n: INTEGER) -- Twirl `n’ times and forward to copycat. require n>0 do add_count(n) copycat.twirl(n) ensure count = old count + n end end

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 30

Page 31: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

I am the root object (version 2) prepare_and_play local mario, luigi, piero: ACROBAT carla, daria: ACROBAT_WITH_COPYCAT do create mario create luigi create piero create carla.make (mario) create daria.make (luigi) carla.twirl (2) luigi.clap (7) piero.twirl (daria.count) piero.twirl (carla.count) carla.copycat.clap (carla.count) daria.clap (2) end N.B. Allow objects to give feedback to what happens to them by printing it. For example: print ("%Nmario.count = "); print(mario.count)

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 31

Page 32: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

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.

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 32

Page 33: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an AUTHOR – initial 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 end ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 33

Page 34: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an AUTHOR – invariants class AUTHOR inherit ACROBAT redefine clap, twirl end feature clap (n: INTEGER) -- Clap `n’ times say thanks and bow. do -- to be completed. end twirl (n: INTEGER) -- Twirl `n’ times say thanks and bow. do -- to be completed. end end ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 34

Page 35: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are an AUTHOR – implementation

Open EiffelStudio, copy-paste the code,

and complete it !

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 35

Page 36: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

I am the root object (version 3) prepare_and_play local mario, luigi, piero: ACROBAT carla, daria: ACROBAT_WITH_COPYCAT dante: AUTHOR do create mario create luigi create piero create carla.make (mario) create daria.make (luigi) create dante dante.clap (4) carla.twirl (2) luigi.clap (carlacount) piero.twirl (daria.count) carla.copycat.clap (carla.count) daria.clap (2) end N.B. Allow objects to give feedback to what happens to them by printing it. For example: print ("%Nmario.count = "); print(mario.count)

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 36

Page 37: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are a curmudgeon

When given any instruction (Twirl or Clap), ignore it, get up and say (as dramatically as you can) “I REFUSE”, then sit down again

If you are asked for Count, always answer with 0.

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 37

Page 38: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are a CURMUDGEON – initial class CURMUDGEON inherit ACROBAT redefine clap, twirl, count end feature clap (n: INTEGER) do -- Say “I refuse”. end twirl (n: INTEGER) do -- Say “I refuse”. end count do -- Return 0. end end ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 38

Page 39: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are a CURMUDGEON – invariants class CURMUDGEON inherit ACROBAT redefine clap, twirl, count end feature clap (n: INTEGER) -- Say “I refuse”. do -- to be completed. end twirl (n: INTEGER) -- Say “I refuse”. do -- to be completed. end count: INTEGER -- Return 0 . do -- to be completed. ensure Result = 0 end end

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 39

Page 40: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

You are a CURMUDGEON – implementation

Open EiffelStudio, copy-paste the code,

and complete it !

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 40

Page 41: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

I am the root object (version 4) prepare_and_play local mario, luigi, piero: ACROBAT carla, daria: ACROBAT_WITH_COPYCAT dante: AUTHOR curmudgeon1: CURMUDGEON do create mario create luigi create piero create carla.make (mario) create daria.make (luigi) create dante create curmudgeon1 dante.clap (4) carla.twirl (2) curmudgeon1.clap (7) luigi.clap (curmudgeon1.count) piero.twirl (daria.count) carla.copycat.clap (carla.count) daria.clap (2) end N.B. Allow objects to give feedback to what happens to them by printing it. For example: print ("%Nmario.count = "); print(mario.count) ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 41

Page 42: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

Concepts seen

Asking a question to a person Query Call

Telling person to behave according to a specification

Classes with Features

E.g. how many times to clap Arguments

Telling a person to do something Command Call

Telling different people to do the same has different outcomes

Polymorphism

What queries What commands

Interface

People Objects

Game Eiffel

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 42

Page 43: Fondamenti della Programmazione: Metodi Evoluti Prof ...nardelli/fondamenti-programmazione... · ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals

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 people Entities

E.g. count in ACROBAT_WITH_BUDDY

Return value

Game Eiffel

ESERCITAZIONE-2-acrobats Rev. 1.1.5 (2015-16) by Enrico Nardelli from B.Meyer's originals 43