37
Einf¨ uhrung in die Programmierung Blockkurs Java Michael Bader 19.–25. Februar 2003 Einf¨ uhrung in die Programmierung Blockkurs Java

Einfuhrung in die Programmierung¨ Blockkurs Java · • ist deklarativ: Prozeduren jederzeit neu definierbar, die letzte Definition gilt. Java: • ” Compiler“ ubersetzt¨

  • Upload
    dangtu

  • View
    212

  • Download
    0

Embed Size (px)

Citation preview

Einfuhrung in die Programmierung

Blockkurs Java

Michael Bader

19.–25. Februar 2003

Einfuhrung in die ProgrammierungBlockkurs Java

Java Blockkurs – Ubersicht

Montag: Erste Schritte in Java; Variablen, Operatoren, Anweisungen

Dienstag: Objektvariablen und Objektmethoden; Felder und Objekteanlegen

Mittwoch: Eigene Klassen definieren; Vererbung und Schnittstellen

Donnerstag: Java-Applications; Objektorientiertes Design

Freitag: Exceptions, Threads, evtl. weitere Themen (Swing, Java Beans,etc.)

Einfuhrung in die ProgrammierungBlockkurs Java

Montag – Inhaltsubersicht

• Was ist Java?

• Was ist Objekt-Orientierte Programmierung?

• Ein erstes Objekt: das ”Hello World!”-Applet

• Variablen in Java: Datentypen, Deklaration und Zuweisung

• Operatoren in Java

• Anweisungen in Java

Einfuhrung in die ProgrammierungBlockkurs Java

Was ist Java?

Definition: (aus ”The Java Language: A Whitepaper“/SUN)

Java: A simple, object-oriented, distributed, interpreted, robust, secure,architecture neutral, portable, high-performance, multi-threaded,and dynamic language.

⇒ einfach

⇒ objekt-orientiert

⇒ interpretiert (”Java Virtual Machine“)

⇒ robust, sicher

⇒ verteilt, multithread-fahig, dynamisch

⇒ architekturunabhangig, portabel

Einfuhrung in die ProgrammierungBlockkurs Java

Was ist ein Objekt?

Definition:

”An object is a software bundle of variables and related methods.“

Ein Objekt ist charakterisiert durch seine Identitat, seinen Zustand undsein Verhalten:

• die Identitat unterscheidet es von allen anderen Objekten;

• der Zustand ist durch seine Variablen gegeben;

• das Verhalten eines Objekts ist durch seine ”Methoden“ (Funktionen,Prozeduren) gegeben

Objekte konnen real existierende Komponenten wiedergeben, die Teilder Problemstellung sind.

Einfuhrung in die ProgrammierungBlockkurs Java

Was ist eine Klasse?

Definition:

”A class is a blueprint that defines the variables and the methodscommon to all objects of a certain kind.“

Objekte vs. Klassen:

• Klassen werden vom Programmierer definiert (”Konstruktionsplan“) –Objekte werden wahrend des Programmablaufs erzeugt

• Objekte sind Instanzen einer Klasse

• alle Objekte einer Klasse besitzen die gleichen Methoden, zeigendaher gleiches Verhalten

• alle Objekte einer Klasse haben die gleichen Variablen (”Member“),aber mit unterschiedlichem Inhalt (Zustand)

Einfuhrung in die ProgrammierungBlockkurs Java

Merkmale objekt-orientierter Programmierung

Abstraktion

Kapselung

Modularitat

Vererbung

Polymorphismus

Einfuhrung in die ProgrammierungBlockkurs Java

Was ist Abstraktion?

Abstraktion: Konzentration auf die wesentlichen Eigenschaften

• ignoriere Details

• Programmdesign mittels Objekten und Klassen (anstelle vonVariablen/Speicherzellen)

• ”Was tut ein Objekt?“ anstelle von ”wie wird es das tun?”

• top-down Ansatz

• lege erst Schnittstellen (Interaktion der Objekte) fest,implementiere spater

Abstraktion ist Teil objektorientierten Designs (Programmentwurf).

Einfuhrung in die ProgrammierungBlockkurs Java

Was ist Kapselung bzw. Information Hiding?

Kapselung:

• Objekte enthalten alle benotigten Variablen sowie die daraufarbeitenden Funktion (”Methoden“)

• Ziel: Wissen uber Implementierung einer Klasse fur andere Klassennicht notig

Information hiding:

• Implementierung einer Klasse wird vor anderen Klassen verborgen

• Zugriff auf private Variablen oder Methoden wird verboten

• Modifikation eines Objekts nur uber offentliche Methoden (undVariablen) moglich

• Ziel: Implementierung einer Klasse fur andere Klassen nicht sichtbar

Einfuhrung in die ProgrammierungBlockkurs Java

Was ist Vererbung?

Vererbung: eine Klasse kann Eigenschaften einer Oberklasseubernehmen.

Ziele:

• Wiederverwendung existierender (funktionierender, fehlerfreier)Klassen

• definiere generisches Verhalten in einer Oberklasse, das dann vonverschiedenen (verwandten) Klassen geerbt werden kann

Beispiel: Fahrzeug (= Oberklasse)

• mogliche Unterklassen: Auto, Motorrad, Pferdekutsche, . . .

• Unterklassen von Auto: Cabrio, Kombi, Limousine, . . .

Einfuhrung in die ProgrammierungBlockkurs Java

Ein erstes Objekt: ein Java Applet

Ein ”Java Applet“ ist typischerweise Teil einer Webseite

• der Programmierer entwirft eine Klasse

• der Webbrowser erzeugt (und ”startet“) ein Objekt dieser Klasse

Beispiel:

import java.awt.*;import java.applet.Applet;public class HelloApplet extends Applet {

public void paint(Graphics g) {g.drawString("Hello World!",50,50);

}}

Einfuhrung in die ProgrammierungBlockkurs Java

HelloApplet (1)

import java.awt.*;import java.applet.Applet;public class HelloApplet extends Applet {

public void paint(Graphics g) {g.drawString("Hello World!",50,50);

}}

import java.awt.*;import java.applet.Applet;

• importiere Klassen von bestimmten Java-Bibliotheken(awt = abstract windowing toolkit)

• analog zu with(...) in Maple

Einfuhrung in die ProgrammierungBlockkurs Java

HelloApplet (2)

import java.awt.*;import java.applet.Applet;public class HelloApplet extends Applet {

public void paint(Graphics g) {g.drawString("Hello World!",50,50);

}}

public class HelloApplet extends Applet

• definiere Klasse HelloApplet als Erweiterung eines Applets

• Applet ist java.applet.Applet

• ”Vererbung“: HelloApplet erbt Eigenschaften von der Klasse Applet

Einfuhrung in die ProgrammierungBlockkurs Java

HelloApplet (3)

import java.awt.*;import java.applet.Applet;public class HelloApplet extends Applet {

public void paint(Graphics g) {g.drawString("Hello World!",50,50);

}}

public void paint(Graphics g)

• definiere (zusatzliche) Methode paint

• Parameter g: Objekt vom Typ Graphics (in java.awt definiert,modelliert ein grafisches Ausgabegerat)

• paint wird aufgerufen, wenn das Applet neu gezeichnet wird.

Einfuhrung in die ProgrammierungBlockkurs Java

HelloApplet (4)

import java.awt.*;import java.applet.Applet;public class HelloApplet extends Applet {

public void paint(Graphics g) {g.drawString("Hello World!",50,50);

}}

g.drawString("Hello World!",50,50);

• rufe die Methode drawString fur das Objekt g (grafischesAusgabegerat) auf.

• zeichne den Text "Hello World!" bei Koordinate (50, 50)

Einfuhrung in die ProgrammierungBlockkurs Java

Programme ausfuhren: Maple vs. Java

Maples Programmiersprache:

• benotigt Maple alsLaufzeitumgebung

• ist interaktiv: Benutzer gibtAusdrucke ein, Mapleberechnet Ergebnis

• ist deklarativ: Prozedurenjederzeit neu definierbar, dieletzte Definition gilt.

Java:

• ”Compiler“ ubersetztQuelltext in Java Bytecode

• Java Virtual Machine fuhrtBytecode aus

• nicht interaktiv: Anderung desQuelltexts erfordert erneutesCompilieren.

• imperativ: Ein-/Ausgabeexplizit programmiert;Abarbeitung der Instruktionenvom Programm vorgegeben.

Einfuhrung in die ProgrammierungBlockkurs Java

Maple und Java – Ubersetzungsvorgang

Maple

• Prozedure inMaple-worksheet eingeben

• return

→ Maple pruft Syntax→ Maple erzeugt interne

Darstellung der Prozedur

• Benutzer ruft Prozedur auf:

→ Maple berechnet Ergebnis(und gibt es aus)

Java

• Programm in Texteditoreingeben

• Java-Compiler aufrufen

→ Compiler pruft Syntax→ Compiler erzeugt ”Java

Bytecode“

• Bytecode in ”Java VirtualMachine“ starten:

→ Programm wird ausgefuhrt

Einfuhrung in die ProgrammierungBlockkurs Java

BlueJ – Erste Schritte in Java

BlueJ:

• Programmierumgebung fur Programmieranfanger

• ubernimmt bzw. unterstutzt

• Eingeben und Editieren des Java-Quelltexts• Ubersetzen des Java-Quelltexts• Erzeugen und Austesten der programmierten Objekte• Ausfuhren der ubersetzen Programme und Applets

• Aufruf in der Rechnerhalle mit

bluej

• Information, Dokumentation, Download fur daheim unter

http://www.bluej.org/

Einfuhrung in die ProgrammierungBlockkurs Java

Maple vs. Java – Variablen

Maple:

Variablen enthalten Ausdrucke

• mathematische Ausdrucke

• verschiedene Arten vonAusdrucken

• wechselnde Arten vonAusdrucken

• logische Datenstrukturen:Listen, Mengen, Tabellen

Java:

Variablen sind einfacheDatentypen oder ”Objekte“

• enthalten bestimmtenVariablentyp (ganze Zahl,Graphics-Objekt, . . . )

• Variablentyp wird im Vorausfestgelegt

• Objekte bundeln einfacheDatentypen bzw. andereObjekte

⇒ Fundamental unterschiedliches Konzept bzgl. Variablen!

Einfuhrung in die ProgrammierungBlockkurs Java

Variablen in Java

• Variablen mussen stets deklariert werden (Typ festlegen) bevor sieverwendet werden

• es gibt verschiedene Variablentypen

• eine Variable eines bestimmten Typs kann nur Information dieses Typsenthalten.

• einfache Variablen enthalten Werte (Zahlen, Zeichen, true/false),keine Terme oder Ausdrucke

• Variablen fur komplexe, logische Datenstrukturen (Listen, Mengen,etc.) sind vom Programmierer zu implementieren (Klassen).

• Felder konnen aus einfachen Variablen und aus Objekten gebildetwerden

Einfuhrung in die ProgrammierungBlockkurs Java

Einfache Datentypen in Java

Typ Inhalt Platz

boolean true oder false 1 bit

char Unicode Zeichen 16 bit

byte Integer ∈ {−128, . . . , 127} 8 bitshort Integer ∈ {−32768, . . . , 32767} 16 bitint Integer ∈ {−2147483648, . . . , 2147483647} 32 bitlong 64-bit Integer 64 bit

float IEEE 754 Gleitkommazahl 32 bitdouble IEEE 754 Gleitkommazahl 64 bit

Mit final lassen sich Konstanten definieren, z.B. final int, finaldouble, etc.

Einfuhrung in die ProgrammierungBlockkurs Java

Variablen Deklarieren und Initialisieren

Beispiele:

int i;int j=0;float e=2.7182f, pi=3.14159f;final double PI=3.14159265;char c=’A’;

• falls nicht explizit initialisiert wird, erfolgt implizite Initialisierung(i.d.R. zu 0)

• Variablen durfen (beinahe) uberall deklariert werden

• beachte Typkorrektheit!

Einfuhrung in die ProgrammierungBlockkurs Java

Variablen – Zuweisungen und Operatoren

Zuweisungen und Operatoren (”rechnen“) funktioniert in Java fastgenauso wie in Maple:

int i; float e;double pi = 3.14159265;i = 3;e = (2.7182f * i) - 1.5f;pi *= 2.0;

• beachte das ’=’ (’:=’ gibt es in Java nicht!)

• das Semicolon schließt die Zuweisung ab

• alle Operationen mussen typ-korrekt sein (float6=double)(beachte implizite Typumwandlungen beim Rechnen!)

Einfuhrung in die ProgrammierungBlockkurs Java

Arithmetische Operatoren

+ Addition- Subtraktion* Multiplikation/ Division;

fur int (etc.) ist die Division ganzzahlig% modulo-Rechnung (”Rest“ bei der Division)

Vorrangrelationen:

• ”Punkt vor Strich“: *,/,% vor +,-

• Plus/Minus als Vorzeichen vor *,/,%

• Klammern heben Vorrang auf

Einfuhrung in die ProgrammierungBlockkurs Java

Typumwandlungen bei ”Zahlentypen“

Implizite Umwandlungen:

• Regel: ”niedrigerer“ Typ wird in ”hoheren“ Typ umgewandelt

• Hierarchie: byte→ short→ int→ long→ float→ double

• Beispiel: 3.0 / 5

Explizite Umwandlungen: (<type>) <expression>

• auch entgegen der Hierarchie

• Genauigkeitsverlust moglich

• ggf. Fehler wegen anderem Wertebereich

• Beispiel: (float) 3 / 5

Einfuhrung in die ProgrammierungBlockkurs Java

Anweisungen in Java

Zusammenfassung:

• Zuweisungen und Methodenaufrufe sind Anweisungen

• Blockanweisungen: { ... }

• bedingte Anweisungen: if ... else, switch ... case

• Schleifen: while, do ... while, for;innerhalb Schleifen: break, continue

• Anweisungen zur Ausnahmenbehandlung: try ... catch ...finally (→ Freitag)

Einfuhrung in die ProgrammierungBlockkurs Java

Zuweisungen sind Anweisungen

Beispiele:

i = j = 0 ;e += 3.71 ;i--; --i; i++; ++i;

Zuweisungsoperatoren:= Zuweisung+=, -=, *=, /=, %= i+=3 Abkurzung fur i=i+3, etc.

++ inkrementieren-- dekrementieren

i++, i-- i nach Auswertung erhohen/erniedrigen++i, --i i vor Auswertung erhohen/erniedrigen

Einfuhrung in die ProgrammierungBlockkurs Java

Anweisungen zusammenfassen – die Blockanweisung

Syntax: { <statement> <statement> <statement> ...}

Beispiel:

{ int a=2,b=3;{ g.drawString("a = "+a, 50,50);g.drawString("b = "+b, 50,100);

}g.drawString("a + b = "+(a+b), 50,150);

}

• Beachte: der Strichpunkt trennt nicht Anweisungen, er ist Bestandteilbestimmter Anweisungen!

• Wozu sind Blockanweisungen sinnvoll? ⇒ if, for, while, . . .

Einfuhrung in die ProgrammierungBlockkurs Java

Bedingte Anweisungen

Syntax:

• if ( <expression> ) <statement>

• if ( <expression> ) <statement> else <statement>

Beispiele:

if ( a != 0 ) b /= a;

if ( x > -1 && x < 1 ) {if ( x < 0 ) erg = 1+x;else erg = 1-x;

} elseerg = 0;

Einfuhrung in die ProgrammierungBlockkurs Java

Boolsche Operatoren – Zusammenfassung

==, != gleich/ungleich<, <= kleiner (oder gleich)>, >= großer (oder gleich)

&& logisches UND|| logisches ODER

! logisches NICHT (einsteliger Operator)

Vorrangrelationen:

• && vor ||

• != und == vor && und ||

• ! vor !=, ==, &&, und ||

• Klammern heben Vorrangrelationen auf ⇒ klug einsetzen!

Einfuhrung in die ProgrammierungBlockkurs Java

Bedingte Anweisungen – Beispiele

Bedingungen in bedingten Ausdrucken mussen vom Typ boolean sein!

• entweder Ausdruck mit boolschen Operatoren:

if ( a != 0 ) b /= a;if ( x >= 0 ) abs = x; else abs = -x;if ( x < -1 || x > 1 ) erg = 0;

• oder Variable vom Typ boolean:

boolean c = ( a != 0);if ( c ) b /= a;

Einfuhrung in die ProgrammierungBlockkurs Java

While Anweisung

Syntax: while (<expression>) <statement>

Beispiele:

while (a >= b) a -= b;

i = 1;while (a >= 1) {

a /= 2;i++;

}

• fuhre <statement> solange aus bis <expression> falsch ist

• <statement> wird u.U. nie ausgefuhrt

Einfuhrung in die ProgrammierungBlockkurs Java

Do-While Anweisung

Syntax: do <statement> while (<expression>);

Beispiel:

a = 1.0;do {

a *= 2.0;i--;

} while(i>0);

• fuhre <statement> solange aus bis <expression> falsch ist

• <statement> wird mindestens einmal ausgefuhrt!

Einfuhrung in die ProgrammierungBlockkurs Java

For Anweisung

Syntax:for(<expression>; <expression>; <expression>) <statement>

Beispiele:

for(i=1;i<=10;i++) a *= 2.0;

a = 17;for(int i=1;a>=1;i++) a /= 2.0;

• 1. Ausdruck: Initialisierung

• 2. Ausdruck: Fortsetzungsbedingung

• 3. Ausdruck: ”Schleifenzahler“

Einfuhrung in die ProgrammierungBlockkurs Java

For vs. While

for(<expression1>; <expression2>; <expression3>)<statement>

ist aquivalent zu

<expression1>;while(<expression2>) {

<statement><expression3>;

}

Beachte:

• ein Ausdruck wird zu einer Anweisung, wenn ein Semicolon folgt

• umgekehrt ist eine Zuweisung zugleich ein Ausdruck(Zuweisungsoperator!)

Einfuhrung in die ProgrammierungBlockkurs Java

For-Schleifen – Beispiele

Binomialkoeffizienten:

koeff = 1;for(i=n;i>=n-k+1;i--) koeff *= i;for(i=1;i<=k;i++) koeff /= i;

oder, zusammengefasst:

zaehler = nenner = 1;for(i=1;i<=k;i++) {

zaehler *= (n+1-i);nenner *= i;

}koeff = zaehler/nenner;

Einfuhrung in die ProgrammierungBlockkurs Java

Verschachtelte Anweisungen

Beispiel: Primzahlen

for(i=3;i<1000;i+=2)if ( i%3 !=0 && i%5 !=0 && i%7 != 0)

System.out.println(i+" ist vielleicht Primzahl");for(i=2;i<1000;i++) {

int dividers=0;for (j=2;j<i;j++)

if (i%j == 0) {System.out.println(i+" ist Vielfaches von "+j);dividers++; break;

};if (dividers==0)

System.out.println(i+" ist Primzahl");};

Einfuhrung in die ProgrammierungBlockkurs Java