summaryrefslogtreecommitdiffstats
path: root/eiffel-fragen/eiffel-fragen.txt
diff options
context:
space:
mode:
authorHarald Demel <tuempl@gmail.com>2011-06-29 01:11:59 +0200
committerHarald Demel <tuempl@gmail.com>2011-06-29 01:11:59 +0200
commit28d807be719079971d2af7c3d2b62199f490a7e0 (patch)
tree75f17d864619ca52e976f899b1c777ebe5472b64 /eiffel-fragen/eiffel-fragen.txt
parent0a061daf3cf101f408bb913d541bbda7ca0c52ca (diff)
parent3947b2c9c9148fc402ae876a6ebf1c171ecc6148 (diff)
downloadfoop-28d807be719079971d2af7c3d2b62199f490a7e0.tar.gz
foop-28d807be719079971d2af7c3d2b62199f490a7e0.tar.bz2
foop-28d807be719079971d2af7c3d2b62199f490a7e0.zip
Merge branch 'master' of git.manuel.mausz.at:/foop
Diffstat (limited to 'eiffel-fragen/eiffel-fragen.txt')
-rw-r--r--eiffel-fragen/eiffel-fragen.txt8
1 files changed, 7 insertions, 1 deletions
diff --git a/eiffel-fragen/eiffel-fragen.txt b/eiffel-fragen/eiffel-fragen.txt
index 3fac8d0..3dac09d 100644
--- a/eiffel-fragen/eiffel-fragen.txt
+++ b/eiffel-fragen/eiffel-fragen.txt
@@ -26,6 +26,12 @@ Bei CHILD wird der interene Zustand allerdings negativ, sichtbar durch ch.get().
26----------------------------------------------------------------------------------------- 26-----------------------------------------------------------------------------------------
27- Eiffel erlaubt kovariante Eingangsparametertypen. Unter welchen Bedingungen führt das zu Problemen, und wie äußern sich diese? Können Sie ein Programm schreiben, in dem die Verwendung kovarianter Eingangsparametertypen zu einer Exception führt? 27- Eiffel erlaubt kovariante Eingangsparametertypen. Unter welchen Bedingungen führt das zu Problemen, und wie äußern sich diese? Können Sie ein Programm schreiben, in dem die Verwendung kovarianter Eingangsparametertypen zu einer Exception führt?
28 28
29 29Kovariante Eingangsparametertypen verstoßen gegen die Untertypsbeziehung, sogenannte Catcalls können auftreten:
30
31Kovariante Eingangsparameter werden in der Methode add_authorized_signer verwendet.
32ACCOUNT.add_authorized_signer erwartet eine PERSON, RETIREEACCOUNT.add_authorized_signer einen RETIREE. Das Codefragment in bank.e Zeile 56 führt zu einem Laufzeitfehler. Ohne Upcast würde ein Compilezeitfehler folgen (z.B. RETIREEACCOUNT.add_authorized_signer( student_instanz ) ), bei einem Upcast zu ACCOUNT erkennt der Compiler den Fehler nicht mehr und es wird eine "Catcall detected"-Exception geworfen.
33
30----------------------------------------------------------------------------------------- 34-----------------------------------------------------------------------------------------
31- Vereinfachen kovariante Eingangsparametertypen die Programmierung? Unter welchen Bedingungen ist das so? 35- Vereinfachen kovariante Eingangsparametertypen die Programmierung? Unter welchen Bedingungen ist das so?
36
37Kovariante Eingangsparametertypen können bei kovarianten Problemen, wie zum Beispiel bei binären Methoden hilfreich sein. Bei kontravarianten Eingangsparametern muss sich der Entwickler mit Patterns wie "visitor" oder type checks behelfen. Eine equals Methode könnte man in Eiffel mit kovarianten Eingangsparametern realisieren, die Untertypsbeziehung wird, wie bereits erwähnt, aufgelöst. Ist eine Untertypsbeziehung nicht notwendig, stellen kovariante Eingangsparametertypen kein Problem dar.