|
|
1:n Beziehung / Komposition (Auto-Rad) |
|
Anfänger_OOP |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.03.2016, 13:11
Titel: 1:n Beziehung / Komposition (Auto-Rad)
|
|
|
|
|
Hallo Zusammen,
ich bin kompletter Anfänger in der OOP in Matlab und komme direkt bei der Definition meiner Klassen nicht weiter.
Und zwar das Problem ist, dass ich 3 Klassen anlegen möchte - Auto, Rad, Winterketten - die in bestimmten Verhältnissen zu einander stehen.
So besitzt 1 Auto ingesamt 4 Reifen, und 1 Reifen wiederum 1 Winterkette. Wie kann ich diese 1:n / 1:1 Beziehungen in der Klassendefinition realisieren?
Mein Vorgehen war, dass ich meinen einzelnen Objekten eine ID zuweise, und anhand dieser ID wiederum, die Beziehung zwischen den Klassen/Objekten definiere. In etwa für die Klasse Auto also die properties:
numReifen
Reifen [numReifen] (<-- Array aus Objekten)
und wenn ich dann ein Objekt erzeuge, dann zuweise
numReifen = 4;
Reifen [4] = [ID1Reifen, ID1Reifen, ID1Reifen, ID1Reifen]
In meinem Beispiel würde es von der Klasse Reifen 2 Objekte geben (Winter- und Sommerreifen), die ebenden ID1Reifen und ID2Reifen besitzen. Ebenso könnte man festlegen ob das Auto wirklich 4 Reifen hat oder eventuell mehr (Limousine oder so...)
Zusammenfassend hatte ich mir gedacht, dass ich also jedes Objekt indiziere und die Indizierung in ein Array aus Objekten packe um die Komposition Auto-Reifen hin zu bekommen.
Kann man das überhaupt machen? Falls ja, wie könnte der Programm Code ausschauen? Falls nein, wie kann man eine Komposition bzw. eine 1:n Beziehung zwsichen Klassen in Matlab realisieren?
Vielen Dank und Frohe Ostern!
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 27.03.2016, 13:58
Titel:
|
|
|
|
Anfänger_OOP |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.03.2016, 21:19
Titel:
|
|
Danke für deine Antwort Harald. Aber wie kann ich es denn genau im Code festlegen, dass er mir für jedes Objekt der Klasse Auto, automatisch eine bestimmte, vom User angegebene, Anzahl bestimmter Objekte der Klasse Rad anlegt?
Irgendwie so hatte ich mir das gedacht, aber ich komm da nicht so recht weiter. Ich habe einfach nicht so wirklich Ahnung die genau meine Methode aussehen muss... Kannst du mir da behilflich sein?
Zur Info. Meine andere Klasse Reifen sieht so aus:
Ich bedanke mich schonmal im Vorraus
Schönen Abend noch!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 29.03.2016, 22:54
Titel:
|
|
Hallo,
etwa so:
Ein komplett ausgearbeitetes Beispiel ist im Link in der Doku.
Grüße,
Harald
|
|
|
Anfänger_OOP |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.03.2016, 18:33
Titel:
|
|
|
|
|
Danke Harald. Ich habe jetzt folgendes gemacht:
Jetzt funktioniert es soweit, dass er durch die function createTire mir ein 1xnumTire Array anlegt für die property "Bauteil".
Allerdings legt er mir neben meinem Objekt "Auto" beum Ausführen von createTire ein Objekt "ans" an. "ans" besitzt das besagte 1xnumTire Array. Allerdings besitzt mein eigentliches Objekt "Auto" immer noch ein 1x1 Array. An was liegt das? wie kann ich dieses "ans" umgehen?
Weitere Frage: Wenn es nun 2 vordefinierte Objekte der Klasse Tire gibt, also sagen wir Objekt "Winterreifen" und Objekt "Sommerreifen". Wie kann ich dann implementieren, dass er das erzeugte 1xnumTire Array einmal mit den Objekten "Winterreifen" und einmal mit den Objekten "Sommerreifen" füllt? Sozusagen, dass mir mein Programm 2 Kombinationen auswirft: Auto-Sommerreifen und Auto-Winterreifen? Von denen ich dann im Anschluss die Parameter wie Masse oder ähnliches berechnen und vergleichen möchte...
Verständlich meine Fragestellung?
Danke auf jedenfall schonmal!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 30.03.2016, 19:16
Titel:
|
|
|
|
|
Hallo,
Zitat: |
Allerdings legt er mir neben meinem Objekt "Auto" beum Ausführen von createTire ein Objekt "ans" an. "ans" besitzt das besagte 1xnumTire Array. Allerdings besitzt mein eigentliches Objekt "Auto" immer noch ein 1x1 Array. An was liegt das? wie kann ich dieses "ans" umgehen? |
Ich vermute einen fehlerhaften Aufruf der Methode. Bei Value Classes muss immer das aktualisierte Objekt zurückgegeben werden.
Zitat: |
Weitere Frage: Wenn es nun 2 vordefinierte Objekte der Klasse Tire gibt, also sagen wir Objekt "Winterreifen" und Objekt "Sommerreifen". Wie kann ich dann implementieren, dass er das erzeugte 1xnumTire Array einmal mit den Objekten "Winterreifen" und einmal mit den Objekten "Sommerreifen" füllt? Sozusagen, dass mir mein Programm 2 Kombinationen auswirft: Auto-Sommerreifen und Auto-Winterreifen? Von denen ich dann im Anschluss die Parameter wie Masse oder ähnliches berechnen und vergleichen möchte... |
Ich würde diese Information in createTire entgegennehmen und dann an Tire durchreichen.
Der Konstruktor von Tire muss natürlich darauf ausgelegt sein.
Falls die Reifentypen viele (unterschiedliche) Eigenschaften haben, würde es sich auch anbieten, zwei Klassen Winterreifen und Sommerreifen von einer Klasse Reifen zu vererben.
Grüße,
Harald
|
|
|
Anfänger_OOP |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.04.2016, 18:15
Titel:
|
|
Danke Harald. Aber wie meinst du das der Konstruktor muss darauf ausgelegt sein? Ich glaube genau hier liegt mein Problem. Könntest du mir das zeigen wie der Konstruktor von Tire dann ausschauen müsste??
Danke!!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 01.04.2016, 23:02
Titel:
|
|
Hallo,
etwa so:
Grüße,
Harald
|
|
|
Anfänger_OOP |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 02.04.2016, 10:57
Titel:
|
|
|
|
|
Hallo Harald,
danke für deine Antwort. Was mir jetzt allerdings immer noch nicht ganz klar ist, wie der Code dann alle möglichen Konfigurationen erzeugt. Und wenn ich den Code richtig verstehe, dann erzeugt er ja neue Objekte der Klasse Tire.
Ich möchte gerne, dass er aus bereits definierten Objekten der Klasse Tire alle möglichen Kombination auswählt (je nach Bedingung).
Sagen wir, dass Auto hat noch die Eigenschaft "Tauglichkeit", mit den möglichen Werten "Winter", "Sommer", "Ganzjährig".
Nun soll die Methode in der Klasse Auto durch die Überprüfung der "Tauglichkeit", die passenden Reifen zuordnen.
Also Tauglichkeit = Winter, dann Reifen vom type = Winterreifen
Tauglichkeit = Sommer, dann Reifen vom type = Sommerreifen
Tauglichkeit = Ganzjährig, dann Reifen vom type = Sommerreifen oder Winterreifen.
Also je nach Fallunterscheidung, soll er mir die passenden Reifen zuordnen. Mein Ansatz war, dass ich alle Objekte der Klasse Reifen in einer Liste speicher.
AlleReifen = [Winterreifen Sommerreifen]
um dann nach Fall auf die jeweiligen Reifen zuzugreifen.
Um im Code den Unterschied zwischen der Klasse Reifen und der Eigenschaft Reifen zu verdeutlichen, habe ich nun für die Eigenschaft das Wort Reifen benutzt, und für die Klasse das Wort Tire.
Als Ergebnis des Codes soll er mir dann alle möglichen Konfigurationen ausgeben
Winterauto - Winterreifen, Winterreifen, Winterreifen, Winterreifen
Sommerauto - Sommerreifen, Sommerreifen, Sommerreifen, Sommerreifen
Ganzjährigesautor - Winterreifen, Winterreifen, Winterreifen, Winterreifen
ODER Sommerreifen, Sommerreifen, Sommerreifen, Sommerreifen
ODER Winterreifen, Winterreifen, Winterreifen, Sommerreifen
....
Diese Konfigurationen möchte ich wiederrum miteinander vergleichen. Also am Besten jede entstandene Konfiguration aus Auto und Reifen speichern, um dann bestimmte Parameter neu zu berechen. (Bsp jedes Auto hat ein bestimmtes Gewicht, jeder Reifen hat ein bestimmtes Gewicht --> Berechnen der Gesamtmasse aller Konfigurationen um dann zu sagen, welche Konfiguration ist die leichteste).
Was genau fehlt in diesem Code, dass er mir alle, diese möglichen Konfigurationen abspeichert.
|
|
|
Anfänger_OOP |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 02.04.2016, 12:50
Titel:
|
|
Noch eine Anmerkung zu obigen Code, habe da ausversehen einige Fehler eingebaut.
Nun greife ich nicht mehr auf den Konstruktor von Klasse Tire zu und erzeuge keine neuen Objekte der Klasse Tire, sondern bediene mich an den bereits vordefinierten Objekten.
Problem ist nun allerdings, dass ich nicht weiß wie deklarieren kann, dass mehrere Reifentypen zulässig sind (siehe Auto Ganzjaehrig). In diesem Fall ist mir dann auch nicht klar, wie ich mir alle verschiedenen Konfigurationen abspeichern kann und vergleichen kann (siehe letzten Post).
Danke im Vorraus und für deine bisherigen Mühen!!
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|