Поле класса
Поле класса (переменная-член, 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; // акцессор</span>
procedure set_x (x: Integer); // мутатор</span>
property _x: Integer read get_x write set_x;
// в 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 # не сработает
См. также
de:Datenfeld en:Field (computer science) es:Campo (informática) fr:Champ (base de données) ja:フィールド (計算機科学) pt:Campo (informática)
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....