Поле класса

Поле класса

По́ле кла́сса или атрибу́т (переменная-член, 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

В Питоне поля и методы обычно называются общим термином атрибуты. Статические атрибуты могут быть перегружены в экземпляре. Атрибуты экземпляра определяются не в структуре класса, а в методах (например, конструкторе). Атрибуты, доступ к которым управляется отдельными методами, называются свойствами (синтаксически доступ к атрибутом и свойствам идентичен):

 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;
  }
}
?>

См. также


Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Полезное


Смотреть что такое "Поле класса" в других словарях:

  • Поле (значения) — Поле  многозначное понятие, связанное с протяжённостью в пространстве: Понятие в математике Поле  алгебраическая структура с двумя операциями. Скалярное, векторное и тензорное поля  в дифференциальной геометрии (см. вектор и тензор) и матанализе  …   Википедия

  • Поле (информатика) — Поле  многозначное понятие, связанное с протяжённостью в пространстве: Понятие в математике Поле  алгебраическая структура с двумя операциями. Скалярное, векторное и тензорное поля  в дифференциальной геометрии (см. вектор и тензор) и матанализе  …   Википедия

  • Поле — Поле  многозначное понятие, связанное с протяжённостью в пространстве: поле в Викисловаре …   Википедия

  • Поле (физика) — У этого термина существуют и другие значения, см. Поле (значения). Поле в физике физический объект, классически описываемый математическим скалярным, векторным, тензорным, спинорным полем (или некоторой совокупностью таких математических полей),… …   Википедия

  • Магнитное поле звёзд — Магнитное поле Солнца производит корональные выбросы массы. Фото NOAA Звёздное магнитное поле магнитное поле, создаваемое движением проводящей плазмы внутри звёзд главно …   Википедия

  • Лодейное Поле (аэродром) — Лодейное Поле  военный аэродром в Ленинградской области в двух километрах к югу от города Лодейное Поле. Длина ВПП  2500 м, покрытие бетонное. С 15 мая 1960 г. на авиабазе Лодейное Поле дислоцирован 177 ИАП (Истребительный… …   Википедия

  • Авиабаза Лодейное поле — Лодейное Поле  военный аэродром в Ленинградской области в двух километрах к югу от города Лодейное Поле. Длина ВПП  2500 м, покрытие бетонное. С 15 мая 1960 г. на авиабазе Лодейное Поле дислоцирован 177 ИАП (Истребительный авиационный полк). С… …   Википедия

  • Лодейное Поле (авиабаза) — Лодейное Поле  военный аэродром в Ленинградской области в двух километрах к югу от города Лодейное Поле. Длина ВПП  2500 м, покрытие бетонное. С 15 мая 1960 г. на авиабазе Лодейное Поле дислоцирован 177 ИАП (Истребительный авиационный полк). С… …   Википедия

  • Эсминец класса Колдун ВС Земли — «Вавилон 5» Эсминец класса Warlock Вооруженных Сил Земного Альянса Эсминец класса «Колдун» (Warlock) на выходе из гиперпространственной зоны перехода. Общая информация Мир: Земля, Марс, колонии Земного Альянс …   Википедия

  • Железный крест II класса — Железный крест Оригинальное название Eisernes Kreuz Девиз Страна …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»