Властивість — спосіб доступу до внутрішнього стану об'єкта, що імітує змінну певного типу. Звернення до властивості об'єкта виглядає так само, як і звернення до структурного поля (в структурному програмуванні), але, в дійсності, реалізоване через виклик функції. При спробі задати значення даної властивості викликається один метод, а при спробі отримати значення даної властивості - інший.
При використанні властивостей
- можна задати значення за умовчанням, яке зберігатиметься в цій якості (або вказати, що ніякого значення за умовчанням не передбачається);
- можна вказати, що це - властивість тільки для читання.
Як правило, властивість пов'язана з деяким внутрішнім полем об'єкта. Але властивості взагалі може не бути поставлена у відповідність жодна змінна об'єкта, хоча користувач даного об'єкта працює з ним так, ніби це - справжнє поле.
Властивості підвищують гнучкість і безпеку програмування, оскільки, будучи частиною (відкритого) інтерфейсу, дозволяють змінювати внутрішню реалізацію об'єкта без зміни його властивостей. Властивості значно полегшують модифікацію програми в тих випадках, коли клас спочатку було реалізовано з порушенням інкапсуляції, а надалі потрібно змінити спосіб доступу до поля. При відсутності в мові механізму властивостей довелося б шукати і замінювати звернення до полів на методи доступу.
Методи властивостей
У багатьох мовах програмування властивості реалізуються у вигляді пари методів: метод, який одержує поточне значення властивості, називається акцесор (accessor); метод, що задає нове значення властивості, - мутатор (mutator). У мовах програмування, що не підтримують властивостей, наприклад, і Java, пара з акцесора і мутаторів є загальноприйнятим сурогатом для їх заміни.
Прийнято називати методи властивостей назвою властивості з префіксами get і set: наприклад, для властивості Xyzzy — get_Xyzzy і set_Xyzzy (традиційний стиль Сі) або GetXyzzy і SetXyzzy (стиль CamelCase). В зв'язку з цією схемою називання за методами властивостей закріпились сленгові назви getter і setter.
Приклади
Властивості в C#
Властивості в C# — поля з логічним блоком, у якому є ключові слова get
і set
.
Приклад класу з властивістю:
class MyClass { private int p_field; public int Field { get { return p_field; } private set { p_field = value; } } }
Властивості в VB.NET
Приклад реалізації в VB.NET. Якщо потрібно реалізувати властивість або , застосовують модифікатори ReadOnly і WriteOnly. Властивість може бути параметризованою. Також може бути властивістю за умовчанням, для чого необхідно додати модифікатор Default.
Sub Main Dim F As New Foo F.Data = 5 F.Item(0) = 5 F(0) = 5 'Запис у властивість Console.WriteLine(F(0)) 'Читання властивості End Sub Public Class Foo Private m_Data As Integer Private m_Arr() As Integer = {1, 2, 3, 4, 5} Public Property Data As Integer Set(Value As Integer) 'Сеттер m_Data = Value End Set Get Return m_Data 'Геттер End Get End Property Public Default Property Item(Param As Integer) As Integer 'Параметризована властивість за умовчанням Set(Value As Integer) m_Arr(Param) = Value End Set Get Return m_Arr(Param) End Get End Property End Class
Властивості в Delphi
Для опису властивості в Delphi призначене слово property
.
Приклад класу з властивістю:
TMyClass = class private FMyField: Integer; procedure SetMyField(const Value: Integer); function GetMyField: Integer; public property MyField: Integer read GetMyField write SetMyField; end; function TMyClass.GetMyField: Integer; begin Result := FMyField; end; procedure TMyClass.SetMyField(const Value: Integer); begin FMyField := Value; end;
Властивості в ActionScript
class MyClass { private _foo : int; public function get foo () : int { return _foo; } public function set foo (foo : int) : void { _foo = foo; } }
Властивості в Objective C
@interface Company : NSObject { NSString *var_name; } @property(retain) NSString *var_name; @end @implementation Company @synthesize var_name; @end
Властивості в Ruby
Опис властивості в Ruby нічим не відрізняється від опису метода. Наприклад, для створення властивості duration у класу Song слід описати методи duration і duration=(value)
class Song def duration @duration end def duration=(value) @duration = value end end
Однак просте звертання до внутрішньої змінної об'єкта можна замінити викликом метода attr_accessor :duration
class Song attr_accessor :duration end
Більш цікавим буде приклад створення властивості duration_in_minutes, яка повертатиме або встановлюватиме тривалість у хвилинах:
class Song def duration_in_minutes @duration/60.0 end def duration_in_minutes=(value) @duration = (value*60).to_i end end
При цьому змінення властивості duration_in_minutes вплине на властивість duration. Наприклад:
song = Song.new song.duration_in_minutes = 1.2 print song.duration # надрукує 72
Властивості в Python
Набір методів з декораторами визначає способи роботи з властивістю (читання, запис, видалення). Якщо якийсь із методів прибрати (за винятком @property
), втрачається можливість працювати з властивістю відповідним чином.
Приклад класу з властивістю:
class A: def __init__(self): self.__x = None @property def x(self): return self.__x @x.setter def x(self, value): self.__x = value @x.deleter def x(self): self.__x = None
>>> a = A() >>> a.x >>> a.x = 2 >>> a.x 2 >>> del a.x >>> a.x >>>
Див. також
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U Vikipediyi ye statti pro inshi znachennya cogo termina Vlastivist sposib dostupu do vnutrishnogo stanu ob yekta sho imituye zminnu pevnogo tipu Zvernennya do vlastivosti ob yekta viglyadaye tak samo yak i zvernennya do strukturnogo polya v strukturnomu programuvanni ale v dijsnosti realizovane cherez viklik funkciyi Pri sprobi zadati znachennya danoyi vlastivosti viklikayetsya odin metod a pri sprobi otrimati znachennya danoyi vlastivosti inshij Pri vikoristanni vlastivostej mozhna zadati znachennya za umovchannyam yake zberigatimetsya v cij yakosti abo vkazati sho niyakogo znachennya za umovchannyam ne peredbachayetsya mozhna vkazati sho ce vlastivist tilki dlya chitannya Yak pravilo vlastivist pov yazana z deyakim vnutrishnim polem ob yekta Ale vlastivosti vzagali mozhe ne buti postavlena u vidpovidnist zhodna zminna ob yekta hocha koristuvach danogo ob yekta pracyuye z nim tak nibi ce spravzhnye pole Vlastivosti pidvishuyut gnuchkist i bezpeku programuvannya oskilki buduchi chastinoyu vidkritogo interfejsu dozvolyayut zminyuvati vnutrishnyu realizaciyu ob yekta bez zmini jogo vlastivostej Vlastivosti znachno polegshuyut modifikaciyu programi v tih vipadkah koli klas spochatku bulo realizovano z porushennyam inkapsulyaciyi a nadali potribno zminiti sposib dostupu do polya Pri vidsutnosti v movi mehanizmu vlastivostej dovelosya b shukati i zaminyuvati zvernennya do poliv na metodi dostupu Metodi vlastivostejU bagatoh movah programuvannya vlastivosti realizuyutsya u viglyadi pari metodiv metod yakij oderzhuye potochne znachennya vlastivosti nazivayetsya akcesor accessor metod sho zadaye nove znachennya vlastivosti mutator mutator U movah programuvannya sho ne pidtrimuyut vlastivostej napriklad C i Java para z akcesora i mutatoriv ye zagalnoprijnyatim surogatom dlya yih zamini Prijnyato nazivati metodi vlastivostej nazvoyu vlastivosti z prefiksami get i set napriklad dlya vlastivosti Xyzzy get Xyzzy i set Xyzzy tradicijnij stil Si abo GetXyzzy i SetXyzzy stil CamelCase V zv yazku z ciyeyu shemoyu nazivannya za metodami vlastivostej zakripilis slengovi nazvi getter i setter PrikladiVlastivosti v C Vlastivosti v C polya z logichnim blokom u yakomu ye klyuchovi slova get i set Priklad klasu z vlastivistyu class MyClass private int p field public int Field get return p field private set p field value Vlastivosti v VB NET Priklad realizaciyi v VB NET Yaksho potribno realizuvati vlastivist abo zastosovuyut modifikatori ReadOnly i WriteOnly Vlastivist mozhe buti parametrizovanoyu Takozh mozhe buti vlastivistyu za umovchannyam dlya chogo neobhidno dodati modifikator Default Sub Main Dim F As New Foo F Data 5 F Item 0 5 F 0 5 Zapis u vlastivist Console WriteLine F 0 Chitannya vlastivosti End Sub Public Class Foo Private m Data As Integer Private m Arr As Integer 1 2 3 4 5 Public Property Data As Integer Set Value As Integer Setter m Data Value End Set Get Return m Data Getter End Get End Property Public Default Property Item Param As Integer As Integer Parametrizovana vlastivist za umovchannyam Set Value As Integer m Arr Param Value End Set Get Return m Arr Param End Get End Property End Class Vlastivosti v Delphi Dlya opisu vlastivosti v Delphi priznachene slovo property Priklad klasu z vlastivistyu TMyClass class private FMyField Integer procedure SetMyField const Value Integer function GetMyField Integer public property MyField Integer read GetMyField write SetMyField end function TMyClass GetMyField Integer begin Result FMyField end procedure TMyClass SetMyField const Value Integer begin FMyField Value end Vlastivosti v ActionScript class MyClass private foo int public function get foo int return foo public function set foo foo int void foo foo Vlastivosti v Objective C interface Company NSObject NSString var name property retain NSString var name end implementation Company synthesize var name end Vlastivosti v Ruby Opis vlastivosti v Ruby nichim ne vidriznyayetsya vid opisu metoda Napriklad dlya stvorennya vlastivosti duration u klasu Song slid opisati metodi duration i duration value class Song def duration duration end def duration value duration value end end Odnak proste zvertannya do vnutrishnoyi zminnoyi ob yekta mozhna zaminiti viklikom metoda attr accessor duration class Song attr accessor duration end Bilsh cikavim bude priklad stvorennya vlastivosti duration in minutes yaka povertatime abo vstanovlyuvatime trivalist u hvilinah class Song def duration in minutes duration 60 0 end def duration in minutes value duration value 60 to i end end Pri comu zminennya vlastivosti duration in minutes vpline na vlastivist duration Napriklad song Song new song duration in minutes 1 2 print song duration nadrukuye 72 Vlastivosti v Python Nabir metodiv z dekoratorami viznachaye sposobi roboti z vlastivistyu chitannya zapis vidalennya Yaksho yakijs iz metodiv pribrati za vinyatkom property vtrachayetsya mozhlivist pracyuvati z vlastivistyu vidpovidnim chinom Priklad klasu z vlastivistyu class A def init self self x None property def x self return self x x setter def x self value self x value x deleter def x self self x None gt gt gt a A gt gt gt a x gt gt gt a x 2 gt gt gt a x 2 gt gt gt del a x gt gt gt a x gt gt gt Div takozh