Einführung Java

Werbung
Einführung Java
AnPr
Name
1
Klasse
Datum
Programm, Programmiersprache
„Computer sind dumm, aber zuverlässig“ – so könnte man im Groben die Eigenschaften eines Rechners
beschreiben. Ein Computer ist im Wesentlichen ein Automat, der Befehle ohne „nachzudenken“ zuverlässig
abarbeitet. Jeder Programmierer muss sich hierüber absolut im Klaren sein. Ein Programm, welches abstürzt
ist nicht ein Problem des Computers, sondern ein Problem des Programmierers. Auch wenn man gerne über
den Computer schimpft…
Die aneinandergereihten Befehle bezeichnet man als Programme, welche eine Realisierung eines entsprechenden Algorithmus darstellen. Algorithmen sind Abarbeitungsregeln, Programme die reale Umsetzung
davon.
Unter Programmieren versteht man im Wesentlichen den Prozess, wie man eine Aufgabenstellung (oder
besser Problemstellung) unter Einsatz einer (oder auch mehrerer) Programmiersprachen zu lösen. Hierzu
gehört neben der eigentlichen Arbeit am Rechner auch die vorausgehende Konzeption. Es ist sogar in bestimmten Konstellationen denkbar, die Testvorbereitung und Durchführung ebenfalls hier einzureihen.
Da Prozessoren nur eine reduzierte Anzahl von sehr einfachen Befehlen beherrschen1, sind Programme, die
1:1 vom Prozessor abgearbeitet werden können, nur sehr schwer für einen Menschen erstellbar bzw. nachvollziehbar. Man spricht hier von Maschinencode. Um uns dennoch zu ermöglichen effizient Programme zu
erstellen, unterscheidet man grob zwischen maschinennahen Programmiersprachen und problemnahen Programmiersprachen (oder auch benutzernahe, bzw. höhere Programmiersprachen).
Um nun ein Programm einer höheren Programmiersprache in Maschinencode umzuwandeln, benötigt man
einen Compiler2.
1.1 Kompilierung in Binär Code
Im Gegensatz zu problemorientierten Sprachen orientieren sich maschinennahe Sprachen an den Möglichkeiten der verwendeten Prozessoren. Da Prozessoren nur über einen primitiven Sprachvorrat verfügen, erlauben
maschinennahe Sprachen keine problemorientierte Formulierung von Programmen.
Q u e ll-P ro g ra m m in S p ra c h e A
C o m p ile r
fü r S p rach e A
u n d P ro zesso r X
C o m p ile r
fü r S p rach e A
u n d P ro zesso r Y
C o m p ile r
fü r S p rach e A
u n d P ro zesso r Z
O b je k t-P ro g ra m m
(B in ä r C o d e )
fü r P ro z e s s o rty p X
O b je k t-P ro g ra m m
(B in ä r C o d e )
fü r P ro z e s s o rty p Y
O b je k t-P ro g ra m m
(B in ä r C o d e )
fü r P ro z e s s o rty p Z
Abbildung 1: Übersetzung von Programmen, geschrieben mit traditionellen Programmiersprachen
3
1
Unterschiedliche Prozessortypen haben auch einen unterschiedlichen Sprachvorrat (engl.: Instruction Set)
Zu beachten ist, das Scripts nicht kompiliert, sondern ausschließlich interpretiert werden.
3
Eigenheiten des Betriebssystems werden in dieser Grafik nicht betrachtet
2
ANPR_01_EinfuehrungJAVA_v02.docx
Seite 1
Einführung Java
AnPr
Die Grafik zeigt die traditionelle Vorgehensweise wie bspw. C oder C++ bei der mittels Compiler Binär
Code (also maschinenlesbarer Code, der bspw. in *.dll oder *.exe Dateien abgelegt wird) generiert wird.
Dies gilt vor allem für Microcontroller, bei denen im Regelfall kein Betriebssystem vonnöten ist. Für PCs
gilt, dass die Compiler nicht auf den Prozessor, sondern auf das Betriebssystem zugeschnitten sind. Wir werden noch eine weitere Strategie kennen lernen. Zur Bewertung der beiden Strategien können wir nun einige
Vor- und Nachteile benennen:
Vorteile:
 Optimale Ausnutzung der jeweiligen Prozessoreigenschaften, dadurch hohe
Abarbeitungsgeschwindigkeit der übersetzten Programme.
Nachteile
 Das übersetzte Programm läuft nur auf dem jeweiligen Prozessortyp.
 Für jeden Prozessortyp muss das Programm mit einem anderen Compiler übersetzt werden.
 Oft gibt es für verschiedene Prozessoren nur Compiler unterschiedlicher Hersteller, die sich auch
teils unterschiedlich verhalten.
 Programmiersprachen sind oft nicht plattformunabhängig definiert, so dass pro Prozessortyp die
Programme voneinander abweichen.
1.2 Kompilierung in Byte Code
Neben der Kompilierung des Codes in Binärcode, der direkt vom Prozessor abgearbeitet werden kann, hat
sich noch eine weitere Strategie durchgesetzt, bei der das Kompilat nicht direkt auf dem Prozessor abgearbeitet wird, sondern in einer Laufzeitumgebung, der sog. „Virtual Machine“. Bekanntestes Beispiel hierfür
ist Java, oder auch C#.
Java Development and Runtime Environment
(JDRE)
Java Source
code
Class Loader
Java Class
Libraries
Java Interpreter
Java
Virtual
Machine
Java Compiler
(javac)
Runtime System
Java Byte
code (class)
Operating System
Hardware
Compiletime
Runtime
Abbildung 2: Übersetzung von Programmen, geschrieben in Java
Wie man sieht, wird auch hier kompiliert, jedoch in einen sog. Byte Code, welcher von der Laufzeitumgebung interpretiert und ausgeführt wird und entsprechend an das Betriebssystem und schließlich dem Prozessor weitergegeben wird.
Vorteile
 Java ist unabhängig von allen Plattformen exakt definiert.
 Übersetzte Java-Programme laufen ohne Neuübersetzung auf allen Plattformen (Prozessortypen), für
die es einen Java-Interpreter gibt.
Nachteile
 Die übersetzten Programme laufen langsamer, da sie interpretiert werden.
Seite 2
AnPr
Einführung Java
1.3 Elemente einer Programmiersprache
Allen modernen Programmiersprachen sind aus fünf Basiselementen aufgebaut. Diese Elemente unterscheiden die verschiedenen Sprachen:
1.
2.
3.
4.
5.
Die Zeichensetzung, Interpunktion (punctuation) sind die verwendeten Symbole der Sprache
Der Syntax (syntax) ist die Grammatik der Programmiersprache.
Das Vokabular (vocabulary) besteht aus den reservierten Schlüsselwörtern (keywords).
Die Operatoren (operators) verarbeiten Daten (+, -, *, /, and, or, …)
Variablen (identifiers) werden benötigt für die Speicherreservierung.
Programmiersprachen werden auch in sogenannten Generationen eingeteilt:
Generation
Beschreibung:
Nutzung:
1
Binäre Maschinensprache
Wird von Prozessor 1:1 verstanden.
2
Assemblersprachen
Zur extrem hardwarenahen Programmierung
(laufzeitoptimiert)
3
Problemorientierte,
Sprachen
imperative/prozedurale Effizienten Programmierung von Anwendungen.
4
4GL-Sprachen sind anwendungsorientiert, Viertgenerationssprachen dienen der schnellen
z.B. SQL, Maple
Schaffung von Lösungen für einen bestimmten
Anwendungsbereich.
5
Deklarative Programmiersprachen
2
Beschreibung des Problems, nicht des Lösungswegs.
Software
Definitionen:
Brockhaus Enzyklopädie: Sammelbezeichnung für Programme, die für den Betrieb von Rechensystemen zur
Verfügung stehen, einschließlich der zugehörigen Dokumentation.
Duden: Die nichtapparativen Funktionsbestandteile, die zum Betrieb einer Datenverarbeitungsanlage erforderlich sind.
Lexikon der Informatik und Datenverarbeitung: Unter Software subsumiert man alle immateriellen Teile
einer Datenverarbeitungsanlage.
Software hat folgende Charakteristika:






Software ist ein immaterielles Produkt
Software unterliegt keinem Verschleiß
Software wird nicht durch physikalische Gesetze begrenzt
Software ist im allgemeinen leichter und schneller änderbar als ein technisches Produkt
Für Software gibt es keine Ersatzteile
Software altert
Begriff:
Algorithmus
Anwendungssoftware
Assemblersprache
Erklärung:
Programmlösungsbeschreibung, die festlegt, wie ein Problem gelöst werden
kann.
Software, die Aufgaben des Anwenders mit Hilfe eines Computersystems
löst. Setzt in der Regel auf die Systemsoftware der verwendeten Hardware
auf.
Maschinennahe Programmiersprache, in der im Wesentlichen die Maschinenbefehle in sog. Mnemonics – also in merkbare Kürzel übersetzt sind. Ein
Seite 3
Einführung Java
AnPr
Begriff:
Erklärung:
Assembler wiederum übersetzt die Programme von Assemblersprache in die
eigentlichen Maschinenprogramme um.
Compiler
Ein kompliziertes Programm, das Quell-Programme, geschrieben in einer
problemorientierten Programmiersprache, in Objekt-Programme (Sprachvorrat des Prozessors) umwandelt.
Interpreter
Analysiert Anweisung für Anweisung eines Programms und führt jede analysierte Anweisung sofort aus, bevor er die nächste analysiert.
Problemorientierte
Programmiersprache welche darauf hin designend wurde, problemnahe
Programmiersprache
Formulierungen der Algorithmen zu ermöglichen. Sie gehören zu den
„Hochsprachen“ und müssen dementsprechend via Compiler in die Maschinensprache des Prozessors, bzw. in für das Betriebssystem ausführbaren
Code konvertiert werden.
Programmierumgebung Besser bekannt als „IDE“ (Integrated Development Environment), in der die
(IDE)
für das Entwickeln notwendigen Komponenten in eine Umgebung integriert
wurden. Hierbei finden sich in der Regel „intelligente“ Texteditoren, Compiler, Fehlerdiagnosesysteme, Aufgabenverwaltungen, Bibliotheksverwaltungen, Batch-Hilfsprogramme und vieles mehr. Beispiele hierfür sind Eclipse oder Microsoft Visual Studio.
Systemsoftware
Software, die für eine spezielle Hardware oder Hardwarefamilie entwickelt
wurde. Sie dient hauptsächlich dazu, die entsprechenden Funktionen der
Komponenten zu ergänzen oder mitunter gar erst zu ermöglichen. Dies gilt
sowohl für den Betrieb, als auch für die Wartung der Komponenten.
3
„Hello, World“ in Java
Keine Informatikveranstaltung über Programmierung kann ohne das Erstellen der Anwendung „Hello,
world“4 beginnen, auch diese nicht. Ziel ist es also, dass der Rechner den Satz Hello, world ausgibt.
Java wurde von Sun entwickelt und ist eine objektorientierte5, plattformunabhängige Programmiersprache.
Zur Entwicklungszeit von Java Applikationen wird das sog. JDK (Java Development Kit) und eine Entwicklungsumgebung (oder zumindest ein Texteditor) benötigt. Zur Laufzeit ist auf den Client-Rechnern das sog.
JRE (Java Runtime Environment), die Java Virtual Machine notwendig.
3.1 Applikation erstellen
Für das erste Beispiel verzichten wir auf eine IDE (Integrated Development Environment – also eine integrierte, meist grafische Entwicklungsumgebung) und erstellen alles „per Hand“ mit einem einfachen Editor,
wie Wordpad, oder Notepad, Linux User würden als einfachsten Editor vi nutzen. Hier der Quellcode:
class Hello
{
public static void main (String args[])
{
System.out.println("Hello, World");
}
}
Dieser Quellcode muss nun als *.java Datei abgelegt werden, deren Name des Namens der Hauptklasse, also
„Hello“ entspricht: Hello.java.
4
5
Erstmals durch Brian Kerningham in einem internen Programmierbuch eingeführt, erlangte es schließlich
durch das Buch Kerningham/Ritchie: The C Programming Language Bekanntheit.
Im Gegensatz zur prozeduralen Programmiersprache orientiert sich eine OO Programmiersprache nicht an
Funktionen, sondern an Objekten, denen Eigenschaften und Methoden zugeordnet werden.
Seite 4
AnPr
Einführung Java
3.2 Applikation kompilieren
Der Java Compiler javac.exe wird mit der Installation des JDK unter dem Installationspfad in dem Unterordner bin abgelegt. Bei Aufruf des Compilerprogramms wird als Parameter die Quellcodedatei (hier:
Hello.java) übergeben. Das Komilierergebnis ist ein neues File mit der Endung *.class, also Hello.class, welche innerhalb der Virtual Machine ausführbar ist.
Abbildung 3: Manueller
Kompiliervorgang in Java
Anmerkung: Damit das Betriebssystem Windows den Compiler in beliebigen Ordnern erkennt, sollte der
Speicherort von javac.exe in die PATH Variable eingetragen werden. Alternativ dazu kann auch der
gesamte Pfad bei der Ausführung von javac angegeben werden. Bei Nutzung einer IDE ist dies üblicherweise nicht der Fall, da der Pfad in der IDE Konfiguration eingetragen ist.
3.3 Applikation ausführen
Damit die Applikation ausgeführt werden kann, muss sie dem Javainterpreter java.exe übergeben werden, wobei die auszuführende Hauptklasse, welche auch als *.class File vorhanden sein muss, als Parameter
übergeben wird.
Abbildung 4: Manuelles Ausführen
einer Java Anwendung
J2SE:
J2EE:
J2ME:
Java RTS:
Begriffe:
Java Platform Standard Edition (zur Anwendungsprogrammentwicklung)
Java Platform Enterprise Edition (für Applicationserver)
Java Platform Mobile Edition (für mobile Geräte wie z.B. Mobiltelefone)
Java Real-Time System (Für Echtzeitanwendungen ist nicht unbedingt die Ausführungsgeschwindigkeit entscheidend, sondern vielmehr die Tatsache, dass eine Aufgabe in einer definierten Zeit erledigt wird. Des Weiteren muss ein Echtzeitsystem in einer vorher definierten Zeit auf
externe Ereignisse reagieren.
Seite 5
Einführung Java
4
AnPr
Lizenz
Diese(s) Werk bzw. Inhalt von Maik Aicher (www.codeconcert.de) steht unter einer
Creative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.
Seite 6
Herunterladen