Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT...
Transcript of Einführung in die Programmierung - ETH Zse.inf.ethz.ch/courses/2015b_fall/eprog/lectures/09...NICHT...
Chair of Software Engineering
EinführungindieProgrammierung
Prof.Dr.BertrandMeyer
Lektion 9: Abstraktion
2
HeutigeThemen
Abstraktion,vorallemfunktionaleAbstraktionDerBegriffderRoutineDasletzteWortzuFeatures:alleFeaturekategorienDasPrinzipdeseinheitlichenZugriffs(UniformAccessPrinciple)AbstraktionenundKundenprivilegienDasGeheimnisprinzip
3
Routine:eineAbstraktioneinesAlgorithmus
Abstrahierenheisst,dieEssenzeinesKonzepteszuerfassenundDetailsundAngabenzuignorierenWillheissen:
Ø EinigeInformationenweglassenØ DemErgebnisderAbstraktioneinenNamengeben
InderProgrammierung:Ø Datenabstraktion:Klasse
Ø Abstraktioneines(operativen)Algorithmus:Routine
EineRoutinewirdauchMethodegenannt
OderSubprogrammoderSubroutine
4
EineRoutineisteinederzweiFeaturekategorien…
...dieandereKategoriesinddieAttribute.WirsindschonzahlreichenRoutinen(alsFeatures)begegnet,allerdingsohnedenNamenzukennen
5
EineRoutine
r(arg:TYPE;...) --KopUommentar.require Vorbedingung(Boole‘scherAusdruck)do
Rumpf(Instruktionen)
ensure Nachbedingung(Boole‘scherAusdruck)end
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
7
ZweiArtenvonRoutinen
Prozedur:gibtkeinResultatzurück§ ErgibteinenBefehl§ AufrufesindInstruktionen
Funktion:gibteinResultatzurück
f(arg:TYPE;...):RESULT_TYPE ...(DerRestwiezuvor)...
§ ErgibteineAbfrage§ AufrufesindAusdrücke
8
Features:DieganzeWahrheit
EineKlassewirddurchihreFeaturescharakterisiert.JedesFeatureisteineOperationaufdenkorrespondierendenElementen:AbfrageoderBefehl.
FeaturessindderLeserlichkeithalberinverschiedeneKategorieneingeteilt.Klassenklauseln:
Ø Noten(Indexierung)Ø VererbungØ ErzeugungØ Feature(mehrere)Ø Invariante
AnatomieeinerKlasse: Demo
9
FeatureFeature
Features:dieganzeWahrheit
Befehl
Abfrage
Feature
Funktion
KeinResultat
Speicherzugriff
Berechnung
Kundenansicht(Spezifikation) InterneAnsicht
(Implementation)
GibtResultatzurück
Attribut
Prozedur
Speicherzugriff
Berechnung
Routine
Feature
10
DasPrinzipdeseinheitlichenZugriffs*
DemKundenistesegal,obsie
etwasberechnenoder
imSpeichernachschauen
*Uniformaccessprinciple
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
12
DasPrinzipdeseinheitlichenZugriffs
DemKundenistesegal,obsie
etwasberechnenoder
imSpeichernachschauen
13
DasPrinzipdeseinheitlichenZugriffs
EineAbfragesolltefürKundenaufdiegleicheWeiseaufrukarsein,egalobsie
alsAttributoderFunktionimplementiertwurde
Etwastechnischerausgedrückt:
14
EinObjekthateineSchnittstelle
x y
set_y
set set_x
15
count
first
EinObjekthateine Implementation
x y
set_y
set set_x
16
DasGeheimnisprinzip
x y
set_y
set set_x
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
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!
19
Benutzensie«setter-Prozeduren»
positionlset(3,position.y)
positionlset_x(3)
positionlmove(0,h)
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
21
Abstraktionsprinzipienanwenden
UmKundenSchreibprivilegienzuermöglichen:DefinierensieeineSetter-Prozedur,wiez.B.:
set_temperature(u:REAL) --Setzttemperatureaufu. do temperature:=u end
Kundenkönnendiesewiefolgtaufrufen:
x.set_temperature(21.5)
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
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)
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)
25
FeatureFeature
Features:dieganzeWahrheit
Befehl
Abfrage
Feature
Funktion
KeinResultat
Speicherzugriff
Berechnung
Kundenansicht(Spezifikation) InterneAnsicht
(Implementation)
GibtResultatzurück
Attribut
Prozedur
Speicherzugriff
Berechnung
Routine
Feature
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)
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!
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.
29
DasGeheimnisprinzip
DasGeheimnisprinzipgiltnurfürBenutzungdurchKunden,mittels
qualifiziertenAufrufenoderInfix-Notation,z.B.:a1.fUnqualifizierteAufrufe(innerhalbeinerKlasse)sindvomGeheimnisprinzipnichtbetroffen:
classAfeature{NONE} hdo...end feature
f do ...;h;... end end
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
31
Selektivexportieren
class
LINKABLE[G]feature{LINKED_LIST}
put_right(...)do...end
right:Gdo...end
...
end
DieseFeatureswerdenselektivanLINKED_LISTundihreNachkommenexportiert.(Undzukeinenweiteren
Klassen.)
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
33
WaswirindieserVorlesunggesehenhaben
DievolleKategorisierungvonFeatures
Routinen,Prozeduren,Funktionen
EinheitlicherZugriff
Geheimnisprinzip
Selektivesexportieren
Setter-undGetter-Funktionen
Eiffel:Assigner-Befehle
34
LeseaufgabeaufnächsteWoche
Kapitelüber
Ø Inheritance(16)