Klasse (Informatik): Unterschied zwischen den Versionen

Aus KGS-Wiki
(Erweitert und mit Beispiel ergänzt)
(Abstrakte Klasse)
Zeile 13: Zeile 13:
</syntaxhighlight>In so genannten ''streng getypten Sprachen'' wie [[Java (Programmiersprache)|Java]] muss beim Programmieren für jedes Objekt festgelegt werden, welchen Datentyp es hat. Dadurch kann schon beim [[Compiler|Kompilieren]] überprüft werden, ob alle aufgerufenen Methoden auch für die entsprechenden Objekte existieren. In ''dynamisch getypten Sprachen'' wie Python ist dies erst möglich, wenn das Programm läuft.
</syntaxhighlight>In so genannten ''streng getypten Sprachen'' wie [[Java (Programmiersprache)|Java]] muss beim Programmieren für jedes Objekt festgelegt werden, welchen Datentyp es hat. Dadurch kann schon beim [[Compiler|Kompilieren]] überprüft werden, ob alle aufgerufenen Methoden auch für die entsprechenden Objekte existieren. In ''dynamisch getypten Sprachen'' wie Python ist dies erst möglich, wenn das Programm läuft.


== Definition in Java ==
== Abstrakte Klasse ==
{{Lückenhaft}}
Manche Klassen möchte man nicht direkt instanziieren können, sondern nur ihre [[Vererbung (Informatik)|Kinder]]. Dann kann man diese Klasse als '''abstrakt''' deklarieren, Abstrakte Klassen dürfen auch ''leere Methoden'' enthalten, deren Verhalten für jede Kind-Klasse einzeln definiert werden ''muss''.<syntaxhighlight lang="java" line="1">
public abstract class Animal {
   
    public abstract String makeNoise();
 
}
 
public class Dog extends Animal {


== Definition in Python ==
    public String makeNoise() {
{{Lückenhaft}}
        return "Woof!";
    }


== Definition in JavaScript ==
}
{{Lückenhaft}}


== Abstrakte Klasse ==
public class Cat extends Animal {
{{Lückenhaft}}
 
    public String makeNoise() {
        return "Meow!";
    }
 
}
 
</syntaxhighlight>In diesem Beispiel können keine <code>Animal</code>-Objekte mit dem Aufruf <code>new Animal()</code> erzeugt werden. <code>Animal</code> legt aber fest, dass alle Unterklassen wie <code>Dog</code> und <code>Cat</code> eine Methode namens <code>makeNoise()</code> enthalten müssen.
[[Kategorie:Objektorientierte Programmierung]]
[[Kategorie:Programmierung]]

Version vom 5. September 2023, 14:20 Uhr

Eine Klasse dient in vielen Programmiersprachen als "Bauplan" für Objekte. Durch den Aufbau der Klasse wird festgelegt, welche Attribute und Methoden ein Objekt haben kann. Die konkrete Ausprägung dieser Attribute und die Ergebnisse der Methodenausführung bleiben den Objekten selbst überlassen. Die Klasse legt nur fest, wie die Objekte aussehen können und welches Verhalten man von ihnen erwarten darf.

Zum Beispiel legt die Python-Klasse str fest, dass alle str-Objekte, also Strings, eine Methode namens isnumeric() enthalten, die die Information liefert, ob dieser String numerisch ist. Das Ergebnis des Methodenaufrufs ist natürlich von dem String abhängig, auf dem es aufgerufen wird.

>>> string1 = 'Hello World!'
>>> string2 = '42'
>>> string3 = str()
>>> string1.isnumeric()
False
>>> string2.isnumeric()
True
>>> string3.isnumeric()
False

In so genannten streng getypten Sprachen wie Java muss beim Programmieren für jedes Objekt festgelegt werden, welchen Datentyp es hat. Dadurch kann schon beim Kompilieren überprüft werden, ob alle aufgerufenen Methoden auch für die entsprechenden Objekte existieren. In dynamisch getypten Sprachen wie Python ist dies erst möglich, wenn das Programm läuft.

Abstrakte Klasse

Manche Klassen möchte man nicht direkt instanziieren können, sondern nur ihre Kinder. Dann kann man diese Klasse als abstrakt deklarieren, Abstrakte Klassen dürfen auch leere Methoden enthalten, deren Verhalten für jede Kind-Klasse einzeln definiert werden muss.

public abstract class Animal {
    
    public abstract String makeNoise();

}

public class Dog extends Animal {

    public String makeNoise() {
        return "Woof!";
    }

}

public class Cat extends Animal {

    public String makeNoise() {
        return "Meow!";
    }

}

In diesem Beispiel können keine Animal-Objekte mit dem Aufruf new Animal() erzeugt werden. Animal legt aber fest, dass alle Unterklassen wie Dog und Cat eine Methode namens makeNoise() enthalten müssen.