Post on 16-Sep-2019
transcript
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 1
Vorlesung ProInformatik III
Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Organisatorisches
2
2 Vorlesungsteile mit ca. 15 Minuten Pause
Mittagspause
Theoretische und praktische Übungen (aktive und erfolgreiche Teilnahme)
08:30 – 11:00 Uhr
11:00 – 12:15 Uhr
12:15 – 15:45 Uhr
Zeitlicher Ablauf
Übungszettel werden nach Bedarf am Ende einer Vorlesung ausgegeben (60% der Aufgaben erfolgreich bearbeiten, n-1 Zettel mehr als 20%)
Klausur: vorletzter Vorlesungstag (29.08.2013), 8:30 Uhr s.t., 90 Minuten (Bestehen der Klausur)
Scheinkriterien
Tutoren und Tutorien
Michael Kmoch Eduard J. Wolf Toni Schiemank Benjamin Gehmlich
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Vorlesungsmaterialen und Literaturliste
3
Vorlesungsfolien werden bereit gestellt und ersetzen das Vorlesungsskript. Programme, Literaturhinweise und weiteres Material werden auf einer Veranstaltungswebseite zur Verfügung gestellt:
http://page.mi.fu-berlin.de/block/pi3_2013.html
Vorlesungsmaterialien
Literaturliste
[1] Hoffmann D.W.: "Theoretische Informatik", Hanser-Verlag 2009
[2] Kleuker S.: "Formale Modelle der Softwareentwicklung - Model-Checking,Verifikation, Analyse und Simulation", Vieweg-Teubner-Verlag 2009
[3] Block M.: "Java-Intensivkurs - In 14 Tagen lernen Projekte erfolgreichzu realisieren", 2. Auflage, Springer-Verlag 2009
[4] Gries D., Gries P.: "Multimedia Introduction to Programming Using Java", Springer-Verlag 2005
[5] Weiss M.A.: "Data Structures & Problem Solving Using Java", 3. Auflage, Addison-Wesley-Verlag 2005
[6] Cormen T.H., Leiserson C.E., Rivest R.L., Stein C.: "Introduction to Algorithms",3. Auflage, MIT Press 2009
[7] Martin R.C.: „Clean Code", Prentice Hall International Verlag 2008
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Diskussionsplattform - Forum
4
Mailingliste:werden wir nicht brauchen - wichtige Änderungen undMitteilungen erscheinen im Forum
Forum:http://www.java-uni.de
Es gibt einen passwortgeschützten Bereich nur für Euch:FU SoSe 2013: Proinformatik - Algorithmen und Programmierung II("proinf")
Das Java-Forum dient als Diskussionsplattform.Helft Euch gegenseitig!
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 5
Vorlesungsteil
Motivation und Einführung
Chef ist nicht der, der etwas tut, sondern der das Verlangen weckt, etwas zu tun.Edgar Pisani
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2013 Folie 6
Wer von Euch kann Programmieren?
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Grundlagen der Berechenbarkeit/Programmiermethodik
- Syntax und operationelle Semantik imperativer Programmiersprachen- Einführung und Ausbildung zum Selbststudium- Lernen objektorientiert zu denken und zu programmieren
Unsere wichtigsten Themen und Ziele
7
Einführung in die Laufzeit- und Komplexitätsanalyse
- Landau-Symbolik- Kleine Programmabschnitte analysieren und vergleichen können- Effiziente Lösungen für neuartige Probleme formulieren
Formale Verfahren zur Spezifikation und Verifikation imperativer Programme bzw. Testtechniken
- Programme möglichst fehlerfrei schreiben- Entworfene Programme testen- Test-Driven-Development beherrschen
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2013 Folie 8
Wie wähle ich die passende Programmiersprache
für ein Projekt?
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Automobilindustrie
9
Klassische Softwareentwicklung
Modell-basierte Softwareentwicklung (seit 2006)
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Softwareentwicklungsprozess
10
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Softwareentwicklungsprozess
11
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Softwareentwicklungsprozess
12
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Motivation?
13
A#A+A-0 - A-3ABAPABCActionScriptAdaADbasicAgdaAgentSpeakAgilent VEEAHDLAldorAlephAliceALGOL Amber SmalltalkAMLAMOSAMPLAngossAPLAppleScriptAspectJAssemblerAutocoderAutohotkeyAutoItAvenueawk GawkMawknawkAWLAXLEAXIS
BB-0BASCOMBASICbashBCPLBeanShellBeatnikBefungeBETABLISSBlitz BasicBLOGBooBrainfuckBrainfuck2DCC++C#C/ALCall Proc.Lang.CamlCayenneCecilCFMLC for graphicsChapelCharityChefCHILLCIP-LSCLClarionCleanClipperCLIPS
ClojureCLUClusterCOBOLCobraComalComegaCOMITCommon LispComp. PascalConGologCONZEPT 16CoolCOOL:GENCornCPLCSilberCURLCurryDDarkBASICDartDatalogDatastageDeadalusDelphiDMDScriptDracoDTGologDylanEEASYEdenEiffelELANELF
ErlangEsterelEulerEuphoriaEXEC, EXEC 2FF#FactorFalconFantomFaustFLOW-MATICFlowcodeForthFORTRANFortressFoxProFpiiFPrFreeBASICGGambasGAPGFA-BASICGenieGiottoGMLGoGoferGRASSGroovyHALHaskellHopeHQ9+Hypertalk
IBALICIIconiCon-LIDLIntercalIoIoke ISWIMJJabacoJasminJavaJavaScriptJOVIALJoyjProfanJScriptJSPJustBASICJython J#J++KKayaKIX32KotlinLabVIEWLALOLassoLiberty BasicLingoLimboLindaLPLLIS
LISPLogoLogtalkLotusScriptLPCLuaLushLustreLite-CMM4MalbolgeMantraMathematicaMATLABMaximaMDLMercuryMesaMirandaMLModulaMPDMumpsMYCIN MSL MPLNATURALNetLogoNewtonScriptNewLispNemerleNiceNQCNXCNyquist
O#OberonObject REXXObjective-CObjective-C++OCamlObject-PascalOccamOctaveOpaOpalOPLOpen ScriptOok!OzPacbaseParadoxPascal PawnPEARLPerlPhalangerPHPPietPikePILOTPizzaPL/0PL/BPL/IPL/JavaPL/MPL/PPL/PerlPL/pgSQLPL/Python
PL/RPL/SQLPLACAPlankalkül Pocol PostScriptPowerBASICPovRayProcessingProgresProgress-4GLPrologPromelaProsa ProthonProfan PuckPureBasicPure DataPython QRRapidBATCHREALbasicREBOLREFALREXXRPGRSLRubyRustSSAIL SatherScalaScheme
SCLSCPIScratchScriptolSculptor 4GLSDLSeed7SelfSevagShakespeareShellSieveSimulaSIRONSlateSleepSmalltalkSmartwareSNOBOL4SonnyscriptSP/LSQLSRSTOS_BASICSuneidoSMLStarOffice Basic Superx++SWiSHscript SMLTAL TclTECOTELON TeXTI_Basic
Turbo_PascalTipiTransact SQLTSL TuringTyposcriptUnifaceValaVEEVisual BasicVBAVBScriptVOVFsVisual PrologWebWhitespaceWinbatchWMLScriptWlanguageX10X++XBaseXbase++Visual XBase++XLXOTclXProfanXSLTZer0 ToleranceZombieZonnon3APL3Code4GL (Informix)4th Dimension
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Motivation!
14
A#A+A-0 - A-3ABAPABCActionScriptAdaADbasicAgdaAgentSpeakAgilent VEEAHDLAldorAlephAliceALGOL Amber SmalltalkAMLAMOSAMPLAngossAPLAppleScriptAspectJAssemblerAutocoderAutohotkeyAutoItAvenueawk GawkMawknawkAWLAXLEAXIS
BB-0BASCOMBASICbashBCPLBeanShellBeatnikBefungeBETABLISSBlitz BasicBLOGBooBrainfuckBrainfuck2DCC++C#C/ALCall Proc.Lang.CamlCayenneCecilCFMLC for graphicsChapelCharityChefCHILLCIP-LSCLClarionCleanClipperCLIPS
ClojureCLUClusterCOBOLCobraComalComegaCOMITCommon LispComp. PascalConGologCONZEPT 16CoolCOOL:GENCornCPLCSilberCURLCurryDDarkBASICDartDatalogDatastageDeadalusDelphiDMDScriptDracoDTGologDylanEEASYEdenEiffelELANELF
ErlangEsterelEulerEuphoriaEXEC, EXEC 2FF#FactorFalconFantomFaustFLOW-MATICFlowcodeForthFORTRANFortressFoxProFpiiFPrFreeBASICGGambasGAPGFA-BASICGenieGiottoGMLGoGoferGRASSGroovyHALHaskellHopeHQ9+Hypertalk
IBALICIIconiCon-LIDLIntercalIoIoke ISWIMJJabacoJasminJavaJavaScriptJOVIALJoyjProfanJScriptJSPJustBASICJython J#J++KKayaKIX32KotlinLabVIEWLALOLassoLiberty BasicLingoLimboLindaLPLLIS
LISPLogoLogtalkLotusScriptLPCLuaLushLustreLite-CMM4MalbolgeMantraMathematicaMATLABMaximaMDLMercuryMesaMirandaMLModulaMPDMumpsMYCIN MSL MPLNATURALNetLogoNewtonScriptNewLispNemerleNiceNQCNXCNyquist
O#OberonObject REXXObjective-CObjective-C++OCamlObject-PascalOccamOctaveOpaOpalOPLOpen ScriptOok!OzPacbaseParadoxPascal PawnPEARLPerlPhalangerPHPPietPikePILOTPizzaPL/0PL/BPL/IPL/JavaPL/MPL/PPL/PerlPL/pgSQLPL/Python
PL/RPL/SQLPLACAPlankalkül Pocol PostScriptPowerBASICPovRayProcessingProgresProgress-4GLPrologPromelaProsa ProthonProfan PuckPureBasicPure DataPython QRRapidBATCHREALbasicREBOLREFALREXXRPGRSLRubyRustSSAIL SatherScalaScheme
SCLSCPIScratchScriptolSculptor 4GLSDLSeed7SelfSevagShakespeareShellSieveSimulaSIRONSlateSleepSmalltalkSmartwareSNOBOL4SonnyscriptSP/LSQLSRSTOS_BASICSuneidoSMLStarOffice Basic Superx++SWiSHscript SMLTAL TclTECOTELON TeXTI_Basic
Turbo_PascalTipiTransact SQLTSL TuringTyposcriptUnifaceValaVEEVisual BasicVBAVBScriptVOVFsVisual PrologWebWhitespaceWinbatchWMLScriptWlanguageX10X++XBaseXbase++Visual XBase++XLXOTclXProfanXSLTZer0 ToleranceZombieZonnon3APL3Code4GL (Informix)4th Dimension
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 15
Wichtiger Verständnisbaustein
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 16
1936: Lambda-Kalkül (Church/Kleene)
Berechenbarkeit = Lambda-Kalkül
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 17
1936: Turing-Maschine
Berechenbarkeit = Turing-Maschine
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 18
Programmierparadigmen klassisch
TM
logisch
Prolog
insert (X, List, List_with_X) :- delete (X, List_with_X, List).
Element in eine Liste einfügen:
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 19
Logische Programmierung
IBM and the Jeopardy Challenge (2010)
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 20
Programmierparadigmen klassisch
logisch
Prolog
TM
funktional
Haskell
qSort [] = []
qSort (x:xs) = qSort [n|n<-xs,n<x]++[x]++qSort [n|n<-xs,n>=x]
QuickSort-Algorithmus:
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 21
Funktionale Programmierung
Frag - Egoshooter in HaskellErlang
ejabberd (XMPP-Server)
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 22
Programmierparadigmen klassisch
funktional
Haskell
logisch
Prolog
TM
imperativ
Java/C++
public void quicksort(int lo, int hi) {
int i=lo, j=hi;
int x=a[(lo+hi)/2];
while (i<=j) {
while (a[i]<x) i++;
while (a[j]>x) j--;
if (i<=j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
i++; j--;
}
}
if (lo<j) quicksort(lo, j);
if (i<hi) quicksort(i, hi);
}
QuickSort-Algorithmus:
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
vec3 v3 = v1 + v2;
vec4 coord_xyzw = vec4(v3, 1.0f);
Lineare Algebra:
23
Programmierparadigmen klassisch
imperativ
funktional
Haskell
Java/C++
logisch
Prolog
TM
parallel
GLSL (GPU)
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 24
Parallele Programmierung
Supercomputer maps Hurricane Katrina
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 25
Programmierparadigmen klassisch
imperativ
funktional
Haskell
Java/C++
logisch
Prolog
TM
parallel
GLSL
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 26
Programmierparadigmen klassisch
imperativ
funktional
Haskell
Java/C++
logisch
Prolog
TM
parallel
GLSL
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 27
Programmierparadigmen klassisch
imperativ
funktional
Haskell
Java/C++
logisch
Prolog
TM
parallel
GLSL
XSB
HLSL
CgFX
CUDA
OpenGLDirectXPython
C#Groovy
Ruby
DelphiPascal
MatLab
Octave
JavaScript Perl
Visual Basic
Pizza
ObjectiveC
Gofer
SML Scala
Erlang
Lisp
F#
Clojure
Joy
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 28
Programmierparadigmen klassisch
imperativ
funktional
Haskell
Java/C++
logisch
Prolog
TM
parallel
GLSL
XSB Gofer
SML Scala
Erlang
Lisp
F#
Clojure
HLSL
CgFX
CUDA
PythonC#
GroovyRuby
DelphiPascal
MatLab
Octave
JavaScript Perl
Visual Basic
funktional, imperativ,objektorientiert
OpenGLDirectX
Pizza
ObjectiveC
Joy
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 29
Programmierparadigmen klassisch
imperativ
funktional
Haskell
Java/C++
logisch
Prolog
TM
parallel
GLSL
XSB Gofer
SML Scala
Erlang
Lisp
F#
Clojure
HLSL
CgFX
CUDA
PythonC#
GroovyRuby
DelphiPascal
MatLab
Octave
JavaScript Perl
Visual Basic
funktional, imperativ,objektorientiert,scripting
OpenGLDirectX
Pizza
ObjectiveC
Joy
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 30
Programmierparadigmen klassisch
imperativ
funktional
Haskell
Java/C++
logisch
Prolog
TM
parallel
GLSL
XSB Gofer
SML Scala
Erlang
Lisp
F#
Clojure
HLSL
CgFX
CUDA
PythonC#
GroovyRuby
DelphiPascal
MatLab
Octave
JavaScript Perl
Visual Basic
OpenGLDirectX
Pizza
ObjectiveC
Joy
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Programmierparadigmen modern
31
imperativ funktionalobjekt-orientiert
logisch parallel visuell scripting
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Programmierparadigmen modern
32
Groovy
imperativ funktionalobjekt-orientiert
logisch parallel visuell scripting
["Rod", "Carlos", "Chris"].each{println it}
Einfache Syntax für Listen:
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 33
Integration und Kombination von Sprachen
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 34
Integration und Kombination von SprachenProjekt: Interaktives Wasser (2011)
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Integration und Kombination von Sprachen
35
A#A+A-0 - A-3ABAPABCActionScriptAdaADbasicAgdaAgentSpeakAgilent VEEAHDLAldorAlephAliceALGOL Amber SmalltalkAMLAMOSAMPLAngossAPLAppleScriptAspectJAssemblerAutocoderAutohotkeyAutoItAvenueawk GawkMawknawkAWLAXLEAXIS
BB-0BASCOMBASICbashBCPLBeanShellBeatnikBefungeBETABLISSBlitz BasicBLOGBooBrainfuckBrainfuck2DCC++C#C/ALCall Proc.Lang.CamlCayenneCecilCFMLC for graphicsChapelCharityChefCHILLCIP-LSCLClarionCleanClipperCLIPS
ClojureCLUClusterCOBOLCobraComalComegaCOMITCommon LispComp. PascalConGologCONZEPT 16CoolCOOL:GENCornCPLCSilberCURLCurryDDarkBASICDartDatalogDatastageDeadalusDelphiDMDScriptDracoDTGologDylanEEASYEdenEiffelELANELF
ErlangEsterelEulerEuphoriaEXEC, EXEC 2FF#FactorFalconFantomFaustFLOW-MATICFlowcodeForthFORTRANFortressFoxProFpiiFPrFreeBASICGGambasGAPGFA-BASICGenieGiottoGMLGoGoferGRASSGroovyHALHaskellHopeHQ9+Hypertalk
IBALICIIconiCon-LIDLIntercalIoIoke ISWIMJJabacoJasminJavaJavaScriptJOVIALJoyjProfanJScriptJSPJustBASICJython J#J++KKayaKIX32KotlinLabVIEWLALOLassoLiberty BasicLingoLimboLindaLPLLIS
LISPLogoLogtalkLotusScriptLPCLuaLushLustreLite-CMM4MalbolgeMantraMathematicaMATLABMaximaMDLMercuryMesaMirandaMLModulaMPDMumpsMYCIN MSL MPLNATURALNetLogoNewtonScriptNewLispNemerleNiceNQCNXCNyquist
O#OberonObject REXXObjective-CObjective-C++OCamlObject-PascalOccamOctaveOpaOpalOPLOpen ScriptOok!OzPacbaseParadoxPascal PawnPEARLPerlPhalangerPHPPietPikePILOTPizzaPL/0PL/BPL/IPL/JavaPL/MPL/PPL/PerlPL/pgSQLPL/Python
PL/RPL/SQLPLACAPlankalkül Pocol PostScriptPowerBASICPovRayProcessingProgresProgress-4GLPrologPromelaProsa ProthonProfan PuckPureBasicPure DataPython QRRapidBATCHREALbasicREBOLREFALREXXRPGRSLRubyRustSSAIL SatherScalaScheme
SCLSCPIScratchScriptolSculptor 4GLSDLSeed7SelfSevagShakespeareShellSieveSimulaSIRONSlateSleepSmalltalkSmartwareSNOBOL4SonnyscriptSP/LSQLSRSTOS_BASICSuneidoSMLStarOffice Basic Superx++SWiSHscript SMLTAL TclTECOTELON TeXTI_Basic
Turbo_PascalTipiTransact SQLTSL TuringTyposcriptUnifaceValaVEEVisual BasicVBAVBScriptVOVFsVisual PrologWebWhitespaceWinbatchWMLScriptWlanguageX10X++XBaseXbase++Visual XBase++XLXOTclXProfanXSLTZer0 ToleranceZombieZonnon3APL3Code4GL (Informix)4th Dimension
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Integration und Kombination von Sprachen
36
A#A+A-0 - A-3ABAPABCActionScriptAdaADbasicAgdaAgentSpeakAgilent VEEAHDLAldorAlephAliceALGOL Amber SmalltalkAMLAMOSAMPLAngossAPLAppleScriptAspectJAssemblerAutocoderAutohotkeyAutoItAvenueawk GawkMawknawkAWLAXLEAXIS
BB-0BASCOMBASICbashBCPLBeanShellBeatnikBefungeBETABLISSBlitz BasicBLOGBooBrainfuckBrainfuck2DCC++C#C/ALCall Proc.Lang.CamlCayenneCecilCFMLC for graphicsChapelCharityChefCHILLCIP-LSCLClarionCleanClipperCLIPS
ClojureCLUClusterCOBOLCobraComalComegaCOMITCommon LispComp. PascalConGologCONZEPT 16CoolCOOL:GENCornCPLCSilberCURLCurryDDarkBASICDartDatalogDatastageDeadalusDelphiDMDScriptDracoDTGologDylanEEASYEdenEiffelELANELF
ErlangEsterelEulerEuphoriaEXEC, EXEC 2FF#FactorFalconFantomFaustFLOW-MATICFlowcodeForthFORTRANFortressFoxProFpiiFPrFreeBASICGGambasGAPGFA-BASICGenieGiottoGMLGoGoferGRASSGroovyHALHaskellHopeHQ9+Hypertalk
IBALICIIconiCon-LIDLIntercalIoIoke ISWIMJJabacoJasminJavaJavaScriptJOVIALJoyjProfanJScriptJSPJustBASICJython J#J++KKayaKIX32KotlinLabVIEWLALOLassoLiberty BasicLingoLimboLindaLPLLIS
LISPLogoLogtalkLotusScriptLPCLuaLushLustreLite-CMM4MalbolgeMantraMathematicaMATLABMaximaMDLMercuryMesaMirandaMLModulaMPDMumpsMYCIN MSL MPLNATURALNetLogoNewtonScriptNewLispNemerleNiceNQCNXCNyquist
O#OberonObject REXXObjective-CObjective-C++OCamlObject-PascalOccamOctaveOpaOpalOPLOpen ScriptOok!OzPacbaseParadoxPascal PawnPEARLPerlPhalangerPHPPietPikePILOTPizzaPL/0PL/BPL/IPL/JavaPL/MPL/PPL/PerlPL/pgSQLPL/Python
PL/RPL/SQLPLACAPlankalkül Pocol PostScriptPowerBASICPovRayProcessingProgresProgress-4GLPrologPromelaProsa ProthonProfan PuckPureBasicPure DataPython QRRapidBATCHREALbasicREBOLREFALREXXRPGRSLRubyRustSSAIL SatherScalaScheme
SCLSCPIScratchScriptolSculptor 4GLSDLSeed7SelfSevagShakespeareShellSieveSimulaSIRONSlateSleepSmalltalkSmartwareSNOBOL4SonnyscriptSP/LSQLSRSTOS_BASICSuneidoSMLStarOffice Basic Superx++SWiSHscript SMLTAL TclTECOTELON TeXTI_Basic
Turbo_PascalTipiTransact SQLTSL TuringTyposcriptUnifaceValaVEEVisual BasicVBAVBScriptVOVFsVisual PrologWebWhitespaceWinbatchWMLScriptWlanguageX10X++XBaseXbase++Visual XBase++XLXOTclXProfanXSLTZer0 ToleranceZombieZonnon3APL3Code4GL (Informix)4th Dimension
Java
GLSL
LWJGL
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Integration und Kombination von Sprachen
37
A#A+A-0 - A-3ABAPABCActionScriptAdaADbasicAgdaAgentSpeakAgilent VEEAHDLAldorAlephAliceALGOL Amber SmalltalkAMLAMOSAMPLAngossAPLAppleScriptAspectJAssemblerAutocoderAutohotkeyAutoItAvenueawk GawkMawknawkAWLAXLEAXIS
BB-0BASCOMBASICbashBCPLBeanShellBeatnikBefungeBETABLISSBlitz BasicBLOGBooBrainfuckBrainfuck2DCC++C#C/ALCall Proc.Lang.CamlCayenneCecilCFMLC for graphicsChapelCharityChefCHILLCIP-LSCLClarionCleanClipperCLIPS
ClojureCLUClusterCOBOLCobraComalComegaCOMITCommon LispComp. PascalConGologCONZEPT 16CoolCOOL:GENCornCPLCSilberCURLCurryDDarkBASICDartDatalogDatastageDeadalusDelphiDMDScriptDracoDTGologDylanEEASYEdenEiffelELANELF
ErlangEsterelEulerEuphoriaEXEC, EXEC 2FF#FactorFalconFantomFaustFLOW-MATICFlowcodeForthFORTRANFortressFoxProFpiiFPrFreeBASICGGambasGAPGFA-BASICGenieGiottoGMLGoGoferGRASSGroovyHALHaskellHopeHQ9+Hypertalk
IBALICIIconiCon-LIDLIntercalIoIoke ISWIMJJabacoJasminJavaJavaScriptJOVIALJoyjProfanJScriptJSPJustBASICJython J#J++KKayaKIX32KotlinLabVIEWLALOLassoLiberty BasicLingoLimboLindaLPLLIS
LISPLogoLogtalkLotusScriptLPCLuaLushLustreLite-CMM4MalbolgeMantraMathematicaMATLABMaximaMDLMercuryMesaMirandaMLModulaMPDMumpsMYCIN MSL MPLNATURALNetLogoNewtonScriptNewLispNemerleNiceNQCNXCNyquist
O#OberonObject REXXObjective-CObjective-C++OCamlObject-PascalOccamOctaveOpaOpalOPLOpen ScriptOok!OzPacbaseParadoxPascal PawnPEARLPerlPhalangerPHPPietPikePILOTPizzaPL/0PL/BPL/IPL/JavaPL/MPL/PPL/PerlPL/pgSQLPL/Python
PL/RPL/SQLPLACAPlankalkül Pocol PostScriptPowerBASICPovRayProcessingProgresProgress-4GLPrologPromelaProsa ProthonProfan PuckPureBasicPure DataPython QRRapidBATCHREALbasicREBOLREFALREXXRPGRSLRubyRustSSAIL SatherScalaScheme
SCLSCPIScratchScriptolSculptor 4GLSDLSeed7SelfSevagShakespeareShellSieveSimulaSIRONSlateSleepSmalltalkSmartwareSNOBOL4SonnyscriptSP/LSQLSRSTOS_BASICSuneidoSMLStarOffice Basic Superx++SWiSHscript SMLTAL TclTECOTELON TeXTI_Basic
Turbo_PascalTipiTransact SQLTSL TuringTyposcriptUnifaceValaVEEVisual BasicVBAVBScriptVOVFsVisual PrologWebWhitespaceWinbatchWMLScriptWlanguageX10X++XBaseXbase++Visual XBase++XLXOTclXProfanXSLTZer0 ToleranceZombieZonnon3APL3Code4GL (Informix)4th Dimension
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 38
Betriebssysteme kombinieren
Projekt: Autonomes Fahrzeug (2011)
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 39
Betriebssysteme kombinieren
Projekt: Archäocopter (2013)
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Integration und Kombination von Sprachen
40
A#A+A-0 - A-3ABAPABCActionScriptAdaADbasicAgdaAgentSpeakAgilent VEEAHDLAldorAlephAliceALGOL Amber SmalltalkAMLAMOSAMPLAngossAPLAppleScriptAspectJAssemblerAutocoderAutohotkeyAutoItAvenueawk GawkMawknawkAWLAXLEAXIS
BB-0BASCOMBASICbashBCPLBeanShellBeatnikBefungeBETABLISSBlitz BasicBLOGBooBrainfuckBrainfuck2DCC++C#C/ALCall Proc.Lang.CamlCayenneCecilCFMLC for graphicsChapelCharityChefCHILLCIP-LSCLClarionCleanClipperCLIPS
ClojureCLUClusterCOBOLCobraComalComegaCOMITCommon LispComp. PascalConGologCONZEPT 16CoolCOOL:GENCornCPLCSilberCURLCurryDDarkBASICDartDatalogDatastageDeadalusDelphiDMDScriptDracoDTGologDylanEEASYEdenEiffelELANELF
ErlangEsterelEulerEuphoriaEXEC, EXEC 2FF#FactorFalconFantomFaustFLOW-MATICFlowcodeForthFORTRANFortressFoxProFpiiFPrFreeBASICGGambasGAPGFA-BASICGenieGiottoGMLGoGoferGRASSGroovyHALHaskellHopeHQ9+Hypertalk
IBALICIIconiCon-LIDLIntercalIoIoke ISWIMJJabacoJasminJavaJavaScriptJOVIALJoyjProfanJScriptJSPJustBASICJython J#J++KKayaKIX32KotlinLabVIEWLALOLassoLiberty BasicLingoLimboLindaLPLLIS
LISPLogoLogtalkLotusScriptLPCLuaLushLustreLite-CMM4MalbolgeMantraMathematicaMATLABMaximaMDLMercuryMesaMirandaMLModulaMPDMumpsMYCIN MSL MPLNATURALNetLogoNewtonScriptNewLispNemerleNiceNQCNXCNyquist
O#OberonObject REXXObjective-CObjective-C++OCamlObject-PascalOccamOctaveOpaOpalOPLOpen ScriptOok!OzPacbaseParadoxPascal PawnPEARLPerlPhalangerPHPPietPikePILOTPizzaPL/0PL/BPL/IPL/JavaPL/MPL/PPL/PerlPL/pgSQLPL/Python
PL/RPL/SQLPLACAPlankalkül Pocol PostScriptPowerBASICPovRayProcessingProgresProgress-4GLPrologPromelaProsa ProthonProfan PuckPureBasicPure DataPython QRRapidBATCHREALbasicREBOLREFALREXXRPGRSLRubyRustSSAIL SatherScalaScheme
SCLSCPIScratchScriptolSculptor 4GLSDLSeed7SelfSevagShakespeareShellSieveSimulaSIRONSlateSleepSmalltalkSmartwareSNOBOL4SonnyscriptSP/LSQLSRSTOS_BASICSuneidoSMLStarOffice Basic Superx++SWiSHscript SMLTAL TclTECOTELON TeXTI_Basic
Turbo_PascalTipiTransact SQLTSL TuringTyposcriptUnifaceValaVEEVisual BasicVBAVBScriptVOVFsVisual PrologWebWhitespaceWinbatchWMLScriptWlanguageX10X++XBaseXbase++Visual XBase++XLXOTclXProfanXSLTZer0 ToleranceZombieZonnon3APL3Code4GL (Informix)4th Dimension
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Phasen der Softwareentwicklung: Automobilindustrie
41
Visueller, abstrakterPrototyp
C/C++
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Softwareentwicklungsprozess
42
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Softwareentwicklungsprozess
43
visuell/abstrakt
effizient
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Phasen der Softwareentwicklung: Spieleindustrie
44
Papierprototyp Rapid Prototyping
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Phasen der Softwareentwicklung: Spieleindustrie
45
Papierprototyp Rapid Prototyping
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2013 Folie 46
Wie wähle ich die passende Programmiersprache
für ein Projekt?
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 47
� Von Programmiersprachen auf Paradigmen abstrahieren
� Alle Paradigmen sind gleich mächtig
� Programmierparadigmen werden kombiniert
� Programmiersprachen werden kombiniert
� Betriebssysteme werden kombiniert
� Verschiedene Programmiersprachen kommen in einem Softwareprojektin verschiedenen Phasen zum Einsatz
Zusammenfassung
� Flexibilität und breites Verständnis werden also erwartet!
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2013 Folie 48
Was sind die Rahmenbedingungen
für unser gemeinsames Projekt?
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Grundlagen der Berechenbarkeit/Programmiermethodik
- Syntax und operationelle Semantik imperativer Programmiersprachen- Einführung und Ausbildung zum Selbststudium- Lernen objektorientiert zu denken und zu programmieren
Unsere wichtigsten Themen und Ziele
49
Einführung in die Laufzeit- und Komplexitätsanalyse
- Landau-Symbolik- Kleine Programmabschnitte analysieren und vergleichen können- Effiziente Lösungen für neuartige Probleme formulieren
Formale Verfahren zur Spezifikation und Verifikation imperativer Programme bzw. Testtechniken
- Programme möglichst fehlerfrei schreiben- Entworfene Programme testen- Test-Driven-Development beherrschen
Java
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Für die ersten kleinen Programme in Java werden wir Notepad++ oder einen vergleichbaren Editor mit Syntaxhighlighting verwenden:
Entwicklungsumgebung für Java (erste Tage)
50
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Live-Coding-Session
51
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Für eine professionelle Entwicklung größerer Programme in Java werden wir später lernen mit Eclipse zu arbeiten:
Entwicklungsumgebung für Java
52
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2013 Folie 53
Philosophie der Veranstaltung
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Top-Down- versus Bottom-Up-Lernen
54
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Programmieren lernen heißt eine Sprache lernen … und Sprachenmuss man sprechen!
Das bedeutet für uns:
Motivation zu Projekten und Ausblick
55
- Projekte
- Projekte
- Projekte
- …
- viele Projekte
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Klein, multitouchfähig … jederzeit dabei!
Smartphone- und Tabletprojekte mit Java
56
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Visuelle Sprachen werden oft für die Kommunikation eingesetzt ...
Wir werden diese in den verschiedenen Phasen der Softwareentwicklung kennenlernen und einsetzen.
Einstieg in die Softwaretechnik
57
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2013 Folie 58
Noch eine kleine Anmerkung …
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 59
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2013 Folie 60
Dialog ausdrücklich erwünscht
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013 61
Vorlesungsteil
Vorbereitungen und Javas kleinste Bausteine
Die Basis einer gesunden Ordnung ist ein großer Papierkorb.Kurt Tucholsky
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Vorbereitungen und Javas kleinste Bausteine
• Motivation zu Java• Installation der aktuellen Java-Version• Primitive Datentypen und ihre Wertebereiche• Wiederholung: Boolesche Algebra• Variablen und Konstanten• Operationen auf primitiven Datentypen• Umwandlungen von Datentypen
62
Übersicht zum Vorlesungsinhalt zeitliche Abfolge und Inhalte können variieren
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2013 Folie 63
Warum gerade mit Java beginnen?
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Es gibt viele Gründe mit dem Programmieren zu beginnen, aber warum sollte es gerade die Programmiersprache Java sein?
Warum gerade mit Java beginnen?
64
• Java ist leicht zu erlernen• relativ kleiner Befehlsumfang• strikte Typsicherheit• plattformunabhängig• hat dominierende Stellung auf mobilen Geräten
und in der Welt der Server
• mit dem Java Native Interface (JNI) können Windows-DLLs und C++-Bibliotheken eingebunden werden
• sehr große Community
Generell gilt: Die Chance in Java etwas falsch zu machen ist sehr viel kleiner als in anderen Programmiersprachen, wie z.B. in C oder C++.
Java wird deshalb auf Grund dieser Eigenschaften gerade in der Lehre intensiv eingesetzt.
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Es gibt aber auch Systeme, bei denen Java nicht eingesetzt werden sollte bzw. folgende Nachteile:
• Geschwindigkeitsrelevante bzw. hardwarenahe Softwaresysteme• Operatoren können nicht überladen werden
Was leistet Java nicht?
65
In C++ können wir beispielsweise den Operator + für Vektoren überladen:
Vektor c = a + b;
Vektor c = Vektor.add(a, b);
In Java können wir dafür nur eine Funktionsschreibweise anbieten:
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Wir installieren die aktuelle Java-Version 1.7 mit interessanten Neuerungen.
1) Download1) und Installation des JDK (Java Development Kit)
2) Download2, 3) und Installation einer Entwicklungsumgebung
3) Testen der installierten Javaversion.
i) In einer Konsole prüfen, ob der Compiler vorhanden ist:
ii) Folgendes Testprogramm im Editor schreiben und mit dem Namen TestProgramm.javaspeichern:
iii) Kompilieren und ausführen des Testprogramms:
Installation von Java und Vorbereitungen
66
1) Oracle: http://www.oracle.com/de/technologies/java/index.html 2) Notepad++: http://notepad-plus-plus.org3) Eclipse: http://www.eclipse.org
c:\javac
public class TestProgramm {}
c:\javac TestProgramm.java
c:\java TestProgramm
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Variablen als Speicherplatz
67
...
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Primitive Datentypen in Java
68
Wahrheitswerte Zeichen und Symbole ZahlenWahrheitswerte Zeichen und Symbole ZahlenWahrheitswerte Zeichen und Symbole ZahlenWahrheitswerte Zeichen und Symbole Zahlenboolean char byte, short,
int, long,float, double
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2013 Folie 69
Warum haben Zahlen eine besondere Stellung?
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Primitive Datentypen und ihre Wertebereiche
70
Datentyp Wertebereich BitDatentyp Wertebereich BitDatentyp Wertebereich BitDatentyp Wertebereich Bit
booleancharbyteshortint
longfloat
double
true, false0 … 65.535 (z.B. ‘a‘, ‘b‘, …, ‘A‘, …, ‘1‘, ‘2‘, …)
-128 bis 127-32.768 bis 32.767
-2.147.483.648 bis 2.147.483.647-9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807
+/-1,4E-45 bis +/- +3,4E 38+/-4,9E-324 bis +/- +1,7E 308
81681632643264
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Deklaration von Variablen
71
Deklaration von Variablen:
<Datentyp> <Name>;
Beispiel:
boolean a;
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Zuweisung von Werten
72
Nach der Deklaration steht die Variable bereit und kann einen Wert mit dem Symbol = zugewiesen bekommen.
a = true;
Die Zuweisung erlaubt aber nur den Wert der rechten Seite auf die linke zu übertragen:
Es andersherum aufzuschreiben wäre fehlerhaft:
true = a;
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Deklaration und Zuweisung
73
Deklaration von Variablen und Zuweisung in einem Schritt:
<Datentyp> <Name> = <Wert>;
Beispiele:
boolean a, b;
a = true;
char c = 'b';
int d = 12, e, f = 0;
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Deklaration und Initialisierung vor Verwendung!
74
Variablen müssen vor dem Einsatz immer initialisiert (also mit einem Wert versehen) werden.
Folgendes Beispiel führt zu einem Fehler:
int i;
int j = i;
i j
undefinierter Inhaltundefinierter Inhaltundefinierter Inhaltundefinierter Inhalt
explizites Kopierenexplizites Kopierenexplizites Kopierenexplizites Kopieren
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Bezeichnungen von Variablen
75
Es gibt zwar ein paar Beschränkungen für die Namensgebung, aber der wichtigste Grund für die Wahl ist die Aufgabe also der Zweck der Variable.
Ein paar Beispiele dazu:
boolean spielLäuft;
double piViertel;
int anzIterationen;
Variablennamen beginnen mit einem Buchstaben, Unterstrich oder Dollarzeichen,nicht erlaubt sind dabei Zahlen. Nach dem ersten Zeichen dürfen aber sowohlBuchstaben als auch Zahlen folgen. Operatoren, Schlüsselwörter und vordefinierteLiterale dürfen ebenfalls nicht als Variablennamen verwendet werden.
Zu den reservierten Schlüsselwörtern und Literalen in Java gehören die folgenden:
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Syntaxhervorhebung
76
// zählt die Anzahl der bereits besetzten Felder
private int countSigns(int[][] b){
int count=0;
for (int i=0; i < 3; i++)
for (int j=0; j < 3; j++)
if (b[i][j]!=0)
count++;
return count;
}
Schlüsselwörter werden fett und Kommentare kursiv gekennzeichnet, das fördert Übersicht und Lesbarkeit.
Hier ein Beispiel ohne Syntaxhervorhebung (Syntaxhighlighting):
// zählt die Anzahl der bereits besetzten Felder
private int countSigns(int[][] b){
int count=0;
for (int i=0; i < 3; i++)
for (int j=0; j < 3; j++)
if (b[i][j]!=0)
count++;
return count;
}
... und hier mit:
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Groß- und Kleinschreibung in Java
77
Bei Java muss auf Groß- und Kleinschreibung geachtet werden, denn unterschied-liche Schreibweisen bezeichnen unterschiedliche Variablen (case-sensitive).
Folgendes würde deshalb nicht funktionieren:
boolean istFertig;
istFERTIG = true;
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Variablenbezeichner und Code-Konventionen
78
Durch eine überlegte Variablenbezeichnung werden zwei Dinge gefördert:
• Zum Einen benötigt der Programmautor weniger Zeit, um seine eigenenProgramme zu lesen, deren Erstellung vielleicht schon etwas längerzurück liegt, und
• zum Anderen fördert es die Zusammenarbeit mit anderenProgrammierern.
1) Oracle: http://www.oracle.com/technetwork/java/codeconv-138413.html
Im Laufe der Zeit haben sich einige Konventionen1) bezüglich der Erstellung vonProgrammen etabliert. Der Programmierer sollte sich an diese halten, um sichselbst und anderen das Leben nicht unnötig schwer zu machen. Frei nach demMotto:
Wir müssen nicht immer alles machen, was erlaubt ist.
Bei der Bezeichnung von Variablen in Java hat sich die Konvention durchgesetzt,dass wir Kombinationen von Verben und/oder Substantiven verwenden.
Die Worte werden dabei, bis auf das erste, beginnen mit einem Großbuchstabengeschrieben (camelCase).
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Variablen versus Konstanten
79
Manchmal ist es notwendig, Variablen zu verwenden, die die Eigenschaft besitzen,während des gesamten Programmablaufs unverändert zu bleiben.
Beispielsweise eine Näherung der Zahl pi:
double pi = 3.14159;
Damit aber nun gewährleistet ist, dass der Softwareentwickler selbst oder auch einanderer weiß, dass dieser Platzhalter im Speicher nicht variabel und demzufolgekeine Änderung erlaubt ist, schreiben wir einfach ein final davor, verwenden (lautKonvention) für den Namen nur Großbuchstaben und machen so aus einer Variableeine Konstante.
Die Syntax dafür sieht wie folgt aus:
final <Datentyp> <Name> [= <Wert>];
Jetzt können wir unmissverständlich den Platzhalter für pi als Konstante deklarie-ren:
final double PI = 3.14159;
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Java-Compiler überprüft final
80
Sollten wir dennoch versuchen, Konstanten zu verändern ...
... liefert der Java-Compiler einen Fehler:
final double PI = 3.14159;
PI = 4;
KonstantenTest:4: cannot assign a value to final variable PI
PI = 4;
^
1 error
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Primitive Datentypen und ihre Operationen: Datentyp boolean
81
Es gibt eine weit verbreitete Möglichkeit, auf die wir später noch genauer eingehen werden, einen boolean für eine Entscheidung zu verwenden:
if (<boolean>)
<Anweisung>;
Wenn der boolean den Wert true hat, führen wir die nachfolgende Anweisung aus, ansonsten überspringen wir diesen Abschnitt.
Der Datentyp boolean bezeichnet einen Wahrheitswert und kann demzufolge trueoder false sein.
boolean a;
a = true;
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Das wichtigsten logische Operationen: UND, ODER und NICHT
82
BBBB1111 BBBB2222 BBBB1111 UND BUND BUND BUND B2222 BBBB1111 ODER BODER BODER BODER B2222 B NICHT BB NICHT BB NICHT BB NICHT B
0011
0101
0001
0111
01
10
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
UND, ODER und NICHT in Java
83
In Java verwenden wir && (UND), || (ODER) und ! (NICHT):
boolean a, b, c;
a = true;
b = false;
c = a && b;
boolean a, b, c;
a = true;
b = a && a;
c = b || a;
boolean a = true, b = false, c, d;
c = a && b;
d = (a || b) && !c;
Welchen Wert hat c?
Welchen Wert hat c?
Welchen Wert hat d?
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Datentyp char
84
Zeichen oder Symbole werden durch den Datentyp char identifiziert und zwischen' ' notiert:
char d = '7';
char e = 'b';
Die Variable d trägt als Inhalt das Zeichen '7' und wird aber nicht als Zahl 7interpretiert.
Schauen wir uns die relationalen Operatoren (Vergleichsoperatoren) stellvertretendfür char an:
boolean d, e, f, g;
char a, b, c;
a = '1';
b = '1';
c = '5';
d = a == b; // gleich
e = a != b; // ungleich
f = a < c; // kleiner
g = c >= b; // größer-gleichWelche Werte geltenfür d, e, f und g?
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Datentyp int
85
Der Datentyp int hat einen Wertebereich von: {-231 , -231 +1, …, -1, 0, 1, 2, …, 231-1}
int minimalerWert = Integer.MIN_VALUE;
int maximalerWert = Integer.MAX_VALUE;
Der kleinste bzw. größte darstellbare Wert liegt jeweils in einer Konstanten vor:
Was würde jetzt passieren, wenn wir zu dem größten Wert eine 2 addieren?
231-1 +2 = 2147483647 +2 = Integer.MAX_VALUE +2
Statt 2147483649 erhalten wir -2147483647 auf Grund des zyklischen Verhaltensdurch den begrenzten Speicher.
Hier der Grund dafür:
Stichwort: Zweierkomplement-Darstellung
int c
int a
int b
1 … 111
0 … 001
1 0 … 000
+
Ubertragsbit wird “vergessen”
..
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Zweierkomplement-Darstellung I
86
Für 0 und positive Zahlen (z.B. Zweierkomplement-Darstellung mit 4 Bit) werdendie entsprechenden Binärzahlen wie folgt erstellt:
0 = 0000 +4 = 0100
+1 = 0001 +5 = 0101
+2 = 0010 +6 = 0110
+3 = 0011 +7 = 0111
Für negative Zahlen negieren wir die Binärzahl elementeweise und addierenanschließend eine 1 dazu (z.B. -1 => 0001 => 1110 => 1111):
-1 = 1111 -5 = 1011
-2 = 1110 -6 = 1010
-3 = 1101 -7 = 1001
-4 = 1100 -8 = 1000
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Test mit bitweiser Negation
87
In Java wird die bitweise Negation mit dem Operator ~ durchgeführt. So ergibtsich beispielsweise für die Dezimalzahl -1 entsprechend:
0001 (Binärzahl von 1)
=> 1110 (elementeweise invertiert)
=> 1111 (um 1 erhöht).
int a = 1;
int b = ~a + 1;
Bei der Ausgabe von b erhalten wir in Dezimaldarstellung den Wert -1, es hat
funktioniert.
Um das zu prüfen, speichern wir uns in a den Wert 1, invertieren dieBinärrepräsentation dieser Zahl elementeweise, erhöhen das Ergebnis anschließendum die Binärdarstellung der 1 und speichern das Ergebnis in b:
ProInformatik III: Objektorientierte Programmierung
Freie Universität Berlin
Prof. Dr. Marco Block-BerlitzSommersemester 2013
Zweierkomplement-Darstellung I0
88
Folgendes zyklisches Verhalten ergibt sich:
0000
0
00011
0100
0010
0011
0111
0101
0110
2
3
4
5
6
7
1111-1
1000
1001
1010
1011
1100
1101
1110
-7
-6
-2
-3
-4
-5
-8
Jetzt ist auch ersichtlich, warum es eine negative Zahl mehr als positive gibt.