Vlastnost (programování)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 28. února 2014; kontroly vyžadují 12 úprav .

Vlastnost  je způsob, jak získat přístup k vnitřnímu stavu objektu, napodobující proměnnou nějakého typu. Přístup k vlastnosti objektu vypadá stejně jako přístup k poli struct (ve strukturovaném programování), ale ve skutečnosti je implementován prostřednictvím volání funkce. Když se pokusíte nastavit hodnotu této vlastnosti, zavolá se jedna metoda, a když se pokusíte získat hodnotu této vlastnosti, zavolá se jiná metoda.

Při aplikaci vlastností

Vlastnost je obvykle spojena s nějakým vnitřním polem objektu. Ale vlastnost nemusí být vůbec spojena s žádnou objektovou proměnnou, ačkoli s ní uživatel daného objektu nakládá, jako by to bylo skutečné pole.

Vlastnosti zvyšují flexibilitu a bezpečnost programování, protože jako součást (veřejného) rozhraní umožňují měnit vnitřní implementaci objektu beze změny jeho polí. Vlastnosti výrazně usnadňují úpravu programu v případech, kdy byla třída původně implementována s porušením encapsulation a později bylo nutné změnit způsob přístupu k poli. Při absenci mechanismu vlastností v jazyce by bylo nutné vyhledávat a nahrazovat odkazy na pole metodami přístupového objektu.

Metody vlastností

V mnoha programovacích jazycích jsou vlastnosti implementovány jako dvojice metod : metoda, která přijímá aktuální hodnotu vlastnosti, se nazývá přístupový objekt ; metoda, která nastavuje novou hodnotu vlastnosti , je mutátor . V programovacích jazycích, které nepodporují vlastnosti, jako je C++ a Java , je dvojice přístupový objekt/mutátor běžnou náhradou.

Je obvyklé pojmenovat metody vlastností názvem vlastnosti s předponami get a set : například pro vlastnost  Xyzzy get_Xyzzy a set_Xyzzy ( tradiční styl C ) nebo GetXyzzy a SetXyzzy ( styl CamelCase ). Kvůli tomuto schématu pojmenování se slangová jména getter a setter držela metod vlastností .

Příklady

Vlastnosti v C#

Vlastnosti v C# jsou pole s logickým blokem obsahujícím klíčová slova geta set.

Příklad třídy s vlastností:

class MyClass { private int p_field ; public int Pole { get { return p_pole ; } private set { p_pole = hodnota ; } } }

Vlastnosti ve VB.NET

Příklad implementace ve VB.NET. Pokud chcete implementovat vlastnost pouze pro čtení nebo jen pro zápis , použijí se modifikátory ReadOnly a WriteOnly. Vlastnost lze parametrizovat. Může to být také výchozí vlastnost, k tomu musíte přidat modifikátor Výchozí

Sub Main Dim F As New Foo F. _ Data = 5 F . Item ( 0 ) = 5 F ( 0 ) = 5 ' Zápis do vlastnosti Console . WriteLine ( F ( 0 )) 'Vlastnost čtení End Sub Public Class Foo Private m_Data As Integer Private m_Arr () As Integer = { 1 , 2 , 3 , 4 , 5 } Data veřejného vlastnictví jako celočíselná sada ( Value As Integer ) 'Setter m_Data = Koncová sada hodnot Získat návrat m_Data ' Získat konec Získat koncovou vlastnost Veřejná výchozí položka vlastnosti ( Param As Integer ) As Integer ' Výchozí parametrizovaná vlastnost Set ( Value As Integer ) m_Arr ( Param ) = Hodnota End Set Get Return m_Arr ( Param ) End Get End Vlastnost End Class

Vlastnosti v Delphi

Vlastnost v Delphi je popsána slovem property.

Příklad třídy s vlastností:

TMyClass = class private FMyField : Integer ; procedura SetMyField ( const Value : Integer ) ; function GetMyField : Integer ; public property MyField : Integer read GetMyField write SetMyField ; konec ; funkce TMyClass . GetMyField : Integer ; begin Vysledek := FMyField ; konec ; postup TMyClass . SetMyField ( const Value : Integer ) ; begin FMyField := Hodnota ; konec ;

Vlastnosti v jazyce ActionScript

class MyClass { private _foo : int ; public function get foo () : int { return _foo ; } public function set foo ( foo : int ) : void { _foo = foo ; } }

Vlastnosti v Objective C

@interface Company  : NSObject { NSString * var_name ; } @property ( zachovat ) NSString * var_name ; @konec @implementační společnost @synthesize var_name ; @konec

Vlastnosti v Ruby

Deklarace vlastností v Ruby se neliší od deklarací metod. Chcete-li například vytvořit vlastnost trvání pro třídu Song, musíte popsat metody trvání a trvání=(hodnota)

class Song def Duration @duration end def Duration = ( value ) @duration = value end end

Jednoduchý přístup k interní objektové proměnné však lze nahradit voláním metody attr_accessor :duration

class Song attr_accessor :duration end

Zajímavější je příklad vytvoření vlastnosti Duration_in_minutes, která vrátí nebo nastaví dobu trvání v minutách:

class Skladba def Duration_in_minutes @duration / 60 . 0 end def Duration_in_minutes = ( hodnota ) @duration = ( hodnota * 60 ) . to_i end end

Změna vlastnosti Duration_in_minutes však ovlivní vlastnost Duration. Například

píseň = píseň . nová píseň . trvání_v_minutách = 1 . 2 tisknout píseň . trvání # vytiskne 72

Vlastnosti v Pythonu

Sada metod s dekorátory definuje, jak pracovat s vlastností (čtení, zápis, mazání). Pokud je některá z metod odstraněna (s výjimkou @property), ztrácí se možnost pracovat s vlastností odpovídajícím způsobem.

Příklad třídy s vlastností:

třída A : def __init__ ( self ): self . __x = Žádný @property def x ( self ): return self . __X @x . setter def x ( self , hodnota ): self . __x = hodnota @x . deleter def x ( self ): self . __x = Žádný >>> a = A () >>> a . x >>> a . x = 2 >>> a . x 2 >>> del a . x >>> a . x >>>

Viz také