Nino Simunic M.A.

Werbung
Vorlesung2. Sitzung
Grundlegende
Programmiertechniken
Wintersemester 2007/2008
Dozent
Nino Simunic M.A.
Computerlinguistik, Campus DU
Grundlegende
Programm, Algorithmus
Syntax, Semantik
Realisierungsebenen von Programmen
Programmiertechniken, WS 2007/2008
Binärcode, Assembler, Höhere
Programmiersprachen
Compiler, Interpreter
Code-Struktur (in Java)
Variablen und Datentypen (in Java)
Grundlegende
Programmiertechniken, WS 2007/2008
Programm, Algorithmus
Syntax, Semantik
Woraus bestehen Programme im Wesentlichen?
Programm =
Daten + Befehle
Daten
Elemente, die das Programm verarbeitet
Zahlen, Texte, Bilder, Videos, etc.
Befehle
Operationen, die mit den Daten ausgeführt werden
Math. Operationen, Texte (vor-/ein-)lesen/schreiben,
-4-
Anordnung/Abarbeitung der Befehle strukturiert ist
endlich: Algorithmus
Algorithmen (1)
Präzise definierte Handlungsvorschrift zur Lösung
eines Problems in endlicher Zeit/endlichen
Schritten.
Alltagsalgorithmen
Computerprogramme können aus mehreren
Algorithmen bestehen
-5-
Bedienungsanleitungen, Kochrezepte, Routen,
Waschmaschinenprogramm
Analogie Kochrezept: Neben Hauptalgorithmus weitere
Algorithmen für's Herstellen von Sahne, Blätterteig, etc.
Bestehen aber aus einer begrenzten Anzahl von CodeZeilen.
Algorithmen (2)
Abstrakter Algorithums: Gegenstück zum konkret
auf eine Maschine zugeschnittenen Programm
Ist im Optimalfall Grundlage für die Implementierung.
Abstraktion erfolgt im Weglassen der spezifischen
Details der Maschine/Programmiersprache.
1. drucke "Hello World" …
Oft auch in natürlicher Sprache semi-formal:
Bsp.»Kaffeekoch«-Programm als »PseudoAlgorithmus«:
take Filter -> place Filter -> take coffeePowder -> measure
coffeePowder -> …
-6-
Hello World: Daten, Befehle, Algorithmus
Das Hello World Programm enthält sowohl Daten,
Befehle, und einen (zugegeben sehr simplen)
Algorithmus:
-7-
"Hello World"
System.out.println( DATEN )
Weitere Aspekte einer Programmiersprache: Syntax, Semantik
Syntax
Grammatik, Syntaxregeln, Symbole, »Vokabeln«
Syntaxfehler werden vom Compiler/Interpreter anhand der
Grammatik und einem Parser erkannt und zurückgewiesen
Zuweisungsregel: Variable = Ausdruck
(3+1) = eineVariable
eineVariable = (3+1)
Auch clas (class) ist ein syntaktischer Fehler
Semantik
Was "bedeutet" die Regel Variable = Ausdruck?
Werte den Ausdruck rechts vom = aus und weise ihn der
Variablen links vom = zu
Online Spezifikation der »Java-Sprache«:
http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html
-8-
Grundlegende
Programmiertechniken, WS 2007/2008
Realisierungsebenen von Programmen
Binärcode, Assembler, Höhere
Programmiersprachen
Realisierungsebenen von Programmen: Binärcode, Assembler
Rechner sind »Abspielgeräte« für Programme und verstehen nur
eine bestimmte Menge an elementaren Befehlen, die in
Machinencode kodiert sind. Z.B.:
-1010-
ADDI
ACC, 6 ACC = ACC + 6
01 11 0110
SUBI
ACC, 6 ACC = ACC - 6
Programmierung in Assembler bzw. Maschinencod/Binärcode:
00 11 0110
Vorteil: Sehr performante Ausführung (kaum »Umwege«)
Für den Programmierer unpraktikabel: Schwer zu programmieren, lesen,
warten
Anpassung für verschiedene Rechnersysteme/Prozessoren nötig.
Kompromiss gesucht: Formale (»maschinell nutzbare«) Sprache
mit höherem Anteil »Menschenlesbarkeit«
Realisierungsebenen von Programmen:
Höhere Programmiersprachen (1)
Kompromiss bereits von Ihnen mit Hello World
verwendet: Java als höhere
Programmiersprache (PS)
»Vokabular« und Konstrukte/Syntax oft in
Anlehnung an die engl. Sprache:
-1111-
this, for, if, do, while, etc.
IF thisIsTrue THEN this ELSE that
WHILE (thisIsTrue) DO { thisAndThat}
Realisierungsebenen von Programmen:
Höhere Programmiersprachen (2)
Höheren Programmiersprachen
Höhere Programmiersprachen müssen
übersetzt bzw. kompiliert werden
-1212-
Sind formale Sprachen und Mindestvoraussetzung für
die Programmierung von Maschinen im Allgemeinen
Besitzen demnach auch eine spezifische Grammatik
Perl, JScript, Turbo Pascal, C#, C, C++ sind auch
höhere Programmiersprachen.
HTML, XML, etc. sind keine Programmiersprachen.
By the way: Assembler muss auch kompiliert werden.
Grundlegende
Programmiertechniken, WS 2007/2008
Compiler, Interpreter
Übersetzung höherer Programmiersprachen
Interpreter
Compiler
-1414-
Beispiele: Perl, PHP, Javascript, …
Übersetzt bei Ausführung Zeile für Zeile eines
Programms in Maschinencode:
Syntaxfehler in Zeile 1000 wird es beim Erreichen
dieser Stelle zur Laufzeit erkannt.
C(++), Pascal, Java, …
Übersetzt Quelltext vor der Laufzeit gänzlich in CPUverarbeitbaren Maschinencode
Nur bedingt gültig für Java (Bytecode)
Syntaxfehler nicht erst zur Laufzeit des Programms
Java ist plattformunabhängig
(Kompilierte) Java-Programme sind
plattformunabhängig
Mindestvoraussetzung: JRE (enthält JVM) auf dem
ausführenden Rechner
-1515-
C, C++, …: Code muss für jede Plattform neu kompiliert
werden
Java-Version von Entwicklungs- und ausführendem
Rechner sollten im Idealfall identisch sein
Unterstützte OS, obligatorische Softwarekomponenten
Solaris x64, Solaris OS SPARC, Solaris OS x86
Windows Intel IA32, Windows AMD64/EM64T
32-bit mode, Windows AMD64/EM64T 64-bit mode
Linux Intel IA32, Linux AMD64/EM64T 32-bit
mode, Linux AMD64/EM64T 64-bit mode
…
Überblick:
http://java.sun.com/j2se/1.5.0/system-configurations.html
-1616-
Skizze: Interpreter-Sprachen und Übersetzung
…
Programmierer
Spezifikation,
Lösungsidee,
Algorithmus
(x==1)
goto 10;
…
Programmiersprache
Ausführung
CPU
-1717-
If
via Interpreter
Skizze: Compiler-Sprachen und Übersetzung
…
100110101
011011011
…
…
Programmierer
Spezifikation,
Lösungsidee,
Algorithmus
If
(x==1)
goto 10;
…
Compiler
Ausführbares
Programmiersprache
Programm
in
Binärcode
Direkte
CPU
-1818-
Ausführung
Skizze: Java Übersetzungsprozess, und Bytecode
Compiler:
Programmierer
Spezifikation,
Lösungsidee,
Algorithmus
Quelltext
javac.exe
?6? ?7
? ?8 ?9 ?:
? ?;
?<
?=
Programm in
?> ??
in
Java
Ausführung:
Interpretation
Bytecode
java.exe
Laufzeitumgebung,
Virtuelle Maschine
JIT-Compiler
-1919-
CPU
Plattformabhängigkeit
(C, C++, …)
Compiler
(SPARC)
Compiler
//Quelltext
(Pentium)
Compiler
(AMD64)
(Kompilierte)
Binärdatei
SPARCPlattform
(Kompilierte)
Binärdatei
PentiumPlattform
(Kompilierte)
Binärdatei
AMD64-
Plattform
-2020-
Plattformunabhängigkeit (Java)
JVM
(SPARCPlattform)
Java
//Quelltext
Compiler
(javac.exe)
Java Bytecode
Datei
Plattformunbhängig
JVM
(PentiumPlattform)
JVM
(AMD64Plattform)
-2121-
Implementierungsprozess: Abstrakte/Generische Perspektive
Aufgabe Modellierung Implementierung Einsatz
Modellierung
Konzeptioneller, abstrakter, algorithmisierter Entwurf der
Problemlösung
Implementierung
Quelltext (Code, Quellcode) in einer ausgewählten
Programmiersprache wie Java
Einsatz
Evaluation des Programms
-2222-
Je besser die Modellierung, desto effizienter die
Programmierung
Grundlegende
Programmiertechniken, WS 2007/2008
Code-Struktur (in Java)
Quelltext-Struktur in Java
Quelltext-Datei
Import-Anweisungen,
Paketdefinitiaonen
Klassendefinition
Variablen mit
Sichtbarkeitsmodifizierer
Methode 1
Anweisung
Anweisung
Anweisung
Anweisung
Methode 2
Anweisung
Anweisung
Anweisung
Anweisung
Anweisung
Anweisung
-2424-
Weitere Klassen möglich – später mehr dazu
Programm bzw. Klassen-Struktur
-2525-
Ein Programm besteht aus mindestens einer Klasse
Eine der Klassen enthält die main()-Methode
Eine Klasse besteht (mindestens) aus
dem Schlüsselwort class, gefolgt von einem Bezeichner und {
einer Auflistung von Attributen, die Auflistung darf leer sein
einer Auflistung von Methoden, die ebenfalls leer sein darf
der schließenden geschweiften Klammer }
Eine Methode besteht (mindestens) aus
einem Schlüsselwort für den Rückgabewert (für jetzt: void)
einem Bezeichner,gefolgt von einer Parameterliste in Klammern und {
Null bis beliebig vielen Anweisungen
der schließenden geschweiften Klammer }
Veranschaulichung einiger Grundbegriffe
Sichtbarkeitsmodifikator
Schlüsselwort
Klassenbezeichner
Methodenbezeichner
Parameterliste
public class HelloWorld {
Methodenkopf
(Formaler)
Parameter
public static void main ( String[] args ) {
Kommentar
Methodenrumpf
// Jetzt kommt eine Anweisung
System.out.println( "Hello World!" );
}
Argument
(hier Literal)
Methode
(-naufruf)
}
static-Modifikator
Anweisung
-2626-
Rückgabewert(-Typ)
Elemente in dieser
Farbe: Schlüsselwörter
Schlüsselwörter, Symbole
Schlüsselwörter
Symbole
-2727-
Durch Java reservierte Wörter, die nicht als Bezeichner
verwendet werden dürfen
class ist bspw. kein gültiger Bezeichner für den
Klassennamen oder anderes
Besondere Bedeutung, u.a. die syntaktische
Organisation und Strukturierung des Quellcodes
Klammern: { }, ( ), [ ]
; Semikola/Semikolons am Ende jeder Anweisung
, Kommata zum Trennen von Listenelementen
Auflistung d. Schlüsselwörter
-2828-
Grundlegende
Programmiertechniken, WS 2007/2008
Variablen, Datentypen
Variablen: Einleitung und Definitionen (1)
Variablen
Deklaration
-3030-
Speichern veränderliche Werte
Der Wertebereich von Variablen wird durch den
Datentyp festgelegt
Festlegung wird Deklaration einer Variablen genannt
Der (Daten-)Typ der Variablen muss vor der
Verwendung festgelegt werden, d.h. welche Werte sie
annehmen kann
Variablen: Deklarationseigenschaften
Deklaration innerhalb einer Methode:
-3131-
Variable existiert sie nur innerhalb und während der
Ausführung der Methode
Eine weitere Methode in der Klasse hat (ohne Weiteres)
keinen Zugriff!
Eine Variable darf innerhalb einer
(main-)Methode nur einmal deklariert werden!
Innerhalb einer Methode haben Variablen keine
Sichtbarkeitsmodifikatoren! (Mehr dazu später).
Variablen: Datentypen
-3232-
Alle primitiven Datentypen und
Referendatenztypen möglich
Zuweisung eines nicht kompatiblen Werts
(»passt nicht zum deklarierten Typ«), führt zu
Fehlermeldungen (u. ggfs. zum Absturz des
Programms)!
Welche primtiven Datentypen gibt es in Java?
Variablen: Einfache/Primitive Datentypen
Ganzzahlen
Schlüsselwort
Bit
Wertebereich
Klasse
byte
8
-128 bis 127
Byte
short
16
-32768 bis 32767
Short
int
32
-2147483648 bis 2147483647
Int
long
64
-9223372036854775808 bis 9223372036854775807 Long
Gleitkommazahlen (Wertebeich: ±m*2e (IEEE-754 Spez.))
Schlüsselwort
Bit
m
e
Klasse
float
32
0 bis 224
-149 bis 104
Float
double
64
0 bis 253
-1075 bis 970
Double
Character, Boolean
Schlüsselwort
Bit
Wertebereich
Klasse
char
16
\u0000 bis \uffff
Character
boolean
1
true oder false
Boolean
-3333-
Variablen: (Syntax der) Deklaration
Deklarationssyntax
<Datentyp> <Variablenname>;
oder
<Datentyp> <Variablenname> = <Initialwert> ;
int a;
Anwendung
Fehler
-3434-
int a=8;
int a; a=8; a=2; a=251;
int a=8; a=1; a=2; a=251;
int a=8; a=1; int a=2;
int a=8; a=1; String a="0";
Referenzdatentyp: String
Zeichenketten werden in Objekten der Klasse
String gespeichert
Explizite Instanzierung nicht notwendig
Zuweisung von Literalen direkt möglich
String city = "44225 Dortmund";
String country = "NRW, Germany";
Konkatenation: Verknüpfung bzw. Verkettung
von Zeichenketten
Via + Operator
String nachname = "Uwenknecht";
String vorname = "Ochse";
String name = vorname + " " + vorname;
-3535-
Primitive vs. Referenzdatentypen (mehr dazu später)
Primitive Datentypen sind nicht komplex!
Besitzen keine Attribute und Methoden
Komplexe Datentypen (z.B. String) können
beides besitzen!
Aufruf nur nach Erzeugung eines Objekts möglich
Ausnahmen: Statische Klassen-Elemente
Aufruf von Methoden oder Attribut via Punktnotation
System.out.println( "Hallo" );
String a = "Hi";
System.out.println( a.length() ); // 2
-3636-
Deklarationsbeispiele innerhalb der main-Methode: Fehlerfälle
public static void main (String[] var) {
String text ="Jetzt lerne ich Java.";
System.out.println(text);
String text ="Jetzt lerne ich etwas anderes.";
System.out.println(text);
}
public static void main (String[] var) {
System.out.println(String text="Jetzt mache ich etwas falsch...");
text ="Jetzt lerne ich etwas anderes.";
System.out.println(text="Och nö – doch nicht, anders überlegt.");
}
public static void main (String[] var) {
text ="Jetzt lerne ich etwas anderes.";
System.out.println(text);
}
public static void main (String[] var) {
System.out.println(text); text ="Jetzt lerne ich Java.";
}
-3737-
Variablen: Zusammenfassung
-3838-
Eine Variable ist ein benanntes Aufbewahrungsfach für einen Wert
Eine Variable wird durch ihren Bezeichner (Namen) identifiziert
Einer Variablen kann man einen Wert zuweisen (im Fach
"hinterlegen")
Der Wert einer Variablen kann man auslesen und modifizieren
Eine Variable hat einen bestimmten Typ
Nur Werte mit kompatiblem Typ können an die Variable
zugewiesen werden
Eine Variable muss vor ihrer Benutzung deklariert (erklärt)
werden
Deklaration an beliebiger Stelle innerhalb einer Klasse
Doppelte Deklaration im selben Codeblock nicht zulässig
(Für) Nächste Woche
Lesen Sie aus Sprechen Sie Java? [Mössenböck:2005]
die mindestens die Seiten 1-26.
Hauptthemen der nächsten Woche
Tutorien (3 x Woche)
-3939-
Operationen, Operatoren
Kontrollstrukturen
...
Termine werden bis zum 28.10. auf unserer Seite bekannt
gemacht
Herunterladen