2011-06-22 10 views
13

Tengo un poco de fondo C++ y quiero usar clases en Matlab.Diferencia de clases de control y valores

¿Cuál es la diferencia entre un manejador y una clase de valor?

Sé que usaría una clase de valor si quisiera definir una clase de matriz con operadores sobrecargados como "+" y "*". Sin embargo, a veces parece que las cosas solo funcionan para mí como quiero cuando elijo una clase de manejo.

Respuesta

19

The MathWorks proporciona cierta información sobre la cual se utilizará con ese propósito en su help y también en su PDF documentation. También encontré this article del Yagtom Project (originalmente por Matt Dunham) para ser una gran introducción al OOP en MATLAB.

En la ayuda esto se explica de la siguiente manera (el énfasis es mío):

apoyo MATLAB dos tipos de clases - manejan clases y clases de valor. El tipo de clase que utiliza depende del comportamiento deseado de las instancias de clase y de las características que desea utilizar.

Utilice una clase de control cuando desee crear una referencia a los datos contenidos en un objeto de la clase y no desee copias del objeto para hacer copias de los datos del objeto. Por ejemplo, use una clase de control para implementar un objeto que contenga información para una entrada en la guía telefónica. Varios programas de aplicación pueden acceder a una entrada particular de la guía telefónica, pero solo puede haber un conjunto de datos subyacentes.

El comportamiento de referencia de los identificadores permite que estas clases admitan funciones como eventos, oyentes y propiedades dinámicas.

Utilice clases de valor para representar las entidades que no necesitan ser únicas, como los valores numéricos. Por ejemplo, use una clase de valor para implementar un tipo de datos polinomiales. Puede copiar

En el artículo de Matt Dunham, se hizo otro buen punto para distinguir los dos tipos de clases:

mencionamos anteriormente que los objetos en MATLAB son, (por defecto) aprobada por valor, lo que significa que las copias completas se transfieren en llamadas de método. Sin embargo, los objetos gráficos de Matlab son aprobados por referencia, (a través de identificadores). Si subclasificamos la clase de identificador incorporada [...], los objetos de nuestra clase se pasarán también por referencia, no por valor.

personalmente tiendo a usar clases de mango para conseguir un poco de la sintaxis que estoy acostumbrado con Java: para una clase de mango, que puede tener el almacén de objetos toda la información, de tal manera que se puede tener operaciones como sort(a) (o a.sort()) en su lugar. Para clases de valor, el equivalente de esto es a = sort(a) (o a = a.sort()). Para los operadores, la primera sintaxis no tiene ningún sentido, pero la segunda es obviamente de uso general: p. a = a + b (esto es equivalente a a = plus(a,b) y a = a.plus(b)).

  • Si la principal preocupación de su clase es almacenar valores (numéricos) de algún tipo y poder realizar operaciones, la clase de valor probablemente sea el camino a seguir.
  • Si desea almacenar un estado, agrupar valores relacionados, conectar diferentes objetos juntos (listas vinculadas, gráficos, ...), la clase de control podría ser el camino a seguir.

O al menos, eso es lo que tiendo a usar para hacer la distinción.

0

En realidad es bastante simple y diferente de los idiomas que anota. Las clases de control se pasan por referencia. Las clases de valor pasan por valor. La diferencia de c/C++ es que el mecanismo es parte del sistema de tipo, no una operación que se puede realizar en cualquier variable.

Cuestiones relacionadas