summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Demel <tuempl@gmail.com>2011-06-29 01:11:44 +0200
committerHarald Demel <tuempl@gmail.com>2011-06-29 01:11:44 +0200
commit0a061daf3cf101f408bb913d541bbda7ca0c52ca (patch)
tree60892cc1f926784f7f26a88b874232fee9dd7475
parentfa080cdb57f7fed327b0f967545c389f0d87d9ca (diff)
downloadfoop-0a061daf3cf101f408bb913d541bbda7ca0c52ca.tar.gz
foop-0a061daf3cf101f408bb913d541bbda7ca0c52ca.tar.bz2
foop-0a061daf3cf101f408bb913d541bbda7ca0c52ca.zip
frage 3
-rw-r--r--eiffel-fragen/eiffel-fragen.txt6
-rw-r--r--eiffel-fragen/nachbedingung/application.e37
-rw-r--r--eiffel-fragen/nachbedingung/child.e25
-rw-r--r--eiffel-fragen/nachbedingung/counter.e30
-rw-r--r--eiffel-fragen/nachbedingung/nachbedingung.ecf21
5 files changed, 119 insertions, 0 deletions
diff --git a/eiffel-fragen/eiffel-fragen.txt b/eiffel-fragen/eiffel-fragen.txt
index 62fcef2..3fac8d0 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
19Ja, indem ein "redefine" von Metodhen gemacht wird, die einem "ensure" verwendet werden kann dieses schwächer werden ohne, dass der Compiler es merkt.
20
21Im Bsp:
22Der interne Zustand von "item" dürfte nie negativ werden, daher auch ct.get() nie einen negativen wert liefern.
23Bei 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 @@
1indexing
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
6class
7 APPLICATION
8
9inherit
10 ARGUMENTS
11
12create
13 make
14
15feature {NONE} -- Implementation
16 ct: COUNTER
17 ch: CHILD
18
19feature {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
37end
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 @@
1class
2 CHILD
3inherit
4 COUNTER
5 redefine
6 set,
7 checkval
8 end
9
10feature -- 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
25end
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 @@
1class
2 COUNTER
3
4feature -- Access
5
6 item: INTEGER
7 -- Counter's value.
8
9feature -- 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
30end
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>