diff options
| -rw-r--r-- | eiffel-fragen/eiffel-fragen.txt | 6 | ||||
| -rw-r--r-- | eiffel-fragen/nachbedingung/application.e | 37 | ||||
| -rw-r--r-- | eiffel-fragen/nachbedingung/child.e | 25 | ||||
| -rw-r--r-- | eiffel-fragen/nachbedingung/counter.e | 30 | ||||
| -rw-r--r-- | eiffel-fragen/nachbedingung/nachbedingung.ecf | 21 |
5 files changed, 119 insertions, 0 deletions
diff --git a/eiffel-fragen/eiffel-fragen.txt b/eiffel-fragen/eiffel-fragen.txt index 7ccb881..3dac09d 100644 --- a/eiffel-fragen/eiffel-fragen.txt +++ b/eiffel-fragen/eiffel-fragen.txt | |||
| @@ -16,6 +16,12 @@ Die Zusicherungen wirken sich zwangsläufig stark auf die Laufzeit aus. Sie sind | |||
| 16 | ----------------------------------------------------------------------------------------- | 16 | ----------------------------------------------------------------------------------------- |
| 17 | - Vorbedingungen dürfen im Untertyp nicht stärker und Nachbedingungen nicht schwächer werden, um Ersetzbarkeit zu garantieren. Der Eiffel-Compiler überprüft diese Bedingungen. Ist es (trotz eingeschalteter Überprüfung von Zusicherungen) möglich, diese Bedingungen zu umgehen? Wenn ja, wie? | 17 | - Vorbedingungen dürfen im Untertyp nicht stärker und Nachbedingungen nicht schwächer werden, um Ersetzbarkeit zu garantieren. Der Eiffel-Compiler überprüft diese Bedingungen. Ist es (trotz eingeschalteter Überprüfung von Zusicherungen) möglich, diese Bedingungen zu umgehen? Wenn ja, wie? |
| 18 | 18 | ||
| 19 | Ja, indem ein "redefine" von Metodhen gemacht wird, die einem "ensure" verwendet werden kann dieses schwächer werden ohne, dass der Compiler es merkt. | ||
| 20 | |||
| 21 | Im Bsp: | ||
| 22 | Der interne Zustand von "item" dürfte nie negativ werden, daher auch ct.get() nie einen negativen wert liefern. | ||
| 23 | Bei CHILD wird der interene Zustand allerdings negativ, sichtbar durch ch.get(). | ||
| 24 | |||
| 19 | 25 | ||
| 20 | ----------------------------------------------------------------------------------------- | 26 | ----------------------------------------------------------------------------------------- |
| 21 | - 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? |
diff --git a/eiffel-fragen/nachbedingung/application.e b/eiffel-fragen/nachbedingung/application.e new file mode 100644 index 0000000..6babd0c --- /dev/null +++ b/eiffel-fragen/nachbedingung/application.e | |||
| @@ -0,0 +1,37 @@ | |||
| 1 | indexing | ||
| 2 | description : "nachbedingung application root class" | ||
| 3 | date : "$Date: 2008-12-29 15:41:59 -0800 (Mon, 29 Dec 2008) $" | ||
| 4 | revision : "$Revision: 76432 $" | ||
| 5 | |||
| 6 | class | ||
| 7 | APPLICATION | ||
| 8 | |||
| 9 | inherit | ||
| 10 | ARGUMENTS | ||
| 11 | |||
| 12 | create | ||
| 13 | make | ||
| 14 | |||
| 15 | feature {NONE} -- Implementation | ||
| 16 | ct: COUNTER | ||
| 17 | ch: CHILD | ||
| 18 | |||
| 19 | feature {NONE} -- Initialization | ||
| 20 | |||
| 21 | make | ||
| 22 | -- Run application. | ||
| 23 | do | ||
| 24 | print ("nachbedingung%N") | ||
| 25 | |||
| 26 | create ct | ||
| 27 | ct.set(3) | ||
| 28 | print ("ct " + ct.get().out + "%N") | ||
| 29 | |||
| 30 | create ch | ||
| 31 | ch.set(-2) | ||
| 32 | print ("ch " + ch.get().out + "%N") | ||
| 33 | |||
| 34 | print ("done%N") | ||
| 35 | end | ||
| 36 | |||
| 37 | end | ||
diff --git a/eiffel-fragen/nachbedingung/child.e b/eiffel-fragen/nachbedingung/child.e new file mode 100644 index 0000000..fcbe8c3 --- /dev/null +++ b/eiffel-fragen/nachbedingung/child.e | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | class | ||
| 2 | CHILD | ||
| 3 | inherit | ||
| 4 | COUNTER | ||
| 5 | redefine | ||
| 6 | set, | ||
| 7 | checkval | ||
| 8 | end | ||
| 9 | |||
| 10 | feature -- Element change | ||
| 11 | |||
| 12 | set (some_value: INTEGER) is | ||
| 13 | -- Set value of counter to some_value. | ||
| 14 | do | ||
| 15 | item := some_value - 10 | ||
| 16 | ensure then | ||
| 17 | checkval > 0 | ||
| 18 | end | ||
| 19 | |||
| 20 | checkval: INTEGER is | ||
| 21 | -- Get value of counter | ||
| 22 | do | ||
| 23 | Result := item + 20 | ||
| 24 | end | ||
| 25 | end | ||
diff --git a/eiffel-fragen/nachbedingung/counter.e b/eiffel-fragen/nachbedingung/counter.e new file mode 100644 index 0000000..db93ce7 --- /dev/null +++ b/eiffel-fragen/nachbedingung/counter.e | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | class | ||
| 2 | COUNTER | ||
| 3 | |||
| 4 | feature -- Access | ||
| 5 | |||
| 6 | item: INTEGER | ||
| 7 | -- Counter's value. | ||
| 8 | |||
| 9 | feature -- Element change | ||
| 10 | |||
| 11 | set (some_value: INTEGER) is | ||
| 12 | -- Set value of counter to some_value. | ||
| 13 | do | ||
| 14 | item := some_value | ||
| 15 | ensure | ||
| 16 | checkval > 0 | ||
| 17 | end | ||
| 18 | |||
| 19 | get: INTEGER is | ||
| 20 | -- Get value of counter | ||
| 21 | do | ||
| 22 | Result := item | ||
| 23 | end | ||
| 24 | |||
| 25 | checkval: INTEGER is | ||
| 26 | -- Get value of counter | ||
| 27 | do | ||
| 28 | Result := item | ||
| 29 | end | ||
| 30 | end | ||
diff --git a/eiffel-fragen/nachbedingung/nachbedingung.ecf b/eiffel-fragen/nachbedingung/nachbedingung.ecf new file mode 100644 index 0000000..d55b076 --- /dev/null +++ b/eiffel-fragen/nachbedingung/nachbedingung.ecf | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 2 | <system xmlns="http://www.eiffel.com/developers/xml/configuration-1-5-0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.eiffel.com/developers/xml/configuration-1-5-0 http://www.eiffel.com/developers/xml/configuration-1-5-0.xsd" name="nachbedingung" uuid="9ECF2BF2-5CA9-4126-B34E-978C47241CCD"> | ||
| 3 | <target name="nachbedingung"> | ||
| 4 | <root feature="make" class="APPLICATION"/> | ||
| 5 | <option warning="true"> | ||
| 6 | <assertions precondition="true" postcondition="true" check="true" invariant="true" loop="true" supplier_precondition="true"/> | ||
| 7 | </option> | ||
| 8 | <precompile name="base_pre" location="$ISE_PRECOMP/base.ecf"/> | ||
| 9 | <library name="base" location="$ISE_LIBRARY/library/base/base.ecf"/> | ||
| 10 | <cluster name="nachbedingung" location=".\" recursive="true"> | ||
| 11 | <file_rule> | ||
| 12 | <exclude>/EIFGENs$</exclude> | ||
| 13 | <exclude>/.svn$</exclude> | ||
| 14 | <exclude>/CVS$</exclude> | ||
| 15 | </file_rule> | ||
| 16 | </cluster> | ||
| 17 | </target> | ||
| 18 | <target name="nachbedingung_dotnet" extends="nachbedingung"> | ||
| 19 | <setting name="msil_generation" value="true"/> | ||
| 20 | </target> | ||
| 21 | </system> | ||
