31
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 4: The Interface of a Class

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

  • Upload
    lloyd

  • View
    30

  • Download
    0

Embed Size (px)

DESCRIPTION

Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer. Lecture 4: The Interface of a Class. Client, supplier. Definitions - PowerPoint PPT Presentation

Citation preview

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 4: The Interface of a Class

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

2

Client, supplier

Definitions

• A client of a software mechanism is a system of any kind — such as a software element, a non-software system, or a human user — that uses it.

• For its clients, the mechanism is a supplier.

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

3

Picturing the client relation(See diagram tool of EiffelStudio.)

CLIENT SUPPLIER

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

4

Interface: definition

An interface of a set of software mechanisms is the description of techniques enabling clients to use these mechanisms.

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

5

Kinds of interfaceUser interface: when the clients are people

GUI: Graphical User Interface Text interfaces, command line interfaces.

Program interface: the clients are other software

API: Application Programming Interface(or: Abstract Programming

Interface)

We’ll now study class APIs.

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

6

A user interface (GUI)

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

7

ClassesAn object (previous lecture) is a software machine allowing programs to access and modify a collection of data

Examples: A city A tram line An element of the GUI such as a button

Each object belongs to a certain class, defining the applicable operations, or featuresExample:

The class of all cities

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

8

Definitions: class, instance, generating class

A class represents a category of things.An object represents one of these things.

ClassA class is the description of a set of possible run-time objects to which the same features are applicable.

Instance, generating classIf an object O is one of the objects described by a class C, then O is an instance of C, and C is the generating class of O.

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

9

Objects vs. classesClasses exist only in the software text:

Defined by class text Describes properties of associated instances

Objects exist only during execution: Visible in program text through names

denoting run-time objectsExample: Paris

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

10

Software constructionFinding appropriate classes is a central part of software design

(the organization of the architecture of a program)

Writing down the details is part of implementation

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

11

A class interface

In this discussion “interface” means API (not user interface).

We now look at interface of SIMPLE_LINE (simplified version of METRO_LINE )

This will be shown through EiffelStudio(use “Interface” button)

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

12

A query: “count”How long is this line? See query count

Header comment: states purpose of feature

“this line”: the instance of SIMPLE_LINE to which count is applied

Form of a query declaration:

feature_name : RETURN_TYPE

INTEGER : a type denoting integer values (e.g. -23, 0, 256)

count: INTEGER-- Number of stations on this line

pedronim
Show the contract interface of SIMPLE_LINE in EiffelStudio...
Page 13: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

13

Style rule: header comments

Don’t even think of writing a featurewithout immediately including a headercomment explaining what it’s about

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

14

Expressions and their typesAt run time, every object has a type: its generating class.Examples:

SIMPLE_LINE for the object denoted by Line8

INTEGER for the object denoted by Line8.count

In the program text, every expression has a type. Examples:

SIMPLE_LINE for Line8

INTEGER for Line8.count

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

15

Another query: i_th

What is the i-th station of the line? Feature i_th.

Convention for consistency:numbering starts at south end

1

2

3 4

i_th (i: INTEGER): METRO_STATION-- The station of index i on this line

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

16

Two more queriesWhich are the station at the ends of the line?

Properties of every line l : l.south_end = l.i_th (1 ) l.north_end = l.i_th (l.count)

south_end : METRO_STATION-- End station on south side

north_end : METRO_STATION-- End station on sorth side

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

17

Example: class QUERIES

class QUERIES inheritTOURISM

featureexplore_on_click

-- Try queries on lines.do

Paris.display

Console.show

(Line8.count)Console.show

(Line8.i_th (1))Console.show

(Line8.i_th (Line8.count)end

end

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

18

A command: remove_all_stations

We want to rebuild Line8 from scratch.We start by removing all stations:

Notes: Our metro lines always have at least one station,

even after remove_all_stations If there is only one station, it is the value of both

south_end and north_end

remove_all_stations-- Remove all stations except south end.

Michela Pedroni
in book: called "remove_all_segments" but removes stations?!
Page 19: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

19

Command extend

Adding stations to a line:

extend (s : METRO_STATION)-- Add s at end of this line.

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

20

Class COMMANDS

class COMMAND inheritTOURISM

featureexplore_on_click

-- Recreate a partial version of Line 8.do

Line8.remove_all_sections -- No need to add Station_Balard,

since-- remove_all_sections retains the

south end.Line8.extend (Station_Lourmel )Line8.extend (Station_Boucicaut )Line8.extend (Station_Felix_Faure )

-- We stop adding stations, to display some results:

Console.show (Line8.count )Console.show (Line8.north_end.name )endend

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

21

Defining proper interfacesNot every feature is applicable to every possible argument and instance

Example: Line8.i_th (200 ) is wrong!

The class interface must be precise enough to convey such usage information

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

22

First try...Add information to the header comment:

Better, but still not good enough: A comment is just an informal explanation The constraint needs a more official status in the

interface

i_th (i : INTEGER): METRO_STATION-- The i -th station on this line-- (Warning: use only with i between 1 and count,

inclusive.)

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

23

ContractsA contract is a semantic condition characterizing usage properties of a class or a feature

Three principal kinds:

Precondition Postcondition Class invariant

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

24

Property that a feature imposes on every client:

i_th (i : INTEGER): METRO_STATION-- The i-th station on this line

Precondition

requirenot_too_small: i >= 1not_too_big: i <=

count

The preconditionof i_th

A feature with no require clause is always applicable, as if it had

requirealways_OK: True

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

25

Assertions

not_too_small: i >= 1

Assertion

ConditionAssertion tag

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

26

Precondition principle

A client that calls a feature without satisfying its precondition is faulty (buggy) software.

A client calling a feature must make sure that the precondition holds before the call.

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

27

ContractsContracts for debugging

Contracts for interface documentation

pedronim
Explain what debugging is...
Page 28: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

28

remove_all_stations -- Remove all stations except the South-West end.

ensureonly_one_left: count = 1both_ends_same: south_end = north_end

PostconditionsPrecondition: obligation for clientsPostcondition: benefit for clients

extend (s : METRO_STATION ) -- Add s at end of line.

ensurenew_station_added: i_th (count ) = sadded_at_north: north_end = sone_more: count = old count + 1

Expression value captured on entry

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

29

old notationUsable in postconditions only

Denotes value of an expression as it was on routine entry

Example (in a class ACCOUNT)

balance : INTEGER-- Current balance.

deposit (v: INTEGER)-- Add v to account.

requirepositive: v > 0

do…

ensureadded: balance = old balance + v

end

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

30

A feature must make sure that, if its precondition held at the beginning of its execution, its postcondition will hold at the end.

Postcondition principle

A feature that fails to ensure its postcondition is buggy software.

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

31

What we have seen

ClassesObjectsThe notion of interfaceGUI vs APICommands & QueriesContracts: preconditions &

postconditionsUsing contracts for debugging