Erstellen einer einfachen Klasse
Entwerfen einer Klasse
Der Hauptzweck einer Klasse besteht darin, ein Objekt zu definieren, das Daten und die an diesen Daten durchgeführten Operationen zusammenfasst. BasicClass definiert zum Beispiel eine Eigenschaft und zwei Methoden, die auf die Daten dieser Eigenschaft einwirken:
Value: Eigenschaft, in der die in einem Objekt der Klasse gespeicherten numerischen Daten enthalten sindroundOff: Methode, die den Wert der Eigenschaft auf zwei Dezimalstellen rundetmultiplyBy: Methode, die den Wert der Eigenschaft mit der angegebenen Zahl multipliziert
Beginnen Sie die Definition einer Klasse mit einem classdef -Block und definieren Sie dann die Eigenschaften und Methoden der Klasse innerhalb dieses Blocks. Die Definition von ClassName...endBasicClass lautet wie folgt:
classdef BasicClass properties Value {mustBeNumeric} end methods function r = roundOff(obj) r = round([obj.Value],2); end function r = multiplyBy(obj,n) r = [obj.Value]*n; end end end
Eine Zusammenfassung zur Klassensyntax finden Sie unter classdef.
Zum Verwenden der Klasse:
Speichern Sie die Klassendefinition in einer
.m-Datei mit dem gleichen Namen wie die Klasse.Erstellen Sie ein Objekt der Klasse.
Greifen Sie auf die Eigenschaften zu, um Daten zuzuweisen.
Rufen Sie Methoden auf, um Operationen an den Daten durchzuführen.
Erstellen eines Objekts
Erstellen Sie ein Objekt der Klasse unter Verwendung des Klassennamens:
a = BasicClass
a =
BasicClass with properties:
Value: []Zu Beginn ist der Eigenschaftswert leer.
Zugreifen auf Eigenschaften
Weisen Sie der Eigenschaft Value einen Wert zu, indem Sie die Objektvariable und einen Punkt vor dem Eigenschaftsnamen verwenden:
a.Value = pi/3;
Verwenden Sie die Punktschreibweise ohne die Zuweisung, um einen Eigenschaftswert zurückzugeben:
a.Value
ans =
1.0472
Informationen über Klasseneigenschaften finden Sie unter Property Syntax.
Aufrufen von Methoden
Rufen Sie die Methode roundOff für Objekt a auf:
roundOff(a)
ans =
1.0500Übergeben Sie das Objekt als erstes Argument an eine Methode, die mehrere Argumente akzeptiert, wie in diesem Aufruf der Methode multiplyBy:
multiplyBy(a,3)
ans =
3.1416Sie können eine Methode auch mit der Punktnotation aufrufen:
a.multiplyBy(3)
Die Übergabe des Objekts als explizites Argument ist nicht notwendig, wenn Sie die Punktnotation verwenden. Die Notation verwendet das Objekt links vom Punkt.
Informationen über Klassenmethoden finden Sie unter Method Syntax.
Hinzufügen eines Konstruktors
Für Klassen kann eine spezielle Methode zur Erstellung von Objekten der Klasse definiert werden, die als Konstruktor bezeichnet wird. Konstruktormethoden ermöglichen es Ihnen, dem Konstruktor Argumente zu übergeben, die Sie als Eigenschaftswerte zuweisen können. Die BasicClass Value-Eigenschaft schränkt seine möglichen Werte mit der Funktion mustBeNumeric ein.
Hier ist ein Konstruktor für die BasicClass-Klasse. Wenn Sie den Konstruktor mit einem Eingabeargument aufrufen, wird dieses der Value-Eigenschaft zugewiesen. Wenn Sie den Konstruktor ohne ein Eingabeargument aufrufen, hat die Value-Eigenschaft den Standardwert „leer“ ([]).
methods function obj = BasicClass(val) if nargin == 1 obj.Value = val; end end end
Wenn Sie diesen Konstruktor zur Klassendefinition hinzufügen, können Sie in einem Schritt ein Objekt erstellen und den Eigenschaftswert festlegen:
a = BasicClass(pi/3)
a =
BasicClass with properties:
Value: 1.0472Der Konstruktor kann andere Operationen im Zusammenhang mit der Erstellung von Objekten der Klasse durchführen.
Informationen über Konstruktoren finden Sie unter Class Constructor Methods.
Vektorisieren von Methoden
MATLAB® ermöglicht es Ihnen, Operationen zu vektorisieren. Sie können zum Beispiel eine Zahl zu einem Vektor hinzufügen:
[1 2 3] + 2
ans =
3 4 5MATLAB addiert die Zahl 2 zu jedem der Elemente im Array [1 2 3]. Um die Methoden der arithmetischen Operatoren zu vektorisieren, schließen Sie die obj.Value-Eigenschaftsreferenz in Klammern ein.
[obj.Value] + 2
Diese Syntax ermöglicht es der Methode, mit Arrays von Objekten zu arbeiten. Erstellen Sie zum Beispiel ein Objekt-Array mit indizierter Zuweisung.
obj(1) = BasicClass(2.7984); obj(2) = BasicClass(sin(pi/3)); obj(3) = BasicClass(7);
Diese beiden Ausdrücke sind gleichwertig.
[obj.Value] + 2 [obj(1).Value obj(2).Value obj(3).Value] + 2
Die roundOff-Methode ist vektorisiert, da die Eigenschaftsreferenz in Klammern eingeschlossen ist.
r = round([obj.Value],2);
roundOff vektorisiert ist, kann sie mit Arrays arbeiten.roundOff(obj)
ans =
2.8000 0.8700 7.0000Überladen von Funktionen
Mit Klassen können bestehende Funktionen, wie z. B. Addition, durch Definition einer Methode implementiert werden, die den gleichen Namen wie die bestehende MATLAB-Funktion hat. Nehmen wir zum Beispiel an, dass Sie zwei BasicClass-Objekte hinzufügen möchten. Es ist sinnvoll, die Werte der Value-Eigenschaft der einzelnen Objekte zu addieren.
Hier ist eine überladene Version der MATLAB plus-Funktion angegeben. Addition für die BasicClass-Klasse ist als Addition der Eigenschaftswerte definiert:
methods function r = plus(o1,o2) r = [o1.Value] + [o2.Value]; end end
Durch Implementieren einer Methode namens plus können Sie den +-Operator mit Objekten der BasicClass verwenden.
a = BasicClass(pi/3); b = BasicClass(pi/4); a + b
ans =
1.8326Durch Vektorisieren der plus-Methode können Sie mit Objekt-Arrays arbeiten.
a = BasicClass(pi/3); b = BasicClass(pi/4); c = BasicClass(pi/2); ar = [a b]; ar + c
ans =
2.6180 2.3562Verwandte Informationen
Informationen zum Überladen von Funktionen finden Sie unter Overload Functions in Class Definitions.
Informationen zum Überladen von Operatoren finden Sie unter Operator Overloading.
BasicClass-Code-Auflistung
Nach Hinzufügen der in diesem Abschnitt besprochenen Funktionen sieht die BasicClass-Definition wie folgt aus:
classdef BasicClass properties Value {mustBeNumeric} end methods function obj = BasicClass(val) if nargin == 1 obj.Value = val; end end function r = roundOff(obj) r = round([obj.Value],2); end function r = multiplyBy(obj,n) r = [obj.Value] * n; end function r = plus(o1,o2) r = [o1.Value] + [o2.Value]; end end end