Einführung in die Programmierung

Werbung
Chair of Software Engineering
EinführungindieProgrammierung
Prof.Dr.BertrandMeyer
Vorlesung 5: Invarianten und Logik
Erinnerung:Verträge
InVerbindungmiteinemFeature:
Ø  Vorbedingungen
Ø  Nachbedingungen
InVerbindungmiteinerKlasse:
Ø  Klasseninvariante
2
Verträge
remove_all_segments
--AlleStationenausserdererstenentfernen.
ensure
nur_eine_bleibt:count=1
Zusicherungen
beide_enden_gleich:first=last
append(s:STATION)
--samEndederLiniehinzufügen.
ensure
neue_station_ist_letzte:last=s
Zusicherungen
eine_mehr:count=oldcount+1
3
Verträge
deposit(v:INTEGER)
--AddierevzumKontostand.
require
Zusicherung
positiv:v>0
do
…
ensure
addiert:balance=oldbalance+v
end
4
Klasseninvarianten
DieInvariantedrücktKonsistenzbedingungenaus,die
zwischenAbfrageninderKlasseerfülltseinmüssen
invariant
anzahl_positiv:count>0
definition_von_first:first=i_th(1)
definition_von_last:last=i_th(count)
5
WannisteineKlassekorrekt?
createx.make(…)
S1
x f(…)
FürjedeErzeugungsprozedurcp:
S2
.
{Precp}docp{INVandPostcp}
FürjedesexportierteFeaturer:
{INVandPrer}dor{INVandPostr}
.
x g(…)
S3
.
x h(…)
S4
6
AnwendungenvonVerträgen
1.  KorrekteSoftware
2.  DokumentationderSoftware,imSpeziellen
DokumentationderProgrammierschnittstelle.
3.  Testen&Fehlerbeseitigung
(Späternochmehr!)
Laufzeiteffekt:EinstellungimCompiler
(sieheProjects->SettingsinEiffelStudio)
7
VerträgeinanderenSprachen
Java:JavaModelingLanguage(JML),iContractetc.
C#:Spec#(ErweiterungdurchMicrosoftResearch)
UML:ObjectConstraintLanguage
Python
C++:Nana
etc.
8
Logik
Programmierenheisstlogischdenken.
LogikistdieWissenschaftdeslogischenDenkens.
WirbenutzenLogiktagtäglich.
“SokratesisteinMensch.
AlleMenschensindsterblich.
DahermussSokratessterblichsein.”
9
LogischesDenkenundProgrammieren
LogikistdieGrundlagevon:
Ø  Mathematik:Beweisesindnurgültig,fallssiedenRegeln
derLogikgenügen.
Ø  Softwareentwicklung:
§  BedingungeninVerträgen:
“xdarfnichtnullsein,sodass
x +7
wirberechnenkönnen.”
x
§  BedingungeninProgrammen:
“Fallsipositivist,führedieseInstruktionaus.”(Mehr
dazuineinerspäterenLektion)
10
Boole’scheAusdrücke
EineBedingungwirddurcheinenBoole’schenAusdruck
ausgedrückt.
Einsolcherbestehtaus:
•  Boole’schenVariablen(Bezeichner,dieBoole’sche
Wertebezeichnen)
•  Boole’schenOperatoren(not,or,and,=,implies)
Undrepräsentiertmögliche
•  Boole’scheWerte(Wahrheitswerte,entwederTrue
oderFalse)
11
Beispiele
BeispielevonBoole’schenAusdrücken:
(mitrain_todayundcuckoo_sang_last_nightalsBoole’sche
Variablen):
Ø  rain_today
(eineBoole’scheVariableisteinBoole’scherAusdruck)
Ø  notrain_today
Ø  (notcuckoo_sang_last_night)impliesrain_today
(MittelsKlammernbildetmanUnterausdrücke.)
12
DieNegation(not)
a
True
False
nota
False
True
FürjedenBoole’schenAusdruckeundalleWertevonVariablen
gilt:
Ø  EntwedereodernotehatdenWahrheitswertTrue.
Ø  EntwedereodernotehatdenWahrheitswertFalse.
(PrinzipdesausgeschlossenenDritten)
Ø  eundnotekönnennichtbeidedenWahrheitswertTrue
haben.
(SatzdesWiderspruchs)
13
DieDisjunktion(or)
a
True
b
True
aorb
True
True
False
True
False
True
True
False
False
False
Deror-Operatoristnicht-exklusiv
Deror-Operatoristkommutativ
Disjunktionsprinzip:
Ø  Eineor-DisjunktionhatdenWahrheitswertTrue,ausser
beideOperandenhabendenWertFalse.
14
DieKonjunktion(and)
a
True
b
True
aandb
True
True
False
False
False
True
False
False
False
False
Derand-Operatoristkommutativ.
Dualitätvonandundor:
• (aandb)=not((nota)or(notb))
• (aorb)=not((nota)and(notb))
Konjunktionsprinzip:
Ø  Eineand–KonjunktionhatdenWahrheitswertFalse,
ausserbeideOperandenhabendenWertTrue.
15
KomplexereAusdrücke
AuchkomplexereBoole’scheAusdrückesindmöglich.
Beispiele:
aand(band(notc))
not(not(not(not(nota))))
16
BelegungenundWahrheitstabellen
EineBelegungfüreineMengevonVariablen:einebestimmte
WahlvonWahrheitswerten(TrueoderFalse)fürjede
Variable.
EineBelegungerfüllteinenAusdruck,fallsderWahrheitswert
desAusdrucksTrueist.
EineWahrheitstabellefüreinenAusdruckmitnVariablenhat
Ø  n+1Spalten
n
Ø  2 Zeilen
17
WahrheitstabellefürdieGrundoperationen
a
b
nota
aorb
aandb
True
True
False
True
True
True
False
True
False
False
True
True
False
False
False
False
False
True
18
Tautologien
Tautologie:EinBoole’scherAusdruck,derfürjedemögliche
BelegungdenWahrheitswertTruehat.
Beispiele:
Ø  aor(nota)
Ø  not(aand(nota))
Ø  (aandb)or((nota)or(notb))
19
WidersprücheundErfüllbarkeit
Widerspruch:EinBoole’scherAusdruck,derfürallemöglichen
BelegungendenWahrheitswertFalsehat.
Beispiele:
Ø  aand(nota)
ErfüllbarerAusdruck:EinAusdruckisterfüllbar,sofernerfür
mindestenseineBelegungdenWahrheitswertTruehat.
Ø  JedeTautologieisterfüllbar.
Ø  JederWiderspruchistunerfüllbar.
20
Äquivalenz(=)
a
True
b
True
a=b
True
True
False
False
False
True
False
False
False
True
Der=Operatoristkommutativ.
(a=bhatdenselbenWertwieb=a)
Der=Operatoristreflexiv.
(a=aisteineTautologiefürjedesa)
Substitution:
Ø  FüralleAusdrückeu,vundegilt:Fallsu=veine
Tautologieistunde’derAusdruckist,denmanerhält,
wennmaninejedesVorkommenvonudurchversetzt,
danniste=e’eineTautologie.
21
DeMorgan’scheGesetze
DeMorgan’scheGesetze:Tautologien
Ø  (not(aorb))=((nota)and(notb))
Ø  (not(aandb))=((nota)or(notb))
WeitereTautologien(Distributivität):
Ø  (aand(borc))=((aandb)or(aandc))
Ø  (aor(bandc))=((aorb)and(aorc))
22
SyntaxkonventionundVorrangregeln
Vorrangregeln(höchsterVorrangzuerst):not,and,or,
implies(wirdspätervorgestellt),=
andundorsindassoziativ:
Ø  aand(bandc)=(aandb)andc
Ø  aor(borc)=(aorb)orc
Stilregeln:
WennSieeinenBoole’schenAusdruckschreiben,können
SiefolgendeKlammernweglassen:
• DieKlammernaufbeidenSeitendes“=“,fallsder
gesamteAusdruckeineÄquivalenzist.
• DieKlammernumaufeinanderfolgendeelementare
Terme,fallssiedurchdengleichenassoziativenOperator
getrenntsind.
23
DieImplikation(implies)
a
True
b
True
aimpliesb
True
True
False
False
False
True
True
False
False
True
Fürjedesa,bgilt:aimpliesb=(nota)orb
InaimpliesbistaderVordersatz,bderNachsatz.
Implikationsprinzip:
Ø  EineImplikationhatdenWahrheitswertTrue,ausserder
VordersatzhatdenWertTrueundderNachsatzhatden
WertFalse.
Ø  Zudem:ImmerTruefallsderVordersatzFalseist.
24
ImplikationeninnatürlichenSprachen
implieshatinnatürlichenSprachenoftdieBedeutungvon
Kausalität(Wenn…dann…).
Ø  “WenndasWetterschönist,gehenwirbaden.”
Ø  “WenndudiesesGetränkinsHandgepäcknimmst,lassen
siedichnichtinsFlugzeug.”
25
EinhäufigesMissverständnisüberImplikationen
ImmerwennaFalseist,ergibtaimpliesbTrue,unabhängig
vonb:
Ø  “FallsheuteMittwochist,ist2+2=5.”
Ø  “Falls2+2=5,istheuteMittwoch.”
BeidederobigenImplikationenergebenTrue.
DieFälle,indenenderVordersatzFalseist,sagennichtsüber
denWahrheitswertdesNachsatzesaus.
26
DieUmkehrungderImplikation(1)
ImAllgemeinengiltfolgendesnicht:
aimpliesb=(nota)implies(notb)
Ein(falsches!)Beispiel:
Ø  “AlleZürcher,dieamSeewohnen,sindreich.Ichwohne
nichtamSee,alsobinichnichtreich.”
live_near_lakeimpliesrich (notlive_near_lake)implies(notrich)
[1]
[2]
27
DieUmkehrungderImplikation(2)
Korrekt:
aimpliesb=(notb)implies(nota)
Beispiel:
Ø  “AlleLeute,dieamSeewohnen,sindreich.Aliceist
nichtreich,alsokannsienichtinKüsnachtwohnen.”
live_near_lakeimpliesrich=
(notrich)implies(notlive_near_lake)
28
Implikation
29
Semi-strikteBoole’scheOperatoren(1)
EinBeispielausdruck(xisteineganzeZahl):
5
x
+ > y
x
Undefiniertfürx=0
30
Semi-strikteBoole’scheOperatoren(2)
ABER:
Ø  DivisiondurchNull:xdarfnicht0sein.
(x/=0)and(((x+5)/x)>y)
Falsefürx<0
Falsefürx=0
31
Semi-strikteBoole’scheOperatoren(3)
ABER:
Ø  UnserProgrammwürdewährendderAuswertungder
Divisionabstürzen.
Wirbraucheneinenicht-kommutativeVersionvonandundor:
Semi-strikteBoole’scheOperatoren
32
Semi-strikteOperatoren(andthen,orelse)
aandthenbergibtdasselbewieaandbfallsaundbdefiniert
sind,undergibtimmerFalsewennadenWertFalsehat
aorelsebergibtdasselbewieaorbfallsaundbdefiniert
sind,undergibtimmerTruewennadenWertTruehat.
(x/=0)andthen(((x+5)/x)>y)
Semi-strikteOperatorenermöglichenesuns,eine
Auswertungsreihenfolgezudefinieren(vonlinksnachrechts)
WichtigfürProgrammierer,daundefinierteObjektezu
Programmabstürzenführenkönnen!
33
Normalevs.Semi-strikteBoole’scheOperatoren
BenutzenSie…
Ø  normaleboole’scheOperatoren(andundor),fallsSie
garantierenkönnen,dassbeideOperandendefiniert
sind
Ø  andthen,fallseineBedingungnurdannSinnergibt,
wenneineanderewahrist
Ø  orelse,fallseineBedingungnurdannSinnergibt,wenn
eineanderefalschist
Beispiel:
Ø  “FallsSienichtledigsind,mussIhrEhepartnerden
Vertragunterschreiben.”
is_singleorelsespouse_must_sign
34
Semi-strikteImplikation
Beispiel:
Ø  “FallsSienichtledigsind,mussIhrEhepartnerden
Vertragunterschreiben.”
(notis_single)impliesspouse_must_sign
Definitionvonimplies:inunseremFallimmersemi-strikt!
Ø  aimpliesb=(nota)orelseb
35
Eiffel-NotationfürBoole’scheOperatoren
SchlüsselwortinEiffel
not
or
and
=
implies
MathematischesSymbol
~oder¬
∨
∧
⇔
⇒
36
Aussagen-undPrädikatenkalkül
Aussagenkalkül:
EigenschaftpgiltfüreineinzigesObjekt.
Prädikatenkalkül:
EigenschaftpgiltfürmehrereObjekte.
37
Einallgemeineresor
G:eineGruppevonObjekten,p:eineEigenschaft
or:IstpfürmindestenseinObjektinGerfüllt?
KannmananmindestenseinerHaltestellederLinie8aufeine
andereLinieumsteigen?
Haldenbach.is_exchangeor
ETH_Universitaetsspital.is_exchangeor
Haldenegg.is_exchangeor
…(alleStationenderLinie10)
DerExistenzquantor:existsoder∃
∃s:Line10 stations|s is_exchange
“EsgibteineHaltestellesinLine10.stations
sodasss.is_exchangewahrist.”
l
l
38
Einallgemeineresand
and:IstpfürjedesObjektinGerfüllt?
SindalleHaltestellenderLinie8Haltestellen,andenenman
umsteigenkann?
Haldenbach.is_exchangeand
ETH_Universitatetsspital.is_exchangeand
Haldenegg.is_exchangeand…
(alleStationenderLinie10)
DerAllquantor:for_alloder∀
∀s:Line10 stations|s is_exchange
“FürallesinLine10.stationsgilts.is_exchange.”
l
l
39
AusdrückemitdemExistenzquantor
EinBoole’scherAusdruck:
∃s:EINE_MENGE|s.eine_eigenschaft
Ø  Truegenaudann,wennmindestenseinElementvon
EINE_MENGEdieEigenschafteine_eigenschafterfüllt
Beweise:
Ø  True:FindenSieeinElementinEINE_MENGE,welches
dieEigenschafterfüllt
Ø  False:BeweisenSie,dasskeinElementvon
EINE_MENGEdieEigenschafterfüllt.(Siemüssenalso
alleElementeüberprüfen.)
40
AusdrückemitdemAllquantor
EinBoole’scherAusdruck:
∀s:EINE_MENGE|s.eine_eigenschaft
Ø 
Truegenaudann,wennjedesElementvon
EINE_MENGEeine_eigenschafterfüllt
Beweise:
Ø  True:BeweisenSie,dassjedesElementvon
EINE_MENGEdieEigenschafterfüllt.(Siemüssenalso
alleElementeüberprüfen.)
Ø  False:FindenSieeinElementvonEINE_MENGE,
welchesdieEigenschaftnichterfüllt
41
Dualität
DieVerallgemeinerungdesDeMorgan’schenGesetzes:
not(∃s:EINE_MENGE|P)=∀s:EINE_MENGE|notP
not(∀s:EINE_MENGE|P)=∃s:EINE_MENGE|notP
42
LeereMengen
∃ s:EINE_MENGE|eine_eigenschaft
FallsEINE_MENGEleerist:immerFalse
∀ s:EINE_MENGE|eine_eigenschaft
FallsEINE_MENGEleerist:immerTrue
43
QuantoreninEiffel
acrossLine8asssomes item is_exchangeend
acrossLine8assall s item is_exchangeend
MathematischeNotation:
∃s:Line10 stations|s is_exchange
∀s:Line10 stations|s is_exchange
l
l
l
l
l
l
l
l
44
WaswirindieserLektiongesehenhaben:
Ø 
Ø 
Ø 
Ø 
Ø 
Ø 
DieLogikalsWerkzeugdeslogischenDenkens
Boole’scheOperationenundihreWahrheitstabellen
EigenschaftenvonBoole’schenOperatoren:Benutzen
SiekeineWahrheitstabellen!
DasPrädikatenkalkül:LogischeAussagenüberMengen
Semi-strikteBoole’scheOperatoren
QuantorenundihreDarstellunginEiffel
45
Herunterladen