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

set-methode aufrufen

 

tuelee
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2010, 11:26     Titel: set-methode aufrufen
  Antworten mit Zitat      
hallo zusammen,

ich versuche mich gerade in oop. ich verstehe nicht ganz, wie ich über die set-methode meine variable, dessen setaccess auf private steht , verändern kann. das test programm habe ich mal mit hochgeleaden.

ich erzeuge ein objekt mit: s = test(1);
nun versuche ich die variable wert auf 2 zu setzten. ich finde aber nicht den richtigen syntax für den funktionsaufruf.

danke

test.m
 Beschreibung:

Download
 Dateiname:  test.m
 Dateigröße:  297 Bytes
 Heruntergeladen:  956 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.10.2010, 10:51     Titel:
  Antworten mit Zitat      
Hallo,

von außen gar nicht - das ist genau der Punkt daran, SetAccess auf Private zu setzen. Dadurch kann das Property nur aus Methoden heraus verändert werden - und dort wie gewohnt mit variable.property.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
tuelee
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2010, 11:48     Titel:
  Antworten mit Zitat      
hallo harald,

das versuche ich ja. ich dachte, dass man deswegen die set-methode schreibt.

nachdem ich mein objekt erzeugt habe, versuche ich die set-methode aufzurufen. im command-window habe ich einige syntax ausprobiert, aber es will nicht. zb. habe ich geschrieben "s.wert = s.set.wert(s,2)". wenn mir da jemand helfen könnte, den richtigen syntax zu finden wäre das echt toll.
alle anderen funktionen, die zb. berechnungen durchfüren, kann ich aufrufen, indem ich "objekt.methodenname" schreibe. warum ich die set-methode nicht aufrufen kann, verstehe ich nicht.

danke.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

durch
Code:
s.property = ...

wird intern die Methode set aufgerufen. Wenn SetAccess auf Private gesetzt ist, kann diese Methode nur aus anderen Methoden heraus aufgerufen werden.

Was du machen kannst:
- eine Methode "setze" schreiben (die also NICHT set heißt)
- in dieser Methode das Property wie gewünscht verändern
- Aufruf mit s = s.setze(wert) bzw. s.setze(wert); je nachdem ob du mit einer "normalen" Klasse oder einer Handle Klasse (von Klasse handle vererbt; Call by Reference-Verhalten) arbeitest.

Ansonsten die Frage: warum setzt du SetAccess auf Private, wenn du von außen auf das Property zugreifen willst?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
tuelee
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2010, 13:28     Titel:
  Antworten mit Zitat      
danke harald,

werde ich mal ausprobieen. warum ich ich set-access auf private setzte.
gute frage. zum einem wollte ich das mal ausprobieren, um einen überblick udn ein gefühl für matlab oop zu bekommen, zum andem habe ich mal gehört, dass es ziel der allgemeinen oop ist informationen zu verstecken und methoden dazu dienen schnittstellen zwishen klassen zu sein. keine ahnung ob dass so sinnvoll ist.

gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

das ist sinnvoll. Nur kannst du dann eben das Property genau nicht von außen setzen, und das willst du aber ja anscheinend.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
tuelee
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2010, 14:52     Titel:
  Antworten mit Zitat      
hallo harald,

weiß zwar nicht genau warum, aber wenn ich die methoden auf static setzte und eine setze und nimm methode schreibe funktionierts.

danke,gruß

test.m
 Beschreibung:

Download
 Dateiname:  test.m
 Dateigröße:  594 Bytes
 Heruntergeladen:  974 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

durch das Setzen auf static funktioniert bei mir gerade gar nichts mehr - zumindest nicht das, was ich versuche. Ohne geht es.

Also: wie (Code) verwendest du diese Klasse?

Die entscheidende Frage ist jedoch: warum setzt du SetAccess auf Private, wenn du das Property dann doch quasi direkt setzt? Dann könntest du doch gleich SetAccess auf public lassen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
tuelee
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2010, 08:37     Titel:
  Antworten mit Zitat      
hallo harald,

also, das programm ist erstmal für mich, um hinter die oop von matlab zu steigen. um zu verstehen, wie die funktionasaufrufe laufen, wie objekte aufeineander zugreifen können und ob es für mich sinnvoll ist, mein bisher geschriebenes matlabprogramm um zu schreiben.

ich habe mein gesamtprogramm gestückelt und diese in matlabfunktionen gepackt, um sequenziell programmierren zu können. die berechnung, die das programm durchführt, angefangen von einlesen der ausgangsdaten, habe ich in eine gui verpackt, da ich zu beginnn der berechnung einige werte setzten möchte. zb. start und end parameter der berechnung, verwendete formeln und randbedingungen und und und.

mein idee war nun, da dass programm mit der zeit immer mehr erweiterungen bekommt, dank mein betreuer, oop in die gui zu integrieren, um ein ausbau des programm zu erleichtern, da ich mich dann nur auf die klassen beschränken muss, die ich verändern will, bzw deren schnittstellen zu den andern klassen. eine idee wäre, eine klasse zu erstellen, der die rohdaten enthält und von denen unterklassen ableiten, um witerfügrende berechnungen auszuführen.

wie gesagt, ob dass so sinnvoll ist, weiß ich nicht so genau.

gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.10.2010, 08:47     Titel:
  Antworten mit Zitat      
Hallo,

die Idee ist meines Erachtens gut.
Da könnte man z.B. auch SetAccess auf Private setzen, da die Daten nach dem Einlesen wahrscheinlich nicht oder nur "auf bestimmte Weise" geändert (z.B. gefiltert) werden sollen.

Du kannst das Einlesen der Daten übrigens auch schön in die GUI integrieren, siehe
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 27.10.2010, 14:12     Titel:
  Antworten mit Zitat      
Hallo,
ein genereller Kommentar: bei anderen Programmiersprachen (Java, C++) setzt man typischerweise die Property auf private und fügt eine Methode zum (kontrollierten) ändern hinzu, z.B. für eine Property "length" gibt es ein (z.B.) setLength das testet, ob die zu setzende Länge positiv ist.

Bei MATLAB gibt es die Notation der set-Methode: damit kann man die Property auf "public" setzen, und trotzdem nur kontrolliert zugreifen (über die set-methode, die automatisch aufgerufen wird). Ergo:
- man kann wie gewohnt einfach obj.length schreiben
- und trotzdem den gewünschten Effekt, dass der Schreibzugriff "überwacht" wird haben.

Ciao,
Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
capa

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2010, 11:57     Titel: constructor und objekte
  Antworten mit Zitat      
Hi!

Ich stöbere hier gerade ein wenig herum, weil ich selbst noch nicht ganz weiter weiss. Bezüglich tuelee halte ich das hier (für mich gerade) sehr interessant, da ich ebenfalls objektorientiert mit matlab programmieren will.

Nun frage ich mich allerdings, warum hier noch niemand gerade die Möglichkeit des Erstellens von Objekten direkt erwähnt hat? Mir scheint als ginge es in diesem Thread eher um den heissen Brei herum.

Ich habe noch problöeme mit der matlab-Syntax. Vielleicht könnt ihr mir hier aber helfen.

Ich schreibe nun meine eigene Objekt-Klasse. Zu allererst kümmere ich mich dabei um die Variablen die das Objekt besitzt. Diese erstelle ich in einem Constructor.

Aus der Hilfe der matlab-Seiten bin ich noch nicht ganz schlau geworden, aber ich vermute der Constructor initialisiert das Objekt mit den Werten die hier zwischen stehen:

properties
var1
(...)
end

Sobald ich das Objekt erstelle muss ich nun allerdings dafür sorge Tragen, dass auch entsprechende Werte bei der Initialisierung berücksichtigt werden. Da das Objekt sicherlich aus einer anderen Klasse.Methode erzeugt wird, um es noch weiter bearbeiten zu können (sei es mit internen Objekt-Methoden oder extern...), brauche ich darüber hinaus noch set und get funktionen wie ihr schon beschrieben habt.

Mich würde nun aber noch interessieren wie der Constructor richtig zu schreiben ist (Syntax) damit er alle Werte beim Erstellen des Objektes bekommt.

Ich habe schon einiges gegoogelt, vielleicht suche ich auch falsch, aber gefunden habe ich bisher nicht viel hilfreiches.

Kann mir hier jemand weiterhelfen?

danke
capa
 
tuelee
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2010, 13:10     Titel: Re: constructor und objekte
  Antworten mit Zitat      
hallo,

capa hat Folgendes geschrieben:

Nun frage ich mich allerdings, warum hier noch niemand gerade die Möglichkeit des Erstellens von Objekten direkt erwähnt hat? Mir scheint als ginge es in diesem Thread eher um den heissen Brei herum.
capa

mit der aussage kann ich nicht besonders viel anfangen. kannst du das bitte noch mal schreben.

capa hat Folgendes geschrieben:

Ich habe noch problöeme mit der matlab-Syntax. Vielleicht könnt ihr mir hier aber helfen.
capa

zu diesem thema habe ich dir mal eine test-klasse bereitgestellt. zum syntax, hoffe ich, dass die das weiterhilft.
also, mit den classdef <name der klasse> schreibst du ein baublan, mit der dein objekt erzeugt wird. dh. dein euzeugtes objekt der klasse hat nur die varialen und methoden die du in der klasse definiert hast.
mit den konstruktor kannst du dein objekt mit definierten werten für die variablen erzeugen. du bist nicht verpflichtet alle variablen im konstruktor zu inizialisiere. der konstruktor, in maltlab steht diese als function in deiner methoden deklaration, trägt den gleichen name wie die klasse.

nun kannst du die test2 klasse mal verwenden.
du erzeugt ein neues objekt der klasse<test2>, indem du s = test2(3) schreibst. du kannst ein weiteres objekt der klasse erzeugen, imdem du a = test2(4) schreibst.
wenn du mehrere werte beim erzugen des objekt inizialisieren willst, musst du den konstruktor in derhinsicht erweitern.

nun zu set get:
ich habe leider immer noch nicht herrausgefunden, warum ich die set get methode von matlab nicht überschreiebn kann. deswegen habe ich meine eigenen methoden dafür geschriebn, weil ich will, dass die functionen noch andere operationen ausführen, bevor die einen wert setzen bzw. harausgeben. ausserem ist das ziel der oop, informationen zu verstekten. ggenauere kannst du dann in lehrbüchern nachlesen.
durch den konstruktor wurde nun die variable wert schon gesetzt. wenn du die variablen verändern möchtest lautet der syntax:
s = setzeWert(s,5)
s = s.setzeWert(5)
das obj im skript entschpricht den names deines erzeugten objekts.
die variablen a und b kannst du direkt setzen, imdem du s.a ='hallo' schreibst.

um die function errechne auszuführen, gibst du ein
x = errechne(s);
du kannst auch das erzeugte objekt als rückgabewert nehmen. dann musst du x durch obj ersetzen.

so, ich hoffe, dass es dir ein wenig weiterhilft.

gruß

test2.m
 Beschreibung:

Download
 Dateiname:  test2.m
 Dateigröße:  946 Bytes
 Heruntergeladen:  869 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 17.11.2010, 17:14     Titel:
  Antworten mit Zitat      
hi,

meines erachtens kann man die set/get methode überschreiben. allerdings benutze ich immer handle klassen und keine value klassen, da es in meinem fall mehr sinn macht (der unterschied ist in der matlab hilfe zu finden). dementsprechend habe ich es auch erst mit handles getestet...

Code:

classdef Messung < hgsetget

    properties
        A
        B
        C
    end

    methods
          function obj = Messung(Werte)
          % constructor
            ...
          end

          function x = get.A(obj)
                 x = obj.B + obj.C;
          end
    end
end

 


mfg marco
Private Nachricht senden Benutzer-Profile anzeigen
 
capa

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2010, 13:11     Titel: versionsprobleme
  Antworten mit Zitat      
Bezüglich meiner Probleme habe ich nun den Fehler gefunden.

Objektorientiertes Programmieren mit Matlab wurde erst ab Version R2008b eingeführt, ich habe nur die R2007b Lizenz.

Bis ich bei Matlab-Problemen eine Lösung finde, benötige ganz schön viel Zeit.
Aber ich will hier nicht über die online-Seiten von Mathworks meckern. Ich bin scheinbar einfach zu doof um richtig zu Suchen. - Confused

Nun bleibt mir nur warten, bis unser Admin mit 'ner neuen Lizenz rüberkommt.

So far

capa
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.