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

Standard vs. Objektorientierte Programmierung bzgl.

 

guinator

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2014, 21:25     Titel: Standard vs. Objektorientierte Programmierung bzgl.
  Antworten mit Zitat      
Hallo liebe Matlab'er,

bisher bin ich in diesem Forum eigentlich immer auf Lösungshinweise gestoßen, aber bei meinem anstehenden Projekt fällt es mir sehr schwer.
An und für sich bin ich schon seit etwas mehr als 3 Jahren in Matlab unterwegs und war von Anfang an begeistert. Ich habe mich mehr oder weniger von Anfang an mit dem erstellen von GUI's beschäftigt.
-
Meine aktuelle GUI ist an und für sich schon fertig, aber je mehr Funktionalitäten dazu kommen, desto mehr rächen sich Konzeptfehler und man bekommt einen Knoten im Kopf. D.h. ich bin mit meinem momentanen Ansatz eher unzufrieden.
Nun bin ich am überlegen, ob es nicht sinnvoll wäre auf OOP umzusteigen und das Codehandling dadurch zu verbessern. Ich hatte damals im Studium in Java schon damit zutun.
-
Die Grundfunktionalität der GUI ist die Auswertung von Messwerten. Die Messdaten liegen in Form von mat-Files vor. (Leider ist die Matlab-Exportfunktion der Messsoftware recht dürftig, wodurch er alle Messkanäle einer Messung in eine struct schmeißt und die Feldnamen einfach den Kanalkürzeln entsprechen.) Jeder Messkanal stellt einen Sensor bzw. eine Sensorrichtung dar, da es sich um triaxiale Beschleunigungsmessungen handelt. Bsp. Getriebe_hintenX,Getriebe_hintenY,Getriebe_hintenZ
Die einzelnen Felder sind Vektoren.
-
Die GUI gibt dem User nun die Möglichkeit entweder für eine Messung mehrere Sensoren miteinander zu vergleichen oder die Daten eines Sensors für mehrere Messungen zu vergleichen. Die Daten werden jeweils in 3 Subplots dargestellt (X,Y,Z).
-
Das zurordnen der Daten zu den einzelnen Plots ist relativ aufwändig und bei vielen Kanälen (>30) leidet auch die Performance. Bisher habe ich die eingelesenen Daten in einer großen struct aufbereitet, deren handling auf Dauer allerdings recht mühselig ist.
-
Jetzt stellt sich für mich die Frage, ob ich mit OOP eine bessere Strukturierung und Erweiterbarkeit schaffe. Bisher habe ich den Ansatz eine Klasse Sensor anzulegen, die die entsprechenden Eigenschaften wie Richtung, Y-Werte, Name der Messung, Name des Sensors usw. enthält. Allerdings muss ich ja nach dem einlesen des mat-Files erstmal per Schleife die ganzen Objekte erzeugen und in einem Array ablegen. Wenn ich jetzt eine Eigenschaft, z.B. Name der Messung, bei allen Objekten auf einmal setzen möchte führt das leider zu einem error. Das array ist auch ein spezielles sensor-objekt array. Ich hatte eigentlich vor das ganze so wie bei den matlab objekten, z.B. uicontrol('style',text','string','bla'), zu machen und dann die Objekte ganz normal per set([obj1,obj2],'color','g') zu bearbeiten.
-
Nunja ich hoffe ich konnte mein Anliegen einigermaßen verständlich machen.

Grüße,
guinator


godi
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 25.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2014, 12:15     Titel:
  Antworten mit Zitat      
Hallo,

du bist da bestimmt mittels OOP besser unterwegs. Wenn du mit GUI Programmierst dann sehe dir mal das MVC-Pattern (http://de.wikipedia.org/wiki/Model_View_Controller) an. Dieses habe ich vor einiger Zeit mal in Matlab umgesetzt. Ist hier auch im Forum zu finden. Dadurch bekommst du schon mal eine Trennung zwischen deinen Daten und der GUI.

Wenn du Messwerte hast dann kannst du zb eine Klasse Messwerte erstellen in denen du deine Werte speicherst. Desweiteren können auch in dieser Klasse Umrechnungen der Messwerte durchgeführt werden. Dadurch ist alles schön gekapselt. Auf ein Objekt einer Klasse kannst du wie auf Strukturen zugreifen.

Die Messwert objekte kannst du dann deiner GUI übergeben und dann auf deine Methoden zugreifen.

Wenn du jetzt Properties von aussen ändern willst dann kannst du das auch wie bei einer Struktur machen. z.B. messwert1.color = 'g';
Du kannst die Properties aber auch vollständig kapseln so dass du von aussen nur über Methoden zugreifen kannst.

Aber am besten du Probierst einfach mal in einem Übungsprojekt ein wenig herum und lest dich in die Matlabdoku ein, die sehr gut ist.
Private Nachricht senden Benutzer-Profile anzeigen
Gesplittet: 16.01.2014, 16:22 Uhr von denny
Von Beitrag Objektorientierte Programmierung in Matlab aus dem Forum Objektorientierte Programmierung
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 16.01.2014, 16:24     Titel:
  Antworten mit Zitat      
Hallo

bitte kein Hijacking von fremden Beiträgen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2014, 11:27     Titel: Umwandlung normal zu OOP auf Basis MCV-Prinzip
  Antworten mit Zitat      
Hallo Godi,

danke für die Hinweise...hab mir das Konzept mal angesehen und finde es sehr gut. Scheint als wenn da endlich mal Ordnung in den Code kommt.
-
An der Klassenstruktur arbeite ich noch. Die Steuerklasse ist ja quasi durch die existierende GUI schon vorgegeben. Die Klasse Messwerte macht auch Sinn, allerdings weiß ich noch nicht zwingend, ob es Sinn macht die Klasse Sensor als Erweiterung der Klasse Messwerte zu definieren oder einfach als eine Extra-Klasse. Dann fehlt eigentlich nur noch die Präsentationsklasse. Ist es eigentlich zweckmäßig die ganzen erzeugten Objekte in der handles-struct der GUI mitzuführen (so mache ich es bisher immer) ?.
-
In der bisherigen Umsetzung führe ich die ganzen Berechnungen gleich nach dem Ladeprozess der Messdaten aus, unabhängig davon ob der User sich alle Daten anschauen möchte.
Macht es Sinn alle notwendigen Berechnungen vorher durchzuführen oder sollten die eher zur Laufzeit vor dem ausplotten gemacht werden ? Der Vorteil wäre halt der verminderte Speicherbedarf und der Nachteil die wiederholte Berechnung aufgrund von falscher Auswahl etc.

Grüße,
guinator

GUIBsp.jpg
 Beschreibung:

Download
 Dateiname:  GUIBsp.jpg
 Dateigröße:  108.06 KB
 Heruntergeladen:  918 mal
 
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.