Objektorientiertes Programmieren (Java): Difference between revisions

From FuxWiki
Jump to navigation Jump to search
Created page with "=== Klassenhierachien === * Abstrakte Klasse: Eine Klasse von der keine direkten Objekte existieren können. Sie sind nur angelgt um Eigenschaften von Subklassen zusammenzufassen (Beispiel Abstrakte Klasse Einzelhandelsgeschäft hat unter sich z.b. Buchladen oder Lebensmittelladen) * Subklassen sind Klassen die Eigenschaften und Methoden gemeinsam haben, die sie von der Superklasse erben können. Sie müssen nur in der übergeordneten Klasse beschrieben werden und in de..."
 
blabla
 
(3 intermediate revisions by the same user not shown)
Line 4: Line 4:
* Subklassen sind Klassen die Eigenschaften und Methoden gemeinsam haben, die sie von der Superklasse erben können. Sie müssen nur in der übergeordneten Klasse beschrieben werden und in der Subklasse spezialisiert werden.
* Subklassen sind Klassen die Eigenschaften und Methoden gemeinsam haben, die sie von der Superklasse erben können. Sie müssen nur in der übergeordneten Klasse beschrieben werden und in der Subklasse spezialisiert werden.
* Ein Object einer Klasse die Superklassen besitzt kann immer auch als Object aller Superklassen angesehen werden, da die Klasse mindestens alles kann was die Superklassen können.
* Ein Object einer Klasse die Superklassen besitzt kann immer auch als Object aller Superklassen angesehen werden, da die Klasse mindestens alles kann was die Superklassen können.
=== Objektorientiertes Programmieren ===
Es gibt keine global arbeitenden Prozeduren oder Operationen (Spezialfall Java mit Klassenmethoden, Methoden die keine Zustände verändern sondern nur eine Aktion auslösen oder einen Wert berechnen)
Normalerweise verändert man Zustände innerhalb eines Obejcts durch einen Methodenaufruf.
==== Strukturierung und Datenkapselung ====
Jedes Object hat eine klar festgelegte Schnittstelle die beschreibt welche Nachrichten es versteht. Dies erlaubt die Strukturierung durch Klassifizierung sowie die Kapselung von Daten. Hier gemeint ist das nur durch Methoden auf den Zustand eines Objectes zugegriffen werden kann, um dem Object Kontrolle über seine Daten zu lassen.
==== Erweiterbarkeit ====
Das Nachrichtenmodell der objectorientierten Programmierung ermöglich die Klassifizierung von Objecten danach welche Nachrichten sie Verstehen.
Stelle ich mir nun ein Behälterobject vor das eine Methode "PrintAll" besitzt, das nur Subklassen einer Klasse "printable" enthält, weiss ich bereits jetzt das jedes dieser Objecte eine Methode "print" hat und muss in der Methode "printAll" keine Fallunterscheidung vornehmen. Jedes Object wird implizit die für sich passende Methode auswählen und ausführen.
==== Parallelität ====
Es ist möglich durch das Grundmodell der Parallelität Arbeitsprozesse aufzuteilen. Allerdings werden Methoden, auch über Objectgrenzen hinweg bei den meisten Objektorientierten Programmiersprachen standartmässig sequenziell ausgeführt und die paralellität wird explizit durch Sprackonstrukte eingeführt. (Bei Java siehe Threads)
=== Objektorientierung als Antwort auf Softwaretechnische Anforderungen ===
Die Objetorientierte Programmierung ist mittlerweile 50 Jahre alt (stand 2026). Die Programmiersprache Simula 67 besaß bereits alle wesentlichen Eigenschaften der oder Objectorientierten Programmierung. Anfang der 80er gewann die Objectorientierte Programmierung mit der Sprache Smalltalk und Ihrer Entwicklungsumgebung einen Aufschwung. Allerdings dauerte es nochmal 10 Jahre bis sie in der Kommerziellen Welt an Bedeutung gewann. In der Zwischenzeit hat sie eine weite Verbreitung viele Sprachen wurden mit Objektorientierten Konzepten erweitert.
Objektorientierte Sprachen haben ihre Stärken vor allem in bestimmten Softwaretechnischen Anforderungen, die immer mehr an Bedeutung gewannen. Vor allem in den folgenden Vier:
* Softwaretechnische Simulation
* Kontruktion interaktiver, graphischer Bedienoberflächen
* Programm wiederverwendung
* verteilte Programmierung
==== Simulation ====
Grob gibt es zwei Arten der Simulation - Kontinuirliche Prozesse und diskrete Vorgänge:
Bspw. Berechnungen von Klimavorhersagen mit einbezug des Treibhauseffekts oder die Simulation des Verkehrsflusses an einer Strassenkreuzubg.
Eine Erklärung der diskreten Simulation anhanddes Beispiels:
Es sind softwaretechnisch 3 aufgaben zu erledigen.
# Schritt: Die Modelierung der Statischen Komponenten - Hier, Die Kreuzung mit den Fahrspuren, Bürgersteigen, Übergängen, Ampeln etc. sowie die Fahrzeuge die sie befahren.
# Schritt: Die Beschreibung der Dynamik des Systems - Hier die möglichen Ampelschaltungen, die erzeugung der Fahrzeuge und die Bewgungsparameter.
# Schritt: Test und Analyse des Systems - Hier, das schaffen einer Umgebung in der die Unterschiedlichen Abläufe gesteuert, getestet un dnalysiert werden können.
==== Graphische Oberflächen ====
Interaktive Graphische Bedienoberflächen ermöglichen die nichsequenzielle Steuerung von Anwendungen über die manipulierbaren Bedienelemente (Schaltflächen, Eingabefenster u.ä.).
Die stellt wiederum mehrere Fragen. Wie muss die Oberfläche gestaltet werden um der Anwendung gerecht zu werden und einfach bedienbar zu sein? - Was für ein Programmiermodell benutze ich um die nötige Parallelität des Programms sicherzustellen, damit ein Benutzer nicht auf eine Funktion limitiert ist und hin und her wechseln kann. - Das Verhalten einer Oberflächenkomponente, vor allem wie stelle ich die Standartfunktionalität zur Verfügung, sodass sie programmtechnisch gut, sicher und Flexibel hanhabbar ist.
==== Wiederverwendung von Programmteilen ====
Zwei Hauptproblem:
Programmbausteine müssen insbesondere an den Schnittstellen die für die benutzenden Sichtbar sind spezifiziert sein. Ausserdem muss ein Baustein gut anpassbar und leicht erweiterbar sein. Vor allem sollten die anpassungen möglich sein ohne die Bausteine selbst manipulieren zu müssen.
==== Verteilte Programmierung ====
Sie soll es ermöglichen das Programme auf unterschiedlichen Rechnern laufen und miteinander arbeiten können, so dass Daten und Programmteile automatisch über das Netz verteilt werden.
Die verteilte Programmierung benötigt ein Programmiermodell in dem eine räumliche Verteilung von Daten und Programmteilen dargestellt werden kann, in dem Parallälitet und Kommunikation in natürlicher weise beschrieben werden kann und das in der Lage ist eine Partitionierung von Daten und Programmen in übertragbare teile zu unterstützen.
=== Programmsprachlicher Hintergrund ===
==== Objekte und Werte (objects and values) ====
Ein Object hat eine Identität und einen Zustand - d.h. zwei Objecte mit gleichem zustand sind nicht das selbe Object. Ein wert aber ist immer ein bestimmter Wert.
Der Zustand kann sich ändern (true wird zu false) aber ein Wert nicht (eine Zahl ist immer die gleiche Zahl)
Ein Object hat immer eine bestimmte Identität die nur diesem Object gehört sowie einen aufenthaltsort der durch eine Adresse beschrieben wird.
Objecte besitzen eine Lebensdauer und können erzeugt und gelöscht werden.
Objecte sind aktiv, die können auf nachrichten reagieren und besitzen ein verhalten.
Werte existieren ewig, sind nicht lokalisierbar und sind inaktiv.
(Es gibt Programmiersprachen die bestimmte Werte wie Objecte behandeln, was aber deren verhalten normalerweise nicht ändert.)
==== Werte, Typen und Variablen in Java ====
{| class="wikitable"
|byte
| -128 bis 127
|1 byte
|-
|short
| -32768 bis 32767
|2 byte
|-
|int
| -2147483648 bis 2147483647
|4 byte
|-
|long
| -9223372036854775808L
bis 9223372036854775807L
|8 byte
|-
|float
|im Bereich ±3.402823E+38F jeweils 6-7 signifikante Stellen
|4 byte
|-
|double
|im Bereich ±1.797693E+308
jeweils 15 signifikante Stellen
|8 byte
|-
|char
|65536 Unicode-Zeichen (weitere zeichen als 2 char)
Notationsbeispiele: ' a' '+' ' n' ',' '\u0022'
|2 byte
|-
|boolean
|true, false
|nicht spezifiziert
|}
Die '''Konstanten''' der Basisdatentypen un dihre Schreibweisen sind hier auch ersichtlich. '''byte''', '''short''', '''int''' werden nicht unterschienden. '''Long''' trägt ein L als Postfix. '''Unicode''' zeichen lassen sich generell durch '''\uXXXX''' ausdrücken, wobei X eine Hexadezimalzffer ist. Ein '''ASCII Zeichen''' lässt sich aber auch direkt als Zeichen notieren. Ausserdem ist '''\t''' das Tabulatorzeichen, '''\n''' das neue Zeile zeichen, '''\'''' das Hochkomma, '''\"''' das Anführungszeichen und '''\\''' den Backslash. Boolean ist '''true''' oder '''false'''.
Ein Wert ist in Java entweder ein Element eines Basisdatentyps, eine Referenz auf ein Object (es gibt in java keine Refrenz auf eine Variable) oder eine leeren Referenz (null).

Latest revision as of 16:55, 16 May 2026

Klassenhierachien

  • Abstrakte Klasse: Eine Klasse von der keine direkten Objekte existieren können. Sie sind nur angelgt um Eigenschaften von Subklassen zusammenzufassen (Beispiel Abstrakte Klasse Einzelhandelsgeschäft hat unter sich z.b. Buchladen oder Lebensmittelladen)
  • Subklassen sind Klassen die Eigenschaften und Methoden gemeinsam haben, die sie von der Superklasse erben können. Sie müssen nur in der übergeordneten Klasse beschrieben werden und in der Subklasse spezialisiert werden.
  • Ein Object einer Klasse die Superklassen besitzt kann immer auch als Object aller Superklassen angesehen werden, da die Klasse mindestens alles kann was die Superklassen können.

Objektorientiertes Programmieren

Es gibt keine global arbeitenden Prozeduren oder Operationen (Spezialfall Java mit Klassenmethoden, Methoden die keine Zustände verändern sondern nur eine Aktion auslösen oder einen Wert berechnen)

Normalerweise verändert man Zustände innerhalb eines Obejcts durch einen Methodenaufruf.

Strukturierung und Datenkapselung

Jedes Object hat eine klar festgelegte Schnittstelle die beschreibt welche Nachrichten es versteht. Dies erlaubt die Strukturierung durch Klassifizierung sowie die Kapselung von Daten. Hier gemeint ist das nur durch Methoden auf den Zustand eines Objectes zugegriffen werden kann, um dem Object Kontrolle über seine Daten zu lassen.

Erweiterbarkeit

Das Nachrichtenmodell der objectorientierten Programmierung ermöglich die Klassifizierung von Objecten danach welche Nachrichten sie Verstehen.

Stelle ich mir nun ein Behälterobject vor das eine Methode "PrintAll" besitzt, das nur Subklassen einer Klasse "printable" enthält, weiss ich bereits jetzt das jedes dieser Objecte eine Methode "print" hat und muss in der Methode "printAll" keine Fallunterscheidung vornehmen. Jedes Object wird implizit die für sich passende Methode auswählen und ausführen.

Parallelität

Es ist möglich durch das Grundmodell der Parallelität Arbeitsprozesse aufzuteilen. Allerdings werden Methoden, auch über Objectgrenzen hinweg bei den meisten Objektorientierten Programmiersprachen standartmässig sequenziell ausgeführt und die paralellität wird explizit durch Sprackonstrukte eingeführt. (Bei Java siehe Threads)

Objektorientierung als Antwort auf Softwaretechnische Anforderungen

Die Objetorientierte Programmierung ist mittlerweile 50 Jahre alt (stand 2026). Die Programmiersprache Simula 67 besaß bereits alle wesentlichen Eigenschaften der oder Objectorientierten Programmierung. Anfang der 80er gewann die Objectorientierte Programmierung mit der Sprache Smalltalk und Ihrer Entwicklungsumgebung einen Aufschwung. Allerdings dauerte es nochmal 10 Jahre bis sie in der Kommerziellen Welt an Bedeutung gewann. In der Zwischenzeit hat sie eine weite Verbreitung viele Sprachen wurden mit Objektorientierten Konzepten erweitert.

Objektorientierte Sprachen haben ihre Stärken vor allem in bestimmten Softwaretechnischen Anforderungen, die immer mehr an Bedeutung gewannen. Vor allem in den folgenden Vier:

  • Softwaretechnische Simulation
  • Kontruktion interaktiver, graphischer Bedienoberflächen
  • Programm wiederverwendung
  • verteilte Programmierung

Simulation

Grob gibt es zwei Arten der Simulation - Kontinuirliche Prozesse und diskrete Vorgänge:

Bspw. Berechnungen von Klimavorhersagen mit einbezug des Treibhauseffekts oder die Simulation des Verkehrsflusses an einer Strassenkreuzubg.

Eine Erklärung der diskreten Simulation anhanddes Beispiels:

Es sind softwaretechnisch 3 aufgaben zu erledigen.

  1. Schritt: Die Modelierung der Statischen Komponenten - Hier, Die Kreuzung mit den Fahrspuren, Bürgersteigen, Übergängen, Ampeln etc. sowie die Fahrzeuge die sie befahren.
  2. Schritt: Die Beschreibung der Dynamik des Systems - Hier die möglichen Ampelschaltungen, die erzeugung der Fahrzeuge und die Bewgungsparameter.
  3. Schritt: Test und Analyse des Systems - Hier, das schaffen einer Umgebung in der die Unterschiedlichen Abläufe gesteuert, getestet un dnalysiert werden können.

Graphische Oberflächen

Interaktive Graphische Bedienoberflächen ermöglichen die nichsequenzielle Steuerung von Anwendungen über die manipulierbaren Bedienelemente (Schaltflächen, Eingabefenster u.ä.).

Die stellt wiederum mehrere Fragen. Wie muss die Oberfläche gestaltet werden um der Anwendung gerecht zu werden und einfach bedienbar zu sein? - Was für ein Programmiermodell benutze ich um die nötige Parallelität des Programms sicherzustellen, damit ein Benutzer nicht auf eine Funktion limitiert ist und hin und her wechseln kann. - Das Verhalten einer Oberflächenkomponente, vor allem wie stelle ich die Standartfunktionalität zur Verfügung, sodass sie programmtechnisch gut, sicher und Flexibel hanhabbar ist.

Wiederverwendung von Programmteilen

Zwei Hauptproblem:

Programmbausteine müssen insbesondere an den Schnittstellen die für die benutzenden Sichtbar sind spezifiziert sein. Ausserdem muss ein Baustein gut anpassbar und leicht erweiterbar sein. Vor allem sollten die anpassungen möglich sein ohne die Bausteine selbst manipulieren zu müssen.

Verteilte Programmierung

Sie soll es ermöglichen das Programme auf unterschiedlichen Rechnern laufen und miteinander arbeiten können, so dass Daten und Programmteile automatisch über das Netz verteilt werden.

Die verteilte Programmierung benötigt ein Programmiermodell in dem eine räumliche Verteilung von Daten und Programmteilen dargestellt werden kann, in dem Parallälitet und Kommunikation in natürlicher weise beschrieben werden kann und das in der Lage ist eine Partitionierung von Daten und Programmen in übertragbare teile zu unterstützen.

Programmsprachlicher Hintergrund

Objekte und Werte (objects and values)

Ein Object hat eine Identität und einen Zustand - d.h. zwei Objecte mit gleichem zustand sind nicht das selbe Object. Ein wert aber ist immer ein bestimmter Wert.

Der Zustand kann sich ändern (true wird zu false) aber ein Wert nicht (eine Zahl ist immer die gleiche Zahl)

Ein Object hat immer eine bestimmte Identität die nur diesem Object gehört sowie einen aufenthaltsort der durch eine Adresse beschrieben wird.

Objecte besitzen eine Lebensdauer und können erzeugt und gelöscht werden.

Objecte sind aktiv, die können auf nachrichten reagieren und besitzen ein verhalten.

Werte existieren ewig, sind nicht lokalisierbar und sind inaktiv.

(Es gibt Programmiersprachen die bestimmte Werte wie Objecte behandeln, was aber deren verhalten normalerweise nicht ändert.)

Werte, Typen und Variablen in Java

byte -128 bis 127 1 byte
short -32768 bis 32767 2 byte
int -2147483648 bis 2147483647 4 byte
long -9223372036854775808L

bis 9223372036854775807L

8 byte
float im Bereich ±3.402823E+38F jeweils 6-7 signifikante Stellen 4 byte
double im Bereich ±1.797693E+308

jeweils 15 signifikante Stellen

8 byte
char 65536 Unicode-Zeichen (weitere zeichen als 2 char)

Notationsbeispiele: ' a' '+' ' n' ',' '\u0022'

2 byte
boolean true, false nicht spezifiziert

Die Konstanten der Basisdatentypen un dihre Schreibweisen sind hier auch ersichtlich. byte, short, int werden nicht unterschienden. Long trägt ein L als Postfix. Unicode zeichen lassen sich generell durch \uXXXX ausdrücken, wobei X eine Hexadezimalzffer ist. Ein ASCII Zeichen lässt sich aber auch direkt als Zeichen notieren. Ausserdem ist \t das Tabulatorzeichen, \n das neue Zeile zeichen, \' das Hochkomma, \" das Anführungszeichen und \\ den Backslash. Boolean ist true oder false.

Ein Wert ist in Java entweder ein Element eines Basisdatentyps, eine Referenz auf ein Object (es gibt in java keine Refrenz auf eine Variable) oder eine leeren Referenz (null).