Ця стаття не містить . (жовтень 2017) |
Поле класу або атрибут (змінна-член, data member, class field, instance variable) в об'єктно-орієнтованому програмуванні — змінна, зв'язана з класом або об'єктом. Всі дані об'єкта зберігаються в його полях. Доступ до полів здійснюється по імені. Зазвичай тип даних кожного поля задається в описі класу, членом якого є поле. Структурні типи, підтримувані більшістю мов програмування (які називаються структурами (structure) в C, записами (record) в Pascal і т. д.), є окремим випадком класів - а саме, класами з одних тільки полів. Вся інформація, що відноситься до полів класів, в рівній мірі відноситься і до структурних типів. Зазвичай кожному об'єкту відповідають власні значення всіх його полів. Також до полів класу відносять статичні поля(static data members, static class fields, class variables) — поля, загальні для всіх об'єктів класу.
Статичні поля семантично не відрізняються від звичайних глобальних змінних, але вони доступні тільки по кваліфікованому імені (тобто із зазначенням імені класу), і тому, на відміну від глобальних змінних, не захаращують простір глобальних імен.
У деяких об'єктно-орієнтованих мовах програмування, таких як Java, не існує глобальних змінних, і тому статичні поля класів - єдиний спосіб зберігання глобальних даних в програмах на цих мовах. Деякі мови, такі як , дозволяють визначати бітові поля. Ці поля займають менше однієї одиниці пам'яті (байт); компілятор сам упаковує кілька бітових полів в одну одиницю пам'яті, дозволяючи при цьому звертатися до бітових полів як до окремих полів класу.
Поняття бітових полів не обмежується полями класів: за аналогією воно було перенесено і на інші випадки упаковки в одну одиницю пам'яті кількох значень, наприклад в мережевих протоколах і в форматах файлів. Зазвичай, область доступу полів класу роблять закритою (private), тобто доступ до них дозволяється тільки методам того ж класу. Щоб надати користувачам класу значення його полів, використовуються властивості: вони дозволяють класу контролювати зміна його полів, наприклад перевіряти приналежність заданого значення діапазону допустимих значень.
Коли доступ до поля інкапсулюється процедурами властивості, можливо оновлювати код, що обробляє зміни значення цієї властивості, не порушуючи сумісність з існуючими користувачами класу. Тому, прийнято створювати властивості для доступу до полів класу, навіть тоді, коли на початковому етапі розробки не потрібно ніякої додаткової обробки привласнюються полю значень.
Приклади
class foo { private: int x; // Це поле — закрите. Доступ до нього можливий лише // із методів класу ''foo''. public: int y; // Це поле — відкрите. Доступ до нього можливий із // будь-якого місця програми. Рекомендовано так не робити. // Ці два методи (аксесор і мутатор) забезпечують доступ до закритого поля x. Рекомендується робити саме так. int get_x() { return x; }; void set_x(int x) { this->x = x; }; static int z; // Це статичне поле. Воно належить класу foo цілком, а не його об'єктам. char a:3; // Це бітові поля. В сумі вони займають char b:3; // 8 біт, тобто вони будуть розміщені в одному char c:1; // байті пам'яті. Таким чином можливо char d:1; // звертатися до окремих бітів пам'яті. };
type foo = class private x: Integer; // закрите поле public y: Integer; // відкрите поле // для доступу до закритого поля в Delphi можна використовувати властивості function get_x: Integer; // аксесор procedure set_x(x: Integer); // мутатор property _x: Integer read get_x write set_x; // підтримка статичних полів для .NET / Win32 введена в Delphi 8/2007 відповідно class var z: integer; // Це статичне поле. Воно належить класу // foo цілком, а не його об'єктам. // в Delphi не підтримуються бітові поля end;
В Python поля і методи зазвичай називаються загальним терміном атрибути. Статичні атрибути можуть бути перевантажені в екземплярі. Атрибути екземпляра визначаються не в структурі класу, а в методах (наприклад, конструкторі). Атрибути, доступ до яких управляється окремими методами, називаються властивостями (синтаксично доступ до атрибутів і властивостей ідентичний):
class Foo(object): z = 0 # атрибут класу (статичний атрибут) def __init__(self, x, y): # конструктор self._x = x # закритий атрибут self.y = y # відкритий атрибут def getx(self): return self._x # методи для читання def setx(self, value): self._x = value # записи def delx(self): del self._x # видалення властивості x = property(getx, setx, delx, "Властивість 'x'.") # визначення властивості
Застосування:
foo = Foo(2, 4) # створення екземпляра foo.y = 10 # зв'язування значення з атрибутом foo.x = 30 # те ж, але еквівалентно foo.setx (30) print foo.x, foo.y, foo.z # друк атрибутів del foo.x # видалення властивості print foo._x # не рекомендується print foo.__x # не спрацює, тому що в класі немає такого атрибута
<?php class HelloWorld { private $message; // Приватне поле класу HelloWorld public $global_message; // публічне поле // Доступ до приватного поля public function GetMessage() { return $this->message; } } ?>
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno zhovten 2017 Pole klasu abo atribut zminna chlen data member class field instance variable v ob yektno oriyentovanomu programuvanni zminna zv yazana z klasom abo ob yektom Vsi dani ob yekta zberigayutsya v jogo polyah Dostup do poliv zdijsnyuyetsya po imeni Zazvichaj tip danih kozhnogo polya zadayetsya v opisi klasu chlenom yakogo ye pole Strukturni tipi pidtrimuvani bilshistyu mov programuvannya yaki nazivayutsya strukturami structure v C zapisami record v Pascal i t d ye okremim vipadkom klasiv a same klasami z odnih tilki poliv Vsya informaciya sho vidnositsya do poliv klasiv v rivnij miri vidnositsya i do strukturnih tipiv Zazvichaj kozhnomu ob yektu vidpovidayut vlasni znachennya vsih jogo poliv Takozh do poliv klasu vidnosyat statichni polya static data members static class fields class variables polya zagalni dlya vsih ob yektiv klasu Statichni polya semantichno ne vidriznyayutsya vid zvichajnih globalnih zminnih ale voni dostupni tilki po kvalifikovanomu imeni tobto iz zaznachennyam imeni klasu i tomu na vidminu vid globalnih zminnih ne zaharashuyut prostir globalnih imen U deyakih ob yektno oriyentovanih movah programuvannya takih yak Java ne isnuye globalnih zminnih i tomu statichni polya klasiv yedinij sposib zberigannya globalnih danih v programah na cih movah Deyaki movi taki yak C dozvolyayut viznachati bitovi polya Ci polya zajmayut menshe odniyeyi odinici pam yati bajt kompilyator sam upakovuye kilka bitovih poliv v odnu odinicyu pam yati dozvolyayuchi pri comu zvertatisya do bitovih poliv yak do okremih poliv klasu Ponyattya bitovih poliv ne obmezhuyetsya polyami klasiv za analogiyeyu vono bulo pereneseno i na inshi vipadki upakovki v odnu odinicyu pam yati kilkoh znachen napriklad v merezhevih protokolah i v formatah fajliv Zazvichaj oblast dostupu poliv klasu roblyat zakritoyu private tobto dostup do nih dozvolyayetsya tilki metodam togo zh klasu Shob nadati koristuvacham klasu znachennya jogo poliv vikoristovuyutsya vlastivosti voni dozvolyayut klasu kontrolyuvati zmina jogo poliv napriklad pereviryati prinalezhnist zadanogo znachennya diapazonu dopustimih znachen Koli dostup do polya inkapsulyuyetsya procedurami vlastivosti mozhlivo onovlyuvati kod sho obroblyaye zmini znachennya ciyeyi vlastivosti ne porushuyuchi sumisnist z isnuyuchimi koristuvachami klasu Tomu prijnyato stvoryuvati vlastivosti dlya dostupu do poliv klasu navit todi koli na pochatkovomu etapi rozrobki ne potribno niyakoyi dodatkovoyi obrobki privlasnyuyutsya polyu znachen PrikladiC class foo private int x Ce pole zakrite Dostup do nogo mozhlivij lishe iz metodiv klasu foo public int y Ce pole vidkrite Dostup do nogo mozhlivij iz bud yakogo miscya programi Rekomendovano tak ne robiti Ci dva metodi aksesor i mutator zabezpechuyut dostup do zakritogo polya x Rekomenduyetsya robiti same tak int get x return x void set x int x this gt x x static int z Ce statichne pole Vono nalezhit klasu foo cilkom a ne jogo ob yektam char a 3 Ce bitovi polya V sumi voni zajmayut char b 3 8 bit tobto voni budut rozmisheni v odnomu char c 1 bajti pam yati Takim chinom mozhlivo char d 1 zvertatisya do okremih bitiv pam yati Delphi type foo class private x Integer zakrite pole public y Integer vidkrite pole dlya dostupu do zakritogo polya v Delphi mozhna vikoristovuvati vlastivosti function get x Integer aksesor procedure set x x Integer mutator property x Integer read get x write set x pidtrimka statichnih poliv dlya NET Win32 vvedena v Delphi 8 2007 vidpovidno class var z integer Ce statichne pole Vono nalezhit klasu foo cilkom a ne jogo ob yektam v Delphi ne pidtrimuyutsya bitovi polya end Python V Python polya i metodi zazvichaj nazivayutsya zagalnim terminom atributi Statichni atributi mozhut buti perevantazheni v ekzemplyari Atributi ekzemplyara viznachayutsya ne v strukturi klasu a v metodah napriklad konstruktori Atributi dostup do yakih upravlyayetsya okremimi metodami nazivayutsya vlastivostyami sintaksichno dostup do atributiv i vlastivostej identichnij class Foo object z 0 atribut klasu statichnij atribut def init self x y konstruktor self x x zakritij atribut self y y vidkritij atribut def getx self return self x metodi dlya chitannya def setx self value self x value zapisi def delx self del self x vidalennya vlastivosti x property getx setx delx Vlastivist x viznachennya vlastivosti Zastosuvannya foo Foo 2 4 stvorennya ekzemplyara foo y 10 zv yazuvannya znachennya z atributom foo x 30 te zh ale ekvivalentno foo setx 30 print foo x foo y foo z druk atributiv del foo x vidalennya vlastivosti print foo x ne rekomenduyetsya print foo x ne spracyuye tomu sho v klasi nemaye takogo atributa PHP lt php class HelloWorld private message Privatne pole klasu HelloWorld public global message publichne pole Dostup do privatnogo polya public function GetMessage return this gt message gt