Informatik - Aufbau und Anwendungspotentiale von Java

Alle Kategorien » Informatik Referate » Aufbau und Anwendungspotentiale von Java

Aufbau und Anwendungspotentiale von Java

Kurzzusammenfassung

Aufbau und Anwendungspotentiale von Java Tutorial zum systemtechnischen Workshop “Internet und WWW” bei Prof. Dr. J. Scherff im Fachbereich Wirtschaftsinformatik an der Fachhochschule Furtwangen vorgelegt von: Mladen Kadic Andre

Fachbereich: Informatik
Sprache: Deutsch
Wörter: 7500
Note: n.v.

Aufbau und Anwendungspotentiale von Java

Aufbau und Anwendungspotentiale von Java


Tutorial zum systemtechnischen Workshop
“Internet und WWW” bei Prof. Dr. J.
Scherff im Fachbereich Wirtschaftsinformatik an der Fachhochschule Furtwangen
vorgelegt von:
Mladen Kadic
Andreas Mandel
Heiko Munz

SS 1996

Dieses Dokument wurde mehr oder weniger (leider eher weniger) automatisch
aus dem Referatsdokument generiert. Daher sind einige Tabellen und
Hervorhebungen etwas mißraten. Leider lies sich das, mit vertretbarem
Aufwand nicht mehr anpassen. Wir bitten daher etwas um Nachsicht. Innerhalb des
Dokuments gibt es keinerlei links nach außen. Beispielapplets und Links
gibt es an anderer Stelle. Zu diesem Tutorat
wurde ein paar kleine Übungen entworfen.

Aufgrund unserer wunderschoenen Seiten haben wir die Auszeichnung "Heisse
Java Seite!" von "Kaffee&Kuchen" erhalten!
Originaldokument enthält an dieser Stelle
eine Grafik!Original document contains a graphic at this
position!

Inhalt
5 Aufbau und Anwendungspotentiale von Java 5.1 Aufbau und Konzepte 5.1.1 Kurzeinführung in JAVA 5.1.2 Gegenüberstellung Java – herkömmliche Programmiersprachen 5.1.3 Was fällt weg? (im Vergleich zu C/C++)
5.1.4 Speicherverwaltung 5.1.5 Threads
5.1.6 Benennungskonventionen 5.1.7 Datentypen und Strukturen 5.1.8 Die Syntax, eine Übersicht 5.1.9 Compiler 5.1.10 Virtuelle Maschine 5.1.11 Linker? 5.2 Java-Entwicklung und Java-Tools
5.2.1 Was ist Java? 5.2.2 Wie entstand Java? 5.2.3 Die ersten Java-Projekte 5.2.4 Das Java-Development-Kit (JDK) und dessen Nutzung
5.2.5 Die Java-Packages
5.2.6 Entwicklungsumgebungen für Java 5.3 Applets: Animation und Interaktion im WWW
5.3.1 Java und das WWW
5.3.2 Java-Applets in WWW-Seiten 5.3.3 Operationen beim Abruf einer WWW-Seite mit Applets 5.3.4 Gartner-Group Modell 5.3.5 Animation und Interaktion mit Java-Applets
5.3.6 Sicherheitsaspekte
Literaturverzeichnis

5 Aufbau und Anwendungspotentiale von
Java
5.1 Aufbau und Konzepte
In diesem Kapitel soll ein Überblick über die Konzepte von Java
gegeben werden. In der Knappheit, die diesem Dokument auferlegt wurde,
können natürlich nicht alle Aspekte mit der nötigen Tiefe
erörtert werden. Es wurde jedoch versucht alle Besonderheiten der
Sprachkonzepte Javas zu würdigen.

5.1.1 Kurzeinführung in JAVA
Was ist JAVA?
JAVA ist eine Programmiersprache.
Beim Design von Java wurde versucht die Goodies der bekannten
Programmiersprachen zu übernehmen und deren Nachteile die sich im Laufe
deren Existenz gezeigt haben auszubügeln. Java ist rein objektorientiert
und hat keine strukturellen Überbleibsel, wie das z.B. in C++ der Fall ist.
Java sollte alles enthalten, was das Programmieren angenehm macht und dabei mit
einer klar überschaubaren und redundanzfreien Syntax auskommen.
Nach SUN (http://java.sun.com/java.sun.com/allabout.html):

Java is a simple, robust, object-oriented, platform-independent
multi-threaded, dynamic general-purpose programming environment. It`s best for
creating applets and applications for the Internet, intranets and any other
complex, distributed network.
Java entstand aus der deprimierenden Erfahrung Suns, daß die
vorhandenen “neuen” Programmiersprachen mit neuen
Programmierparadigmen keinesfalls eine revolutionäre Erleichterung in der
Softwareentwicklung mit sich brachten. Java soll nun endlich die Vorzüge
neuer Entwicklungsmethoden auf die Ebene der Programmiersprache bringen und dem
Programmierer das “Leben” erleichtern.
Was kann JAVA?
Java kann nicht mehr und nicht weniger als andere Programmiersprachen auch.
Durch die Konzeption eignet sich Java jedoch für eine Fülle von
Anwendungen die Plattformunabhängigkeit macht Java z.B. zur idealen
Programmiersprache für verteilte Anwendungen, insbesondere im WWW. Dabei
bleibt der Anspruch auf Portabilität nicht im leeren Raum (man erinnert
sich noch vage an die Aussage das C eine portable Programmiersprache ist) , der
praktische Einsatz verschiedener Java Applikationen und insbesondere der Applets
zeigt, daß Java durch seine Konzepte wirklich auf den unterschiedlichsten
Plattformen lauffähig ist.
Verschiedene große Betriebsystem Hersteller wollen Java als
Bestandteil in ihre Betriebsysteme integrieren. Dazu gehören z.B.
Micro$oft, IBM und Apple.
Was kann JAVA nicht?
Kaffee kochen.

5.1.2 Gegenüberstellung Java –
herkömmliche Programmiersprachen
Um JAVA gegenüber den bekannten Programmiersprachen abgrenzen zu
können werden wir zunächst Unterschiede und Gemeinsamkeiten heraus
arbeiten und dann auf die Unterschiede genauer eingehen.








Cobol


C


C++


Smalltalk


Java

Objektorientiert


Datentypen


Zeiger


Unions/Strukturen


Einfach


Standard Library


Portable


Garbage Collection


Threading


Fehlerbehandlung


Precompiler


Interpretiert


Linker


Dynamisch


Verifizierung


Robust


Sicher

Tabelle : Java und andere Programmiersprachen (left to the reader)

5.1.3 Was fällt weg? (im Vergleich zu
C/C++)
Keine Strukturen, Aufzählungstypen, Unions
Die Aufzählungstypen (z.B. enum), Strukturen und Unions
können in Java, wie in jeder objektorientierten Programmiersprache, durch
geeignete Klassen dargestellt werden. Deshalb sind explizite Typendefinitionen
unnötig. Dieser Schritt, typedefs, enums etc. aus C++ zu
entfernen war wegen der gewünschten “Kompatibilität” zu C
nicht möglich. In Java wird durch diese Maßnahme die Syntax
wesentlich schlanker und auch die Probleme der Namensraumvergabe wird durch die
dann nötigen zugehörigen Klassen vermieden. (In C haben z.B. alle
enum Typen einen eigenen, gemeinsamen Namensraum)
Keine Funktionen
Alleinstehende Funktionen, die nicht Methoden einer Klasse sind, werden
nicht unterstützt. Das vermeidet Mehrdeutigkeiten und Widersprüche in
der Klassenhierarchie. Java unterstützt Klassenmethoden und
Klassenvariablen, wodurch alleinstehende Funktionen unnötig werden.

Keine Header Files
In Java werden die Klassen komplett in einem File Codiert. Header Files wie
in C gibt es nicht. Zu jeder Klasse wird ein eigenes Klassenname.class
File erzeugt. Dadurch kann es z.B. nicht mehr vorkommen, daß durch
Änderungen in einer Zentralen Klasse in einem Header File das gesamte
Projekt neu Übersetzt werden muß. Der Einsatz von Java macht
Hilfsmittel wie make und trickreiche Compilerfeatures, die versuchen
dieses Problem zu minimieren unnötig.
Kein Überladen von Operatoren
Java unterstützt kein Operator Overloading. Diese Möglichkeit war
bzw. ist schon immer umstritten. Sun hat der Regel der Einfachheit und Klarheit
Vorrang gegeben. Die Möglichkeiten des Operator Overloadings kann durch
Klassenmethoden einfach ersetzt werden.
Kein Precompiler (z.B. #DEFINE)
Precompiler, wie man sie von C oder C++ her kennt, werden von Java nicht
eingesetzt. Der durchgängig objektorientierte Ansatz soll einen Precompiler
unnötig machen. Globale Definitionen von Konstanten können als
Klassenvariablen (static) realisiert werden. Dadurch bekommen die
Konstanten auch einen eigenen Namensraum, was widersprüchliche
Bezeichnernamen ausschließt. Diverse Tricks und auch Fehlerquellen werden
so ausgeschlossen.
Keine vage definierte Datentypen
In Java sind die primitiven Datentypen, anders als in C vollständig
definiert. So ist ein int immer 32 Bit breit und mit Vorzeichen behaftet.
Es gibt anders als in C feste Definitionen für die Basis Datentypen.
Die übrigens die einzigen Typen sind die keine Klasse darstellen. Durch
Vererbung können ihnen jedoch weitere Methoden zugeordnet werden.

Die direkte Implementierung von Basis Datentypen in die Programmiersprache
verbessern das Laufzeitverhalten, gegenüber Typenlosen Programmiersprachen
wie zum Beispiel Smalltalk, enorm.
Keine (expliziten) Pointer und keine Pointerarithmetik
Java hat zum Ziel, eine möglichst sichere Laufzeitumgebung zur
Verfügung zu stellen. Aufgrund der Möglichkeit, komplexe Strukturen
mit Hilfe von Klassenhierarchien darzustellen, ist Java nicht auf
Pointerarithmetik angewiesen. In Java gibt es generell keine expliziten Pointer,
womit ein weiterer Großteil der Fehlermöglichkeiten
herkömmlicher C und C++ Programme ausgeschlossen werden.
Keine vargs (freie Argumentenanzahl)
Java unterstützt keine Funktionen mit variabler Argumentenanzahl wie
es z.B. in C bei der Funktion printf verwendet wird. Auch hier stellt der
objektorientierte Ansatz geeignetere und weniger fehlerträchtige
Möglichkeiten zur Verfügung (wie es schon in C++ mit cout
realisiert wird).
Keine Mehrfachvererbung
Die gewaltigen Probleme die durch den Einsatz von Mehrfachvererbungen
auftreten können sind dadurch umgangen werden, daß es diese
Möglichkeit nicht gibt. Durch den Einsatz von Interfaces die einen Satz von
Schnittstellenmethoden definieren, die in der Klasse implementiert werden, wird
eine weitgehend vergleichbare Funktionalität ohne die bekannten Probleme
erreicht. Diese Interfaces wurden den protocols in Objective C
nachempfunden.
Kein Semikolon oder doch Semikolon
Beim Design von Java wurde darauf geachtet, daß der Programmierer
nicht mit irgendwelchen “; erwartet” Fehlermeldungen zu kämpfen
hat. Wo es die Grammatik erlaubt ist der “;” optional oder kann
beliebig oft gesetzt werden. Bei der Entwicklung der Sprache wurde auch darauf
geachtet, das der Compiler die Möglichkeit hat Fehler genau zu
lokalisieren. Die in C übliche Fehlermeldung mit Verweis auf eine Zeile die
auf die eigentlich fehlerhafte Zeile mit fehlendem Semikolon folgt sollte in
Java nicht vorkommen.
5.1.4 Speicherverwaltung
Als erste Besonderheit, insbesondere für nicht Smalltalk Programmierer
ist das Konzept der Speicherverwaltung in Java zu nennen. In Java gibt es keinen
Heap auf dem dynamische Daten allociert werden, also auch kein malloc
oder mfree. Vielmehr sorgt die Java Laufzeitumgebung selbst dafür,
das nicht mehr benötigte Objekte automatisch freigegeben werden. Dazu
trägt jedes Objekt einen Zähler mit sich, wie viele Verweise auf das
Objekt noch existieren.
Die Arbeit selbst dafür zu sorgen das Objekte rechtzeitig freigegeben
werden, die z.B. in C++ bei komplexeren Programmen extreme Ausmaße annimmt
entfällt also völlig. Man spricht von einem Garbage Collector. In Java
läuft dieser Garbage Collector in einem eigenen Task mit niederer
Priorität, das Aufräumen wird also im Hintergrund erledigt.
Speicherleichen, also Objekte die nicht mehr benötigt werden, deren
Speicher jedoch nicht freigegeben wurde gehören automatisch der
Vergangenheit an. Es kann auch nicht mehr vorkommen das eine Referenz auf ein
nicht mehr allociertes Objekt existiert, was bei C und C++ zu häufigen
Fehlern geführt hat (z.B. eine durch eine lokale Funktion deklarierte
Variable wird per Pointer dem Aufrufer bekanntgegeben).
Dieses Konzept tritt nicht nur auf Objekte sondern auch für Klassen in
Kraft, da Klassen in Java nichts anderes sind als von der Klasse Objekt
abgeleitete Objekte. Das heißt insbesondere das zur Laufzeit eines
Programms nur die Klassen im Hauptspeicher gehalten werden die auch wirklich
gebraucht werden. Das hat zur Folge, daß beim Programmstart zunächst
nur die Basisklassen z.B. der awt Library geladen werden, was allerdings auf
Grund des dynamischen Linkvorgangs, der gleichzeitig einsetzt merklich Zeit in
Anspruch nimmt.
5.1.5 Threads
Java verwendet selbst z.B. zur Realisierung der Speicherverwaltung Threads
und es bietet dem Programmierer Klassen und Methoden zur Threadbildung zur
Verfügung. Threads ermöglichen das parallele Ausführen einzelner
Programmteile. Bei GUI basierenden Systemen ist es z.B. wichtig das verschiedene
Aufgaben parallel erledigt werden. So will der Anwender in der Menüstruktur
blättern, während in einem Fenster Berechnungen ausgeführt werden
und in einem anderen gerade eine Grafik aufgebaut wird.
Bei Java muß sich der Programmierer nicht mehr mit den Besonderheiten
der Zielplatform auseinandersetzen und er muß auch keine Bedenken haben ob
die standard Library Funktionen reentredant (sprich mehrfach gleichzeitig
aufgerufen werden dürfen) sind. Er bekommt durch Java einheitliche Methoden
zur Synchronisation von Threads und zur Kommunikation zwischen verschiedenen
Threads zur Verfügung gestellt. Durch den Modifizierer synchronized
können Methoden eines Objekts gegen mehrfachen parallelen Aufruf
geschützt werden. Ein in der Java Laufzeitumgebung implementierter Monitor
überwacht dann das diese Methoden des Objekts nicht parallel sondern
seriell Ausgeführt werden. Generell sollten alle Methoden die
Objektatribute verändern als synchronized deklariert werden.

Die Standardbibliothek ist vollständig “Threadfest”, das
heißt Methoden kann uneingeschränkt mehrfach parallel aufgerufen
werden.
5.1.6 Benennungskonventionen
Wie schon mehrfach erwähnt werden in Java Klassen unter ihrem
Realnamen abgelegt. Dadurch muß man beachten, daß ein File mit dem
Namen test.java nach der Compilierung unter Umständen mehrere Files
erzeugt die zum Beispiel klasse1.class, klasse2.class etc.
heißen. Zum Auffinden der Klassen wird vom ClassLoader der Klassen eine
bestimmte Strategie verfolgt (wie Eingangs erwähnt kann der ClassLoader
auch überladen werden und dadurch sein Verhalten verändert werden).
Klassen werden zu sogenannten Packages zusammengefaßt. Bestes Beispiel
sind die standard Librarys deren Namen alle mit dem Prefix java.
beginnen. Um den Anspruch an die Dateisysteme nicht übergebühr zu
erhöhen wird zum Beispiel für die Klasse java.awt.list der
Filenamen list.class Verzeichnis .\java\awt\ verwendet.
Inzwischen ist man dazu übergegangen die kompletten Librarys in einem
Archiv zu speichern (CLASSES.ZIP). Dieses File darf bei der Installation
von Java keinesfalls ausgepackt werden.
Zur Benennung von Klassen die (Inter-) Netz weit bekannt sein sollen, gilt
die Konvention als Prefix der Klassen den eigenen URL zu verwenden (dadurch
wäre es mit einem geeigneten ClassLoader möglich Klassen automatisch
in der aktuellsten verfügbaren Version vom durch den URL zu
identifizierenden Server zu Laden). Die Problematik der unter Umständen
recht langen Klassennamen (de.fh-furtwangen.ask.katze.libs.car.class)
wird derzeit heftig diskutiert und ist auch reichlich umstritten.

5.1.7 Datentypen und Strukturen
In Java gibt es folgende grundlegende Basis Datentypen:

byte 8 Bit Zahlenwert (-128..127)
short 16 Bit Zahlenwert
int 32 Bit Zahlenwert
long 64 Bit Zahlenwert
float 32 Bit IEEE 754 Fließkommazahl

double 64 Bit IEEE 754
Fließkommazahl
char 16 Bit Unicode Zeichen
boolean “echter” 1 Bit Wert

Arrays
String Unicode String Dabei
kommt der Programmierer nicht mit den Endiantypen der numerischen Variablen in
Berührung. Was z.B. unter C zu Problemen beim Dateiaustausch führt.

String ist in Java ein echter Datentyp und nicht wie in C ein
künstliches Array von Zeichen. Allerdings sind einige Methoden zur
Stringmanipulation in einer Klasse der Standard Library gekapselt.

5.1.8 Die Syntax, eine
Übersicht
Die Kontrollstrukturen, Schleifen und Operatoren sind weitgehend die von C
oder C++ her bekannten Konstrukte. Lediglich bei den Operatoren mußte, da
es keine vorzeichenlosen Zahlen gibt der >>> Operator
eingefügt werden, der eine Zahl bitweise nach rechts Schiebt und von rechts
Nullen nach schiebt. Im Gegensatz zum >> Operator, der das
Vorzeichenbit nach schiebt. In C wurde dies anhand dessen entschieden, ob der
Zahlenwert vorzeichenbehaftet war oder nicht.
Auf der nächsten Seite befindet sich die, bis auf die kursiv
dargestellten Symbole DocComment, Identifier, Number, String und Character
komplette Syntaxbeschreibung der Programmiersprache Java. Die Syntax ist trotz
der Objektorientiertheit nicht wesentlich Komplexer als die der
Programmiersprache C. Die Fett dargestellten Symbole sind Zeichen wie sie
im Quelltext erscheinen. Folgende Notation wird für die Grammatik
verwendet:
Ausdruck = Metaausdruck; “|” steht für Alternativen, (...)
für Gruppierungen, ? für kein oder einmaliges Auftreten und * für
kein oder mehrmaliges Auftreten.
CompilationUnit= PackageStatement?
ImportStatement* TypeDeclaration* ;
PackageStatement= package PackageName
; ;
ImportStatement= import PackageName
. * ;| import ( ClassName | InterfaceName ); ;

TypeDeclaration= ClassDeclaration |
InterfaceDeclaration | ; ;
ClassDeclaration = Modifier* class
Identifier (extends ClassName)? (implements InterfaceName
(, InterfaceName)*)? { FieldDeclaration* } ;

InterfaceDeclaration = Modifier*
interface Identifier (extends InterfaceName (,
InterfaceName)*)? { FieldDeclaration* } ;
FieldDeclaration = DocComment?
MethodDeclaration | DocComment? ConstructorDeclaration | DocComment?
VariableDeclaration | StaticInitializer | ; ;
MethodDeclaration = Modifier* Type
Identifier ( ParameterList? ) ( [ ] )* (
{ Statement* } | ;) ;
ConstructorDeclaration = Modifier*
Identifier ( ParameterList? ) { Statement* }
;
VariableDeclaration= Modifier* Type
VariableDeclarator (, VariableDeclarator)* ; ;

VariableDeclarator= Identifier ([
])* (= VariableInitializer)? ;
VariableInitializer= Expression | { (
VariableInitializer ( , VariableInitializer )* ,? )? } ;

StaticInitializer= static {
Statement* } ; [...]

Du musst angemeldet sein, um das komplette Referate anschauen zu können.

Jetzt bei referate.de anmelden

Oder nutze Facebook Share, um das Referat herunterladen zu können.

share

Nach dem Du die Facebook Share Funktion ausgeführt hast aktualisiert sich die Seite automatisch und Du bekommst das komplette Referat zum Download bereit gestellt.