----•(-• icronosonic •-)•----
bloggt im

Profile


Left Tab Panel




Right Tab Panel

Blog Panel

oop kaffeemaschine

Monday, April 20, 2009 : 4:24 PM

icro wrote:

IF NOT
kaffeemaschine.istNochWasDrin(bohnen)
THEN
freundin.freundlich_anreden("Hol ma Kaffee!")
ENDIF

MaximeP. wrote:
Das ist meiner Meinung nach ein Verstoß gegen "Tell, don't ask".
Schreib lieber

kaffeemaschine.ausreichendeMengeAnBohnenSicherstellen(freundin);



Komplett überdacht:
Damit hat deine Kaffeemaschine die Zuständigkeit für freundin? Das ist doof, denn damit verlangst du, dass kaffeemaschine die Schnittstelle von freundin kennt. Was hat der Producer von kaffeemaschine mit meiner Freundin zu tun?

Iwie muss das an eine übergordnete Instanz. Sonst wird das nix. Diese muss dann, je nach Situation, kaffeemaschine und freundin ansteuern können.


feature kaffecheck is
require
kaffee_observer: hat_aufsicht
do
if not kaffeemaschine.is_all_set
then kaffeemaschine.reset
end

from
until kaffeemaschine.fuellstand > 0
loop
freundin.freundlich_anreden("Hol ma Kaffee!")
end
end


"freundin" implementiert eine allgemeine Schnittstelle "anweisung verarbeiten", damit telldontask bei kaffeemaschine eine do auslösen kann. "freundin" muss dann nur das Protokoll "kaffeemaschine" verstehen.

Es ist eben nur eine Verschmelzung zweier Komponenten die vollkommen unterschiedlich sind. Das macht das alles unsauber.

Oder man modelliert, dass freundin einen freund versteht. Beide sprechen ohnehin (manchmal) die gleiche Sprache.



indexing
description: "Kaffeebohnen, geröstet."
expanded class KAFFEE
end

indexing
description: "Kann man an einer Maschine drücken"

deferred class
KNOPF
feature
press is
deferred
end
end

indexing
description: "[
Maschinen, die Lebensmittel bevorraten und portionsweise
bereit stellen, auf Knopfdruck.
]"
deferred class SPENDER[INHALT]

feature -- Measurement
fuellstand: INTEGER is
-- Vorrat in Prozent
deferred
ensure
normale_befuellung: 0 <= Result and Result <= 100
end

feature -- Status report
is_all_set: BOOLEAN is
-- in Betrieb, prinzipiell lauffähig, kein Fehler
deferred
end

is_done: BOOLEAN is
-- eine Portion hergestellt
deferred
end

feature -- Status setting
reset is
-- Interne Überprüfung neu starten
-- may raise an exception due to hardware failure
deferred
end

feature -- Basic operations
lauf(gedrueckt: KNOPF) is
-- Maschinenlauf gemäß Knopffunktion starten
require
system_health: is_all_set
was_drin: fuellstand > 0
deferred
ensure
fertig: is_done
end

befuellen(menge: INTEGER; quelle: BAG[INHALT]) is
-- 'menge' Einheiten aus 'quelle' entnehmen und neu bevorraten
require
-- Die 'quelle' muss wirklich eine Quelle sein, aber auch
-- wieder aufnehmen können, damit Wiederherausnehmen
-- während des Befüllvorgangs modelliert werden kann:
quelle_voll: menge > 0 implies quelle.prunable
wieder_zurueck: menge < 0 implies quelle.extendible
deferred
end

invariant
korrekt_befuellt: 0 <= fuellstand and fuellstand <= 100

end -- class SPENDER



indexing
description: "Angehörige eines Haushaltes."

class IMHAUSHALTLEBENDE
create
make
feature
make(name: STRING; telefon_nummer: INTEGER; stellung: INTEGER) is
-- 'stellung' ist eine der Konstanten von 'IMHAUSHALTLEBENDE'
-- die nach Weisungsbefugnis geordnet sind.
-- Die Ordnung muss nicht der Klassenhierarchie folgen.
do
the_name := name ; the_id := telefon_nummer
the_status := stellung
end

freund: INTEGER is 0
hundvonfreund: INTEGER is 1
gast: INTEGER is 10
nachbarn: INTEGER is 10
freundin: INTEGER is 100

feature {IMHAUSHALTLEBENDE} -- Implementation
the_name: STRING
the_id: INTEGER
the_status: INTEGER
end -- class IMHAUSHALTLEBENDE

indexing
description: "Freundinnen im Haushalt."
deferred class FREUNDIN
inherit IMHAUSHALTLEBENDE

feature
hat_was_gemacht(anweisung: STRING): BOOLEAN is
-- hat gehorcht und getan
deferred
end
standesgemaess_anreden(anweisung: STRING) is
-- 'Current' soll `anweisung' ausführen
deferred
end
end -- class FREUNDIN

indexing
description: "Arbeitet und ist für den Kaffee zuständig."
class FREUND inherit IMHAUSHALTLEBENDE

feature
aufsicht(betriebsmittel: SPENDER[KAFFEE]) is
-- freund soll für dieses 'haushaltsmittel' gerade stehen
do
kaffee_automat := haushaltsmittel
end
hat_aufsicht: BOOLEAN is
-- ist für Kaffe zuständig?
do
Result := kaffeemaschine /= Void
end
kaffe_check is
-- freund sorgt für kaffenachschub.
require
kaffee_aufsicht: hat_aufsicht
do
if not kaffee_automat.is_all_set then
kaffee_automat.reset
end
from until kaffee_automat.fuellstand > 0 loop
freundin.freundlich_anreden ("Hol ma Kaffee!")
end
end

feature {IMHAUSHALTLEBENDE}
ordne_unter(maxime: FREUNDIN) is
require
darf_anweisen: the_status < maxime.the_status
do
freundin := maxime
end

feature {NONE} -- Implementation
freundin: FREUNDIN
kaffeemaschine: SPENDER[KAFFEE]
end -- class FREUND

anschauungsbeispiel

Wednesday, September 12, 2007 : 10:37 PM

Maxime:
Also bislang wurde immer nur der Baum im Wald analysiert. Von diesem einfach so auf einen Baum vorm Haus zu schließen ist unzulässig. Der Zustand eines Baumes vorm Haus, von dem niemand weiß, ob er noch steht, sollte erst einmal ausdiskutiert werden.
Ich:
Qualitativ? ;)
Maxime:
Das wäre für den Anfang in Ordnung, ja.
Sani:
Gut, dann mache er den Anfang.

Irgendwie soll es ja um die Klärung der Frage gehen, ob ein Baum vorm Haus, der momentan von keiner Person gesehen wird, umgefallen ist. Klären wir also zuerst schnell die Rahmenbedingungen, schaffen wir uns ein ganz simples und alles vereinfachendes Modell.

Vorausgesetzt wird zunächst einmal ein Haus. Hierbei soll es sich ein ganz gewöhnliches Haus handeln, denn wie erwähnt geht es uns ja um ein vereinfachendes Modell. Es ist also klar, dass es nur ein Haus mit 742 m² Grundfläche, 18 Schlafzimmern, 12 Badezimmern, 4 großen und 7 kleinen Salons, 5 Gästezimmern, 3 Küchen, mehreren Kämmerchen, 3 Saunen, 2 Pools und einem 97,25 m² großen Hintergarten sein kann, denn bekanntlich sind solche Häuser in Capistrano Beach ganz gewöhnlich. Weiter hinten im Grundstück befinden sich übrigens zwei Gästehäuser und die Baracke für das Personal, doch diese spielen hier nur eine untergeordnete Rolle.

Die zweite Voraussetzung ist ein Baum. Um was für einen Baum es sich dabei handelt ist absolut irrelevant. Doch um das Modell zu simplifizieren, greifen wir uns einfach eine Baumsorte, die sich seit langem der Evolution widersetzt und darum seit Ewigkeiten unverändert Mutter Erde besiedelt. Dies hat den klaren Vorteil, dass unser Modell vermutlich auch in Zukunft anwendbar bleibt, denn auch dann wird es solche Bäume in ihrer heutigen Form geben. Der Baum, das ist jetzt jedem klar, ist ein Ombu.
Gut, man könnte nun einwenden, dass ein Ombu optisch nicht den heute vorherrschenden Vorstellungen von einem normalen Baum entspricht, doch es ist eben ein evolutionär gesehen alter Baum, der muss sich der aktuellen Baummode ja nicht anpassen. Auch dass dieser Baum kein Holz im eigentlichen Sinne hat, sondern nur aus Rindenschichten besteht, hat keinen zu stören.

Weiterhin gehen wir davon aus, dass der Ombu vor oben erwähntem Haus zu finden ist. Grob vereinfachend setzen wir im Modell eine Haus-Baum-Distanz von 713,92 Inches voraus. Dabei befindet sich unser Ombu exakt unterhalb des Sattels des - von rechts gezählt - zweiten südlichen Erkers gleich links vom mittleren Küchenfenster der zweiten Küche (das ist die mit der rustikalen Einrichtung, in der nur traditionelle Gerichte des französischen Landadels des 14. Jahrhunderts bereitet werden), wenn man in nordöstlicher Richtung zum Haus blickt.

Weiters sei kein Humanoid noch ein anderes intelligentes Lebewesen zugegen, so dass keiner auf Grund optischer, akustischer oder sonstiger Wahrnehmungen den Zustand des Baumes festzustellen vermag. Die klimatischen Bedingungen für eine Fata Morgana seien nicht gegeben und alle funktionierenden Kristallkugeln habe ich persönlich
eingezogen und so untergebracht, dass auf sie nicht zurückgegriffen werden kann.

Damit ist auch schon das leicht überblickbare Modell für unsere Betrachtung komplett. Nun ist nur noch schnell zu klären, ob der Baum nun umgefallen ist oder ob er noch steht. Naja, die Lösung ist doch offensichtlich und darum imo keine Erwähnung wert.

panzerriegel für außentüren

Monday, July 23, 2007 : 11:06 AM

Max:
Fenster, Haustür (Briefkasten), (Flach-)Dach und selbst viele Wände (Holzständer oder Ytong/Poroton) sind ruck-zuck geöffnet.
Kevin:
Naja, das führt in letzter Konsequenz dazu, dass man die Haustüre offen stehen lässt, damit der Einbrecher nichts kaputtmacht ;-),


Wenn die reinkommen wollen, kommen die auch rein. Entäuschung über großen Aufwand beim Reinkommen aber geringer Ausbeute zum Raustragen resultiert gerne in unterschwelligem Zwang zum Vandalismus.

Meine Meinung: Wenn die es schaffen reinzukommen, haben die sich auch
verdient, was mitzunehmen...

funzt net

Wednesday, March 14, 2007 : 2:56 PM

Kevin:
Gleichzeitiger Zugriff von mehreren Leuten und keine Dateisperren gesetzt?

Gehört aber zu der Kategorie: Mein Script funzt nicht.
Warum?

Antwort kurz:
Programmfehler!

Antwort lang:
Der Computer und du sind ganz offensichtlich unterschiedlicher Meinung darüber, wie dein geschriebener Code wohl interpretiert werden sollte. Dies ist eine nicht unübliche Störung der im Regelfall grundsätzlich leicht unharmonischen Beziehung zwischen Organik und Mechanik.
Wenn freundliches und aufmunterndes Zureden nicht helfen sollte, dann versuche dich einmal durch Lesen der Dokumentation in die Psyche des Interpilers hineinzuversetzen. Viel Erfolg!

architektur ohne inhalte

Saturday, January 13, 2007 : 2:55 AM

Sani:
Die Daoisten sehen das Wesen eines Objektes an dem Nichts, das es umschließt.


Lao Tse ist tot. War eine tragische Geschichte. Nachdem er die Leere von Allem und Jedem erkannte, dürstete ihn, aber der Brunnen war leer. Er hatte Hunger, aber die Reiskörner waren leer. Er trat auf den Boden, aber die Erde war leer. Er sprach, aber seine Worte waren hohl und leer. Er betrachtete sein Leben, aber es war leer. Selbst die Leere war leer.

Er dürstete am Brunnen, hungerte beim Essen, versank im Boden, keiner verstand ihn. Dann kam die Tragödie, ein nicht leerer Zahnschmerz eines hohlen (leeren) Zahnes marterte ihn zu Tode. Ja, eine böse Geschichte, denn der Geldbeutel für einen Zahnarztbesuch war auch leer...


kostenloser Counter

Select tabs from Left Tab Panel:
[#1] [#2] [#3] [#4] [#5]

Select tabs from Right Tab Panel:
[#1] [#2] [#3] [#4] [#5]


Footer Panel

Status Panel