¿Cuál es la diferencia entre atributo y propiedad? [cerrado]

162

Estos parecen significar lo mismo. Pero, ¿qué término es más apropiado en qué contexto?

cáustico
fuente
44
¿Puedes ser más específico sobre el contexto? Por ejemplo, los términos significan cosas completamente diferentes dentro de un contexto de C #.
David Arno el
1
@David Arno: diferentes sintaxis de idiomas se han apropiado de una o ambas palabras, pero independientemente de la sintaxis de un idioma en particular, ¿hay alguna diferencia en el significado? No es una mala pregunta.
Corey Trager el
44
Creo que es una mala pregunta. Una comprobación de un tesauro mostrará que son sinónimos en términos de lenguaje real, pero diferentes lenguajes de computadora y meta pueden asignarles roles bastante diferentes y, por lo tanto, pueden no ser sinónimos de un lenguaje de computadora en particular. Entonces el contexto lo es todo.
David Arno el
9
Soy más ... comprensivo. Recuerdo la primera vez que escuché el término "método". ¿Qué diablos es un "método"? Oh, es lo que llamas una función cuando pertenece a una clase. ¿Por qué nueva terminología para algo viejo? Thoreau dijo, "cuidado con todas las empresas que requieren ropa nueva". (o palabras ...)
Corey Trager
1
Esta pregunta es demasiado amplia sin proporcionar algún contexto (tal como está escrito, solo se puede responder con una lista de todos los contextos posibles).
Quentin

Respuestas:

199

En términos generales (y en el uso normal del inglés) los términos significan lo mismo.

En el contexto específico de HTML / Javascript, los términos se confunden porque la representación HTML de un elemento DOM tiene atributos (que es el término utilizado en XML para los pares clave / valor contenidos en una etiqueta) pero cuando se representa como un objeto JavaScript esos atributos aparecen como propiedades de objeto .

Para confundir aún más las cosas, los cambios en las propiedades generalmente actualizarán los atributos.

Por ejemplo, cambiar la element.href propiedad actualizará el href atributo en el elemento, y eso se reflejará en una llamada a element.getAttribute('href').

Sin embargo, si posteriormente lee esa propiedad, se habrá normalizado a una URL absoluta, ¡aunque el atributo podría ser una URL relativa!

Alnitak
fuente
14
¡Esta debería ser la respuesta aceptada!
Rubens Mariuzzo
3
@RubensMariuzzo, por más preciso que sea, no hay respuesta aquí ... solo explica un posible punto de confusión para las personas, dado un contexto.
Brett Caswell
@BrettCaswell, creo que en un contexto DOM (HTML / JS) esta respuesta explica la diferencia clara y simplemente para mí.
Rubens Mariuzzo
1
@Alnitak Respuesta clara. Hice uno del siglo para ti.
mkHun
Vengo de python. ¿Puedo usar el término class attributey instance property?
Sarit
71

Estas palabras existieron mucho antes de que apareciera la informática.

  1. El atributo es una cualidad u objeto que atribuimos a alguien o algo. Por ejemplo, el cetro es un atributo de poder y estado.

  2. La propiedad es una cualidad que existe sin ninguna atribución . Por ejemplo, la arcilla tiene cualidades adhesivas; o, una de las propiedades de los metales es la conductividad eléctrica. Las propiedades se demuestran a través de fenómenos físicos sin la necesidad de atribuirlas a alguien o algo. Del mismo modo, decir que alguien tiene atributos masculinos es evidente. En efecto, se podría decir que una propiedad es propiedad de alguien o algo.

Sin embargo, para ser justos, en Ciencias de la Computación estas dos palabras, al menos en su mayor parte, se pueden usar indistintamente, pero nuevamente los programadores generalmente no tienen títulos en Literatura Inglesa y no escriben ni se preocupan mucho por los libros de gramática :).

Jorge
fuente
1
Estás más cerca del significado tal como lo entiendo. Un atributo es un Descriptor de tipo, describe el objeto a algo fuera de contexto (como un intérprete) ... es decir, hay un contexto, pero ese contexto puede muy bien ser intercambiable. Para utilizar HTML, por ejemplo, el propósito completo del ancho no tiene ninguna función si analiza el documento sin ninguna intención de mostrarlo / representarlo en una página.
Brett Caswell
¡Gracias! Vine aquí buscando orientación sobre cuándo usar qué término al nombrar. Ni siquiera me importa (mucho) si esto es técnicamente correcto o no, es una distinción realmente útil.
user1433150
1
Este es el tipo de respuesta que estaba buscando también. ¿Por qué es importante el contexto o qué decidió un implementador de lenguaje en particular? Es posible que hayan tomado una decisión arbitraria o sin educación. Quiero hacer una educación y esto me da razones concretas para elegir una sobre la otra. También puede aclarar por qué un implementador particular hizo su elección.
bielawski
2
Lo que funciona para mí es considerar las propiedades como objetivo y los atributos como relativos / subjetivos. Las características como color, forma, puntaje, velocidad del viento, temperatura (98 'F) y otros hechos objetivos o medibles hacen buenas propiedades. Las características como la textura ("suave"), las condiciones ("ventoso"), la temperatura ("caliente") y otras declaraciones que no son innegablemente verdaderas crean mejores atributos.
Ivan
20

A menudo se usa un atributo para describir el mecanismo o la cosa del mundo real.

Se usa una propiedad para describir el modelo.

Por ejemplo, un documento (sentado en su escritorio) puede tener el atributo de que es un borrador.

La clase que modela documentos tiene una propiedad para indicar si es o no un borrador. En este caso, la propiedad captura el estado.

Walt Stoneburner
fuente
1
¿Eso significa que la propiedad de una instancia es atributo?
Abdurrahim
Intrigante, pero no lo creo. Dado un documento, una instancia de un atributo podría ser una hoja de papel; una instancia de la propiedad representativa del modelo podría ser un búfer lo suficientemente grande como para el contenido de dicho documento.
Walt Stoneburner
17

Un atributo es lo que usa dentro de su etiqueta HTML como

<input type="checkbox" checked="checked" />

En este caso, tipo y marcado son atributos. Sin embargo, la propiedad es el valor de estos atributos, que el navegador guarda dentro del elemento DOM. A menudo, el valor de los atributos y las propiedades son iguales, eso es lo que lo hace tan confuso.

En este ejemplo, el elemento DOM inputtiene la propiedad typecon el valor "checkbox"y la propiedad checkedcon el valor true(observe cómo este valor difiere del valor dentro del atributo HTML).

Usando Firebug puede observar el comportamiento de las propiedades al hacer clic en un elemento y seleccionar la "vista DOM".

smonusbonus
fuente
Esta podría ser la respuesta aceptada. Es claro en teoría y útil en contexto.
Jaune
15

El significado preciso de estos términos dependerá mucho del idioma / sistema / universo del que esté hablando.

En HTML / XML, un atributo es la parte de una etiqueta con un signo igual y un valor, y la propiedad no significa nada, por ejemplo.

Por lo tanto, necesitamos más información sobre qué dominio está discutiendo.

Ned Batchelder
fuente
77
Esto no es correcto. Ver la respuesta de Alnitak.
kba
6

En Python ...

class X( object ):
    def __init__( self ):
        self.attribute
    def getAttr( self ):
        return self.attribute
    def setAttr( self, value ):
        self.attribute= value
    property_name= property( getAttr, setAttr )

Una propiedad es un nombre único de tipo atributo que envuelve una colección de funciones setter, getter (y deleter).

Un atributo es generalmente un solo objeto dentro de otro objeto.

Dicho esto, sin embargo, Python le ofrece métodos como los __getattr__que le permiten ampliar la definición de "atributo".

En pocas palabras, son casi sinónimos. Python hace una distinción técnica en cómo se implementan.

S.Lott
fuente
2

En Java (u otros idiomas), el uso de Propiedad / Atributo depende del uso:

  • Propiedad utilizada cuando el valor no cambia muy a menudo (generalmente se usa al inicio o para una variable de entorno)

  • Los atributos son un valor (objeto hijo) de un Elemento (objeto) que puede cambiar muy a menudo / todo el tiempo y ser o no persistente

eric
fuente
2

En HTML parece que los atributos son específicos del árbol DOM, mientras que las propiedades se usan para describir las características de los elementos DOM

goonerify
fuente
2

¿Cuál es la diferencia entre Attribute y Property?
¿Cuál es la diferencia entre Feature y Function? ¿Cuál es la diferencia entre Characteristic y Character? ¿Cuál es la diferencia entre Act y Behavior?

Es solo un cambio de contexto.

Objeto, Producto, Personalidad, Persona

Una persona actúa en un comportamiento. Una personalidad tiene características de un personaje dado. Un producto tiene una característica que deriva la funcionalidad. Un objeto tenía atributos que le otorgan propiedades.

Genérico
fuente
Esa es realmente una buena respuesta.
anónimo
1
<property attribute="attributeValue">proopertyValue</property>

sería una forma de verlo.

C ª#

[Attribute]
public class Entity
{
    private int Property{get; set;};
paloma
fuente
8
Perdón por rechazar esto, pero en XML lo que etiquetó como una propiedad es realmente un "elemento"
Harald Scheirich 03 de
@HaraldScheirich una respuesta lenta;) pero el elemento de hecho se llama "propiedad" para dejar en claro la conexión con Entity.Property. No es habitual que los elementos xml se denominen realmente "elemento"
paloma
1

Delphi usó propiedades y han encontrado su camino en .NET (porque tiene el mismo arquitecto).

En Delphi, a menudo se usan en combinación con información de tipo de tiempo de ejecución, de modo que el editor de propiedades integrado se puede usar para establecer la propiedad en tiempo de diseño.

Las propiedades no siempre están relacionadas con los campos. Pueden ser funciones que posiblemente tengan efectos secundarios (pero, por supuesto, es un diseño muy malo).

Toon Krijthe
fuente
No necesariamente. La comprobación sucia automatizada de un objeto persistente sería un ejemplo de una propiedad con efectos secundarios que no sería un mal diseño.
Triste el