Diese Webseite speichert Cookies und verarbeitet personenbezogene Daten, um das Angebot jener zu verbessern. Sie können allgemein die entsprechenden Dienste uneingeschränkt zulassen („Einverstanden“) oder nur eingeschränkt zulassen („Einschränken“). Sie können diesen Hinweis aber auch ausblenden, dann werden die Dienste nur eingeschränkt zugelassen. Die Auswahl wird in einem Cookie für ein Jahr gespeichert, bei der Ausblendung nur bis zum Sitzungsende (mittels eines Session-Cookies).

Sie können auch weitere Einstellungen vornehmen (zum Auf-/Einklappen hier klicken):
AdSense
Analytics
  1. Mit der Einstellung „AdSense komplett erlauben“ erklären Sie sich damit einverstanden, dass die Webseite Cookies speichert, um für Sie personalisierte Werbung bereitstellen zu können. Mit der Einstellung „AdSense eingeschränkt erlauben“ werden keine solchen Cookies verwendet und es wird Werbung angezeigt, die sich am Thema der einzelnen Seite orientiert. In jedem Fall wird aber von Google ein Cookie gesetzt, durch das ein Betrug verhindert wird.
  2. Mit der Einstellung „Analytics komplett erlauben“ willigen Sie darin ein, dass die Webseite Cookies speichert, durch die es ermöglicht wird, Sie bei einem erneuten Besuch zuordnen zu können. Mit der Einstellung „Analytics eingeschränkt erlauben (Session-Cookie)“ wird ein Session-Cookie nur zur Aufzeichnung der aktuellen Sitzung angelegt. Mit der Einstellung „Analytics eingeschränkt erlauben (ohne Session-Cookie)“ wird kein Cookie gesetzt, sondern stattdessen ein Zählpixel mit einer nicht zuordenbaren ClientId.

Sie können auch auf der Datenschutzseite weitere Informationen einholen. In diesem Fall stimmen Sie einer eingeschränkten Nutzung zu (ohne Setzung eines Analytics-Cookies), um den Inhalt lesen zu können. Die Zustimmung wird mit einem Session-Cookie gespeichert. Sie können auf der Datenschutzseite die Einstellungen entsprechend anpassen.

Überspringe die Navigation
Schulstoff.org
Kontrastmodus umschalten
Anmerkung: In dieser Jahrgangsstufe geht es vor allem um die Programmierung mit Java. Zum Erlernen eignet sich unter anderem das Programm BlueJ.
Inhaltsverzeichnis [Anzeigen] [Verbergen]

Objekte und Klassen

Zählmarke objekte-und-klassen

Klassen

Eine Klasse besteht aus Name, Attributen und Methoden. Nach Konventionen wird der Klassenname groß und die Attribute sowie die Methoden klein geschrieben. Besteht der Begriff aus mehreren „Teilen“, werden die weiteren Wörter groß geschrieben.

KREIS
durchmesser
xPosition
yPosition
farbe
istSichtbar
sichtbarMachen()
horizontalBewegen(int entfernung)
farbeAendern(String neueFarbe)
groesseAendern(int neuerDurchmesser)

Objekte

Von einer Klasse können ein oder mehrere Objekte geschaffen werden und mit unterschiedlichen Namen versehen werden. Allen Attributen muss ein Wert zugewiesen werden. Mit Hilfe von Methoden sendet der Benutzer an ein Objekt eine Botschaft, die es veranlasst, die entsprechende Änderung seiner Attribute durchzuführen.

JAVA-Quelltext mit Erklärungen am Beispiel eines Programmes

Klassendefinition: Die Beschreibung der Klasse

public class KREIS {

Definition der Attribute durch Zugriffsrecht (private oder public), Bezeichner und Datentyp (z.B. int, String, boolean).

private int radius;

private int xPosition;

private int yPosition;

private String farbe;

private boolean istSichtbar;

Konstruktor: Hier werden die Anfangswerte der einzelnen Attribute festgelegt.

public KREIS() oder public KREIS(int r, int x, int y) {

Wertzuweisungen

radius = 15 oder r;

xPosition = 20 oder x;

yPosition = 60 oder y;

farbe = "blau";

istSichtbar = false;

Definition einer Methode durch Zugriffsrecht, Rückgabewert (hier void: keine Rückgabe), Bezeichner und ggf. anzugebender Parameter

public void zeichnen() {

...

}

Aufrufen einer weiteren Methode

public void sichtbarMachen() {

istSichtbar = true;

zeichnen();

}

Methode mit nötiger Parametereingabe und Wertzuweisung

public void horizontalBewegen(int entfernung) {

loeschen();

xPosition = xPosition + entfernung;

zeichnen();

}

}

Datentypen

DatentypBeschreibungWerteSpeicherbedarf
boolean Wahrheitswert true oder false 1 Bit
int ganze Zahl (z.B.) -3; 0; 5 32 Bit (4 Byte)
double Dezimalzahl (z.B.) 3.27; -0.05 64 Bit (8 Byte)
char einzelnes Zeichen 'a'; '5' 16 Bit (2 Byte)

Der Datentyp „String“ ist ein zusammengesetzter Datentyp, der sich aus einzelnen Daten vom Typ „char“ zusammensetzt, z.B. "Abc" = 'A' + 'b' + 'c'.

Kommentierung

Jede Methode sollte vorher kommentiert werden, damit der Leser des Quelltextes eine Chance hat zu verstehen, was mit dieser Methode bewirkt werden soll. Bei einer Zeile verwendet man die Zeichenfolge //.

Bei mehreren Zeilen wird Folgendes benutzt:

/**Diese Methode soll zeigen,

* dass sie sinnlos ist.

*/

Zugriffsrechte

Beim Definieren der Attribute durch Zugriffsrechte gibt es zwei Möglichkeiten:

Im Sinne der Datenkapselung (Objekte sollen nicht direkt auf Attributwerte anderer Objekte zugreifen dürfen) werden Attribute üblicherweise als "private" deklariert. Soweit eine Änderung des Attributwerts zugelassen werden soll, wird eine Methode mit dem Zugriffsmodifikator public zur Verfügung gestellt, die diese Änderung (i.d.R. nach Prüfung auf sinnvolle Werte, z.B. Altersangabe zwischen 0 und 100) durchführt.

Rückgabewerte

Verwendet man „void“, ist keine Rückgabe eines Wertes vorgesehen (ein ggf. geändeter Wert ist nur über den Objektinspektor einsehbar). Bei „int“ wird eine integer-Zahl zurückgegeben und kann von einem anderen Objekt weiterverarbeitet werden bzw. über die Konsole betrachtet werden. Analog dazu funktionieren „double, String, boolean“.

Wertzuweisung

Eine Wertzuweisung an eine Variable geschieht durch einen Ausdruck der Form

x = 50;

y = x + 25;

y = (2*x + 3) - 5

Dabei wird der Variablen auf der linken Seite die Zahl oder das Ergebnis des Rechenausdrucks auf der rechten Seite zugewiesen, z.B. y = 5; x = 12; y = 3*x - 6; danach ist y = 30 und x = 12.

Der Ausdruck y = x%3 (sprich: x modulo 3) bedeutet, dass y der Rest zugewiesen wird, der sich bei der Division von x durch 3 ergibt. Mit x = 13; y = x%3; wird y der Wert 1 zugewiesen.

Kurzformen

y++; bedeutet dasselbe wie y = y + 1; und y-- dasselbe wie y = y - 1;. Möchte man y = y + 3 oder y = y - 3 abkürzen, verwendet man y += 3 bzw. y -=3.


Verzweigungen und Schleifen

Zählmarke verzweigungen-und-schleifen

Verzweigungen

if-Anweisung

Die Syntax für eine if-Anweisung lautet wie folgt:

if(Bedingung) {Anweisungen} else {Anweisungen}

Der else-Teil kann auch entfallen, falls man keine Anweisung definieren möchte, wenn die Bedingung nicht erfüllt ist. Erfolgt zudem nur eine Anweisung, können die geschweiften Klammern weggelassen werden:

if(n > 0) x = x/n;
Vergleichsoperatoren

Folgende Vergleichsoperatoren können verwendet werden:

BedeutungBeispiel
==gleichx == 3
!=ungleichx != y
>größer4 > 3
>=größer oder gleichx >= y
<kleinerx+1 < 0
<=kleiner oder gleichx <= y

Es gibt zusätzlich noch diese zusammengesetzten Vergleiche:

if(x >= 0 && x <= 10) y = x;

Mehrfachverzweigungen: Switch-Case-Anweisungen

Die Syntax sieht so aus (erklärt an einem Programm zur Ermittlung der Tagesanzahl eines Monats):

switch (monat) {

case 1: case 3: case 5: case 7: case 8: case 10: case 12: tage = 31; break;

case 4: case 6: case 9: case 11: tage = 30; break;

case 2: {if(jahr%4 == 0) tage = 29; else tage = 28;}; break;

}

Der Grundgedanke bei dieser Methode ist der, dass der Rechner zur passenden case-Marke springt und die dort angegebene Anweisung ausführt; passt keine Marke, springt er an das Ende der switch-Anweisung und führt keine Anweisung aus.

Der switch-Ausdruck muss vom Typ integer oder char sein. Die case-Marken müssen Konstanten, d.h. Zahl oder Zeichen, sein (keine Rechenausdrücke). Der Typ der case-Marke muss zum switch-Ausdruck passen, case-Marken müssen voneinander verschieden sein und müssen mit einem break beendet werden.

Schleifen

for-Schleife

Die Syntax sieht wie folgt aus:

for(int i = 0; i <= n; i = i +1) {Anweisungen}

Dabei werden die Laufvariablen durch int i = 0 initialisiert, durch i <= n eine Abbruchbedingung definiert und durch i = i +1 oder i++ die Laufvariable verändert. Statt i kann der Bezeichner anders genannt werden.

Es ist auch möglich abwärts zu zählen, also i = i - 1 oder i--. Die Abbruchbedingung muss dementsprechend angepasst werden. Außerdem kann die Schrittweite beliebig verändert werden, z.B. i = i + 5.

while-Schleife

while(Bedingung) {Anweisungen}

Solange die Bedingung erfüllt ist, führt das Programm die zwischen den geschweiften Klammern aufgelisteten Anweisungen aus.


Arrays (Felder)

Zählmarke arrays

Einleitung

Häufig kommt es vor, dass man mehrere gleichartige Elemente, wie z. B. Zahlen, Zeichen oder booleschen Werten speichern möchte. Hierbei kann bereits zu Beginn gesagt werden, dass es eine bestimmte Anzahl an Elementen gibt; genauso ist es aber möglich, dass die Anzahl der Elemente noch nicht abgesehen werden kann.

Die einzelnen Elemente können zwar mit jeweils einer eigenen Variable beschrieben werden.

Einfacher ist hingegen die Verwendung eines Arrays, also eines Felds. In diesem Array wird jedem Element ein Wert von 0 bis zum Endwert zugewiesen. Dieser Wert wird auch als Index bezeichnet. Über den Aufruf des Index kann somit das Element selbst aufgerufen werden.

Deklaration eines Arrays

Die Deklaration eines Arrays erfolgt in Java durch die Angabe, dass es ein Array ist, durch die Angabe des Datentyps für alle Feldwerte und durch die Angabe des Bezeichner des Array. Die Deklaration sieht damit wie folgt aus:

int[] a;

float[] b;

boolean[] c;

a, b, c sind hierbei die Namen des Arrays. Hier ist seine Länge noch nicht festgelegt. Es kann daher noch nicht damit gearbeitet werden. Es hat den Wert null. Um die maximale Länge des Arrays festzulegen, wird der gewünschte Wert in die eckigen Klammern geschrieben:

int[5] a;

float[2] b;

boolean[20] c;

Somit hat a nun Platz für 5 Integer-Werte, b Platz für 10 Float-Werte und c Platz für 20 Bool-Werte. Ohne Zuweisung eines Werts zu einem Index hat ein Element den Wert null.

Die einzelnen Werte können sodann mit a[0], a[1], ... , a[4] angesprochen werden. Wichtig ist dabei, dass nicht ab der ersten Stelle gezählt wird, sondern ab der „nullten“.

Um das Array gleich bei der Erzeugung mit Werten zu füllen, können die sofort in einer geschweiften Klammer angegeben werden. In diesem Fall sähe das Array beispielsweise wie folgt aus:

a = new int[] {1, 4, 9, 16, 25};

b = new float[] {0.8, 4.2}

Das Element a[3] hätte dann den Wert 16.

Eindimensionale und mehrdimensionale Arrays

Oben wurde lediglich das eindimensionale Array behandelt. Es ist allerdings auch denkbar, dass einem Feld mehrere Werte zugewiesen werden. In diesem Fall spricht man von mehrdimensionalen Arrays.


Vererbung und Polymorphie

Zählmarke vererbung-und-polymorphie

Eine Fluglinie könnte ihre Mitarbeiter in Piloten, Flugbegleiter und Bodenpersonal aufteilen. Alle Attribute und Methoden, die alle Mitarbeiter gemeinsam haben, wie z.B. persnr, name, kuendigen() werden in der Oberklasse PERSONAL festgelegt.

Attribute und Methoden, die nur einen Teil der Mitarbeiter betreffen, werden dagegen in der betreffenden Unterklasse aufgenommen (z.B. das Attribut abteilung in BODENPERSONAL). Die Unterklasse erbt sämtliche Attribute und Methoden der Oberklasse. In Java wird der Bezug zur Oberklasse mittels des Schlüsselwortes extends hergestellt, also z.B. class BODENPERSONAL extends PERSONAL. Das zugehörige Klassendiagramm könnte also folgendermaßen aussehen:

Beispiel für ein Klassendiagramm der Vererbung und PolymorphieBeispiel für ein Klassendiagramm der Vererbung und Polymorphie
Beispiel für ein Klassendiagramm der Vererbung und Polymorphie

Im Beispiel werden die Methoden befoerdern(), gehaltBerechnen() von allen Objekten der drei Unterklassen verstanden, da sie von der gemeinsamen Oberklasse PERSONAL geerbt wurden, allerdings werden diese Methoden z.T. überschrieben. Erst zur Laufzeit dieses Programms entscheidet sich je nach Zugehörigkeit zu einer der drei Unterklassen, welche der verschiedenen Ausprägungen ausgeführt wird.

Da hierbei der gleiche Methodenaufruf bei Objekten verschiedener Klassen eine unterschiedliche Ausführung bewirkt, spricht man von Polymorphie (griech. „Vielgestaltigkeit“). In dem Beispiel bekommt ein Pilot zum Grundgehalt eine Zulage abhängig vom Rang, während das Bodenpersonal für geleistete Überstunden zusätzlich entlohnt werden. Flugbegleiter haben keine Zusätze. Ähnliches gilt für die Methode befoerdern().

Sollten von einer Oberklasse keine Objekte erzeugt werden, z.B. weil jeder Mitarbeiter einer der drei Unterklassen angehört, verwendet man eine abstrakte Oberklasse PERSONAL, die im Diagramm durch {abstract} kenntlich gemacht wird. In Java erhalten abstrakte Klassen das Schlüsselwort abstract. In einer solchen Klasse muss eine Methode wie befoerdern() nicht ausformuliert werden, sondern kann ebenfalls als abstrakt deklariert werden. Das ist quasi nur eine Ankündigung, dass diese Methode existiert und in allen Unterklassen ausformuliert wird.


Sortierverfahren

Zählmarke sortierverfahren

Allgemeines

Das Sortieren von Daten nach bestimmten Kriterien gehört zu den wichtigsten Problemen der Informatik. Bei großen Datenmengen ist es sehr wichtig, dass effiziente Algorithmen zur Verfügung stehen, die möglichst wenig Zeit zum Sortieren benötigen. Im Folgenden werden „einfachere“ Algorithmen betrachtet, die recht verständlich zu impletieren sind, aber eine relativ lange Laufzeit haben.

Die drei Algorithmen Insertsort (Sortieren durch Einfügen), Selectionsort (Sortieren durch Auswählen) und Bubblesort (Sortieren durch Vertauschen) werden beschrieben und an einem Beispiel erläutert. Auf weitere Algorithmen wie Mergesort oder Quicksort werden dagegen nicht besprochen.

Selectionsort, Insertsort, Bubblesort

Selectionsort

Grundlagen

Selectionsort arbeitet nach dem Prinzip, das kleinste Element des Feldes zu suchen, und dieses dann mit dem ersten Element des zu betrachteten Teils zu tauschen.

Zu Beginn sucht man im ganzen Feld nach dem kleinsten Element und tauscht es mit dem ersten Element. Danach sucht man im Restfeld ohne erstes Element nach dem kleinsten Element und tauscht mit dem zweiten Element bzw. mit dem ersten Element des zu betrachtenden Teils. Dies wiederholt man, bis das zweitgrößte Element an den korrekten Platz Platz gebracht wurde.

Beispiel
Beispiel für das Sortieren mit SelectionsortBeispiel für das Sortieren mit Selectionsort
Beispiel für Selectionsort

Insertsort

Grundlagen

Insertsort arbeitet nach dem Prinzip, das Feld in einen sortierten und einen unsortierten Teil zu teilen und dann das erste Element des unsortierten Teils an die richtige Stelle im sortierten Teil zu schieben. Zunächst besteht der sortierte Teil aus dem ersten Element. Das erste Element des unsortierten Teils ist damit das zweite. Dieses wird solange mit dem vorherigen vertauscht, solange es kleiner als dieses ist oder das Element noch nicht das erste Element des Feldes ist.

Somit vergrößert sich der sortierte Teil jeweils um eins, während sich der unsortierte um eins verringert. Dies wird wiederholt, bis der unsortierte Teil null wird und somit das ganze Feld sortiert vorliegt.

Beispiel
Beispiel für das Sortieren mit InsertsortBeispiel für das Sortieren mit Insertsort
Beispiel für Insertsort

Bubblesort

Grundlagen

Der Sortieralgorithmus Bubblesort (Blasensortierung) arbeitet nach dem Prinzip, dass das Feld durchlaufen wird und dabei so getauscht wird, dass das größte bzw. kleinste Element an der richtigen Stelle steht. Nachfolgend wird die aufsteigende Variante beschrieben, so dass das größte Element nach oben wandert.

Man beginnt dazu am Anfang des Feldes und tauscht benachbarte Elemente aus, wenn das rechte Element kleiner als sein Vorgänger ist. Somit steht das größte Element nach einem Durchlauf am Ende des Feldes. Diese Sortierung wird wiederholt, ohne dass dabei der letzte bereits sortierte Feldteil betrachtet wird. Damit erhält man ein sortiertes Feld.

Beispiel mit dem Feld der Abfolge „5, 37, 13, 21, 2, 13“
1. Durchlauf
Beispiel für das Sortieren mit Bubblesort - Durchlauf 1Beispiel für das Sortieren mit Bubblesort - Durchlauf 1
Man sieht, wie die größte Zahl 37 wie eine Blase (markiert) nach hinten steigt.
2. Durchlauf
Beispiel für das Sortieren mit Bubblesort - Durchlauf 2Beispiel für das Sortieren mit Bubblesort - Durchlauf 2
3. Durchlauf
Beispiel für das Sortieren mit Bubblesort - Durchlauf 3Beispiel für das Sortieren mit Bubblesort - Durchlauf 3
 
4. Durchlauf
Beispiel für das Sortieren mit Bubblesort - Durchlauf 4Beispiel für das Sortieren mit Bubblesort - Durchlauf 4
5. Durchlauf
Beispiel für das Sortieren mit Bubblesort - Durchlauf 5Beispiel für das Sortieren mit Bubblesort - Durchlauf 5

Endliche Automaten

Zählmarke endliche-automaten

Einführung

Programme können in Zustandsdiagrammen dargestellt werden. Darin werden Übergänge und Aktionen dargestellt. Wird eine Aktion zeitgleich mit dem Übergang gestartet, spricht man von ausgelösten Aktionen.

Die verschiedenen Aktionen führen wiederum zu verschiedenen Zuständen. Ist die Anzahl der Zustände begrenzt, also endlich, spricht man von einem endlichen Automat. Mithilfe eines solchen endlichen Automaten lassen sich viele (aber nicht alle) Systeme modellieren.

Ein endlicher Automat ist eine Art „Black Box“. Befindet sich diese Black Box nach Abarbeitung der Eingabefolge in einem ausgezeichneten Zustand, dem sogenannten Endzustand, so handelt es sich um eine akzeptierte Folge, ansonsten hat sie die Eingabe nicht akzeptiert.

Beispiel: Schwimmbadautomat

Der Eintritt in ein Schwimmbad kostet 2€. Nach Eingabe von Münzen im Gesamtwert von mindestens 2€ öffnet der Automat die Schranke, sonst nicht. Er akzeptiert lediglich Münzen im Wert von 0,50€, 1€ und 2€.

Das zugehörige Zustandsdiagramm sieht so aus, wobei q Zustand beschreibt:

Zustandsdiagramm für einen Endlichen AutomatenZustandsdiagramm für einen Endlichen Automaten
Zustandsdiagramm für einen Endlichen Automaten

Zustandsübergangstabelle

Das Zustandsdiagramm lässt sich auch tabellarisch darstellen. Diese Tabelle wird als Zustandsübergangstabelle bezeichnet. Hierbei steht in der Kopfzeile die Aktion, die den Übergang auslöst, in der linken Spalte der Aggregatszustand des Übergangs und in der Zelle die ausgelöste Aktion sowie den Zielüberstand des Übergangs[1]Informatik 3, S. 83..

Beim Schwimmbadautomaten sähe die Tabelle etwa wie folgt aus:

0,5 1,0 2,0
start q0,5 q1 q2
q0,5 q1 q1,5 q2
q1 q1,5 q2 q2
q1,5 q2 q2 q2
q2 q2 q2 q2

Häufig werden in der Informatik „Wörter“ als Zeichenketten (häufig nur Zeichen a und b) oder auch „Zahlen“ als Ziffernketten eingegeben und daraufhin untersucht, ob sie eine bestimmte Bedingung erfüllen.

Implementierung von endlichen Automaten

Endliche Automaten werden durch ein spezielles Objekt implementiert. Dabei wird der Zustand des Objekts durch eine konkrete Kombination der Attributswerte definiert. Häufig werden allerdings nicht alle Attributswerte benötigt. Aus diesem Grund kann ein spezieller Zustand verwendet werden, dessen Wert den Zustand des simulierten Automaten beschreibt[2]Informatik 3, S. 83..


Literatur und Quellen

Literatur

Quellen

  1. Endliche Automaten
  2. Informatik 3, S. 83.
  3. Informatik 3, S. 83.