Jaka jest różnica między atrybutem a własnością? [Zamknięte]

162

Wydaje się, że oznaczają to samo. Ale który termin jest bardziej odpowiedni w jakim kontekście?

żrący
źródło
4
Czy możesz sprecyzować kontekst? Na przykład terminy oznaczają zupełnie inne rzeczy w kontekście C #.
David Arno,
1
@David Arno - różne składnie językowe przywłaszczyły sobie jedno lub oba słowa, ale niezależnie od składni danego języka, czy istnieje różnica w znaczeniu? To nie jest złe pytanie.
Corey Trager
4
Myślę, że to złe pytanie. Sprawdzenie tezaurusa pokaże, że są one synonimami w terminach rzeczywistego języka, ale różne języki komputerowe i metajęzyki mogą przypisywać im całkiem różne role, przez co mogą nie być synonimami dla konkretnego języka komputerowego. Zatem kontekst jest wszystkim.
David Arno
9
Jestem bardziej ... sympatyczny. Pamiętam, kiedy pierwszy raz usłyszałem termin „metoda”. Co to do cholery jest „metoda”? Och, to jest to, co nazywasz funkcją, kiedy należy do klasy. Po co nowa terminologia dla czegoś starego? Thoreau powiedział: „strzeż się wszelkich przedsięwzięć, które wymagają nowych ubrań”. (lub słowa ...)
Corey Trager
1
To pytanie jest zbyt szerokie bez podania kontekstu (tak jak zostało napisane, można na nie odpowiedzieć jedynie poprzez podanie listy wszystkich możliwych kontekstów).
Quentin

Odpowiedzi:

199

Ogólnie (iw normalnym języku angielskim) terminy oznaczają to samo.

W specyficznym kontekście HTML / JavaScript terminy są niejasne, ponieważ reprezentacja HTML elementu DOM ma atrybuty (to jest termin używany w XML dla par klucz / wartość zawartych w tagu), ale gdy jest reprezentowany jako obiekt JavaScript te atrybuty pojawiają się jako właściwości obiektu .

Aby jeszcze bardziej zmylić rzeczy, zmiany właściwości zazwyczaj powodują aktualizację atrybutów.

Na przykład zmiana element.href właściwości spowoduje zaktualizowanie href atrybutu w elemencie, co zostanie odzwierciedlone w wywołaniu funkcji element.getAttribute('href').

Jeśli jednak później przeczytasz tę właściwość, zostanie ona znormalizowana do bezwzględnego adresu URL, nawet jeśli atrybut może być względnym adresem URL!

Alnitak
źródło
14
To powinna być akceptowana odpowiedź!
Rubens Mariuzzo
3
@RubensMariuzzo, bez względu na to, jak dokładne może być, nie ma tu odpowiedzi ... po prostu omawia możliwy problem dla ludzi, biorąc pod uwagę kontekst.
Brett Caswell
@BrettCaswell, myślę, że w kontekście DOM (HTML / JS) ta odpowiedź wyjaśnia mi tę różnicę jasno i prosto.
Rubens Mariuzzo
1
@Alnitak Clear cut answer. Zrobiłem dla ciebie jeden z tych stuleci.
mkHun,
Pochodzę z python. Czy mogę użyć terminu class attributei instance property?
Sarit
71

Te słowa istniały na długo przed pojawieniem się informatyki.

  1. Atrybut to jakość lub przedmiot, który przypisujemy komuś lub czemuś. Na przykład berło jest atrybutem władzy i państwowości.

  2. Własność to jakość, która istnieje bez przypisania . Na przykład glina ma właściwości klejące; lub jedną z właściwości metali jest przewodnictwo elektryczne. Własności przejawiają się poprzez zjawiska fizyczne bez potrzeby przypisywania ich komuś lub czemuś. Z tego samego powodu powiedzenie, że ktoś ma męskie cechy, jest oczywiste. W efekcie można powiedzieć, że nieruchomość jest własnością kogoś lub czegoś.

Szczerze mówiąc, w informatyce te dwa słowa, przynajmniej w większości, mogą być używane zamiennie - ale z drugiej strony programiści zwykle nie mają dyplomów z literatury angielskiej i nie piszą ani nie przejmują się zbytnio książkami do gramatyki :).

Jerzy
źródło
1
Jesteś bliżej znaczenia, jakie rozumiem. Atrybut to opis typu, opisuje obiekt jako coś poza kontekstem (np. Interpeter) ... to znaczy istnieje kontekst, ale ten kontekst może być bardzo dobrze wymienny. Na przykład, aby użyć HTML, szerokość szerokości nie będzie działać, jeśli parsujesz dokument bez zamiaru wyświetlania / renderowania go na stronie.
Brett Caswell
Dziękuję Ci! Przyszedłem tutaj, szukając wskazówek, kiedy użyć danego terminu podczas nazywania. Nie obchodzi mnie nawet (bardzo), czy jest to technicznie poprawne, czy nie, to naprawdę przydatne rozróżnienie.
user1433150
1
To jest typ odpowiedzi, którego też szukałem. Dlaczego kontekst lub to, co zdecydował konkretny implementujący język, ma znaczenie. Mogli podjąć arbitralną lub niewykształconą decyzję. Chcę, aby był wykształcony, a to daje mi konkretne powody, by wybrać jeden z nich. Może również wyjaśnić, dlaczego konkretny podmiot wdrażający dokonał wyboru.
bielawski
2
To, co działa dla mnie, to traktowanie właściwości jako obiektywnych, a atrybutów jako względnych / subiektywnych. Cechy takie jak kolor, kształt, punktacja, prędkość wiatru, temperatura (98'F) i inne obiektywne lub mierzalne fakty stanowią o dobrych właściwościach. Cechy takie jak tekstura („miękka”), warunki („wietrznie”), temperatura („gorąco”) i inne stwierdzenia, które nie są niezaprzeczalnie prawdziwe, przyczyniają się do lepszych atrybutów.
Ivan
20

Często atrybut jest używany do opisania mechanizmu lub rzeczy ze świata rzeczywistego.

Właściwość służy do opisania modelu.

Na przykład dokument (leżący na biurku) może mieć atrybut, że jest wersją roboczą.

Klasa, która modeluje dokumenty, ma właściwość wskazującą, czy jest to wersja robocza. W tym przypadku własność przejmuje stan.

Walt Stoneburner
źródło
1
Czy to oznacza, że ​​właściwością instancji jest atrybut?
Abdurrahim,
Intrygujące, ale nie wierzę w to. W przypadku danego dokumentu instancją atrybutu może być kartka papieru; Przykładem właściwości reprezentującej model może być bufor dostatecznie duży dla zawartości wspomnianego artykułu.
Walt Stoneburner
17

Atrybut to rzeczywisty element używany w tagu HTML, na przykład

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

W tym przypadku typ i zaznaczone są atrybutami. Właściwość jest jednak wartością tych atrybutów, które przeglądarka zapisuje wewnątrz elementu DOM. Często wartości atrybutów i właściwości są równe, dlatego jest to tak zagmatwane.

W tym przykładzie element DOM inputma właściwość typez wartością "checkbox"i właściwość checkedz wartością true(zwróć uwagę, jak ta wartość różni się od wartości wewnątrz atrybutu HTML).

Za pomocą Firebuga możesz obserwować zachowanie właściwości po kliknięciu elementu i wybraniu „widoku DOM”.

smonusbonus
źródło
To mogłaby być akceptowana odpowiedź. Jest to zarówno jasne w teorii, jak i przydatne w kontekście.
Jaune
15

Dokładne znaczenie tych terminów będzie w dużej mierze zależało od języka / systemu / wszechświata, o którym mówisz.

W HTML / XML atrybut jest częścią tagu ze znakiem równości i wartością, a własność na przykład nic nie znaczy.

Dlatego potrzebujemy więcej informacji na temat domeny, o której rozmawiasz.

Ned Batchelder
źródło
7
To nie jest poprawne. Zobacz odpowiedź Alnitaka.
kba
6

W Pythonie ...

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 )

Właściwość to pojedyncza nazwa podobna do atrybutu, która otacza zbiór funkcji ustawiających, pobierających (i usuwających).

Atrybut jest zwykle pojedynczym obiektem w innym obiekcie.

Powiedziawszy to jednak, Python udostępnia metody, __getattr__które pozwalają rozszerzyć definicję „atrybutu”.

Bottom Line - są prawie synonimami. Python wprowadza techniczne rozróżnienie w sposobie ich implementacji.

S.Lott
źródło
2

W Javie (lub innych językach) użycie właściwości / atrybutu zależy od zastosowania:

  • Właściwość używana, gdy wartość nie zmienia się zbyt często (zwykle używana podczas uruchamiania lub dla zmiennej środowiskowej)

  • Atrybuty to wartość (obiekt potomny) elementu (obiektu), która może zmieniać się bardzo często / cały czas i być trwała lub nie

eric
źródło
2

W HTML wydaje się, że atrybuty są specyficzne dla drzewa DOM, podczas gdy właściwości są używane do opisywania cech elementów DOM

goonerify
źródło
2

Jaka jest różnica między atrybutem a właściwością?
Jaka jest różnica między funkcją a funkcją? Jaka jest różnica między Characteristic i Character? Jaka jest różnica między Act a Behaviour?

To tylko zmiana kontekstu.

Przedmiot, produkt, osobowość, osoba

Osoba zachowuje się w sposób. Osobowość ma cechy danej postaci. Produkt posiada Cechę, która wywodzi Funkcjonalność. Obiekt miał atrybuty, które nadają mu właściwości.

Ogólny
źródło
Właściwie to dobra odpowiedź.
anonimowy
1
<property attribute="attributeValue">proopertyValue</property>

byłby jednym ze sposobów spojrzenia na to.

W C #

[Attribute]
public class Entity
{
    private int Property{get; set;};
gołąb
źródło
8
Przepraszam, że nie głosuję, ale w
XMLu
@HaraldScheirich to powolna odpowiedź;), ​​ale element jest rzeczywiście nazywany „właściwością”, aby wyczyścić połączenie z Entity.Property. Elementy xml nie są zwykle nazywane „elementami”
zanurkowały
1

Delphi wykorzystało właściwości i trafiło do .NET (ponieważ ma tego samego architekta).

W Delphi są one często używane w połączeniu z informacjami o typie środowiska uruchomieniowego, tak że zintegrowany edytor właściwości może być używany do ustawiania właściwości w czasie projektowania.

Właściwości nie zawsze są powiązane z polami. Mogą to być funkcje, które mogą mieć skutki uboczne (ale oczywiście jest to bardzo zły projekt).

Toon Krijthe
źródło
Niekoniecznie. Zautomatyzowane brudne sprawdzanie trwałego obiektu byłoby przykładem właściwości z efektami ubocznymi, która nie byłaby złym projektem.
Quibblesome