conversations and music. that's basically my life, but I also do that other thing... wutsitcalled, uh... ohohoh... work. another activities: cooking italian pastas.
playing basketball, squash, surfing. and: I love Shiraz!
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
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.
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...
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!
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...
conversations and music. that's basically my life, but I also do that other thing... wutsitcalled, uh... ohohoh... work. another activities: cooking italian pastas.
playing basketball, squash, surfing. and: I love Shiraz!