|
tuelee |
Forum-Anfänger
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 13.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.10.2010, 11:26
Titel: set-methode aufrufen
|
|
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
Beschreibung: |
|
Download |
Dateiname: |
test.m |
Dateigröße: |
297 Bytes |
Heruntergeladen: |
956 mal |
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 14.10.2010, 10:51
Titel:
|
|
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
|
|
|
tuelee |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 13.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.10.2010, 11:48
Titel:
|
|
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.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 14.10.2010, 12:15
Titel:
|
|
Hallo,
durch
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
|
|
|
tuelee |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 13.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.10.2010, 13:28
Titel:
|
|
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ß
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 14.10.2010, 14:34
Titel:
|
|
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
|
|
|
tuelee |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 13.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.10.2010, 14:52
Titel:
|
|
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ß
Beschreibung: |
|
Download |
Dateiname: |
test.m |
Dateigröße: |
594 Bytes |
Heruntergeladen: |
974 mal |
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 14.10.2010, 18:17
Titel:
|
|
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
|
|
|
tuelee |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 13.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.10.2010, 08:37
Titel:
|
|
|
|
|
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ß
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 15.10.2010, 08:47
Titel:
|
|
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
Grüße,
Harald
|
|
|
Titus |
Forum-Meister
|
|
Beiträge: 871
|
|
|
|
Anmeldedatum: 19.07.07
|
|
|
|
Wohnort: Aachen
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.10.2010, 14:12
Titel:
|
|
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
|
|
|
capa |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 17.11.2010, 11:57
Titel: constructor und objekte
|
|
|
|
|
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
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 13.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 17.11.2010, 13:10
Titel: Re: constructor und objekte
|
|
|
|
|
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ß
Beschreibung: |
|
Download |
Dateiname: |
test2.m |
Dateigröße: |
946 Bytes |
Heruntergeladen: |
869 mal |
|
|
|
Marco H. |
Forum-Guru
|
|
Beiträge: 404
|
|
|
|
Anmeldedatum: 12.11.10
|
|
|
|
Wohnort: Dortmund
|
|
|
|
Version: 2010a/2012b
|
|
|
|
|
|
Verfasst am: 17.11.2010, 17:14
Titel:
|
|
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...
mfg marco
|
|
|
capa |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.11.2010, 13:11
Titel: versionsprobleme
|
|
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. -
Nun bleibt mir nur warten, bis unser Admin mit 'ner neuen Lizenz rüberkommt.
So far
capa
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
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.
|
|