WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Objektorientiertes Programmieren: Klassen zuordnen

 

Edin1993
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 05.06.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2021, 09:51     Titel: Objektorientiertes Programmieren: Klassen zuordnen
  Antworten mit Zitat      
Hallo zusammen, ich habe auf die Schnelle keine Lösung im Forum oder anderswo gefunden.
Ich habe eine Klasse class_Coil bei der ich nicht weiß, wie ich diese am besten definieren soll. Ich habe eine übergeordnete Klasse class_Sensor welche aus mehreren Spulen (Coils) besehen kann. Da ich aber ungerne mit eval() arbeite um immer neue Spulen zu definieren, möchte ich es elegant in class_Coil lösen.

Code:

class class_Coil
  properties
    NumCoils
    Prop1
    ...
    PropN
  end
  methods
    func1
    ...
    funcN
  end
end
 


Nachdem ich dann irgenwie iterativ jede Spule parametrisiert (Prop1 bis PropN) habe will ich sie im Anschluss mit dem Parameter CoilNum (ich meine nicht NumCoils!!) an Sensor=class_Sensor übergeben
Code:

NumCoils = 2;
Coils = class_Coil
SomeStuff() # definiert mir wie auch immer die 2 Spulen
Sensor=class_Sensor
for i = 1:NumCoils
  addprop(Sensor,Coils.MakeCoilClass(i))
# wie MakeCoilClass() aussieht weiß ich auch noch nicht
end
 


Ich dachte ich könne das mit einer handle class machen (siehe Code unten), aber da ich MasterCoil immer neu definiere, werden die anderen auch immer neu definiert und ich habe auch hier wieder die unschöne eval() Funktion mit der ich immer neue Variabeln Coil1, ... definiere.

Code:

class class_Coil < handle
  properties
    prop1
    ...
    propN
  end
  methods
    method1
    ...
    methodN
  end
end

for i = 1:NumCoils
  MasterCoil = CreateCoil(DateiName); #Definiert die Spule/Klasse
  eval(["Coil" num2str(i) "= MasterCoil"]) #Nicht schön
  addprop(Sensor,eval(["Coil" num2str(i)]))
end
 



Möglicherweise ist die Lösung ganz einfach.. Ich hoffe ich habe alles verständlich erläutert und ihr könnt mir helfen.
Danke im voraus.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.07.2021, 11:17     Titel:
  Antworten mit Zitat      
Hallo,

dynamisches Hochzählen ist immer unschön. Man fängt einmal mit eval an und kommt nicht mehr darum herum.

Spricht etwas dagegen, nur Prop als Eigenschaft zu definieren, was dann ein 1xnumCoils Array von Objekten wird? Wenn das Probleme macht, könnte Prop auch ein 1xnumCoils Cell Array sein.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Edin1993
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 05.06.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2021, 13:21     Titel:
  Antworten mit Zitat      
Hallo Harald,
danke für die Antwort, es spricht nichts dagegen. Eine Funktion wie bei Python mit den Dictionaries wäre hier schön, bei dem ich die Eigenschaften explizt angeben kann, eine quasi-Klasse.
Bei einem Cell array muss ich ja dann immer die Zahl/Index kennen unter dem Beispielsweise die Property "Windungen" abgespeichert wird. Das kann im späteren Skript mal schnell die falsche Zahl eingetragen werden.
Ich warte hier noch bisschen, vielleicht kommen noch andere Ideen rein, falls nicht, würde ich das vermutlich so handhaben, weil es mit meiner Systematik am besten übereinstimmt.

Liebe Grüße
Edin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.07.2021, 14:32     Titel:
  Antworten mit Zitat      
Hallo,

alternativ eine Struktur statt eines Cell Arrays, dann kannst du die Namen verwenden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Edin1993
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 05.06.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2021, 14:43     Titel:
  Antworten mit Zitat      
Danke, das funktioniert Smile

Ich schließe den Thread auch mal.
Habe es folgendermaßen gelöst:

Code:

class class_Coil
properties
    Parameter = struct(
    "Draht",{},
    "Innendurchmesser",{},
    "Aussendurchmesser",{})
  end
endclassdef

Spule = class_Coils;
CoilParam.Draht = {"XX","YY"}
CoilParam.Aussendurchmesser = {10,12}
Spule.CoilParam = CoilParam;

 


Zuletzt bearbeitet von Edin1993 am 19.07.2021, 16:12, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.07.2021, 15:55     Titel:
  Antworten mit Zitat      
Hallo,

ein anderer Ansatz könnte hier noch sein, dass Parameter selbst ein Objekt mit Feldern Draht, Innendurchmesser, Aussendurchmesser ist ("Aggregation").

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.