Frage

Ich glaube, ich habe diese Begriffe benutzen austauschbar / falsch!

War es hilfreich?

Lösung

Iain, das ist im Grunde eine Terminologie Frage und ist trotz des „sprachunabhängig“ Tag mit dieser Frage verbunden ist, sehr Sprache / Umwelt.

Für Design Diskussionen Sake, Eigentum und Instanzvariable austauschbar verwendet werden, da die Idee ist, dass eine Eigenschaft ein Datenelement ist ein Objekt beschreibt.

Wenn man über eine bestimmte Sprache sprechen können diese zwei unterschiedlich sein. Zum Beispiel ist eine Eigenschaft in C # tatsächlich eine Funktion, die ein Objekt zurückgibt, während ein Instanz-Variable eine nicht-statische Elementvariable einer Klasse ist.

Andere Tipps

Hershi ist direkt über dieses Wesen sprachspezifisch. Aber auf die Spuren der Sprache spezifischer Antworten hinzuzufügen:

In Python, eine Instanzvariable ist ein Attribut einer Instanz, (in der Regel) etwas, das im Wörterbuch der Instanz bezeichnet wird. Dies ist analog zu Mitgliedern oder Instanzvariablen in Java, außer alles öffentlich ist.

Eigenschaften sind Abkürzungen / Setter-Methoden Getter, dass sehen genauso aus wie eine Instanzvariable . So wurde in der folgenden Klassendefinition (modifizierte von Guido neuen Objekt Manifest Stil ):

class C(object):

    def __init__(self):
        self.y = 0

    def getx(self):
        if self.y < 0: return 0
        else: return self.y

    def setx(self, x):
        self.y = x

    x = property(getx, setx)

>>> z = C()
>>> z.x = -3
>>> print z.x
0
>>> print z.y
-3
>>> z.x = 5
>>> print z.x
5
>>> print z.y
5

y ist eine Instanzvariable von z ist x eine Eigenschaft. (In der Regel, wo eine Eigenschaft definiert ist, gibt es einige Techniken verwendet, um die zugehörigen Instanzvariable zu verschleiern, so dass anderer Code nicht direkt darauf zugreifen.) Der Nutzen von Eigenschaften in Python ist, dass ein Designer nicht zu gehen hat um präventiv Einkapseln alle Instanzvariablen, da zukünftige Verkapselung durch eine Instanzvariable zu einer Eigenschaft Umwandlung sollten alle vorhandenen Code nicht brechen (es sei denn, der Code Vorteil Lücken zu nehmen ist Ihre Verkapselung zu beheben versucht, oder auf diese angewiesen Klasse Inspektion oder einem anderen Meta -Programmierung-Technik).

All dies ist eine sehr lange Antwort zu sagen, dass auf der Design-Ebene, ist es gut, über Eigenschaften zu sprechen. Es ist Agnostiker, was Art der Verkapselung Sie ausführen müssen. Ich denke, dieses Prinzip nicht sprachunabhängig ist, sondern Sprachen neben Python gilt.

Codebeispiel getan in C #

public class ClassName
{
   private string variable;

   public string property
   {
      get{ return variable; }
      set { variable = value; }
   }
}

In Objective-C, eine Eigenschaft ist eine Instanzvariable, die den Vorteil eines überladenen Punktoperators nehmen können seinen Setter und Getter zu nennen. So my.food = "Cheeseburger" ist eigentlich als [mein setFood: "Cheeseburger"] interpretiert. Dies ist ein weiterer Fall, in dem die Definition ist auf jeden Fall nicht sprachunabhängig, da Objective-C das @property Schlüsselwort definiert.

Möglicherweise ist das, weil Sie zum ersten Mal von C ++ rechts kamen ?! In meiner Schulzeit hatte ich Professoren, die die Klasseneigenschaften oder Klasse die ganze Zeit atributes. Da ich auf die Java C # Welt bewegte, begann ich über Mitglieder zu hören. Klassenmitglieder, zB Mitglieder ...

Und dann auf Eigenschaften apear! in Java und .NET. Also ich denke, es ist besser für Sie, es Mitglieder zu nennen. Wheather sie sind beispielsweise Mitglieder (oder wie Sie es Instanzvariable genannt) oder Klasse Mitglieder ....

Cheers!

Eine Eigenschaft kann, und ich nehme meistens nicht, eine Instanzvariable zurück, aber es kann mehr. Sie könnten Logik in einer Eigenschaft, Aggregatwerte oder zu aktualisieren andere Instanzvariablen usw. setzen denke ich, ist es am besten so aber zu tun zu vermeiden. Logik sollte in Methoden gehen.

In Java wir etwas genannt haben Java Beans Properties , aber das ist im Prinzip eine Instanzvariable, die einen bestimmten Namensmuster für seine Getter und Setter folgt.

Bei hinzuzufügen, was gesagt worden ist, in einem Langauge wie C #, eine Eigenschaft, ist im Wesentlichen eine Get- und Set-Funktion. Als Ergebnis kann es eigene Logik, die zusätzlich zu der immer / Einstellung läuft. Eine Instanz Variable kann dies nicht tun.

Eine Eigenschaft ist eine Art von Daten mit einem Objekt zugeordnet. Zum Beispiel kann eine Eigenschaft eines Kreises ist sein Durchmesser, und ein anderer ist sein Bereich.

eine Instanzvariable ist ein Stück von Daten, die in einem Objekt gespeichert ist. Es muss nicht unbedingt direkt mit einer Eigenschaft entsprechen. Zum Beispiel (He), kann ein Kreis speichert seinen Radius in einer Instanzvariable, und berechnen dessen Durchmesser und die Fläche auf diesem Radius basiert. Alle drei sind noch Eigenschaften, aber nur der Radius wird in einer Instanzvariablen gespeichert.

Einige Sprachen haben das Konzept der „First-Class“ -Eigenschaften. Dies bedeutet, dass auf eine Client-Anwendung, die Eigenschaft aussieht und wie eine Instanz-Variable verwendet. Das heißt, anstatt etwas wie circle.getDiameter() zu schreiben, würden Sie schreiben circle.diameter, und statt circle.setRadius(5), würden Sie circle.radius = 5 schreiben.

Im Gegensatz zu den anderen Antworten gegeben, I tun denkt, dass es eine nützliche Unterscheidung zwischen Membervariablen und Eigenschaften, die sprachunabhängig ist.

Der Unterschied ist am deutlichsten in komponentenorientierten Programmierung, das überall nützlich, aber am einfachsten in einer grafischen Benutzeroberfläche zu verstehen. In diesem Zusammenhang neige ich dazu, die Design-Time Konfiguration einer Komponente zu denken, wie die „Eigenschaften“ ein Objekt zu manipulieren. Zum Beispiel wähle ich die Vordergrund- und Hintergrundfarben, die Grenze Stil und Schriftart eines Texteingabefeldes durch seine Eigenschaften einstellen. Während diese Eigenschaften könnte zur Laufzeit geändert werden, sind sie in der Regel nicht. Zur Laufzeit eines anderen Satz von Variablen, die den Inhalt des Feldes, sind viel eher gelesen und geschrieben werden. Ich denke, diese Informationen als „Zustand“ der Komponente.

Warum ist diese Unterscheidung sinnvoll? Wenn eine Abstraktion für Verdrahtungskomponenten zu schaffen zusammen, in der Regel nur die „state“ Variablen müssen freigelegt werden. zurück in das Textfeld ein Beispiel gehen, könnten Sie eine Schnittstelle deklarieren, die Zugriff auf den aktuellen Inhalt zur Verfügung stellt. Aber die „Eigenschaften“, die das Aussehen und das Gefühl des Bauteils zu steuern sind nur auf eine konkrete Implementierungsklasse definiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top