Creazione di una classe semplice
Progettazione della classe
Lo scopo principale di una classe è definire un oggetto che racchiuda i dati e le operazioni eseguite su di essi. Ad esempio, BasicClass definisce una proprietà e due metodi che operano sui dati contenuti in tale proprietà:
Value: proprietà che contiene i dati numerici memorizzati in un oggetto della classeroundOff: metodo che arrotonda il valore della proprietà a due cifre decimalimultiplyBy: metodo che moltiplica il valore della proprietà per il numero specificato
Iniziare la definizione di una classe con un blocco classdef , quindi definire le proprietà e i metodi della classe all'interno di tale blocco. Questa è la definizione di ClassName...endBasicClass:
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
Per un riepilogo della sintassi delle classi, vedere classdef.
Per utilizzare la classe:
Salvare la definizione della classe in un file
.mcon lo stesso nome della classe.Creare un oggetto della classe.
Accedere alle proprietà per assegnare i dati.
Chiamare i metodi per eseguire le operazioni sui dati.
Creazione di un oggetto
Creare un oggetto della classe utilizzando il nome della classe:
a = BasicClass
a =
BasicClass with properties:
Value: []Inizialmente, il valore della proprietà è vuoto.
Accesso alle proprietà
Assegnare un valore alla proprietà Value utilizzando la variabile oggetto e un punto prima del nome della proprietà:
a.Value = pi/3;
Per restituire il valore di una proprietà, utilizzare la notazione a punto senza l'assegnazione:
a.Value
ans =
1.0472
Per informazioni sulle proprietà della classe, vedere Property Syntax.
Chiamata dei metodi
Chiamare il metodo roundOff sull'oggetto a:
roundOff(a)
ans =
1.0500Passare l'oggetto come primo argomento a un metodo che accetta più argomenti, come in questa chiamata al metodo multiplyBy:
multiplyBy(a,3)
ans =
3.1416È inoltre possibile chiamare un metodo utilizzando la notazione a punto:
a.multiplyBy(3)
Quando si utilizza la notazione a punto, non è necessario passare l'oggetto come argomento esplicito. La notazione utilizza l'oggetto a sinistra del punto.
Per informazioni sui metodi della classe, vedere Method Syntax.
Aggiunta di un costruttore
Le classi possono definire un metodo speciale per creare oggetti della classe, chiamato costruttore. I metodi costruttori consentono di passare argomenti al costruttore, che possono essere assegnati come valori delle proprietà. La proprietà BasicClass Value limita i suoi valori possibili utilizzando la funzione mustBeNumeric.
Questo è un costruttore per la classe BasicClass. Quando si chiama il costruttore con un argomento di input, questo viene assegnato alla proprietà Value. Se si chiama il costruttore senza un argomento di input, la proprietà Value ha un valore predefinito vuoto ([]).
methods function obj = BasicClass(val) if nargin == 1 obj.Value = val; end end end
Aggiungendo questo costruttore alla definizione della classe, è possibile creare un oggetto e impostare il valore della proprietà in un unico passaggio:
a = BasicClass(pi/3)
a =
BasicClass with properties:
Value: 1.0472Il costruttore può eseguire altre operazioni relative alla creazione di oggetti della classe.
Per informazioni sui costruttori, vedere Class Constructor Methods.
Vettorializzazione dei metodi
MATLAB® consente di vettorializzare le operazioni. Ad esempio, è possibile aggiungere un numero a un vettore:
[1 2 3] + 2
ans =
3 4 5MATLAB aggiunge il numero 2 a ciascuno degli elementi dell'array [1 2 3]. Per vettorializzare i metodi dell'operatore aritmetico, racchiudere il riferimento alla proprietà obj.Value tra parentesi.
[obj.Value] + 2
Questa sintassi consente al metodo di funzionare con array di oggetti. Ad esempio, creare un array di oggetti utilizzando l'assegnazione indicizzata.
obj(1) = BasicClass(2.7984); obj(2) = BasicClass(sin(pi/3)); obj(3) = BasicClass(7);
Queste due espressioni sono equivalenti.
[obj.Value] + 2 [obj(1).Value obj(2).Value obj(3).Value] + 2
Il metodo roundOff è vettorializzato perché il riferimento alla proprietà è racchiuso tra parentesi.
r = round([obj.Value],2);
roundOff è vettorializzato, può operare sugli array.roundOff(obj)
ans =
2.8000 0.8700 7.0000Sovraccarico delle funzioni
Le classi possono implementare funzionalità esistenti, come l'addizione, definendo un metodo con lo stesso nome della funzione di MATLAB esistente. Ad esempio, si supponga che si desideri aggiungere due oggetti BasicClass. Appare logico sommare i valori delle proprietà Value di ciascun oggetto.
Questa è una versione sovraccaricata della funzione di MATLAB plus. Definisce l'addizione per la classe BasicClass come l'aggiunta dei valori delle proprietà:
methods function r = plus(o1,o2) r = [o1.Value] + [o2.Value]; end end
Implementando un metodo chiamato plus, è possibile utilizzare l'operatore "+" con gli oggetti di BasicClass.
a = BasicClass(pi/3); b = BasicClass(pi/4); a + b
ans =
1.8326Vettorializzando il metodo plus, è possibile operare sugli array di oggetti.
a = BasicClass(pi/3); b = BasicClass(pi/4); c = BasicClass(pi/2); ar = [a b]; ar + c
ans =
2.6180 2.3562Informazioni correlate
Per informazioni sul sovraccarico delle funzioni, vedere Overload Functions in Class Definitions.
Per informazioni sul sovraccarico degli operatori, vedere Operator Overloading.
Elenco dei codici BasicClass
Questa è la definizione BasicClass dopo l'aggiunta delle feature discusse in questo argomento:
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