Hauptinhalt

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 sind

  • roundOff: Methode, die den Wert der Eigenschaft auf zwei Dezimalstellen rundet

  • multiplyBy: Methode, die den Wert der Eigenschaft mit der angegebenen Zahl multipliziert

Beginnen Sie die Definition einer Klasse mit einem classdef ClassName...end-Block und definieren Sie dann die Eigenschaften und Methoden der Klasse innerhalb dieses Blocks. Die Definition von BasicClass 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.1416

Sie 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.0472

Der 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     5

MATLAB 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);
Da 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.8326

Durch 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.3562

Verwandte 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

Siehe auch

Themen