Поле класса
По́ле кла́сса или атрибу́т (переменная-член, data member, class field, instance variable) в объектно-ориентированном программировании — переменная, связанная с классом или объектом. Все данные объекта хранятся в его полях. Доступ к полям осуществляется по их имени. Обычно тип данных каждого поля задаётся в описании класса, членом которого является поле.
Содержание
Поля структур
Структурные типы, поддерживаемые большинством языков программирования (называемые структурами (structure) в Си, записями (record) в Паскале и т. д.), являются частным случаем классов — а именно, классами из одних только полей. Вся информация, относящаяся к полям классов, в равной степени относится и к структурным типам.
Статические поля
Обычно каждому объекту соответствуют собственные значения всех его полей. Также к полям класса относят статические поля (static data members, static class fields, class variables) — поля, общие для всех объектов класса.
Статические поля семантически не отличаются от обычных глобальных переменных, но они доступны только по квалифицированному имени (то есть с указанием имени класса), и поэтому, в отличие от глобальных переменных, не загромождают пространство глобальных имён.
В некоторых объектно-ориентированных языках программирования, таких как Java, не существует глобальных переменных, и поэтому статические поля классов — единственный способ хранения глобальных данных в программах на этих языках.
Битовые поля
Некоторые языки, такие как C++, позволяют определять битовые поля. Эти поля занимают менее одной единицы памяти (байт, слово); компилятор сам упаковывает несколько битовых полей в одну единицу памяти, позволяя при этом обращаться к битовым полям как к отдельным полям класса.
Понятие битовых полей не ограничивается полями классов: по аналогии оно было перенесено и на другие случаи упаковки в одну единицу памяти нескольких значений, например в сетевых протоколах и в форматах файлов.
Советы по использованию
Обычно, область доступа полей класса делают закрытой (private), то есть доступ к ним разрешается только методам того же класса. Чтобы предоставить пользователям класса значения его полей, используются свойства: они позволяют классу контролировать изменение его полей, например проверять принадлежность заданного значения диапазону допустимых значений.
Когда доступ к полю инкапсулируется процедурами свойства, возможно обновлять код, обрабатывающий изменения значения этого свойства, не нарушая совместимость с существующими пользователями класса. Поэтому, принято создавать свойства для доступа к полям класса, даже тогда, когда на начальном этапе разработки не требуется никакой дополнительной обработки присваиваемых полю значений.
Примеры использования
C++
class foo {
private:
int x; // Это поле — закрытое. Доступ к нему возможен только
// из методов класса ''foo''.
public:
int y; //Это поле — открытое. Доступ к нему возможен из
//любого места программы. Рекомендуется так не делать.
// Эти два метода ([[свойство (программирование)#Процедуры свойств|акцессор]]
// и [[w:en:Mutator method|мутатор]]) обеспечивают доступ к
// закрытому полю 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; // обращаться к отдельным битам памяти.
};
Delphi
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
В 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
<?php
class HelloWorld {
private $message; // Приватное поле класса HelloWorld
public $global_message; // Публичное поле
// Доступ к приватному полю
public function GetMessage() {
return $this->message;
}
}
?>
См. также
<imagemap>: неверное или отсутствующее изображение |
Для улучшения этой статьи желательно?:
|
Напишите отзыв о статье "Поле класса"
Отрывок, характеризующий Поле класса
– И в самом деле…Они вошли в маленькую комнатку, где спал Борис. Ростов, не садясь, тотчас же с раздраженьем – как будто Борис был в чем нибудь виноват перед ним – начал ему рассказывать дело Денисова, спрашивая, хочет ли и может ли он просить о Денисове через своего генерала у государя и через него передать письмо. Когда они остались вдвоем, Ростов в первый раз убедился, что ему неловко было смотреть в глаза Борису. Борис заложив ногу на ногу и поглаживая левой рукой тонкие пальцы правой руки, слушал Ростова, как слушает генерал доклад подчиненного, то глядя в сторону, то с тою же застланностию во взгляде прямо глядя в глаза Ростову. Ростову всякий раз при этом становилось неловко и он опускал глаза.
– Я слыхал про такого рода дела и знаю, что Государь очень строг в этих случаях. Я думаю, надо бы не доводить до Его Величества. По моему, лучше бы прямо просить корпусного командира… Но вообще я думаю…
– Так ты ничего не хочешь сделать, так и скажи! – закричал почти Ростов, не глядя в глаза Борису.
Борис улыбнулся: – Напротив, я сделаю, что могу, только я думал…
В это время в двери послышался голос Жилинского, звавший Бориса.
– Ну иди, иди, иди… – сказал Ростов и отказавшись от ужина, и оставшись один в маленькой комнатке, он долго ходил в ней взад и вперед, и слушал веселый французский говор из соседней комнаты.
Ростов приехал в Тильзит в день, менее всего удобный для ходатайства за Денисова. Самому ему нельзя было итти к дежурному генералу, так как он был во фраке и без разрешения начальства приехал в Тильзит, а Борис, ежели даже и хотел, не мог сделать этого на другой день после приезда Ростова. В этот день, 27 го июня, были подписаны первые условия мира. Императоры поменялись орденами: Александр получил Почетного легиона, а Наполеон Андрея 1 й степени, и в этот день был назначен обед Преображенскому батальону, который давал ему батальон французской гвардии. Государи должны были присутствовать на этом банкете.
Ростову было так неловко и неприятно с Борисом, что, когда после ужина Борис заглянул к нему, он притворился спящим и на другой день рано утром, стараясь не видеть его, ушел из дома. Во фраке и круглой шляпе Николай бродил по городу, разглядывая французов и их мундиры, разглядывая улицы и дома, где жили русский и французский императоры. На площади он видел расставляемые столы и приготовления к обеду, на улицах видел перекинутые драпировки с знаменами русских и французских цветов и огромные вензеля А. и N. В окнах домов были тоже знамена и вензеля.
«Борис не хочет помочь мне, да и я не хочу обращаться к нему. Это дело решенное – думал Николай – между нами всё кончено, но я не уеду отсюда, не сделав всё, что могу для Денисова и главное не передав письма государю. Государю?!… Он тут!» думал Ростов, подходя невольно опять к дому, занимаемому Александром.
У дома этого стояли верховые лошади и съезжалась свита, видимо приготовляясь к выезду государя.
«Всякую минуту я могу увидать его, – думал Ростов. Если бы только я мог прямо передать ему письмо и сказать всё, неужели меня бы арестовали за фрак? Не может быть! Он бы понял, на чьей стороне справедливость. Он всё понимает, всё знает. Кто же может быть справедливее и великодушнее его? Ну, да ежели бы меня и арестовали бы за то, что я здесь, что ж за беда?» думал он, глядя на офицера, всходившего в дом, занимаемый государем. «Ведь вот всходят же. – Э! всё вздор. Пойду и подам сам письмо государю: тем хуже будет для Друбецкого, который довел меня до этого». И вдруг, с решительностью, которой он сам не ждал от себя, Ростов, ощупав письмо в кармане, пошел прямо к дому, занимаемому государем.
«Нет, теперь уже не упущу случая, как после Аустерлица, думал он, ожидая всякую секунду встретить государя и чувствуя прилив крови к сердцу при этой мысли. Упаду в ноги и буду просить его. Он поднимет, выслушает и еще поблагодарит меня». «Я счастлив, когда могу сделать добро, но исправить несправедливость есть величайшее счастье», воображал Ростов слова, которые скажет ему государь. И он пошел мимо любопытно смотревших на него, на крыльцо занимаемого государем дома.
С крыльца широкая лестница вела прямо наверх; направо видна была затворенная дверь. Внизу под лестницей была дверь в нижний этаж.
– Кого вам? – спросил кто то.
– Подать письмо, просьбу его величеству, – сказал Николай с дрожанием голоса.
– Просьба – к дежурному, пожалуйте сюда (ему указали на дверь внизу). Только не примут.
Услыхав этот равнодушный голос, Ростов испугался того, что он делал; мысль встретить всякую минуту государя так соблазнительна и оттого так страшна была для него, что он готов был бежать, но камер фурьер, встретивший его, отворил ему дверь в дежурную и Ростов вошел.
Невысокий полный человек лет 30, в белых панталонах, ботфортах и в одной, видно только что надетой, батистовой рубашке, стоял в этой комнате; камердинер застегивал ему сзади шитые шелком прекрасные новые помочи, которые почему то заметил Ростов. Человек этот разговаривал с кем то бывшим в другой комнате.
– Bien faite et la beaute du diable, [Хорошо сложена и красота молодости,] – говорил этот человек и увидав Ростова перестал говорить и нахмурился.
– Что вам угодно? Просьба?…
– Qu'est ce que c'est? [Что это?] – спросил кто то из другой комнаты.
– Encore un petitionnaire, [Еще один проситель,] – отвечал человек в помочах.
– Скажите ему, что после. Сейчас выйдет, надо ехать.
– После, после, завтра. Поздно…
Ростов повернулся и хотел выйти, но человек в помочах остановил его.
– От кого? Вы кто?