Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Comportamiento del objeto

Dos comportamientos de copia

Existen dos tipos fundamentales de objetos MATLAB®: los identificadores y los valores.

los objetos Valor se comportan como tipos fundamentales MATLAB con respecto a las operaciones de copia. Las copias son valores independientes. Las operaciones que realice en un objeto no afectan a las copias de ese objeto.

la variable de identificador hace referencia a los objetos Manejar. Las copias de la variable Handle se refieren al mismo objeto. Las operaciones que se realizan en un objeto Handle son visibles desde todas las variables de identificador que hacen referencia a ese objeto.

Manipular objeto copia

Si está definiendo clases y desea admitir la copia del objeto Handle, consulte Implement Copy for Handle Classes.

Comportamiento de copia de objetos de valor

las variables numéricas MATLAB son objetos de valor. Por ejemplo, cuando se copia a a la variable b, ambas variables son independientes entre sí. Cambiar el valor de a no cambia el valor de b:

a = 8; b = a; 

Ahora reasigne a. b es sin cambios:

a = 6; b 
b =      8 

La eliminación de a no afecta a b:

clear a b 
b =      8

Propiedades del objeto Value

El comportamiento de copia de los valores almacenados como propiedades en objetos Value es el mismo que las variables numéricas. Por ejemplo, suponga que vobj1 es un objeto Value con la propiedad a:

vobj1.a = 8;  

Si copia vobj1 en vobj2 y, a continuación, cambia el valor de la propiedad vobj1 a, el valor de la propiedad del objeto copiado, vobj2.a, no se ve afectado:

vobj2 =vobj1; vobj1.a = 5; vobj2.a 
ans =      8 

Manejar el comportamiento de copia de objetos

Aquí hay una clase Handle denominada HdClass que define una propiedad denominada Data.

classdef HdClass < handle    properties       Data    end    methods       function obj = HdClass(val)          if nargin > 0             obj.Data = val;          end       end    end end

Crear un objeto de esta clase:

hobj1 = HdClass(8) 

Dado que esta instrucción no se termina con un punto y coma, MATLAB muestra información sobre el objeto:

hobj1 =     HdClass with properties:      Data: 8 

La variable hobj1 es un identificador que hace referencia al objeto creado. Copiar hobj1 a hobj2 da como resultado otro identificador que hace referencia al mismo objeto:

hobj2 = hobj1 
hobj2 =     HdClass with properties:      Data: 8

Dado que los identificadores hacen referencia al objeto, copiar un identificador copia el identificador en un nuevo nombre de variable, pero el identificador sigue haciendo referencia al mismo objeto. Por ejemplo, dado que hobj1 es un objeto Handle con propiedad Data:

hobj1.Data 
ans =       8

Cambie el valor de la propiedad Data de hobj1 y el valor de la propiedad Data del objeto copiado también cambia:

hobj1.Data = 5; hobj2.Data 
ans =       5 

Dado que hobj2 y hobj1 son identificadores del mismo objeto, el cambio de la copia, hobj2, también cambia los datos a los que se accede mediante el control hobj1:

hobj2.Data = 17; hobj1.Data 
ans =      17

Reasignación de variables de identificador

La reasignación de una variable de identificador produce el mismo resultado que la reasignación de cualquier variable MATLAB. Al crear un objeto y asignarlo a hobj1:

hobj1 = HdClass(3.14);

hobj1 hace referencia al nuevo objeto, no al mismo objeto mencionado anteriormente (y sigue referenciado por hobj2).

Borrar variables de identificador

Cuando se borra un identificador del espacio de trabajo, MATLAB quita la variable, pero no quita el objeto al que hace referencia el otro identificador. Sin embargo, si no hay referencias a un objeto, MATLAB destruye el objeto.

Dados hobj1 y hobj2, que ambos hacen referencia al mismo objeto, puede borrar cualquier identificador sin afectar al objeto:

hobj1.Data = 2^8; clear hobj1 hobj2 
hobj2 =     HdClass with properties:      Data: 256

Si borra ambos hobj1 y hobj2, entonces no hay referencias al objeto. MATLAB destruye el objeto y libera la memoria utilizada por ese objeto.

Eliminar objetos de identificador

Para quitar un objeto al que se hace referencia con cualquier número de identificadores, utilice delete. Dado hobj1 y hobj2, que se refieren al mismo objeto, elimine cualquier identificador. MATLAB elimina el objeto:

hobj1 = HdClass(8); hobj2 = hobj1; delete(hobj1) hobj2 
hobj2 =     handle to deleted HdClass

Utilice clear para quitar la variable del espacio de trabajo.

Modificar objetos

Cuando se pasa un objeto a una función, MATLAB pasa una copia del objeto al área de trabajo de la función. Si la función modifica el objeto, MATLAB modifica sólo la copia del objeto que se encuentra en el área de trabajo de la función. Las diferencias en el comportamiento de la copia entre las clases Handle y Value son importantes en estos casos:

  • Objeto Value: la función debe devolver la copia modificada del objeto. Para modificar el objeto en el espacio de trabajo del llamador, asigne la salida de la función a una variable del mismo nombre

  • Objeto Handle: la copia del área de trabajo de la función hace referencia al mismo objeto. Por lo tanto, la función no tiene que devolver la copia modificada.

Pruebas para el identificador o la clase Value

Para determinar si un objeto es un objeto Handle, utilice la función isa. Si obj es un objeto de alguna clase, esta instrucción determina si obj es un identificador:

isa(obj,'handle')

Por ejemplo, la clase containers.Map crea un objeto Handle:

hobj = containers.Map({'Red Sox','Yankees'},{'Boston','New York'}); isa(hobj,'handle') 
ans =       1

hobj es también un objeto containers.Map:

isa(hobj,'containers.Map') 
ans =       1

La consulta de la clase de hobj muestra que se trata de un objeto containers.Map:

class(hobj) 
ans =  containers.Map

La función class devuelve la clase específica de un objeto.

Temas relacionados