Kiinteistö (ohjelmointi)

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 28. helmikuuta 2014 tarkistetusta versiosta . tarkastukset vaativat 12 muokkausta .

Ominaisuus  on tapa päästä käsiksi kohteen sisäiseen tilaan jäljittelemällä jonkin tyyppistä muuttujaa. Objektin ominaisuuden käyttäminen näyttää samalta kuin struct-kenttään pääsy (strukturoidussa ohjelmoinnissa), mutta se toteutetaan itse asiassa funktiokutsulla. Kun yrität asettaa tämän ominaisuuden arvon, yksi menetelmä kutsutaan, ja kun yrität saada tämän ominaisuuden arvon, kutsutaan toista menetelmää.

Ominaisuuksia sovellettaessa

Tyypillisesti ominaisuus liittyy johonkin objektin sisäiseen kenttään . Mutta ominaisuus ei välttämättä liity mihinkään objektimuuttujaan ollenkaan, vaikka objektin käyttäjä käsittelee sitä ikään kuin se olisi todellinen kenttä.

Ominaisuudet lisäävät ohjelmoinnin joustavuutta ja turvallisuutta, koska osana (julkista) käyttöliittymää niiden avulla voit muuttaa objektin sisäistä toteutusta muuttamatta sen kenttiä. Ominaisuudet helpottavat ohjelman muokkaamista huomattavasti tapauksissa, joissa luokka toteutettiin alunperin kapselointirikkomuksella ja myöhemmin oli tarpeen muuttaa tapaa, jolla kenttään pääsee käsiksi. Jos kielessä ei ole ominaisuusmekanismia, kenttäviittaukset olisi etsittävä ja korvattava accessor-menetelmillä.

Ominaisuusmenetelmät

Monissa ohjelmointikielissä ominaisuudet toteutetaan menetelmäparina : menetelmää, joka vastaanottaa ominaisuuden nykyisen arvon , kutsutaan aksesoriksi ; menetelmä, joka asettaa uuden ominaisuuden arvon , on mutaattori . Ohjelmointikielissä, jotka eivät tue ominaisuuksia, kuten C++ ja Java , aksessori/mutaattori-pari on yleinen korvike ne.

Ominaisuusmenetelmät on tapana nimetä ominaisuuden nimellä etuliitteillä get ja set : esimerkiksi Xyzzy-ominaisuuden osalta  get_Xyzzy ja set_Xyzzy ( perinteinen C -tyyli ) tai GetXyzzy ja SetXyzzy ( CamelCase -tyyli ). Tämän nimeämisjärjestelmän ansiosta slanginimet getter ja setter ovat pysyneet ominaisuusmenetelmissä .

Esimerkkejä

Ominaisuudet C#:ssa

C#:n ominaisuudet ovat kenttiä, joissa on looginen lohko, joka sisältää avainsanat getja set.

Esimerkki luokasta, jolla on ominaisuus:

class MyClass { yksityinen int p_kenttä ; public int Kenttä { get { return p_field ; } yksityinen joukko { p_kenttä = arvo ; } } }

Ominaisuudet VB.NET:ssä

Toteutusesimerkki VB.NETissä. Jos haluat ottaa käyttöön vain luku - tai kirjoitus -ominaisuuden , Vain luku - ja Vain kirjoitus -määritteet ovat voimassa. Omaisuus voidaan parametroida. Se voi olla myös oletusominaisuus, jota varten sinun on lisättävä oletusmuuttaja

Sub Main Dim F Uusi Foo _ F. _ Data = 5 F. _ Kohde ( 0 ) = 5 F ( 0 ) = 5 ' Kirjoita konsoli -ominaisuuteen . WriteLine ( F ( 0 )) 'Lue ominaisuus End Sub Julkinen luokka Foo Yksityinen m_Data Kokonaislukuna Yksityinen m_Arr ( ) Kokonaislukuna = { 1 , 2 , 3 , 4 , 5 } _ Julkisen omaisuuden tiedot kokonaislukuna ( arvo kokonaislukuna ) ' Asetaja m_Data = Arvon loppujoukko Hae palautus m_Data ' Saada loppu Hae loppuominaisuus _ _ _ Julkinen oletusominaisuuskohde ( parametri kokonaislukuna ) kokonaislukuna Parametrisoitu oletusominaisuusjoukko ( arvo kokonaislukuna ) m_Arr ( parametri ) = arvon loppujoukko Hae palautus m_Arr ( parametri ) Loppu Hae loppuomaisuuden loppuluokka _ _ _ _ _ _ _ _

Kiinteistöt Delphissä

Delphin kiinteistöä kuvataan sanalla property.

Esimerkki luokasta, jolla on ominaisuus:

TMyClass = luokan yksityinen FMyField : Kokonaisluku ; menettely SetMyField ( const Arvo : Kokonaisluku ) ; toiminto GetMyField : Kokonaisluku ; julkinen omaisuus MyField : Kokonaisluku lue GetMyField kirjoittaa SetMyField ; loppu ; toiminto TMyClass . GetMyField : Kokonaisluku ; alkaa Tulos := FMyField ; loppu ; menettely TMyClass . SetMyField ( const Arvo : Kokonaisluku ) ; begin FMyField := Arvo ; loppu ;

ActionScriptin ominaisuudet

class MyClass { yksityinen _foo : int ; julkinen funktio get foo () : int { return _foo ; } julkinen funktio joukko foo ( foo : int ) : void { _foo = foo ; } }

Ominaisuudet tavoitteessa C

@interface Yritys  : NSObject { NSString * var_nimi ; } @omaisuus ( säilyttää ) NSString * var_name ; @loppu @toteutusyritys _ @synthesize var_name ; @loppu

Ominaisuudet Rubyssa

Rubyn ominaisuusilmoitukset eivät eroa menetelmäilmoituksista. Jos haluat esimerkiksi luoda kesto-ominaisuuden Song-luokalle, sinun on kuvattava menetelmät kesto ja kesto=(arvo)

luokka Kappaleen kesto @kesto loppu def kesto = ( arvo ) @kesto = arvo loppu loppu

Yksinkertainen pääsy sisäiseen objektimuuttujaan voidaan kuitenkin korvata kutsulla attr_accessor :duration -menetelmään.

luokka Kappale attr_accessor :kesto loppu

Mielenkiintoisempi on esimerkki kesto_in_minutes-ominaisuuden luomisesta, joka palauttaa tai asettaa keston ajan minuutteina:

luokka Song def kesto_minuutteina @kesto / 60 . 0 end def kesto_minuutteina = ( arvo ) @kesto = ( arvo * 60 ) . to_i loppuun _

Kesto-ominaisuuden muuttaminen kuitenkin vaikuttaa kesto-ominaisuuteen. Esimerkiksi

laulu = laulu . uusi biisi . kesto_minuutteina = 1 . 2 tulostaa kappaletta . kesto # tulostaa 72

Ominaisuudet Pythonissa

Joukko menetelmiä sisustajien kanssa määrittelee, kuinka ominaisuutta käytetään (lukeminen, kirjoittaminen, poistaminen). Jos jokin menetelmistä poistetaan (paitsi @property), kyky työskennellä omaisuuden kanssa asianmukaisella tavalla menetetään.

Esimerkki luokasta, jolla on ominaisuus:

luokka A : def __init__ ( itse ): itse . __x = Ei mitään @property def x ( itse ): palauta itse . __x @x . asettaja def x ( itse , arvo ): itse . __x = arvo @x . poistaja def x ( itse ): itse . __x = Ei mitään >>> a = A () >>> a . x >>> a . x = 2 >>> a . x 2 >>> del a . x >>> a . x >>>

Katso myös