Java: Unterschied zwischen den Versionen

Aus EINI
Wechseln zu: Navigation, Suche
(Verwendung)
(Einordnung)
 
(9 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Java ist eine von Oracle entwickelte objektorientierte Programmiersprache und ist Hauptbestandteil des Moduls Einführung in die Informatik (EINI). Programme, die in Java geschrieben werden, müssen vor ihrer Ausführung in sogenannten [[Java/Bytecode | Bytecode]] übersetzt werden. Dieser Bytecode kann anschließend von einem anderen Programm, einer sogenannten virtuellen Maschine, [[Programmiersprache | interpretiert]] und ausgeführt werden.
+
'''Java''' ist eine von [https://de.wikipedia.org/wiki/Oracle Oracle] entwickelte, [[objektorientierte Programmierung|objektorientierte]] [[Programmiersprache]] und Hauptbestandteil des Moduls '''Einführung in die Informatik (EINI)'''. [[Programm]]e, die in Java geschrieben werden, müssen vor ihrer Ausführung in sogenannten [[Java/Bytecode | Bytecode]] übersetzt werden. Dieser Bytecode kann anschließend von einem anderen Programm, der sogenannten [[Java Virtual Machine]], interpretiert und ausgeführt werden.
  
 
== Verwendung ==
 
== Verwendung ==
  
Da Programme, die in Java geschrieben werden, in Bytecode übersetzt werden, können diese Programme auf allen Rechnern, auf denen eine entsprechende virtuelle Maschine installiert ist, ausgeführt werden. Dies hat den Vorteil, dass ein Java Anwendungsentwickler (ihr) sein Programm nicht für jede Plattform (z.B. [[Architektur | 32/64-Bit Intel/ARM Architekturen, MIPS Maschinen]] usw.) anpassen muss, sondern davon ausgehen kann, dass solange eine virtuelle Maschine für ein entsprechendes Gerät existiert, sein Programm dort auch funktioniert.
+
Programme, die in '''Java''' geschrieben werden, können auf allen Rechnern ausgeführt werden, auf denen eine virtuelle Maschine installiert ist. Dies hat den Vorteil, dass ein Java-Anwendungsentwickler sein Programm nicht für jede [[Architektur | Plattform]] anpassen muss.
 
+
Entsprechend konzentriert sich die Entwicklung in Java weniger auf hardwarenahe Programmierung, also dem direkten Ansprechen von Geräten über Signale zwischen CPU und Gerät (wie z.B. "Lesekopf der Festplatte, bewege dich 10nm nach links und lese Daten aus!", s. [[Treiber]]), sondern mit dem Verwenden von vorgegebenen [[Bibliothek | Modulen]] um plattformunabhängig Programme zu entwickeln, die auf weit verbreiteten Betriebssystemen (Windows, Linux, Andorid, MacOS) von Anwendern verwendet werden können.
+
  
 +
Entsprechend konzentriert sich die Entwicklung in '''Java''' weniger auf hardwarenahe Programmierung, also dem direkten Ansprechen von Geräten über Signale zwischen [[Treiber | CPU und Gerät]], sondern auf die Verwendung von vorgegebenen [[Bibliothek | Modulen]]. Ziel ist die Entwicklung von plattformunabhängigen Programmen, die auf weit verbreiteten [[Betriebssystem | Betriebssystemen]] verwendet werden können.
 
== Konzepte ==
 
== Konzepte ==
  
In der Liteartur findet man viele Begriffe, die versuchen Java zu beschreiben: Klassenbasiert, objektorientiert, strukturiert, imperativ, funktional, generisch, reflexiv und nebenläufig. An diesen Begriffen sollten Sie sich für die Veranstaltung EINI nicht zu sehr aufhalten, aber eine kurze Erklärung dieser Begriffe sollten wir Ihnen nicht schuldig bleiben:
+
===Begriffe===
 +
 
 +
In der Literatur gibt es viele Begriffe, die versuchen, '''Java''' zu beschreiben:
  
* Klassenbasiert: Programme werden in Java in sogenannten Klassen aufgeteilt, welche einen Bauplan für Datenstrukturen, die in einem Programm verwendet werden, repräsentieren.
+
* '''Klassenbasiert''': Programme werden in Java in sogenannte [[Klasse | Klassen]] aufgeteilt. Diese repräsentieren einen Bauplan für die [[Datenstruktur]]en, die in einem Programm verwendet werden.
* Objektorientiert: Abstraktionen von Datenstrukturen werden durch eine Klasse beschrieben und anschließend anhand dieses Bauplans instanziiert. Ein Großteil der zweiten Hälfte der Veranstaltung beschäftigt sich mit diesem Thema.
+
* '''Objektorientiert''': Abstraktionen von Datenstrukturen werden durch eine Klasse beschrieben und anschließend anhand dieses Bauplans instanziiert. Ein Großteil der zweiten Hälfte der Veranstaltung beschäftigt sich mit diesem Thema.
* Strukturiert: Java bietet viele Möglichkeiten einem Programmierer es syntaktisch zu ermöglichen sein Programm auch lesbar zu gestalten, sodass die Semantik des Programmes sich leicht aus seiner Syntax ableiten lässt.
+
* '''Strukturiert''': Java bietet dem Programmierer viele Möglichkeiten sein Programm so lesbar zu gestalten, dass sich die [[Semantik]] des Programms leicht aus seiner [[Syntax]] ableiten lässt.
* Imperativ: Javaprogramme werden durch Folgen von Anweisungen beschrieben. Ein Großteil des ersten Teils der Veranstaltung beschäftigt sich mit diesem Thema.
+
* '''[[Imperative Programmierung | Imperativ]]''': Javaprogramme werden durch Folgen von Anweisungen beschrieben. Ein Großteil des ersten Teils der Veranstaltung beschäftigt sich mit diesem Thema.
* Funktional: Seit Java 1.8 (2014) ist es möglich, sich in Java auch Eigenschaften funktionaler Programmiersprachen zu Nutze zu machen. Dies ist für diese Veranstaltung jedoch nicht relevant.
+
* '''Funktional''': Seit Java 1.8 (2014) ist es möglich, sich in Java auch Eigenschaften [[Funktionale Programmierung|funktionaler Programmiersprachen]] zu Nutze zu machen. Dies ist für diese Veranstaltung jedoch nicht relevant.
* Generisch: In Java können Module so geschrieben werden, dass sie leicht für viele Datenstrukturen angepasst werden können. Dazu gibt es ein eigenes Feature der Prgorammiersprache, die jedoch für diese Veranstaltung nicht relevant ist.
+
* '''Generisch''': In Java können Klassen so geschrieben werden, dass sie leicht für viele andere Datenstrukturen angepasst werden können. Dazu gibt es ein eigenes Feature der Programmiersprache, das für diese Veranstaltung jedoch nicht relevant ist.
* Reflexiv: Es ist in Java während der Ausführung eines Programmes möglich, den internen Zustand des Programmes auszuwerten und zu manipulieren. Dies ist ein forgeschrittenes Feature, was für diese Veranstaltung nicht relevant ist.
+
* '''Reflexiv''': In Java ist es während der Ausführung eines Programms möglich, den internen Zustand der virtuellen Maschine auszuwerten und zu manipulieren. Dies ist jedoch ein fortgeschrittenes Feature, das für diese Veranstaltung nicht relevant ist.
* Nebenläufig: Es gibt Sprachelemente in Java, die es ermöglichen, parallel laufende Teilprogramme miteinander zu synchronisieren und kooperieren zu lassen. Dies ist ein fortgeschrittenes Feature, was für diese Veranstaltung nicht relevant ist.
+
* '''Nebenläufig''': Es gibt Sprachelemente in Java, die es ermöglichen, parallel laufende Teilprogramme miteinander zu synchronisieren und kooperieren zu lassen. Dies ist jedoch ein fortgeschrittenes Feature, das für diese Veranstaltung nicht relevant ist.
  
=== Zusammenfassend ===
+
=== Zusammenfassung ===
  
Die Konzepte von Java, mit denen wir uns in dieser Veranstaltung beschäftigen, sind die der imperativen Programmierung und der objektorientierten, klassenbasierten Abstraktion von Datenstrukturen. Java bietet für den interessierten Studenten noch wesendlich mehr, jedoch würde dies den Umfang der Veranstaltung sprengen und dem Ziel, ihnen den grundlegenden Umgang mit einer Programmiersprachen beizubringen, entgegenwirken.
+
Die Konzepte von '''Java''', mit denen wir uns in dieser Veranstaltung beschäftigen, sind also die der '''imperativen Programmierung''' und der '''objektorientierten, klassenbasierten Abstraktion von Datenstrukturen'''.  
  
 
== Einordnung ==
 
== Einordnung ==
  
Java ist sowohl eine compilierte, als auch eine interpretierte Programmiersprache. Diese Mehrdeutigkeit liegt in dem Konzept der Plattformunabhängigkeit zu Grunde. Im Gegensatz zu z.B. C, welche eine Programmiersprache ist, deren Programme für jede Architektur neu in Maschinensprache übersetzt (compiliert) werden müssen, und JavaScript, welche eine Programmiersprache ist, deren Programme von einem sogenannten Interpreter direkt ausgelesen werden und für welche der Interpreter dann die Maschinenbefehle ausführt, ist Java eine Programmiersprache, welche sowohl von einem Übersetzer in eine andere Sprache (Bytecode) übersetzt wird, als auch anschließend der Bytecode von der Java Virtual Machine interpretiert wird.
+
'''Java''' ist sowohl eine [[Compiler | compilierte]] als auch eine [[Interpreter | interpretierte]] Programmiersprache. Diese Mehrdeutigkeit liegt dem Konzept der Plattformunabhängigkeit zu Grunde. Javaprogramme werden in den meisten Fällen von einem [[Compiler | Bytecodecompiler]] zu [[Java/Bytecode | Bytecode]] übersetzt, jedoch gibt es auch [[Compiler | Nativcompiler]], die Javacode direkt in ausführbaren [[Maschinencode]] übersetzen. Der übersetzte Bytecode kann anschließend von einer virtuellen Maschine sehr effizient interpretiert werden. Heutzutage wird der von der virtuellen Maschine eingelesene Code sogar zur [[Laufzeit]] (JIT - Just In Time) in effizienten Maschinencode übersetzt. Das gestattet aus [[Codelokalität | häufig ausgeführtem Code]] mehr Performanz zu holen.

Aktuelle Version vom 24. August 2017, 19:21 Uhr

Java ist eine von Oracle entwickelte, objektorientierte Programmiersprache und Hauptbestandteil des Moduls Einführung in die Informatik (EINI). Programme, die in Java geschrieben werden, müssen vor ihrer Ausführung in sogenannten Bytecode übersetzt werden. Dieser Bytecode kann anschließend von einem anderen Programm, der sogenannten Java Virtual Machine, interpretiert und ausgeführt werden.

Verwendung

Programme, die in Java geschrieben werden, können auf allen Rechnern ausgeführt werden, auf denen eine virtuelle Maschine installiert ist. Dies hat den Vorteil, dass ein Java-Anwendungsentwickler sein Programm nicht für jede Plattform anpassen muss.

Entsprechend konzentriert sich die Entwicklung in Java weniger auf hardwarenahe Programmierung, also dem direkten Ansprechen von Geräten über Signale zwischen CPU und Gerät, sondern auf die Verwendung von vorgegebenen Modulen. Ziel ist die Entwicklung von plattformunabhängigen Programmen, die auf weit verbreiteten Betriebssystemen verwendet werden können.

Konzepte

Begriffe

In der Literatur gibt es viele Begriffe, die versuchen, Java zu beschreiben:

  • Klassenbasiert: Programme werden in Java in sogenannte Klassen aufgeteilt. Diese repräsentieren einen Bauplan für die Datenstrukturen, die in einem Programm verwendet werden.
  • Objektorientiert: Abstraktionen von Datenstrukturen werden durch eine Klasse beschrieben und anschließend anhand dieses Bauplans instanziiert. Ein Großteil der zweiten Hälfte der Veranstaltung beschäftigt sich mit diesem Thema.
  • Strukturiert: Java bietet dem Programmierer viele Möglichkeiten sein Programm so lesbar zu gestalten, dass sich die Semantik des Programms leicht aus seiner Syntax ableiten lässt.
  • Imperativ: Javaprogramme werden durch Folgen von Anweisungen beschrieben. Ein Großteil des ersten Teils der Veranstaltung beschäftigt sich mit diesem Thema.
  • Funktional: Seit Java 1.8 (2014) ist es möglich, sich in Java auch Eigenschaften funktionaler Programmiersprachen zu Nutze zu machen. Dies ist für diese Veranstaltung jedoch nicht relevant.
  • Generisch: In Java können Klassen so geschrieben werden, dass sie leicht für viele andere Datenstrukturen angepasst werden können. Dazu gibt es ein eigenes Feature der Programmiersprache, das für diese Veranstaltung jedoch nicht relevant ist.
  • Reflexiv: In Java ist es während der Ausführung eines Programms möglich, den internen Zustand der virtuellen Maschine auszuwerten und zu manipulieren. Dies ist jedoch ein fortgeschrittenes Feature, das für diese Veranstaltung nicht relevant ist.
  • Nebenläufig: Es gibt Sprachelemente in Java, die es ermöglichen, parallel laufende Teilprogramme miteinander zu synchronisieren und kooperieren zu lassen. Dies ist jedoch ein fortgeschrittenes Feature, das für diese Veranstaltung nicht relevant ist.

Zusammenfassung

Die Konzepte von Java, mit denen wir uns in dieser Veranstaltung beschäftigen, sind also die der imperativen Programmierung und der objektorientierten, klassenbasierten Abstraktion von Datenstrukturen.

Einordnung

Java ist sowohl eine compilierte als auch eine interpretierte Programmiersprache. Diese Mehrdeutigkeit liegt dem Konzept der Plattformunabhängigkeit zu Grunde. Javaprogramme werden in den meisten Fällen von einem Bytecodecompiler zu Bytecode übersetzt, jedoch gibt es auch Nativcompiler, die Javacode direkt in ausführbaren Maschinencode übersetzen. Der übersetzte Bytecode kann anschließend von einer virtuellen Maschine sehr effizient interpretiert werden. Heutzutage wird der von der virtuellen Maschine eingelesene Code sogar zur Laufzeit (JIT - Just In Time) in effizienten Maschinencode übersetzt. Das gestattet aus häufig ausgeführtem Code mehr Performanz zu holen.