Vra

Ek dink ek het hierdie terme uitruilbaar / verkeerd gebruik!

Was dit nuttig?

Oplossing

Iain, dit is basies 'n terminologie vraag en is, ten spyte van die "taal-agnostikus" tag wat verband hou met hierdie vraag, baie taal / omgewing verband hou.

Vir ontwerp besprekings ontwil, eiendom en byvoorbeeld veranderlike kan uitruilbaar gebruik, aangesien die idee is dat 'n eiendom is 'n data item beskryf 'n voorwerp.

Wanneer praat oor 'n spesifieke taal hierdie twee kan anders wees. Byvoorbeeld, in C # 'n eiendom is eintlik 'n funksie wat 'n voorwerp terugkeer, terwyl 'n geval veranderlike is 'n nie-statiese lid veranderlike van 'n klas.

Ander wenke

Hershi is reg oor hierdie wese taalspesifieke. Maar toe te voeg tot die spoor van taalspesifieke antwoorde:

In luislang, 'n geval veranderlike is 'n kenmerk van 'n geval, (oor die algemeen) iets wat tot in woordeboek nie die geval se verwys. Dit is analoog aan lede of instansie veranderlikes in Java, behalwe alles is publiek.

Properties is kortpaaie na getter / setter metodes wat Kyk net soos 'n geval veranderlike . So, in die volgende klas definisie (aangepas uit Guido se nuwe styl voorwerp manifes ):

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 is 'n geval veranderlike van z, x is 'n eiendom. (In die algemeen, waar 'n eiendom word gedefinieer, daar is 'n paar tegnieke wat gebruik word om die verband byvoorbeeld veranderlike verduister sodat ander kode nie direkte toegang tot dit.) Die voordeel van eiendomme in python is dat 'n ontwerper het nie om rond te gaan pre-mails vat al byvoorbeeld veranderlikes, aangesien toekoms inkapseling deur die omskakeling van 'n geval veranderlike om 'n eiendom moet nie enige bestaande kode te breek (tensy die kode is om voordeel te trek van skuiwergate jou inkapseling probeer om op te los, of vertroue op die klas inspeksie of 'n ander meta -programming tegniek).

Dit alles is 'n baie lang antwoord te sê dat by die ontwerp vlak, is dit goed om te praat oor eienskappe. Dit is agnostikus as om watter tipe inkapseling jy mag nodig wees om uit te voer. Ek dink hierdie beginsel is nie taal agnostikus, maar is van toepassing op tale langs luislang.

-kode voorbeeld gedoen in C #

public class ClassName
{
   private string variable;

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

In objektiewe c, 'n eiendom is 'n geval veranderlike wat voordeel kan trek uit 'n oorlaaide dot operateur om sy setter en lucky noem. So my.food = "cheese" is eintlik geïnterpreteer as [my setFood: "cheese"]. Dit is nog 'n geval waar die definisie is beslis nie die taal agnostikus omdat objektiewe-c definieer die @property navraag.

Miskien dis omdat jy die eerste keer van C ++ reg ?! In my skooldae het ek professore wat sê klas eienskappe of klas atributes al die tyd. Sedert ek die Java C # wêreld verskuif, het ek begin hoor oor lede. Klas lede, byvoorbeeld lede ...

En dan Properties kry as! in Java en NET. So ek dink dit is beter vir jou om dit lede bel. Mooi weer hulle byvoorbeeld lede (of as jy dit genoem byvoorbeeld veranderlike) of klas Lede ....

Cheers!

'n eiendom kan, en ek dink meestal nie, terug te keer 'n geval wissel, maar dit kan meer doen. Jy kan logika sit in 'n eiendom, totaal waardes of update ander instansie veranderlikes ens Ek dink dit is die beste om te verhoed dat dit te doen egter. Logika moet in metodes gaan.

In Java ons iets genoem Java Beans Properties , maar dit is basies 'n geval veranderlike wat 'n sekere benaming patroon vir sy lucky en setter volg.

By te voeg aan wat gesê is, in 'n langauge soos C #, 'n eiendom is in wese 'n get en stel funksie. As gevolg hiervan, kan dit gebruik logika wat loop in bykomend tot die kry / instelling het. 'N geval veranderlike kan dit nie doen nie.

'n eiendom is 'n soort van data wat verband hou met 'n voorwerp. Byvoorbeeld, 'n eienskap van 'n sirkel is die deursnee, en 'n ander is sy gebied.

'n geval veranderlike is 'n stukkie van die data wat gestoor word in 'n voorwerp. Dit hoef nie noodwendig direk ooreenstem met 'n eiendom. Byvoorbeeld (heh), kan 'n sirkel sy radius stoor in 'n geval veranderlike, en bereken die deursnee en area wat gebaseer is op wat radius. Al drie is nog eiendomme, maar slegs die radius word gestoor in 'n geval veranderlike.

Sommige tale het die konsep van "eerste klas" eienskappe. Dit beteken dat 'n kliënt aansoek, die eiendom lyk en word gebruik soos 'n geval veranderlike. Dit is, in plaas van die skryf van iets soos circle.getDiameter(), sou jy circle.diameter skryf, en in plaas van circle.setRadius(5), sou jy circle.radius = 5 skryf.

In teenstelling met die ander antwoorde wat gegee word, het ek doen dink dat daar 'n nuttige onderskeid is tussen lidveranderlikes en eienskappe wat taalagnosties is.

Die onderskeid is die duidelikste in komponent-georiënteerde programmering, wat op enige plek nuttig is, maar die maklikste om te verstaan ​​in 'n grafiese UI.In daardie konteks is ek geneig om te dink aan die ontwerp-tyd-konfigurasie van 'n komponent as die manipulering van die "eienskappe" van 'n voorwerp.Ek kies byvoorbeeld die voorgrond- en agtergrondkleure, die randstyl en lettertipe van 'n teksinvoerveld deur sy eienskappe te stel.Terwyl hierdie eienskappe kon tydens looptyd verander word, is hulle gewoonlik nie.Tydens looptyd is 'n ander stel veranderlikes, wat die inhoud van die veld verteenwoordig, baie meer geneig om gelees en geskryf te word.Ek dink aan hierdie inligting as die "toestand" van die komponent.

Hoekom is hierdie onderskeid nuttig?Wanneer 'n abstraksie geskep word om komponente saam te bedraad, hoef gewoonlik net die "toestand" veranderlikes blootgestel te word.As u teruggaan na die voorbeeld van die teksveld, kan u 'n koppelvlak verklaar wat toegang tot die huidige inhoud bied.Maar die "eienskappe" wat die voorkoms en gevoel van die komponent beheer, word slegs op 'n konkrete implementeringsklas gedefinieer.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top