Поле класса

Поле класса (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;  // Это поле — открытое. Доступ к нему возможен из
           // любого места программы. Рекомендуется так не делать.

// Эти два метода (акцессор и мутатор) обеспечивают доступ к
// закрытому полю 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;

// в Delphi не поддерживаются статические и битовые поля
  end;

См. также

 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home