Erste Schritte

Werbung
1 Erste Schritte
1- 1
Erste Schritte
Inhalt
Literatur
Einführung in die Computer-Architektur
Programme und Daten
Dateien und Verzeichnisse
Die Kommandozeile (Shell)
Das erste Java-Programm
Übungsaufgaben
Literatur
•
Krüger G.: Java 1.1 lernen
•
Flanagan D.: Java in a Nutshell (O'Reilly)
•
Flanagan D.: Java Examples in a Nutshell (O'Reilly)
•
Lemay L. : Java 1.1 in 21 Tagen
•
Davis S.: Java Now! (Java Jetzt!), Microsoft Press
•
Bishop J: Java Gently (Addison-Wesley)
Software
•
Java Development Kit, http://www.javasoft.com
•
Symantec Cafe, http://www.symantec.com
•
Visual Age for Java, http://www.software.ibm.com/ad/vajava/
•
Sun, http://www.sun.com
•
Java World, http://www.javaworld.com
Internet
1 Erste Schritte
1- 2
Einführung in die Computer-Architektur
Stichwort: von Neumann Architektur
Diese Einführung ist nur sehr stichwortartig gehalten. Es geht in diesem Text nur darum, eine
allgemeine Vorstellung davon zu bekommen, wie Programme und Daten im Innern des
Rechners zusammenwirken.
Die Zentraleinheit besteht aus
•
Speicher für Programme und Daten.
•
Prozessor (arbeitet Befehle der Programme sequentiell ab, liest und schreibt
Daten)
Angeschlossen sind Peripherie-Geräte
•
Massenspeicher, wie Festplatten und CD-ROM
•
Grafik-Ausgabe (bestehend aus Grafikspeicher, Prozessor und Bildschirm)
•
Eingabegeräte (Tastatur, Maus)
1 Erste Schritte
1- 3
•
externen Geräten, wie Drucker und Modem
•
Netzkarten zur Verbindung mit anderen Rechnern
Die Peripheriegeräte sind durch Schnittstellen (elektrische oder andere Verbindungen) oder
Bus-Systeme mit der Zentraleinheit verbunden, die gewöhnlich in einer einzigen Platine, dem
sogenannten Mainboard, realisiert wird.
Programme und Daten
Programme und Daten werden beide im Speicher gehalten. Die Programme werden von der
Festplatte in den Speicher geladen. Die Daten werden von den Programmen erzeugt oder auch
von der Festplatte (oder Diskette, CD-ROM und ähnliches) geladen.
Man muß sorgfältig zwischen den Daten im Speicher und den Daten auf den
Massenspeichern, wie Festplatte und CD-ROM, unterscheiden. Der Prozessor hat nur direkten
Zugriff auf die Daten im Speicher (RAM). Die Daten von der Festplatte müssen erst über die
Schnittstellen eingelesen werden. In diesem Abschnitt ist von den Daten im Speicher (RAM,
random access memory) die Rede.
Das Betriebssytem ist ein Programm, das ständig zur Verfügung steht, obwohl nicht alle Teile
im Speicher vorhanden sein müssen, sondern bei Bedarf nachgeladen werden können. Es ist
meist in Schichten wachsender Komplexität organisiert. Es
•
stellt Routinen zur Kommunikation mit den Peripheriegeräten zur Verfügung,
zum Teil schon im nichtflüchtigen Speicher (ROM) als BIOS (basic
input/output),
•
stellt kompliziertere Schichten zur Kommunikation und Datenverwaltung zur
Verfügung, z.B. zur Kommunikation mit der Festplatte oder mit einer
Netzkarte,
•
stellt in einer höheren Schicht Grafikroutinen zur Verwaltung des Bildschirms
(graphical user interface, GUI) zur Verfügung.
Grundsätzlich kann ein Programm folgende Datenbereiche benutzen.
•
Stack: Ein Stapelspeicher, der von unten nach oben wächst und von oben nach
unten schrumpft (last in, first out, lifo); wird meist für kurzlebige Daten
benutzt.
•
Heap: Ein Teil des Speichers der längerfristig vom System zur Verfügung
gestellt wird.
Ein Programm besteht aus einer Folge von Anweisungen, die von der CPU (central
processing unit) abgearbeitet werden. Normalerweise geschieht dies sequentiell. Es gibt
jedoch Sprungbefehle, die unter gewissen Bedingungen ausgeführt werden, und die
Verarbeitung von Schleifen erlauben.
Der Stack wird insbesondere benutzt, um Daten für Unterprogramme zu halten
1 Erste Schritte
1- 4
Unterprogramme sind Teile eines Programms, die von verschiedenen Stellen angesprungen
werden und automatisch zurückkehren. Dabei werden
•
die Rücksprungadresse,
•
eventuelle Parameter an das Unterprogramm,
•
lokale Daten, die nach Beendigung des Unterprogramms nicht mehr benötigt
werden,
auf dem Stack abgelegt.
Es können mehrere Programme gleichzeitig aktiv sein. Der Prozessor wechselt so schnell
zwischen den Programmen (Prozessen) hin und her, daß es erscheint, als liefen alle
gleichzeitig (Multitasking). Java kann innerhalb eines Programmes mehrere Threads
erzeugen, die dann vom Prozessor quasi gleichzeitig ausgeführt werden. Der Wechsel von
Prozeß zu Prozeß ist aufwendiger als der Wechsel von Thread zu Thread im selben
Programm.
Programmiersprachen
Die eigentliche Sprache, die der Prozessor versteht und in der die Programme im Speicher
vorliegen, nennt man Maschinensprache. Man kann einen Rechner direkt in dieser Sprache
programmieren, indem man einen Assembler verwendet. Dies ist jedoch in höchstem Maße
unübersichtlich und unproduktiv. Die Maschinensprache ist außerdem vom Prozessor
abhänging (nicht portabel).
Es gibt nun zwei Arten, die Maschinensprache zu umgehen.
•
Compiler übersetzen eine verständlichere Sprache in die MaschinenAnweisungen, die dann das ausführbare Programm bilden.
1 Erste Schritte
•
1- 5
Interpreter lesen die Anweisungen einer Sprache und führen zu jeder
Anweisung eine Reihe von Maschinenbefehlen aus.
Es gibt auch Zwitter, wie etwa Java, die zunächst in einen Bytecode übersetzen und diesen
dann interpretieren. Dies hat gegenüber den obigen Extremen Vorteile.
•
Im Unterschied zum Compiler ist das übersetzte Programm vom verwendeten
Compiler unabhängig.
•
Die Interpretation von Byte-Code ist weitaus schneller als die direkte
Interpretation des Programmtextes (allerdings natürlich langsamer als das
Ausführen von Maschinensprache).
Grundlegende Aufgabe einer Programmiersprache ist die Reduktion der Komplexität . So wird
im einfachsten Fall eine Folge von Maschinenanweisungen
Load P in Register 1
Load I in Register 2
Multiply I by 8
Add Register 2 to Register 1
Load X in Register F
Store X at the Address in Register 1
in einer einzigen Anweisung
P[I]=X;
zusammengefaßt. Auf der nächsten Stufe der Reduktion steht die Zusammenfassung von
Befehlen zu Unterprogrammen, die von beliebigen Punkten aus zur Verfügung stehen. So
wird die Befehlsfolge
S=0;
for (i=0; i<P.length; i++) S=S+P[I];
(die die Summe der Zahlen in einem Vektor berechnet) zu einem einzigen Befehl
S=sum(P);
zusammengefaßt.
Eine weitere Reduktion der Komplexität bringt die Objektorientierte Programmierung
(OOP), die Daten und zugehörige Unterprogramme in Objekten zusammenfaßt. Java ist eine
objektorientierte Sprache. Dazu später erheblich mehr.
Man könnte die Komplexität noch weiter reduzieren, indem man Objekte zu ganzen
Programmteilen zusammenfaßt, die vordefinierte Kommunikationsmittel verwenden. Dies
wird bei der visuellen Programmierung (z.B. mit Java-Beans) realisert.
Dateien und Verzeichnisse
Die Daten auf der Festplatte sind in Dateien (files) organisiert. Diese Dateien werden vom
Betriebssystem als ganzes verwaltet. Die Dateien sind wiederum in Verzeichnissen
(directories) zusammengefaßt. Verzeichnisse können wiederum in anderen Verzeichnissen
enthalten sein. Es entsteht so eine hierarchische Ordung von Verzeichnissen. An der Spitze
steht das Wurzelverzeichnis eines Laufwerks (drive).
1 Erste Schritte
1- 6
Unter Unix existiert ein einziger großer Baum von Verzeichnissen. Laufwerke auf entfernten
Rechnern erscheinen einfach als Teil des Baumes unter einem Verzeichnisnamen. Sie werden
dorthin gemounted.
Unter DOS und Windows wird jedes Laufwerk mit einem Laufwerksbuchstaben A,B,C,...
gekennzeichnet.
Die einzelnen Dateien haben Namen, die je nach Betriebssytem anderen Konventionen
unterliegen. So sieht ein vollständiger Name unter DOS und Windows 3.1 folgendermaßen aus
C:\MYFILES\FILE.TXT
Dies wäre die Datei mit Namen FILE.TXT im Verzeichnis MYFILES auf der Festplatte C.
Den Teil nach dem letzten Punkt (txt) nennt man Dateierweiterung (extension).
Unter Windows 95 kommt hinzu, daß Dateinamen und Verzeichnisnamen länger als 8
Zeichen sein können und Leerzeichen erlaubt sind. Außerdem wird Groß- und
Kleinschreibung unterschieden
C:\Meine Dateien\Erste Datei.txt
Unter UNIX heißt eine typische Datei
/home/mga010/My_Files/first_file.txt
Leerzeichen sind möglich, aber nicht üblich. Der Seperator ist hier /, und der
Laufwerksbuchstabe entfällt.
Daneben gibt es auch relative Namen. Diese gehen davon aus, daß ein aktuelles Verzeichnis
eingestellt ist. Falls etwa /home/mga010 das aktuelle Verzeichnis ist, so bezeichnet
My_Files/first_file.txt
dieselbe Datei wie im letzten Beispiel. Daneben gibt es noch das übergeordnete Verzeichnis.
../test.txt
bezeichnet die Datei test.txt im Mutterverzeichnis des aktuellen Verzeichnisses. Unter DOS
sieht das genauso aus. Das aktuelle Verzeichnis wird übrigens mit einem Punkt . bezeichnet.
Das Betriebssytem setzt für jedes Programm, das gestartet wird, ein aktuelles Verzeichnis.
Das Programm kann dieses Verzeichnis wechseln und so Dateien relativ ansprechen. Man
erinnere sich, daß der Zugriff auf Dateien innerhalb eines Programms stets über Routinen des
1 Erste Schritte
1- 7
Betriebssystems erfolgt.
Die Kommandozeile (Shell)
Das Programm, womit man unter DOS und UNIX als erstes in Berührung kommt, ist die
Kommandozeile (Shell). Unter Windows oder einer graphischen UNIX-Oberfläche läßt sich
eine solche Kommandozeile mit einem einzigen Mausklick aufrufen.
Allerdings wird die Kommandozeile mehr und mehr von graphischen Benutzeroberflächen
(GUI) abgelöst, mit denen man viel intuitiver arbeiten kann. Für unsere Zwecke ist die
Kenntnis der wichtigsten Kommandos jedoch unerläßlich.
Die Kommandozeile
•
nimmt Eingaben mit der Tastatur entgegen,
•
stellt sie am Bildschirm dar
•
und interpretiert diese Eingaben.
Sie kann auf diese Weise
•
andere Programme starten,
•
gewisse Operationen mit Dateien direkt ausführen,
•
Informationen über den Rechner ausgeben,
und anderes.
1 Erste Schritte
1- 8
Im folgenden werden einige wichtige Kommandos für UNIX erklärt (und das DOSÄquivalent). Es existieren hunderte von Büchern über dieses Thema, insbesondere für UNIX,
weil dort die Shell weit mehr Möglichkeiten eröffnet als die DOS-Kommandozeile.
Zunächst kann man mit
ls
Die Dateien im aktuellen Verzeichnis auflisten. Das entsprechende DOS-Kommando heißt
dir. Falls man nur bestimmte Dateien wünscht, so kann man einen Filter anhängen.
ls *.java
Dies listet die Namen aller Dateien, die auf .java enden. Um mehr Informationen zu
bekommen, vewendet man
ls -l *.java
Mit dem Minuszeichen werden in UNIX Optionen angegeben. Uner DOS werden Optionen
mit einem nachgestellten / angegeben, z.B. gibt
dir *.java /p
die Dateien seitenweise auf, wobei es nach jeder Seite stoppt und auf einen Tastendruck
wartet. Hilfe bekommt man unter UNIX mit
man ls
und unter DOS mit
help dir
Man kann mit der Kommandozeile Dateien direkt kopieren, umbenennen und löschen. Die
entsprechenden Kommandos lauten unter UNIX
cp datei.txt datei.bak
mv datei.txt other-name.txt
rm datei.txt
(copy, ren und del unter DOS). Dabei kann man z.B. auch ganze Gruppen von Dateien
verschieben.
cp *.txt ../backup
Dies kopiert alle Dateien mit der Endung .txt in das Verzeichis backup, das ein
Unterverzeichnis des übergeordneten Verzeichnis sein muß.
Zum Wechseln des aktuellen Verzeichnisses verwendet man
cd directory
Man kann Verzeichnisse mit
mkdir directory
(md unter DOS) erzeugen und mit
rmdir directory
löschen, wenn sie leer sind. Volle Verzeichnisse löscht man mit
rm -r directory
unter UNIX, und mit
deltree directory
1 Erste Schritte
1- 9
unter DOS (VORSICHT !!!).
Natürlich kann man von der Kommandozeile aus auch Programme aufrufen. Dazu gibt man
den Namen des Programms ein, gefolgt von den Parametern. Da nicht alle Programme, die
man aufrufen will, im aktuellen Verzeichnis sind, existiert ein Suchpfad. Der Pfad ist unter
DOS und UNIX anders organisiert, besteht jedoch immer aus einer Aufzählung von
Verzeichnissen, die durchsucht werden sollen. Man erfährt den Pfad unter DOS mit
path
und mit
echo $PATH
unter UNIX. Um ihn zu ändern, muß man unter DOS etwa
path %PATH%;c:\java\bin
eingeben. Dies erweitert den Pfad um ein Verzeichnis c:\java\bin. Unter UNIX sieht
dies so aus
PATH=$PATH:/software/jdk/bin
Dies soll vorerst für die Kommandozeile genügen.
Das erste Java-Programm
Mit Hilfe der Kommandozeile und eines Editors kann man das erste Java-Programm
erstellen. Wir verwenden folgende Version von "Hello World".
public class HelloWorld
{
public static void main (String args[])
{
System.out.println("Hello World");
}
}
Dieser Text muß nun in eine Datei HelloWorld.java gespeichert werden. Zum Erstellen
einer solchen Datei verwenden wir einen Editor, wie etwa Notepad. Am einfachsten startet
man den Editor mit der graphischen Benutzeroberfläche oder mit einer Kommandozeile, wie
etwa unter Windows mit
notepad HelloWorld.java
Dies startet das Programm notepad mit dem Parameter HelloWorld.java. Notepad
fragt hier nach, ob es eine neue Datei dieses Namens erstellen soll.
Dann muß man den Text eingeben, ohne irgendwelche Fehler einzubauen. Mit Hilfe des
Speicherkommandos des Editors wird der Text in das aktuelle Directory unter dem Namen
HelloWorld.java abgespeichert werden.
Danach wird das Java-Programm kompiliert. Dies kann zunächst nur in einer Kommandozeile
erfolgen.
javac HelloWorld.java
Dabei muß javac in einem Verzeichnis im Pfad sein. Falls nicht, muß man den vollen
Namen eingeben oder den Pfad verändern (siehe oben). Achten Sie darauf, daß die Datei vom
Editor tatsächlich unter dem Namen HelloWorld.java abgespeichert wurde.
1 Erste Schritte
1 - 10
Insbesondere notepad nennt die Datei gerne in HelloWorld.java.txt um.
Der Compiler erzeugt nun eine Datei namens HelloWorld.class, die den Byte-Code
enthält. Das Programm kann dann folgendermaßen ausgeführt werden.
java HelloWorld
Wieder muß das Programm java im Pfad enthalten sein. Das ganze sieht unter Windows 95
folgendermaßen aus.
D:\java\kurs>javac HelloWorld.java
D:\java\kurs>java HelloWorld
Hello World!
D:\java\kurs>
Falls Fehler im Programm sind, so werden diese nach dem Compiler-Aufruf ausgegeben. Das
Programm muß dann entsprechend korrigiert werden.
Übungsaufgaben
1. Legen Sie auf Ihrem Computer einen Ordner java an.
2. Machen Sie den Ordner java zum aktuellen Ordner.
3. Starten Sie dort einen Editor und geben Sie das Programm HelloWorld.java
ein.
4. Speichern Sie es ab und kompilieren Sie es.
5. Sehen Sie nach, wie groß die Datei HelloWorld.class ist.
6. Starten Sie den Interpreter und führen Sie das Programm aus.
7. Machen Sie bewußt einen Fehler in das Programm, und sehen Sie die
Fehlermeldung des Compilers an. In welcher Zeile trat der Fehler auf?
Herunterladen