Domanda

Un amico che non conosce la programmazione OO mi ha chiesto la differenza tra Membro e Proprietà e mi vergognavo di ammettere che non avrei potuto dargli una buona risposta. Dato che le proprietà possono anche essere oggetti stessi, mi è rimasta una descrizione generale e un elenco di eccezioni.

Qualcuno può stabilire una buona definizione di quando considerare qualcosa un membro rispetto a una proprietà? Forse sto bastardizzando 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 semantico, ma mi dà ancora fastidio il fatto che non posso spiegarglielo.

È stato utile?

Soluzione

Una proprietà è un tipo di membro. Altri potrebbero essere costruttori, metodi, campi, tipi nidificati, conversioni, indicizzatori ecc., Ovviamente a seconda della lingua / della piattaforma. Molte volte il significato esatto della terminologia dipende dal contesto.

Per fornire una definizione specifica per C # , dalla specifica C # 3.0, sezione 1.6.1:

  

La tabella seguente offre una panoramica dei tipi di membri che una classe può contenere.
  (Righe per ...)

     
      
  • Costanti
  •   
  • Campi
  •   
  • Metodi
  •   
  • Proprietà
  •   
  • indicizzatori
  •   
  • Eventi
  •   
  • Operatori
  •   
  • Costruttori
  •   
  • I distruttori
  •   
  • Tipi
  •   

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

Altri suggerimenti

Nessuno dei due termini ha alcun significato definito nella programmazione orientata agli oggetti o nella progettazione orientata agli oggetti. Né hanno un significato definito nella stragrande maggioranza dei linguaggi di programmazione.

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

Alcuni esempi di lingue che hanno una delle 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". significa 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 indica approssimativamente lo stesso concetto (ovvero significa approssimativamente la stessa cosa) del termine "membro"; in C ++ e C #.

Tutto ciò è solo per dire che quei due termini significano esattamente cosa significano le specifiche rilevanti per il linguaggio di programmazione, né più né meno. (Inserisci qui la citazione gratuita di Lewis Carroll.)

Proprietà è un tipo di membri.

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

  • Costruttori
  • I distruttori
  • Costanti
  • Campi
  • Metodi
  • Proprietà
  • indicizzatori
  • Operatori
  • Eventi
  • I delegati
  • Corsi
  • Interfacce
  • Structs

MSDN: C #: class

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

Le proprietà ti danno 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 cambiare più facilmente la politica di lettura e scrittura.

Questo vale per C #. Non sono sicuro che ciò sia vero per le altre lingue.

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

Quindi, sebbene (quasi sempre) una proprietà sia una variabile membro raggiungibile, puoi avere una proprietà che non fa realmente 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){;}
  }
}

Sia le proprietà che 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)

Dove viene definita la palla e viene dato un colore (proprietà) mentre il rimbalzo del metodo è una subroutine che descrive il modo in cui la palla reagirà colpendo un altro oggetto.
Non tutte le lingue hanno proprietà, ovvero Java ha solo campi a cui devono accedere i getter e i setter.

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

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

da manuale di PHP :

Le variabili dei membri della classe sono chiamate " proprietà " ;. Potresti anche vederli riferiti all'uso di altri termini come " attributi " o " campi " ;. Sono definiti utilizzando una delle parole chiave pubbliche, protette o private, seguita da una normale dichiarazione di variabili. Questa dichiarazione può includere un'inizializzazione.

Membro è un termine generico (probabilmente originato in C ++ , ma anche definito in < a href = "https://docs.oracle.com/javase/tutorial/information/glossary.html#M" rel = "nofollow"> Java ) utilizzato per indicare un componente di una classe. La proprietà è un concetto ampio usato per indicare una caratteristica particolare di una classe che, una volta istanziata la classe, aiuterà a definire lo stato dell'oggetto.

I seguenti passaggi, estratti da " Analisi e progettazione orientate agli oggetti " da Grady Booch aiutano a chiarire l'argomento. Innanzitutto, è importante comprendere i concetti di stato e comportamento:

  

Lo 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.

     

Comportamento è il modo in cui un oggetto agisce e reagisce, in termini di cambiamenti di stato e passaggio di messaggi (metodi) ; l'attività esternamente visibile e verificabile di un oggetto.

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

  

Il campo termini (Object Pascal), variabile di istanza (Smalltalk), oggetto membro (C ++) e slot (CLOS) sono intercambiabili , che significa 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. I termini messaggio (Smalltalk), metodo (molte lingue OO), funzione membro (C ++) e operazione sono generalmente intercambiabili.

Ma la notazione introdotta dall'autore è precisa:

  

Un attributo indica una parte di un oggetto aggregato, e quindi viene usato durante l'analisi e il design per esprimere una proprietà singolare 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'operazione indica alcuni servizi forniti dalla classe. Le operazioni (...) si distinguono dagli attributi aggiungendo parentesi o fornendo la firma completa dell'operazione, composta da classe di ritorno, nome e argomenti formali (se presenti): RN (Argomenti)

In sintesi, puoi considerare i membri come tutto ciò che compone la classe e le proprietà come i membri (attributi) che definiscono collettivamente la struttura della classe, oltre alle sue relazioni con altre classi. Quando la classe viene istanziata, i valori vengono assegnati alle sue proprietà per definire lo stato dell'oggetto.

Saluti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top