Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

ALP II: Objektorientierte Programmierung Sommersemester 2006

Ähnliche Präsentationen


Präsentation zum Thema: "ALP II: Objektorientierte Programmierung Sommersemester 2006"—  Präsentation transkript:

1 ALP II: Objektorientierte Programmierung Sommersemester 2006
Elfriede Fehr, Mohammad Al Saad

2 Teil I: Grundlagen der Berechenbarkeit Die Programmiersprache WHILE und die universelle Registermaschine Befehlssatz der Registermaschine: zero i succ i pred i je i, j, m goto m WHILE-Anweisungen: x := 0; x := x + 1; x := x – 1; while x  y do <Anweisungen> end

3 Übersetzung von WHILE-Programmen in Registermaschinenprogramme: Erster Schritt: Erzeugen der Symboltabelle st Beispiel für eine Symboltabelle Variablen im WHILE-Programm Korrespondierende Adressen im Datenspeicher a x 1 y 2 h 3

4 Zweiter Schritt: Anwendung des Übersetzungsschemas (Ü)
x := 0; zero st(x) x := x + 1; succ st(x) x := x – 1; pred st(x) while x  y do m : je st(x), st(y), k <Anweisungen> Ü <Anweisungen> end goto m k : … Achtung: m ist die Adresse des ersten Befehls, der zur While-Schleife gehört und k ist die Adresse des ersten Befehls, der nicht mehr zur While-Schleife gehört. Achtung: m ist die Adresse des ersten Befehls, der zur While-Schleife gehört und k ist die Adresse des ersten Befehls, der nicht mehr zur While-Schleife gehört.

5 Beispiel: Fakultätsfunktion
Funktionales Programm (Haskell): f 0 = 1 f x = x * f (x - 1) Imperatives Programm (in der Sprache WHILE): y := 1; h:= 0; while x ≠ h do y := x * y; x := x - 1; end

6 Übersetzung des WHILE-Programms in ein Registermaschinenprogramm
WHILE-Anweisung Nr. im Befehls-register Maschinenbefehl y := 1; one 0 h := 0; 1 zero 2 while x ≠ h do 2 je 1, 2, 6 y := h * y; 3 mult 0 1 h := h - 1; 4 pred 1 end 5 goto 2 6 stop

7 Übersetzung von WHILE nach Java
y := 1; y = 1; while x ≠ 0 do while (x != 0) { y := x * y; y = x * y; x := x - 1; x = x - 1; end } Übersetzung von Java in Bytecode analog zur Übersetzung von WHLIE in Registermaschinenprogramme. Illustration unter

8 Ein vollständiges Java-Programm
public class Fak { //Aufruf: Fak x , Ausgabe: Fakultät von x = Ergebnis //Hauptprogramm public static void main (String[] args) { // Deklaration aller benötigter Variablen int x, y, h; // Eingabe von x x = Integer.parseInt (args[0]); // Berechne y := Fakultät von x y = 1; h = x; while (h != 0) { y = h * y; h = h - 1; } // Ausgabe des kommentierten Ergebnisses System.out.println("Fakultät von " + x + " = " + y);

9 Teil II: Datentypen in Java Syntax
Type: PrimitiveType ReferenceType PrimitiveType: NumericType boolean NumericType: IntegralType FloatingPointType IntegralType: one of byte short int long char FloatingPointType: one of float double James Gosling et al.: The Java Language Specification, sun microsystems 2005 Datentyp: PrimitiverTyp VerweisTyp PrimitiverTyp: NumerischerTyp boolean NumerischerTyp: GanzzahligerTyp GleitkommaTyp GanzzahligerTyp: einer von byte short int long char GleitkommaTyp: einer von float double

10 Primitive Datentypen Type Wertebereich Speicherung Bsp.Konstante byte
-128 … 127 1 Byte (8 Bits) -78 short -215 … 215-1 2 Bytes 32767 int -231 … 231-1 4 Bytes long -263 … 263-1 8 Bytes s.o. float 6 signifikante Ziffern ( ) F double 15 signifikante Ziffern ( ) 1.32E-20 char Unicode-Zeichen ‘A‘ boolean false, true 1 Byte true

11 Arithmetische Operationen erklärt auf allen numerischen Typen
Operator Bedeutung Beispiel Ergebnis einstelliges + einstelliges - Identität Negation + 4 - (4 + 5) 4 - 9 * / % Multiplikation Division Rest 8 * 3 8 / 3 8 % 5 24 2 3 + - Addition Subtraktion 5 + 6 11

12 Vergleichsoperationen erklärt auf allen numerischen Typen, die beiden letzten auch auf boolean
Operator Bedeutung Beispiel Ergebnis < <= kleiner kleiner gleich 25 < 59 45 <= 44 true false > >= größer größer gleich 3 > 3 3 >= 3 == != gleich ungleich 3 == 5 3 != 5

13 Typanpassung Definition der Relation „enger“ (  ):
Implizit von engeren zu weiteren Typen Explizit in beide Richtungen Definition der Relation „enger“ (  ): byte  short  int  long  float  double char  int Bemerkung: Die Relation  ist transitiv. Explizite Typanpassung des Wertes eines Ausdrucks A an einen Typ t durch Anwendung des einstelligen Operators (t) auf den Ausdruck A. Beispiele: byte b = 9; b = b + 1; ist illegal! byte b = 9; b = (byte) (b+1); ist legal. int x = 6, y = 10; double q = x / y; der Wert von q ist 0.0 double q = (double)x / y; der Wert von q ist 0.6

14 Syntaxregeln für Bedingte Anweisungen und Schleifen
CondStmt: if (Exp) Stmt [ else Stmt ] WhileStmt: while (Exp) Stmt ForStmt: for ( [Init]; [Exp]; [Update]) Stmt


Herunterladen ppt "ALP II: Objektorientierte Programmierung Sommersemester 2006"

Ähnliche Präsentationen


Google-Anzeigen