Saltar al contenido

Terminología de programación orientada a objetos: clase, attributepropiedad, campo, miembro de datos

Orlando, parte de este equipo de trabajo, nos ha hecho el favor de redactar esta sección ya que controla perfectamente el tema.

Solución:

“Campos”, “variables de clase” y “attributes” están más o menos lo mismo – un nivel bajo ranura de almacenamiento unido a un objeto. La documentación de cada lenguaje puede usar un término diferente consistentemente, pero la mayoría de los programadores los usan indistintamente. (Sin embargo, esto también significa que algunos de los términos pueden ser ambiguos, como “variable de clase”, que puede interpretarse como “una variable de una instancia de una clase dada”, o “una variable del objeto de clase en sí mismo” en un lenguaje donde los objetos de clase son algo que puede manipular directamente).

Las “propiedades” son, en la mayoría de los idiomas que uso, algo completamente diferente: son una forma de adjuntar un comportamiento personalizado a la lectura/escritura de un campo. (O para reemplazarlo).

Entonces, en Java, el ejemplo canónico sería:

class Circle 

    // The radius field
    private double radius;
    public Circle(double radius) 
        this.radius = radius;
    

    // The radius property
    public double getRadius() 
        return radius;
    
    public void setRadius(double radius) 
        // We're doing something else besides setting the field value in the 
        // property setter
        System.out.println("Setting radius to " + radius);
        this.radius = radius;
    

    // The circumference property, which is read-only
    public double getCircumference() 
        // We're not even reading a field here.
        return 2 * Math.PI * radius;
    


(Tenga en cuenta que en Java, una propiedad foo es un par de métodos de acceso llamados getFoo() y setFoo() – o simplemente el captador si la propiedad es de solo lectura).


Otra forma de ver esto es que las “propiedades” son un abstracción – una promesa de un objeto para permitir que las personas que llaman obtengan o establezcan un dato. Mientras que “campos”, etc. son posibles implementación de esta abstracción. Los valores para getRadius() o getCircumference() en el ejemplo anterior podrían almacenarse directamente, o podrían calcularse, no le importa a la persona que llama; los setters pueden o no tener efectos secundarios; no le importa a la persona que llama.

Estoy de acuerdo contigo, hay mucha confusión innecesaria debido a las definiciones sueltas y el uso inconsistente de muchos términos OO. Los términos sobre los que pregunta se usan de manera intercambiable, pero se podría decir que algunos son más generales que otros (orden descendente): Propiedad -> Atributos -> Variables de clase -> Campos.

Los siguientes pasajes, extraídos de “Análisis y Diseño Orientado a Objetos” por Grady Booch ayudar a aclarar el tema. En primer lugar, es importante entender el concepto de estado:

los estado de un objeto abarca todos los (normalmente static) propiedades del objeto más los valores actuales (generalmente dinámicos) de cada una de estas propiedades. Por propiedades entendemos la totalidad de las propiedades del objeto. attributes y las relaciones con otros objetos.

La programación orientada a objetos es bastante genérica con respecto a cierta nomenclatura, ya que varía enormemente de un idioma a otro:

Los términos campo (Objeto Pascual), Instancia variable (Smalltalk), el objeto miembro (C++) y la ranura (CLOS) son intercambiables, es decir, un depósito de parte del estado de un objeto. Colectivamente, constituyen la estructura del objeto.

Pero la notación introducida por el autor es precisa:

Un attribute denota una parte de un objeto agregado, por lo que se utiliza durante el análisis y el diseño para expresar una propiedad singular de la clase. Usando la sintaxis independiente del lenguaje, un attribute puede tener un nombre, una clase o ambos y, opcionalmente, una expresión predeterminada: A:C=E.

variable de clase: Parte del estado de un clase. Colectivamente, las variables de clase de una clase constituyen su estructura. Una variable de clase es compartida por todas las instancias de la misma clase. En C++, una variable de clase se declara como static miembro.

En resumen:

  • Propiedad es un concepto amplio utilizado para denotar una característica particular de una claseabarcando tanto su attributes y sus relaciones con otras clases.

  • Atributodenota una parte de un objeto agregadopor lo que se utiliza durante el análisis y el diseño para expresar una propiedad singular de la clase.

  • variable de clase es un attribute definido en una clase de la que existe una sola copia, independientemente de cuántas instancias de la clase existan. Entonces, todas las instancias de esa clase comparten su valor y su declaración.

  • Campo es un término específico del idioma para variable de instancia, es decir, una attribute cuyo valor es específico para cada objeto.

Llevo más de 20 años haciendo Oop y me doy cuenta de que la gente a menudo usa diferentes palabras para las mismas cosas. Tengo entendido que los campos, las variables de clase y attributes todos significan lo mismo. Sin embargo, la propiedad se describe mejor mediante el enlace stackoverflow que incluyó en su pregunta.

Sección de Reseñas y Valoraciones

Nos encantaría que puedieras difundir este ensayo si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *