2009-08-05 9 views
25

Un amico che è nuovo alla programmazione OO mi ha chiesto la differenza tra un membro e proprietà, e mi vergognavo di ammettere che non potevo dargli una buona risposta. Poiché le proprietà possono essere anche oggetti stessi, mi è rimasta una descrizione generale e un elenco di eccezioni.cos'è un membro e una proprietà

Qualcuno può fornire una buona definizione di quando considerare qualcosa di un membro o di una proprietà? Forse sto razzolando il concetto, o è solo che un membro è solo il nome interno che uso, e la proprietà è ciò che è esposto ad altri oggetti?

Non credo che non conoscere la risposta a questa domanda abbia influito sulla qualità della mia programmazione, ed è solo un punto di semantica, ma mi dà ancora fastidio che non riesco a spiegarglielo.

+0

Penso che il termine che stavi cercando, piuttosto che membro, sia * campo *. O altrimenti: membro * variabile *. – Thorarin

+0

Una definizione particolarmente difficile per Google anche per – ThorSummoner

+0

è una domanda interessante. penseresti che un membro implicherebbe un'autonomia che una proprietà non possiede (ad es. tu possiedi una proprietà, ma non possiedi membri) – josh

risposta

46

Una proprietà è un tipo di membro. Altri potrebbero essere costruttori, metodi, campi, tipi annidati, conversioni, indicizzatori ecc., A seconda della lingua/piattaforma, ovviamente. Un sacco di volte il esatto significato di terminologia dipende dal contesto.

Per dare un C# definizione SPECIFICI, dal spec C# 3.0, sezione 1.6.1:

La seguente tabella fornisce una panoramica dei tipi di membri di una classe può contenere.
(righe per ...)

  • Costanti
  • Campi
  • Metodi
  • Proprietà
  • Indicizzatori
  • Eventi
  • Operatori
  • Costruttori
  • distruttori
  • Tipi

Si noti che questo è membri di una classe . Diverse "cose" hanno diversi tipi di membri: in C#, un'interfaccia non può avere un campo come membro, ad esempio.

+1

+1 per essere l'unico finora (su quattro) a sapere che una proprietà è anche un membro ... – Guffa

1

I membri sono solo oggetti o tipi primitivi appartenenti a una classe.

Le proprietà offrono più potere dei membri. È come un modo semplificato per creare getter e setter che ti permettono di creare, ad esempio, getter pubblici e setter privati; e metti la logica che vuoi nel modo in cui verrà letta o scritta. Possono essere usati come un modo per esporre i membri, essendo possibile modificare più facilmente la politica di lettura e scrittura.

Questo vale per C#. Non sono sicuro se questo è vero per le altre lingue però.

1

Un membro (variabile) è solo una parte dell'oggetto. Una proprietà è (cercherò di qualificarlo con "di solito" - non sono sicuro che sia una parola tecnicamente chiara che ha un significato non ambiguo in più lingue) è un aspetto pubblicamente accessibile dell'oggetto, ad es. attraverso metodi getter e setter.

Così, mentre (quasi sempre) di una proprietà è una variabile membro raggiungibile, si può avere una proprietà che non è davvero parte dello stato dell'oggetto (non che questo sia un buon design):

public class Foo { 
    public String getJunk() 
    { return "Junk";} 

    public void setJunk(String ignore){;} 
    } 
} 
1

Le proprietà sono un modo di esporre i campi, dove i campi sono le variabili attuali. Ad esempio (C#):

class Foo { 
    private int field; 
    public int Property { 
    get { return field; } 
    set { field = value; } 
    } 
}
+0

Il tuo "membro" è in realtà un "campo". – bradlis7

1

Entrambe le proprietà e i metodi sono membri di un oggetto. Una proprietà descrive alcuni aspetti dell'oggetto mentre un metodo accede o utilizza l'oggetto proprietario.
Un esempio in pseudo-codice:

Object Ball 
Property color(some Value) 
Method bounce(subroutine describing the movement of the Ball) 

Quando il pallone è definito e assegnato un colore (proprietà) mentre il metodo rimbalzo è una subroutine che descrive il modo in cui il pallone reagirà a colpire un altro oggetto.
Non tutte le lingue hanno proprietà, ad esempio Java ha solo campi a cui devono accedere getter e setter.

4

Proprietà è un tipo di membri.

In C#, per esempio, una classe può avere i seguenti membri:

  • Costruttori
  • distruttori
  • Costanti
  • Campi
  • Metodi
  • Proprietà
  • indicizzatori
  • Operatori
  • Eventi
  • Delegati
  • Classi
  • Interfacce
  • Structs

MSDN: C#: class

5

Nessuno dei due termini presenta un significato definito di sorta in programmazione o Oggetto Object-Oriented -Oriented Design. Né hanno alcun significato definito nella stragrande maggioranza dei linguaggi di programmazione.

Solo un piccolo numero di linguaggi di programmazione hanno un concetto chiamato proprietà o membro, e ancora meno hanno entrambi.

Alcuni esempi di lingue che hanno uno dei due sono C++ (che ha membri), ECMAScript (che ha proprietà) e C# (che ha entrambi). Tuttavia, questi termini non indicano necessariamente gli stessi concetti in diversi linguaggi di programmazione. Ad esempio, il termine "membro" indica approssimativamente la stessa cosa in C++ e C#, ma il termine "proprietà" significa cose completamente diverse in ECMAScript e C#. In effetti, il termine "proprietà" in ECMAScript denota approssimativamente lo stesso concetto (cioè significa più o meno la stessa cosa) del termine "membro" in C++ e C#.

Tutto questo è solo per dire che questi due termini significano esattamente ciò che le specifiche rilevanti per il linguaggio di programmazione dicono che significano, né più né meno. (Inserimento gratuito Lewis Carroll citare qui.)

0

da PHP manual: variabili membro

classe sono chiamati "proprietà". Potresti anche vederli riferiti ad altri termini come "attributi" o "campi". Sono definiti utilizzando una delle parole chiave public, protected o private, seguita da una normale dichiarazione di variabile. Questa dichiarazione può includere un'inizializzazione.

0

Member è un termine generico (probabilmente originato in C++, ma anche definito in Java) utilizzato per indicare un componente di una classe. La proprietà è un concetto ampio usato per denotare una caratteristica particolare di una classe che, una volta istanziata la classe, aiuterà a definire lo stato dell'oggetto.

i seguenti passaggi, estratti da "Object-Oriented Analysis and Design" da Grady Booch aiutare a chiarire l'argomento. In primo luogo, è importante capire i concetti di stato e il comportamento:

Il stato di un oggetto comprende tutte le proprietà (solitamente statiche) dell'oggetto più i valori correnti (solitamente dinamici) di ciascuna di queste proprietà. Per proprietà, intendiamo la totalità degli attributi e delle relazioni dell'oggetto con altri oggetti.

problemè come un oggetto agisce e reagisce, in termini di cambiamenti di stato e di messaggi (metodi); l'attività visibile e verificabile esteriore di un oggetto.

Quindi, il comportamento di un oggetto dipende dalle operazioni disponibili e dal suo stato (proprietà e relativi valori correnti). Si noti che OOP è abbastanza generico per talune nomenclatura, in quanto varia notevolmente da una lingua all'altra:

campo Termini (Object Pascal), variabile di istanza (Smalltalk), oggetto membro (C++), e la fessura (CLOS) sono intercambiabili, ovvero un repository per parte dello stato di un oggetto. Collettivamente, costituiscono la struttura dell'oggetto.

Un'operazione su un oggetto, definita come parte della dichiarazione di una classe. Il messaggio di termini (Smalltalk), il metodo (molte lingue OO), la funzione membro (C++) e l'operazione sono generalmente intercambiabili.

Ma la notazione introdotta dall'autore è preciso:

Un attributo indicata una parte di un oggetto aggregato, e quindi viene utilizzato durante l'analisi, nonché la progettazione di esprimere un singolare proprietà della classe. Utilizzando la sintassi indipendente dalla lingua, un attributo può avere un nome, una classe o entrambi e facoltativamente un'espressione predefinita: A:C=E.

Un funzionamento indica un servizio fornito dalla classe. Le operazioni (...) si distinguono dagli attributi aggiungendo tra parentesi o fornendo la firma completa del funzionamento, composto di classe di ritorno, il nome e argomenti formali (se del caso): R N(Arguments)

In sintesi, si può pensare di membri come tutto ciò che compone la classe e proprietà come membri (attributi) che definiscono collettivamente la struttura della classe, più le sue relazioni con altre classi. Quando la classe viene istanziata, i valori vengono assegnati alle sue proprietà al fine di definire lo stato dell'oggetto.

Cheers

Problemi correlati