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

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

objetos se comportan como tipos fundamentales con respecto a las operaciones de copia.ValorMATLAB Las copias son valores independientes. Las operaciones que se realizan 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 hacen referencia al mismo objeto. Las operaciones que se realizan en un objeto de identificador son visibles desde todas las variables de identificador que hacen referencia a ese objeto.

Controlar la copia del objeto

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

Comportamiento de copia de objeto de valor

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

a = 8; b = a; 

Ahora reasigne. no ha cambiado:ab

a = 6; b 
b =      8 

La compensación no afecta:ab

clear a b 
b =      8

Propiedades de objeto de valor

El comportamiento de copia de los valores almacenados como propiedades en objetos de valor es el mismo que las variables numéricas. Por ejemplo, supongamos que es un objeto de valor con propiedad:vobj1a

vobj1.a = 8;  

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

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

Controlar el comportamiento de copia de objetos

Aquí hay una clase de identificador llamada que define una propiedad llamada.HdClassData

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

Cree un objeto de esta clase:

hobj1 = HdClass(8) 

Dado que esta sentencia no finaliza con un punto y coma, muestra información sobre el objeto:MATLAB

hobj1 =     HdClass with properties:      Data: 8 

La variable es un identificador que hace referencia al objeto creado.hobj1 Copiar a los resultados en otro manejador que hace referencia al mismo objeto:hobj1hobj2

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

Dado que los identificadores hacen referencia al objeto, copiar un identificador copia el identificador a un nuevo nombre de variable, pero el identificador todavía hace referencia al mismo objeto. Por ejemplo, dado que es un objeto Handle con propiedad:hobj1Data

hobj1.Data 
ans =       8

Cambiar el valor de la propiedad y el valor de la propiedad del objeto copiado también cambia:hobj1DataData

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

Porque y son identificadores para el mismo objeto, cambiar la copia,, también cambia los datos que se accede a través de Handle:hobj2hobj1hobj2hobj1

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

Reasignar variables de identificador

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

hobj1 = HdClass(3.14);

hace referencia al nuevo objeto, no al mismo objeto al que se hizo referencia anteriormente (y al que todavía se hace referencia).hobj1hobj2

Borrar variables de manija

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

Dado y, que ambos hacen referencia al mismo objeto, puede borrar cualquiera de los manejos sin afectar al objeto:hobj1hobj2

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

Si borra ambos y, a continuación, no hay referencias al objeto. destruye el objeto y libera la memoria utilizada por ese objeto.hobj1hobj2MATLAB

Eliminación de Handle objetos

Para eliminar un objeto al que hace referencia cualquier número de identificadores, utilice.delete Dado y, que ambos hacen referencia al mismo objeto, elimine cualquier identificador. suprime el objeto:hobj1hobj2MATLAB

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

Se utiliza para eliminar la variable del espacio de trabajo.clear

Modificación de objetos

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

  • Value (objeto): 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

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

Las pruebas para el identificador o la clase de valor

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

isa(obj,'handle')

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

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

también es un objeto:hobjcontainers.Map

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

Consultar la clase de muestra que es un objeto:hobjcontainers.Map

class(hobj) 
ans =  containers.Map

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

Temas relacionados