• Keine Ergebnisse gefunden

Java I – Vorlesung 1 Einführung in Java

N/A
N/A
Protected

Academic year: 2021

Aktie "Java I – Vorlesung 1 Einführung in Java"

Copied!
41
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Java I – Vorlesung 1 Einführung in Java

Alexander Koller

koller@coli.uni-sb.de

26.4.2004

Problem – Algorithmus – Programm Programmiersprachen

Warum Java?

Unser erstes Java-Programm

Organisatorisches

(2)

2 1. Einführung in Java

Java I, Sommer 2004

Was heißt „Programmieren“?

Programmierer will ein Problem auf systematische Weise lösen.

Ein Algorithmus ist eine abstrakte, detaillierte Berechnungsvorschrift, die das Problem löst.

Ein Programm ist eine Darstellung des Algorithmus in einer konkreten

Programmiersprache.

Ein Programm kann mit verschiedenen

Eingaben ausgeführt werden.

(3)

3 1. Einführung in Java

Java I, Sommer 2004

Einige Probleme

Berechnung von arithmetischen Funktionen

Was ist der kürzeste Weg in einem Graphen?

Computerlinguistische Probleme: Dialog mit einem Menschen führen; grammatische

Analyse

Wie komme ich vom Bett in die Uni?

– Teilproblem: Anziehen

(4)

4 1. Einführung in Java

Java I, Sommer 2004

Algorithmen

„Kochrezepte“, die Schritt für Schritt

beschreiben, wie das Problem gelöst wird.

Funktionieren für alle Eingaben, die das Problem vorsieht.

Müssen in endlich vielen Schritten fertig werden.

Granularität der Einzelschritte hängt davon ab, was ein Mensch als offensichtliche

Schritte akzeptiert.

(5)

5 1. Einführung in Java

Java I, Sommer 2004

Ein Algorithmus fürs Anziehen

Gehe zum Kleiderschrank.

Nimm eine frische Unterhose.

Stecke die Beine durch die Löcher.

Nimm ein frisches T-Shirt.

Stecke Kopf und Arme durch die passenden Löcher.

...

Binde den rechten Schuh.

(6)

6 1. Einführung in Java

Java I, Sommer 2004

Ein Algorithmus für „Größte Zahl“

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

Merke dir die erste Zahl in L als aktuelle größte Zahl.

Gehe der Reihe nach durch die 2-te bis n-te Zahl in L. Wenn die aktuelle Zahl größer als die bisherige größte ist, merke dir die aktuelle als die neue größte Zahl.

Der gemerkte Wert nach Ansehen aller

Zahlen in L ist die echte größte Zahl in L.

(7)

7 1. Einführung in Java

Java I, Sommer 2004

Programme

Sind konkrete Implementierungen eines Algorithmus in einer Programmiersprache (z.B. Java).

Verwenden Konstruktionen der

Programmiersprache, um intuitive Begriffe

präzise zu machen (z.B. Schleifen, Variablen).

Einzelne Schritte hängen von

Programmiersprache und verfügbaren

Funktionen ab.

(8)

8 1. Einführung in Java

Java I, Sommer 2004

Ein Algorithmus für „Größte Zahl“

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

Merke dir die erste Zahl in L als aktuelle größte Zahl.

Gehe der Reihe nach durch die 2-te bis n-te Zahl in L. Wenn die aktuelle Zahl größer als die bisherige größte ist, merke dir die aktuelle als die neue größte Zahl.

Der gemerkte Wert nach Ansehen aller

Zahlen in L ist die echte größte Zahl in L.

(9)

9 1. Einführung in Java

Java I, Sommer 2004

„Größte Zahl“-Algorithmus als Java-Programm

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

int max = L[0];

Gehe der Reihe nach durch die 2-te bis n-te Zahl in L. Wenn die aktuelle Zahl größer als die bisherige größte ist, merke dir die aktuelle als die neue größte Zahl.

Der gemerkte Wert nach Ansehen aller

Zahlen in L ist die echte größte Zahl in L.

(10)

10 1. Einführung in Java

Java I, Sommer 2004

„Größte Zahl“-Algorithmus als Java-Programm

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

int max = L[0];

Gehe der Reihe nach durch die 2-te bis n-te Zahl in L. Wenn die aktuelle Zahl größer als die bisherige größte ist, merke dir die aktuelle als die neue größte Zahl.

Der gemerkte Wert nach Ansehen aller Zahlen in L ist die echte größte Zahl in L.

Variable Zuweisung

(11)

11 1. Einführung in Java

Java I, Sommer 2004

„Größte Zahl“-Algorithmus als Java-Programm

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

int max = L[0];

for( int i = 1; i < L.length; i++ )

Wenn die aktuelle Zahl größer als die bisherige größte ist, merke dir die aktuelle als die neue größte Zahl.

Der gemerkte Wert nach Ansehen aller

Zahlen in L ist die echte größte Zahl in L.

(12)

12 1. Einführung in Java

Java I, Sommer 2004

„Größte Zahl“-Algorithmus als Java-Programm

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

int max = L[0];

for( int i = 1; i < L.length; i++ )

Wenn die aktuelle Zahl größer als die bisherige größte ist, merke dir die aktuelle als die neue größte Zahl.

Der gemerkte Wert nach Ansehen aller Zahlen in L ist die echte größte Zahl in L.

Schleife

(13)

13 1. Einführung in Java

Java I, Sommer 2004

„Größte Zahl“-Algorithmus als Java-Programm

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

int max = L[0];

for( int i = 1; i < L.length; i++ ) if( L[i] > max )

merke dir die aktuelle als die neue größte Zahl.

Der gemerkte Wert nach Ansehen aller

Zahlen in L ist die echte größte Zahl in L.

(14)

14 1. Einführung in Java

Java I, Sommer 2004

„Größte Zahl“-Algorithmus als Java-Programm

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

int max = L[0];

for( int i = 1; i < L.length; i++ ) if( L[i] > max )

merke dir die aktuelle als die neue größte Zahl.

Der gemerkte Wert nach Ansehen aller Zahlen in L ist die echte größte Zahl in L.

Bedingung

(15)

15 1. Einführung in Java

Java I, Sommer 2004

„Größte Zahl“-Algorithmus als Java-Programm

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

int max = L[0];

for( int i = 1; i < L.length; i++ ) if( L[i] > max )

max = L[i];

Der gemerkte Wert nach Ansehen aller

Zahlen in L ist die echte größte Zahl in L.

(16)

16 1. Einführung in Java

Java I, Sommer 2004

„Größte Zahl“-Algorithmus als Java-Programm

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

int max = L[0];

for( int i = 1; i < L.length; i++ ) if( L[i] > max )

max = L[i];

Der gemerkte Wert nach Ansehen aller Zahlen in L ist die echte größte Zahl in L.

Zuweisung

(17)

17 1. Einführung in Java

Java I, Sommer 2004

„Größte Zahl“-Algorithmus als Java-Programm

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

int groessteZahl(int[] L) { int max = L[0];

for( int i = 1; i < L.length; i++ ) if( L[i] > max )

max = L[i];

return max;

}

(18)

18 1. Einführung in Java

Java I, Sommer 2004

„Größte Zahl“-Algorithmus als Java-Programm

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

int groessteZahl(int[] L) { int max = L[0];

for( int i = 1; i < L.length; i++ ) if( L[i] > max )

max = L[i];

return max;

}

Rückgabewert der Methode

Methode Argumente

(19)

19 1. Einführung in Java

Java I, Sommer 2004

„Größte Zahl“-Algorithmus als Java-Programm

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

class GroessteZahl {

int groessteZahl(int[] L) { int max = L[0];

for( int i = 1; i < L.length; i++ ) if( L[i] > max )

max = L[i];

return max;

}

}

(20)

20 1. Einführung in Java

Java I, Sommer 2004

„Größte Zahl“-Algorithmus als Java-Programm

Gegeben eine Liste L von n natürlichen Zahlen; gesucht ist die größte Zahl in L.

class GroessteZahl {

int groessteZahl(int[] L) { int max = L[0];

for( int i = 1; i < L.length; i++ ) if( L[i] > max )

max = L[i];

return max;

} }

Klasse

Vorsicht: Wir haben den Spezialfall missachtet, bei

dem die Liste leer ist!

(21)

21 1. Einführung in Java

Java I, Sommer 2004

Effiziente Algorithmen

Manche Algorithmen lösen ein Problem effizienter (mit weniger Zeit- oder

Speicherverbrauch) als andere.

Beispiel: Finde die zwei größten Zahlen in L.

Algorithmus 1: Verwende zwei Variablen, um die aktuell beiden größten Zahlen zu speichern.

Algorithmus 2: Berechne zunächst die größte Zahl; dann lösche sie aus L und berechne

nochmal die größte Zahl.

(22)

22 1. Einführung in Java

Java I, Sommer 2004

Programmiersprachen

Es gibt eine sehr breite Auswahl an verschiedenen Programmiersprachen.

CPU versteht sehr eingeschränkten

Befehlssatz, der für Menschen unbequem ist.

Programmiersprachen verbergen Komplexität und stellen abstraktere Konstrukte zur

Verfügung.

Verfolgen verschiedene Ziele; unterstützen verschiedene Programmierstile; haben

verschiedene Vor- und Nachteile.

(23)

23 1. Einführung in Java

Java I, Sommer 2004

Imperativ vs. funktional vs. deklarativ

Imperativ: Programme sind Sequenzen von Anweisungen. (Algol, Fortran, C, C++, Java)

Funktional: Programme sind mathematische Funktionen, die aus einfacheren Funktionen zusammengesetzt sind (SML, Lisp, Haskell)

Deklarativ: Programme sind logische Formeln, die das Problem spezifizieren;

Programmiersystem kümmert sich um

eigentliche Berechnung (Prolog)

(24)

24 1. Einführung in Java

Java I, Sommer 2004

Prozedural vs. objektorientiert

Prozedural: Die wesentliche

Gliederungseinheit des Programms ist die Prozedur, d.h. Gruppe von Anweisungen (C, SML)

Objektorientiert: Die wesentliche

Gliederungseinheit ist die Klasse, d.h.

Repräsentation eines Objekts mit Sammlung

von Methoden (Java, C++, Smalltalk)

(25)

25 1. Einführung in Java

Java I, Sommer 2004

Interpretiert vs. kompiliert

Programmiersprachen sind dafür da, dass

Menschen Algorithmen bequem aufschreiben können.

Programm-Quelltexte können nicht direkt vom Computer ausgeführt werden.

Zu einer Programmiersprache gehört deshalb Software, die Programme für Computer

ausführbar macht.

(26)

26 1. Einführung in Java

Java I, Sommer 2004

Interpretation

Interpreter sind Programme, die den Quelltext Anweisung für Anweisung ausführen. Beliebt z.B. für Skriptsprachen wie Perl.

Betriebssystem / CPU Interpreter

Programm-Quelltext

Eingaben

(27)

27 1. Einführung in Java

Java I, Sommer 2004

Kompilation

Compiler sind Programme, die den Quelltext in ein direkt ausführbares Maschinenprogramm übersetzen. Beliebt z.B. für C, C++ usw.

Betriebssystem / CPU Compiler

Programm-Quelltext

Kompiliertes Programm

(28)

28 1. Einführung in Java

Java I, Sommer 2004

Kompilation

Compiler sind Programme, die den Quelltext in ein direkt ausführbares Maschinenprogramm übersetzen. Beliebt z.B. für C, C++ usw.

Betriebssystem / CPU Compiler

Programm-Quelltext

Kompiliertes Programm Eingaben

Compile-Zeit Laufzeit

(29)

29 1. Einführung in Java

Java I, Sommer 2004

Interpretation vs. Kompilation

Interpretation ist viel langsamer, da Interpreter selbst Rechenzeit verbraucht. Compiler

wendet einmal Zeit bei der Kompilation auf, danach sehr effizienter Programmablauf.

Ein kompiliertes Programm läuft nur auf einer einzigen Plattform (Betriebssystem + CPU).

Quelltext muss daher auf neuen Plattformen

neu kompiliert werden (Portierung). Das ist oft

problematisch.

(30)

30 1. Einführung in Java

Java I, Sommer 2004

Virtuelle Maschinen

In Java wird der Quelltext zunächst in Bytecode

kompiliert; dieser wird von einer virtuellen Maschine interpretiert oder weiter ("just in time") kompiliert.

Betriebssystem / CPU Compiler

Programm-Quelltext

Java-Bytecode

Eingaben

Java Virtual Machine (JVM)

(31)

31 1. Einführung in Java

Java I, Sommer 2004

Die Java-Plattform

http://java.sun.com/

(32)

32 1. Einführung in Java

Java I, Sommer 2004

Geschichte von Java

Seit 1995 verfügbar.

Ursprünglich von Sun entwickelt als Plattform für Home Entertainment.

Zunächst v.a. als Internet-Plattform verkauft.

Heute für alle möglichen Anwendungen sehr weit verbreitete Sprache.

Syntax basiert auf C/C++, aber viele

objektorientierte Konzepte etwas anders als in

C++ umgesetzt.

(33)

33 1. Einführung in Java

Java I, Sommer 2004

Warum Java?

Portabilität: Ein (in Bytecode) kompiliertes Programm kann ohne Änderung auf

verschiedenen Betriebssystemen ausgeführt werden. „Java-Plattform“.

Objektorientierung: Unterstützt

Modularisierung und Wiederverwendbarkeit von Programmcode.

Statische Typisierung: Compiler kann viele

Programmierfehler abfangen.

(34)

34 1. Einführung in Java

Java I, Sommer 2004

Warum Java?

Mächtige Standardbibliothek: Standard- Installation von Java enthält viele nützliche Klassen.

Effizienz: Moderne Java-Systeme kommen in die Nähe von C++-Implementierungen.

Sicherheit: Kann verhindern, dass Programme Schaden anrichten.

Weit verbreitet: Daher Zugriff auf Programme

vieler anderer Programmierer.

(35)

35 1. Einführung in Java

Java I, Sommer 2004

Unser erstes Java-Programm

class HelloWorld {

public static void main(String[] args) { System.out.println("Hallo Welt!");

} }

Definiere die Klasse HelloWorld in der Datei

HelloWorld.java:

(36)

36 1. Einführung in Java

Java I, Sommer 2004

Unser erstes Java-Programm

class HelloWorld {

public static void main(String[] args) { System.out.println("Hallo Welt!");

} }

Definiere die Klasse HelloWorld in der Datei

HelloWorld.java: Klasse Hauptprogramm

Kommandozeilen -Argumente

Anweisungen

(37)

37 1. Einführung in Java

Java I, Sommer 2004

Wie führt man ein Java-Programm aus?

[koller@cicero]$ javac HelloWorld.java

Kompiliert Quelltext in HelloWorld.java in Bytecode und schreibt das Ergebnis in die Datei HelloWorld.class.

[koller@cicero]$ java HelloWorld

Lädt den Bytecode für die Klasse HelloWorld

aus der Datei HelloWorld.class und führt ihn

auf der virtuellen Maschine aus.

(38)

38 1. Einführung in Java

Java I, Sommer 2004

Literatur

Einschlägige Literatur:

– Java-Bücher von Sun

– O'Reilly („... in a nutshell“) – und viele andere

Die meisten Sun-Bücher sind online zugänglich:

http://java.sun.com/docs/books/

Java-Tutorial:

http://java.sun.com/docs/books/tutorial/

(39)

39 1. Einführung in Java

Java I, Sommer 2004

Zusammenfassung

Algorithmen lösen Probleme; Programme implementieren Algorithmen in einer

konkreten Programmiersprache.

Es gibt viele Programmiersprachen. Java zeichnet sich v.a. durch Portabilität,

Objektorientierung und weite Verbreitung aus.

Zweistufiger Prozess: Erst Kompilation in

Bytecode, dann Ausführen von Bytecode auf

virtueller Maschine.

(40)

40 1. Einführung in Java

Java I, Sommer 2004

Organisatorisches

Wöchentliche Übungen (wichtig!) in Teams von max. drei Studenten.

Jeder Student muss Programmcode selbst kommentieren und in der Lage sein, seine Übung zu erklären.

Voraussetzung zur Klausurzulassung sind 50% der Punkte in den Übungen.

Klausur am Ende des Semesters

(41)

41 1. Einführung in Java

Java I, Sommer 2004

Termin Übungsgruppen

Problem: Finde eine hinreichende Anzahl von Übungsterminen, so dass möglichst wenige Studenten zu keinem der Termine Zeit haben.

Wir verwenden jetzt folgenden Algorithmus:

Finde zunächst Termin, bei dem die meisten Zeit haben; finde dann Termin, bei dem von den übrigen die meisten Zeit haben.

Löst dieser Algorithmus das Problem korrekt?

Referenzen

ÄHNLICHE DOKUMENTE

Innerhalb des Spiels wird das Gitter durch ein mehrdimensionales int-Array abge- bildet. Jede Zeile ist durch ein separates Array abgebildet, in dem jedes Element für eine

7b) Entwerfen Sie eine neue Klasse MailWithAttachment, die von Email erbt und über eine zusätzliche, private Instanzvariable vom Typ Attachment verfügt. Ergän- zen Sie eine

Hinweise: Mit der Methode indexOf(char c) der String-Klasse lässt sich überprüfen, ob ein Zeichen c in einem String vorkommt oder nicht. Die Methoden wird auf der

8b) Erstellen Sie eine Klasse AdTrack, die von AudioTrack erbt und zusätzlich über private Instanzvariablen für den Namen des jeweiligen Kunden sowie die vereinbar- ten Werbekosten

Vervollständigen Sie den gegebenen Code der Klasse OffsetRule um eine einfache Version der Abseitsregel beim Fussball zu implementieren. Ein Spieler wird dabei durch die Klasse

Für die Suche im Bestand können alle Medien mit einer beliebigen Anzahl an Schlagwörtern (Tags) ausge- zeichnet werden. Lagern Sie Ihren Code wenn nötig in weitere Methoden

7d) Implementieren Sie eine Klasse FancyPlant die von Plant erbt und über zwei zu- sätzliche Eigenschaften für den aktuellen und den optimalen Standort verfügt. Die Standorte werden

Du hast, vielleicht das erste Mal, ein Programm geschrieben. Dazu hast du einen vorgegebenen Text, den Quelltext deines Programms, mit Hilfe des JavaEditors geschrieben