[quote='_Linuxhippy','http://www.informatik-forum.at/testing/forum/…7995#post657995']Hi,
1. Wisst ihr wie man in Eiffel in einer Kind-Klasse die redefinierte Methode der SuperKlasse aufrufen kann, ähnlich wie in java mit super:
void overridden() {
super. overridden();
}
Das Schlüsselwort hierfür ist Precursor().
2. Ich bin grad am Eiffel-Lernen und würde gern meine Klassenvariablen "private" machen, sowie getter/setter methoden dafür implementieren:
feature {NONE}
names : LINKED_LIST[String]
feature {BANK}
addKunde (kunde : PERSON)
require
name_not_null: names.count > 0
do
kunden.put_front (kunde)
end
Alles anzeigen
Private gibt es in Eiffel nicht wirklich. Die Sprache lässt kein direktes Schreiben( wie in public) zu. Für Getter, Setter musst du dir Features anlegen.
Es besteht also eigentlich kein Grund die names nach NONE zu exportieren, weil von draußen onehin nur lesend zugegriffen werden könnte.
Aber wenn ich das kompiliere, meckert der Eiffel-Kompiler:
some clients have access to routine, but not to feature used in precondition
Ich verstehe das Problem hier nicht ganz, ich stehe addName/removeName methoden zur verfügung - und möchte eigentlich nicht dass jemand der addKunde aufrufen kann auch zugriff auf die Liste hat. Habt ihr hier eine Idee?
Das Problem ist leicht erklärt: Eiffel verwendet das klassische Server-Client Prinzip.
Dabei garantiert ein Client die Precondition und kann sich dann auf den Server verlassen der die Invarianten und Postconditions einhält.
Dein Client kann allerdings die Precondition nicht garantieren, weil du darin die names abfragst, die zu NONE exportiert sind worauf er also keinen Zugriff hat.
Falls dich solche Objektorientierten Konzepte interessieren(wie z.B. auch die Kovarianz in Eiffel von Typparametern) kann ich dir übrigends nur Fortgeschrittene Objektorientierte Programmierung bei Professor Puntigam ans Herz legen. Da programmiert man unter anderem auch in Eiffel und Smalltalk.