Kühlschrank

scratchy1

Bekanntes Mitglied
Hallo Leute,
ich versuche ein objektorientiertes Modell für einen Kühlschrank zu entwerfen:
Ein intelligenter Kühlschrank kommuniziert mit seiner Umwelt und mit sich
selbst.
• Er testet regelmäßig seine Komponenten auf Funktionstüchtigkeit. Bei
Defekten sendet er eine Nachricht an den Reparaturdienst und / oder
informiert seine Besitzerin bzw. seinen Besitzer.
• Er prüft ständig, welche Nahrungsmittel in ihm vorhanden sind.
• Wenn ein Nahrungsmittel zu Ende geht, sendet er eine Nachricht an das
Geschäft, das dieses Nahrungsmittel verkauft.
• Der Hausroboter sendet Nachrichten an den Kühlschrank, wenn eine
Lieferung angekommen ist.
Ich will ein objektorientiertes Modell eines intelligenten Kühlschranks entwickeln,
indem ich die Gegenstände seiner Welt angebe und die Methoden,
die der Kühlschrank und diese Gegenstände besitzen müssen, um zu
kommunizieren und ihre Aufgaben zu erledigen.

Folgendes habe ich mir ausgedacht:

Die ersten Objekte seien der Kühlschrank und jede seiner Komponenten mit der Methode doesfunction(), die einen boolean-Wert liefert, falls eine Komponente parts aus Komponenten[] parts mit i<=numberOfParts defekt ist, also der Wert false ausgegeben wird, dann wird der Kühlschrank dem Objekt Reparaturdienst mit der Methode reparieren() aufrufen, aber nur mit denjenigen parts, für die doesfunction() false ergab.

Das Objekt Besitzer wird mit der Methode alarmieren() benachrichtigt.

Als nächstes definiere ich ein Array Nahrungskorb[][] produkte, sodass jedes produkte[j][] mittels Methode vorhanden() dem Kühlschrank mitteilt, ob sein Fach gefüllt ist und wenn nicht, wieviele Elemente fehlen.

Falls nicht bis zum Anschlag gefüllt, wird Methode auffüllen() diejenigen richtigen Objekte Geschäfte (für jedes j ist das jeweilige Geschäft spezifiziert) für alle j, deren Fach nicht voll ist, vom Kühlschrank aus gestartet, die dem Geschäft sagt, wieviel von welchem Produkt benötigt wird, um den Kühlschrank aufzufüllen.

Mit dem Objekt Hausroboter und dem Geschäft gibt es die Methode lieferungda(), dass erstmal beim richtigen Geschäft schaut, ob dort der Nachschub da ist und dann dem Kühlschrank darüber in Kenntnis setzt.
Wie findet Ihr meinen Ansatz?
 

Oneixee5

Top Contributor
Ich würde da anders ran gehen. Ich würde jede Komponente auf Ereignisse reagieren und Nachrichten aussenden lassen. Alle Nachrichten würde ich in eine Warteschlange stellen (Ereignis: "Nachricht vorhanden") und Komponenten können auf die Nachrichten reagieren und diese aus der Warteschlange entfernen. So bleibt das System flexibel, erweiterbar und asynchron, es könnten dann sogar mehrere Geräte und Sensoren an die Warteschlange angeschlossen werden und zusammenarbeiten.
Beispiel: Komponente sendet Nachricht: 8 von 12 Eiern vorhanden - andere Komponente erkennt Nachricht als für sich relevant, löscht die Nachricht und bestellt Eier - Die Health-Komponente ignoriert diese Nachricht usw.
 

Javinner

Top Contributor
..Als nächstes definiere ich ein Array Nahrungskorb[][] produkte..
..Wie findet Ihr meinen Ansatz?
Verfrüht, denn es gibt da wesentlich bessere und pflegeleichtere Herangehensweisen, welche
  • besser wartbar
  • verständlicher
  • kürzer in Code
und einiges mehr sind und zu bieten haben. Meine Empfehlung ist, schreibe ein Skript für deine Idee, füge neuere Funktionen als Gedanken hinzu und lerne gleichzeitig Grundlagen. Wenn du die Datenstrukturen und Algorithmen verstanden hast, dann würde ich mich an die Aufgabe herantrauen. Jetzt, und das garantiere ich dir, wird es ein riiiiiiieeeeeesen Krampf werden! Aber versuch es ruhig, um später den Unterschied zu merken, zwischen vorgegriffen und gekonnt ;)
 

scratchy1

Bekanntes Mitglied
Ich würde da anders ran gehen. Ich würde jede Komponente auf Ereignisse reagieren und Nachrichten aussenden lassen. Alle Nachrichten würde ich in eine Warteschlange stellen (Ereignis: "Nachricht vorhanden") und Komponenten können auf die Nachrichten reagieren und diese aus der Warteschlange entfernen. So bleibt das System flexibel, erweiterbar und asynchron, es könnten dann sogar mehrere Geräte und Sensoren an die Warteschlange angeschlossen werden und zusammenarbeiten.
Beispiel: Komponente sendet Nachricht: 8 von 12 Eiern vorhanden - andere Komponente erkennt Nachricht als für sich relevant, löscht die Nachricht und bestellt Eier - Die Health-Komponente ignoriert diese Nachricht usw.
Hallo Oneixee5, interessanter Ansatz, also das ist ähnlich zu meinem Ansatz insofern ich auch jede Komponente als Objekt betrachte, dass jeweils mit dem Kühlschrank kommuniziert. Für das Fach finde ich das gut. Aber kann eine defekte Komponente wirklich richtig mit dem Kühlschrank kommunizieren oder würde dieser Umstand, dass sie defekt ist, sie daran hindern?
Die von Dir genannten Vorteile sind auf jeden Fall interessant, danke nochmal dafür.
Verfrüht, denn es gibt da wesentlich bessere und pflegeleichtere Herangehensweisen, welche
  • besser wartbar
  • verständlicher
  • kürzer in Code
und einiges mehr sind und zu bieten haben. Meine Empfehlung ist, schreibe ein Skript für deine Idee, füge neuere Funktionen als Gedanken hinzu und lerne gleichzeitig Grundlagen. Wenn du die Datenstrukturen und Algorithmen verstanden hast, dann würde ich mich an die Aufgabe herantrauen. Jetzt, und das garantiere ich dir, wird es ein riiiiiiieeeeeesen Krampf werden! Aber versuch es ruhig, um später den Unterschied zu merken, zwischen vorgegriffen und gekonnt ;)
Hallo Javinner,
mir geht es hierbei nur darum, überhaupt erstmal die objektoriente Denkweise zum ersten mal anzuwenden und zu üben, da dies für mich noch ungewohnt ist, ich muss in diesem Falle auch noch keinen Code schreiben, es soll mir beim späteren Aufgaben dienlich werden, schonmal zumindest ansatzweise objektorientiert gedacht zu haben ;)
Gruß
Scratchy
 

mihe7

Top Contributor
Aber kann eine defekte Komponente wirklich richtig mit dem Kühlschrank kommunizieren oder würde dieser Umstand, dass sie defekt ist, sie daran hindern?
Du kannst auch Überwachungskomponenten haben. Ganz einfaches Beispiel: viele Gefrierschränke haben ein "akustisches Alarmsystem", das anspringt, sobald die Temperatur über einen festgelegten Wert steigt.
 
X

Xyz1

Gast
Ich würde sagen eine intelligenter, kommunizierender und interagierender Smart-Kühlschrank ist keine 1 Mann Sache.
 

scratchy1

Bekanntes Mitglied
Du kannst auch Überwachungskomponenten haben. Ganz einfaches Beispiel: viele Gefrierschränke haben ein "akustisches Alarmsystem", das anspringt, sobald die Temperatur über einen festgelegten Wert steigt.
Hallo mihe7,
gute Idee, ich hab daraufhin überlegt, wie das Problem der Selbstreferenz umgangen werden könnte:
Die Überwachungskomponenten müssten ja auch auf Funktionstüchtigkeit überprüft werden. Wenn z.B. die anderen Komponenten keine Nachrichten von den Überwachungskomponenten mehr aus der Warteschlange erhalten, könnten sie selbst wiederum Alarm schlagen, hmm , hier bliebe nur das einzige Problem: Wenn alle Komponenten defekt wären. Dann bliebe als Lösung vielleicht noch übrig, dass der Besitzer es dann sowieso merken würde.
Wir können das ganze vielleicht auch so lösen, dass wir sagen:
Wenn betreffende Komponenten aufhören Nachrichten zu senden, käme ein Alarmsignal, dass sie möglicherweise defekt sind, aber vom Kühlschrank aus, insofern wäre ein Abfangen von Nachrichten aus einer Warteschlange anfälliger, kann das sein?

Ich würde sagen eine intelligenter, kommunizierender und interagierender Smart-Kühlschrank ist keine 1 Mann Sache.
Stimmt.
 

mrBrown

Super-Moderator
Mitarbeiter
hier bliebe nur das einzige Problem: Wenn alle Komponenten defekt wären.
Das wird in keiner umsetzbaren Variante von den Komponenten allein selbst erkennbar sein ;)

Wenn betreffende Komponenten aufhören Nachrichten zu senden, käme ein Alarmsignal, dass sie möglicherweise defekt sind, aber vom Kühlschrank aus, insofern wäre ein Abfangen von Nachrichten aus einer Warteschlange anfälliger, kann das sein?
Die Anfälligkeit ist in allen Varianten gleich groß.

Ein Event-basiertes System macht das ganze aber oftmals deutlich einfacher aufzubauen und ist deutlich variabler.
 

mihe7

Top Contributor
Grundsätzlich ist klar: wenn alle Komponenten ausfallen, dann ist das Ding tot :)

Du kannst nur durch Redundanzen die Wahrscheinlichkeit verringern, dass Funktionen nicht mehr zur Verfügung stehen.

Mal ein Beispiel: Du zweigst von der Netzleitung Strom für die Versorgung eines digitalen Thermometers ab, das Dich benachrichtigt, wenn die Temperatur unter einen Wert sinkt bzw. ein ungewöhnlich hoher Temperaturabfall innerhalb einer gewissen Zeit stattfindet.

Es könnte der Kompressor ausfallen, es könnte das Thermostat defekt sein, oder einfach nur die Kühlschranktüre offen sein (ließe sich natürlich über einen weiteren Sensor einfacher erkennen): Dein Thermometer benachrichtigt Dich zuverlässig.

Es können aber zwei Probleme auftreten:
1. das Thermometer selbst ist defekt
2. der Strom ist weg

In beiden Fällen würdest Du nicht mehr mitbekommen, dass es im Inneren schon 20° C hat.

Um die Wahrscheinlichkeit zu verringern, dass die Überwachungsfunktion ausfällt, kannst Du
1. weitere Thermometer einbauen
2. die Stromversorgung über einen Akku puffern

Außerdem könntest Du - um wenigstens mitzubekommen, dass die Funktion ausgefallen ist, eine Komponente einbauen, die das Thermometer überwacht.

Was auch immer Du tust: Du kannst lediglich das Risiko verringern, es aber nicht auf 0 drücken.
 

temi

Top Contributor
@scratchy1: Mal Spaß beiseite. Es geht dir ja vermutlich um einen rein virtuellen Kühlschrank mit dem du Konzepte der objektorientierten Programmierung üben möchtest. Ich kenne deinen Wissensstand nicht, aber schau dir doch mal das Buch "Entwurfsmuster von Kopf bis Fuß" an. Da werden Konzepte anhand solcher Beispiele wie z.B. "Fernbedienung" oder "Pizzarestaurant" erarbeitet. Auf dieser Basis kannst du dann auch einen "Kühlschrank" virtuell bauen.
 

scratchy1

Bekanntes Mitglied
Hallo Leute,
vielen Dank für eure Tipps, ich werd mir das Buch mal zum Geburtstag wünschen ;)
Ich bin noch Anfänger (in Objektorientierung, welche für mich ungewohnt ist), nicht lachen, aber ich kann Pascal programmieren und hab mal einen Kurs in imperativer Programmierung geschafft.

Bzgl. des Kühlschrankes: Ich könnte ja den Hausroboter regelmässig einen Check des Kühlschrankes machen lassen,
so ähnlich wie R2D2 es öfters mit anderen Maschinen per utility-Arm macht, den er wie eine Art Schlüssel in die richtigen Stellen reinsteckt und die Dinger scannt. Manchmal schafft er einen Zugang, dann kann er manipulieren und manchmal wieder in Gang setzen/steuern.
 

Barista

Top Contributor
Es gibt auch ein Buch

Objektorientierte Analyse und Design von Kopf bis Fuß

  • Verlag: O'Reilly Verlag GmbH & Co. KG; Auflage: 1 (1. Mai 2007)
  • Sprache: Deutsch
  • ISBN-10: 3897214954
  • ISBN-13: 978-3897214958
 

Neue Themen


Oben