Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT...

34
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 9: Abstraktion

Transcript of Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT...

Page 1: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

Chair of Software Engineering

EinführungindieProgrammierung

Prof.Dr.BertrandMeyer

Lektion 9: Abstraktion

Page 2: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

2

HeutigeThemen

Abstraktion,vorallemfunktionaleAbstraktionDerBegriffderRoutineDasletzteWortzuFeatures:alleFeaturekategorienDasPrinzipdeseinheitlichenZugriffs(UniformAccessPrinciple)AbstraktionenundKundenprivilegienDasGeheimnisprinzip

Page 3: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

3

Routine:eineAbstraktioneinesAlgorithmus

Abstrahierenheisst,dieEssenzeinesKonzepteszuerfassenundDetailsundAngabenzuignorierenWillheissen:

Ø  EinigeInformationenweglassenØ  DemErgebnisderAbstraktioneinenNamengeben

InderProgrammierung:Ø  Datenabstraktion:Klasse

Ø  Abstraktioneines(operativen)Algorithmus:Routine

EineRoutinewirdauchMethodegenannt

OderSubprogrammoderSubroutine

Page 4: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

4

EineRoutineisteinederzweiFeaturekategorien…

...dieandereKategoriesinddieAttribute.WirsindschonzahlreichenRoutinen(alsFeatures)begegnet,allerdingsohnedenNamenzukennen

Page 5: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

5

EineRoutine

r(arg:TYPE;...) --KopUommentar.require Vorbedingung(Boole‘scherAusdruck)do

Rumpf(Instruktionen)

ensure Nachbedingung(Boole‘scherAusdruck)end

Page 6: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

6

create_opera_route--Routeerzeugenund--Teilstreckenhinzufügen.do--TODO--BM,4Nov2014end

GebrauchvonRoutinen

Vonuntennachoben(bottom-up):ErfassedenexistierendenAlgorithmus,wennmöglichwiederverwendbarVonobennachunten(top-down):Platzhalter-Routinen—EineattraktiveAlternativezuPseudocode

build_route --EineRoutebauenund --damitarbeiten.do create_opera_route Zurichladd_route (Opera_route) Opera_routelreverse

end

Methodologie:“TODO”-Einträgesollteninformativsein

Page 7: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

7

ZweiArtenvonRoutinen

Prozedur:gibtkeinResultatzurück§ ErgibteinenBefehl§ AufrufesindInstruktionen

Funktion:gibteinResultatzurück

f(arg:TYPE;...):RESULT_TYPE ...(DerRestwiezuvor)...

§ ErgibteineAbfrage§ AufrufesindAusdrücke

Page 8: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

8

Features:DieganzeWahrheit

EineKlassewirddurchihreFeaturescharakterisiert.JedesFeatureisteineOperationaufdenkorrespondierendenElementen:AbfrageoderBefehl.

FeaturessindderLeserlichkeithalberinverschiedeneKategorieneingeteilt.Klassenklauseln:

Ø  Noten(Indexierung)Ø  VererbungØ  ErzeugungØ  Feature(mehrere)Ø  Invariante

AnatomieeinerKlasse: Demo

Page 9: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

9

FeatureFeature

Features:dieganzeWahrheit

Befehl

Abfrage

Feature

Funktion

KeinResultat

Speicherzugriff

Berechnung

Kundenansicht(Spezifikation) InterneAnsicht

(Implementation)

GibtResultatzurück

Attribut

Prozedur

Speicherzugriff

Berechnung

Routine

Feature

Page 10: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

10

DasPrinzipdeseinheitlichenZugriffs*

DemKundenistesegal,obsie

etwasberechnenoder

imSpeichernachschauen

*Uniformaccessprinciple

Page 11: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

11

DasPrinzipdeseinheitlichenZugriffs:Beispiel

saldo=liste_der_einzahlungen.total–liste_der_abhebungen.total

EinAufrufwiez.B.ihr_konto.saldokönnteeinAttributodereineFunktionbenutzen

(A1)200 300 500 1000

800 100 100

(A2)

200 300 500 1000

800 100 100

liste_der_einzahlungen

liste_der_abhebungen

liste_der_einzahlungen

liste_der_abhebungen

saldo1000

Page 12: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

12

DasPrinzipdeseinheitlichenZugriffs

DemKundenistesegal,obsie

etwasberechnenoder

imSpeichernachschauen

Page 13: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

13

DasPrinzipdeseinheitlichenZugriffs

EineAbfragesolltefürKundenaufdiegleicheWeiseaufrukarsein,egalobsie

alsAttributoderFunktionimplementiertwurde

Etwastechnischerausgedrückt:

Page 14: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

14

EinObjekthateineSchnittstelle

x y

set_y

set set_x

Page 15: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

15

count

first

EinObjekthateine Implementation

x y

set_y

set set_x

Page 16: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

16

DasGeheimnisprinzip

x y

set_y

set set_x

Page 17: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

17

WasKundentunkönnen

classSTATIONfeature

name:STRING --Name.

position:VECTOR --PositionimBezugaufdasStadtzentrum.

set_position(new_x,new_y:REAL) --Positionsetzen. do positionlset(new_x,new_y) end

end

Page 18: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

18

WasKundennichttunkönnen

classSTATIONfeature

name:STRING --Name.

position:VECTOR --PositionimBezugaufdasStadtzentrum.

set_position(new_x,new_y:REAL) --Positionsetzen. do positionlx:=new_x positionly:=new_y end

end

NICHTERLAUBT!

Page 19: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

19

Benutzensie«setter-Prozeduren»

positionlset(3,position.y)

positionlset_x(3)

positionlmove(0,h)

Page 20: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

20

AbstraktionundKundenprivilegien

Lesezugriff,fallsdasAttributexportiertist.

a1.xisteinAusdruck!Ø EineZuweisunga1.x:=vwäresyntaktischungültig!!

(EswürdeeinemAusdrucketwaszuweisen,wiez.B.:a+b:=v)

WennKlasseAeinAttributxhat,wasdarfeineKundenklasseCmita1.xtun,wobeia1vomTypAist? a1:A

a1C A

a1

(A)(C)

x

x

Page 21: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

21

Abstraktionsprinzipienanwenden

UmKundenSchreibprivilegienzuermöglichen:DefinierensieeineSetter-Prozedur,wiez.B.:

set_temperature(u:REAL) --Setzttemperatureaufu. do temperature:=u end

Kundenkönnendiesewiefolgtaufrufen:

x.set_temperature(21.5)

Page 22: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

22

Setter-Befehlevollausnutzen

set_temperature(u:REAL) --SetztTemperaturwertaufu.require nicht_unter_minimum:u>=-273 nicht_über_maximum:u<=2000do temperature:=u update_database

ensure temperatur_gesetzt:temperature=uend

Page 23: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

23

AbstraktionundKundenprivilegien

WennKlasseAeinAttributxhat,wasdarfeineKundenklasseCmita1.xtun,wobeia1vomTypAist? a1:A

a1C A

a1

(A)(C)

x

x

Lesezugriff,fallsdasAttributexportiertist.

a1.xisteinAusdruck!Ø EineZuweisunga1.x:=vwäresyntaktischungültig!!

(EswürdeeinemAusdrucketwaszuweisen,wiez.B.:a+b:=v)

Page 24: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

24

Exportieren(alspublicdeklarieren)einesAttributes

EinAttributexportierenheisstinEiffel,(nur)seineLeserechtezuexportierenVonausserhalberkenntmanesnichtalsAttribut,nuralsAbfrage:eskönnteaucheineFunktionseinInC++,JavaundC#,werdenmitderpublic-DeklarationeinesAttributs*xsowohlSchreib-alsauchLeserechteexportiert:

Ø  v:=a1.x

Ø  a1.x:=v

Diesführtdazu,dassesfastimmereineschlechteIdeeist,einAttributzuexportieren

*(field,membervariable)

Page 25: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

25

FeatureFeature

Features:dieganzeWahrheit

Befehl

Abfrage

Feature

Funktion

KeinResultat

Speicherzugriff

Berechnung

Kundenansicht(Spezifikation) InterneAnsicht

(Implementation)

GibtResultatzurück

Attribut

Prozedur

Speicherzugriff

Berechnung

Routine

Feature

Page 26: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

26

Getter-Funktionen

InC++,JavaundC#istdieStandardtechnik,umeinprivatesAttributprivate_xzuexportieren,dasExportiereneinerentsprechendenGetter-Funktion:

x:T do Result:=private_x end

EiffelbrauchtkeineGetter-Funktionen:MankanneinfachdasAttributexportieren

DasAttributwirdwiefolgtexportiert:Ø  NurLeserechteØ  OhnedieInformation,dasseseinAttributist.Eskönnte

aucheineFunktionsein.(PrinzipdeseinheitlichenZugriffs)

Page 27: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

27

WirwollenbeideArten!(Eiffel-Syntax)

Esistmöglich,eineAbfragewiefolgtzudefinieren:temperature:REALassignset_temperatureDannwirdfolgendeSyntax

x.temperature:=21.5akzeptiertalsAbkürzungfür

x.set_temperature(21.5)ErhältVerträgeundandereergänzendeOperationen.

InC#gibtesdenBegriffdes“Property”,womitdasgleicheZielverfolgtwird

KeineZuweisung,sonderneinProzedurenaufruf!

Page 28: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

28

DasGeheimnisprinzip(InformationHiding)

StatusderAufrufeineinemKundenmita1:A:

classAfeature

f...g...

feature{NONE}

h,i... feature{B,C}

j,k,l...

feature{A,B,C}

m,n...end

Ø a1.f,a1.g:injedemKundengültig.

Ø a1.h:überallungültig(auchinAseigenemKlassentext!)

Ø a1.j:nurinB,CundderenNachkommengültig

(NichtgültiginA!)

Ø a1.m:nurinA,B,CundderenNachkommengültig.

Page 29: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

29

DasGeheimnisprinzip

DasGeheimnisprinzipgiltnurfürBenutzungdurchKunden,mittels

qualifiziertenAufrufenoderInfix-Notation,z.B.:a1.fUnqualifizierteAufrufe(innerhalbeinerKlasse)sindvomGeheimnisprinzipnichtbetroffen:

classAfeature{NONE} hdo...end feature

f do ...;h;... end end

Page 30: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

30

EinBeispielfürselektivenExport

LINKABLEexportiertihreFeaturesanLINKED_LISTØ  ExportiertsienichtfürdenRestderWelt.Ø  KundenvonLINKED_LISTmüssennichtsüberdie

LINKABLE–Zellenwissen.

Haldenegg

item right

Central

item right

Haupt-bahnhof

item right

first_element

active

count 3

Page 31: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

31

Selektivexportieren

class

LINKABLE[G]feature{LINKED_LIST}

put_right(...)do...end

right:Gdo...end

...

end

DieseFeatureswerdenselektivanLINKED_LISTundihreNachkommenexportiert.(Undzukeinenweiteren

Klassen.)

Page 32: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

32

LINKABLE

classLINKABLEfeature{LINKED_LIST}item:STRING --WertdieserZelle.

right:LINKABLE --Zelle,welcherechtsvondieserZelle --angehängtist(fallsvorhanden).

put_right(other:likeCurrent) --SetztotherrechtsnebendieaktuelleZelle. do right:=other ensure verkettet:right=other end

end

Haldenegg

item right

Page 33: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

33

WaswirindieserVorlesunggesehenhaben

DievolleKategorisierungvonFeatures

Routinen,Prozeduren,Funktionen

EinheitlicherZugriff

Geheimnisprinzip

Selektivesexportieren

Setter-undGetter-Funktionen

Eiffel:Assigner-Befehle

Page 34: Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT ERLAUBT! 19 Benutzen sie «setter-Prozeduren» position l set (3, position. y)

34

LeseaufgabeaufnächsteWoche

Kapitelüber

Ø  Inheritance(16)