Kennen Sie schon unseren Podcast? Thomas Bahn diskutiert mit Gästen aus Wirtschaft und Wissenschaft über Künstliche Intelligenz und Chatbots. Jetzt reinhören

OOP in LS: Konstruktoren überladen a la LotusScript

von Thomas,
assono GmbH, Standort Kiel,

Wir sind seit vielen Jahren aktive Verfechter für und Nutzer von objekt-orientierter Programmierung (OOP) mit LotusScript. Leider hat die Sprache an sich einige Defizite gegenüber moderneren Vertretern ihrer Art, wie zum Beispiel das Fehlen von Mehrfachvererbung oder zumindest Interfaces. Ein weiterer Punkt ist, dass man Methoden nicht überladen kann, also nicht mehrere Methoden erstellen kann, die den gleichen Namen haben und sich nur in der Anzahl und Art ihrer Parameter unterscheiden (Parametersignatur). Bei normalen Methoden kann man natürlich noch darauf ausweichen, dass man einfach unterschiedliche Namen vergibt, aber der Konstruktor muss immer Public Sub New heißen.

Eine Möglichkeit, den Konstruktor flexibler zu gestalten, ist es, ihm eine Liste zu übergeben, die den oder die Parameter enthält. Aber gerade, wenn es um genau einen Parameter geht, ist der Weg mit der Liste mit viel Overhead verbunden. Eine einfache, elegante Möglichkeit ist es dann, ein Variant und eine "Objektweiche" zu benutzen.

Als Beispiel dient der Konstruktur einer Klasse OpenGeoDBRecord. Die Objekte dieser Klasse sollen entweder mit einer Liste, einem Array, einem NotesDocument- oder einem NotesViewEntry-Objekt initialisiert werden können (oder "nackt" mit Vorgabewerten):

Private Class OpenGeoDBRecord

	Public Sub New(source As Variant)

		Dim openGeoDoc As NotesDocument
		Dim openGeoEntry As NotesViewEntry

		If TypeName(source) = "VARIANT LIST" Then
			Call ReadFromList(source)

		ElseIf TypeName(source) = "STRING( )" Then
			Call ReadFromArray(source)

		ElseIf source Is Nothing Then
			' initialize with default values...

		ElseIf source IsA "NotesDocument" Then
			Set openGeoDoc = source
			Call ReadFromDoc(openGeoDoc)

		ElseIf source IsA "NotesViewEntry" Then
			Set openGeoEntry = source
			Call ReadFromViewEntry(openGeoEntry)
		End If
	End Sub


	Public Sub ReadFromList(paramList As Variant)
		'/**
		' * reads data from a list with the parameter names as keys.
		' *
		' * @param paramList Variant list of parameters with parameter names as keys.
		' */
	End Sub


	Public Sub ReadFromArray(paramArray As Variant)
		'/**
		' * reads data from an array
		' *
		' * @param paramArray String array of parameters.
		' */
	End Sub


	Public Sub ReadFromDoc(openGeoDoc As NotesDocument)
		'/**
		' * reads data from a document
		' *
		' * @param openGeoDoc NotesDocument object to read from.
		' */
	End Sub


	Public Sub ReadFromViewEntry(openGeoEntry As NotesViewEntry)
		'/**
		' * reads data from a view entry (more efficient than from a NotesDocument)
		' *
		' * @param openGeoDoc NotesViewEntry object to read from.
		' */
	End Sub

End Class

Man beachte auch den "Cast" über die getypten Variablen.

Statt des IsA-Operators kann man natürlich auch TypeName(source) = "NOTESDOCUMENT" bzw.
TypeName(source) = "NOTESVIEWENTRY" verwenden.

Fachbeitrag HCL Notes Entwicklung Für Entwickler

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 407
Vertrieb: +49 4307 900 411

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