In unserem Podcast diskutiert Thomas Bahn über Nutzen, Anwendungen und Erfahrungen aus den Bereichen Chatbots und Künstliche Intelligenz. Mehr erfahren

de · en

Abstrakte Klassen konkret

von Thomas,
assono GmbH, Standort Kiel,


Wenn du andere objekt-orientierte Programmiersprachen, wie z. B. Java, kennst, dann schätzt du wahrscheinlich auch abstrakte Klassen. Diese Klassen kann man nicht direkt instanziieren, also keine Objekte aus ihnen erstellen. Aber man kann andere Klassen davon ableiten, die man ganz normal instanziieren kann. In einer abstrakten Klasse kann man Attribute und Methoden haben wie in jeder anderen Klasse auch.

Normalerweise modellieren abstrakte Klasses ein Konzept oder eine Abstraktion, z. B. Tier. Es gibt Hunde und Katzen, aber kein Lebewesen ist nur ein Tier, es ist immer eine bestimmte, konkrete Art von Tier.

In der abstrakten Klasse Tier kann man all die Attribute und Methoden definierien, die alle Tiere gemeinsam haben. Dann kann man Unterklassen wie Hund oder Katze erstellen, die neue Mitglieder hinzufügen oder vererbte überschreiben.

Andere Klasses sind abstrakt, weil sie Methoden enthalten, die auf diesem Level nicht implementiert werden können. Nur die konkreten Unterklassen "wissen", wie eine solche Methode realisiert werden soll.

Ein typisches Beispiel wäre eine generische Klasse Sorter mit der abstrakten Methode Sortiere. In den konkreten Unterklassen BubbleSorter, HeapSorter and QuickSorter wird die Sortiere-Methode unterschiedlich überschrieben.

Unglücklicherweise gibt es in LotusScript keine abstrakten Klassen. Aber es gibt einen Weg, sie zu "simulieren":


Class AbstractClass

Public Sub New()
If TypeName(Me) = UCase("AbstractClass") Then
Error 1, |Abstract class: ? | & TypeName(Me)
End If
End Sub ' AbstractClass.New

Public Sub Method()
Error 2, |Abstract method: ...|
End Sub ' AbstractClass.Method

End Class

Class ConcreteSubclass As AbstractClass

Public Sub New()
' might be empty or not...
End Sub ' ConcreteSubclass.New

Public Sub Method()
' the implementation...
End Sub ' ConcreteSubclass.Method

End Class ' ConcreteSubclass

Achtung: Der Klassenname im String in der If-Anweisung in der New-Methode der abstrakten Klasse muss mit dem Namen der Klasse übereinstimmen.

Man kann jetzt zwar ein Objekt von AbstractClass erstellen - der LotusScript-Compiler erzeugt keine Warnung wie in Java - aber wenn der Code ausgeführt wird, wird ein Fehler generiert.

Wenn man dann eine Unterklasse wie ConcreteSubclass erstellt, stimmt TypeName(Me) nicht mehr mit UCase("AbstractClass") überein und der New-Konstruktor läuft erfolgreich durch, das Objekt wird erstellt.

Wenn die abstrakte Methode Method nicht von einer Unterklasse überschrieben würde, würde bei einem Aufruf die geerbte Methode der Oberklasse ausgeführt und ein entsprechender Fehler geworfen.

Fachbeitrag Entwicklung

Sie haben Fragen zu diesem Artikel? Kontaktieren Sie uns gerne: blog@assono.de

Sie haben Interesse an diesem Thema?

Gerne bieten wir Ihnen eine individuelle Beratung oder einen Workshop an.

Kontaktieren Sie uns

Weitere interessante Artikel

Sie haben Fragen?

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Gerne erstellen wir eine individuelle Demo für Sie.

assono GmbH

Standort Kiel (Zentrale)
assono GmbH
Lise-Meitner-Straße 1–7
24223 Schwentinental

Standort Hamburg
assono GmbH
Bornkampsweg 58
22761 Hamburg

Telefonnummern:
Zentrale: +49 4307 900 416
Vertrieb: +49 4307 900 402

E-Mail-Adressen:
kontakt@assono.de
bewerbung@assono.de