Сокрытие информации

Класс содержит данные и методы (функции). Для использования класса программы просто должны знать информацию, которую хранит класс (его элементы данных) и методы, которые манипулируют данными (функции). Программам не требуется знать, как работают методы. Программы должны знать только - какую задачу выполняют методы. Программа рассматривает класс как "черный ящик". Программа знает, какие методы необходимо вызвать и какие параметры им передать, но программа ничего не знает о реальной работе, выполняющейся внутри класса (в "черном ящике").
Сокрытие информации представляет собой процесс, в результате которого программе предоставляется только минимальная информация, необходимая для использования класса. Частные и общие элементы класса помогают получить информацию, скрытую внутри программы. Созданные классы использовали метку public для объявления всех элементов класса общими, т.е. видимыми для всей программы. Программа могла непосредственно обратиться к любому элементу класса, используя оператор точку:

class employee
{
public:
char name [64];
long employee_id;
float salary;
void show_employee(void);
}

При создании класса можно иметь элементы, чьи значения используются только внутри класса, но обращаться к которым самой программе нет необходимости. Такие элементы являются частными (private), и их следует скрывать от программы. Если не используется метка public, то по умолчанию C++ подразумевает, что все элементы класса являются частными. Программы не могут обращаться к частным элементам класса, используя оператор точку. К частным элементам класса могут обращаться только элементы самого класса. При создании класса следует разделить элементы на частные и общие:

class some_class
{
public:
int some_variable;
void initialize_private(int, float); // Общие элементы
void show_data(void);
private:
int key_value; // Частные элементы
float key_number;
}

Метки public и private позволяют определять частные и общие элементы. Программа может использовать оператор точку для обращения к общим элементам:

 
object.some_variable = 1001;
object.initialize_private(2002, 1.2345);
object.show_data()

Если ваша программа пытается обратиться к частным элементам key_value или key_number, используя точку, компилятор сообщает о синтаксических ошибках.

Необходимо защищать элементы класса от прямого доступа к ним делая их частными. При этом программы не могут непосредственно присваивать значения таким элементам, используя оператор точку. Вместо того чтобы присвоить значение, программа должна вызвать метод класса. Предотвращая прямой доступ к элементам данных, можно гарантировать, что им всегда будут присваиваться допустимые значения. Например, предположим что объект nuclear_reactor вашей программы использует переменную с именем melt_down, которая всегда должна содержать значение в диапазоне от 1 до 5. Если элемент melt_down является общим, программа может непосредственно обратиться к элементу, изменяя его значение произвольным образом:

nuclear_reactor.melt_down = 101

Если вместо этого сделать переменную частной, то можно использовать метод класса, например assign_meltdown, чтобы присвоить значение этой переменной. Функция assign_meltdown может проверять присваиваемое значение, чтобы убедиться, что оно является допустимым:

int nuke::assign_meltdown(int value)
{
if ((value > 0) && (value <= 5))
 
{
melt_down = value;
return(0); // Успешное присваивание
} else return(-1); // Недопустимое значение
}

Методы класса, которые управляют доступом к элементам данных, представляют собой интерфейсные функции. При создании классов вы будете использовать интерфейсные функции для защиты данных своих классов.


2.5. Использование общих и частных элементов класса.
Следующая программа иллюстрирует использование общих и частных элементов класса. Программа определяет объект типа employee:

class employee
 
{
public:
int assign_values(char *, long, float);
void show_employee(void);
int change_salary(float);
long get_id(void);
private:
char name [64];
long employee_id;
float salary;
}

Класс защищает все свои элементы данных, объявляя их частными. Для доступа к элементам данных программа должна использовать интерфейсные функции. Реализация программы:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: