Freie Universität...

88
ProInformatik III: Objektorientierte Programmierung Freie Universität Berlin Prof. Dr. Marco Block-Berlitz Sommersemester 2013 1 Vorlesung ProInformatik III Objektorientierte Programmierung Freie Universität Berlin Prof. Dr. Marco Block-Berlitz Sommersemester 2013

Transcript of Freie Universität...

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.