Информационно-безопасные системы. Анализ проблемы: Учебное пособие, страница 17

В ООП становится возможным разделение фазы описания (definition module) и фазы реализации (implementation module) абстрактных типов данных. Два выделенных модуля допускают раздельную компиляцию, что значительно повышает надежность ПО. В модуле писания задаются имена и типы внутренних (private), защищенных (protected) и внешних (public) данных, а также перечень процедур (методов) с описани­ем типов и количества параметров для них. В модуле реализации даются тела процедур, обрабатывающих данные. Это разделение является значительным продвижением вперед в смысле повышения надежности, так как доступ к внутренним (private) данным стал возможен только с помощью перечисленного в фазе описания "штатного" набора процедур. Большая часть ошибок в обработке абстрактного типа данных выявляется теперь на этапе компиляции, а не на этапе исполнения.

Анализ создаваемого ПО с точки зрения наличия в нем программных закладок значительно упрощается, так как "правила игры" с абстрактным типом данных заданы в модуле описания, который более обозрим, чем тексты процедур.

Определение 5.7: В ООП операции и процедуры, которые определены для объектов класса, принято называть методами класса.

Класс является основным понятием, посредством которого осуществляется инкапсуляция и скрытие данных. Описывая класс, разработчик задает характеристики

всех объектов, принадлежащих этому классу. В классе можно определить три различных типа доступа к данным: внутренние (private), защищенные (protected) и внеш­ние (public). Рассмотрим эти возможности на примере модуля описания абстрактного типа данных "Декартовы координаты цели". Используется язык C++.

Пример 5.1.

class Coord                      // Объявлен класс "Координаты".

{

private:                            // Описатель типа доступа.

// Здесь располагаются данные и методы, которые недоступны

// извне. Они доступны только в методах (процедурах)

// класса.

protected:

float х, у, z;          // Три координаты цели.

char type [20];      // Тип цели (строка из не более, чем 20 // символов)

// Здесь располагаются данные и методы, недоступные извне.

// Они доступны только в методах этого класса, а также в

// методах классов, производных от него.

public:

// Здесь располагаются данные и методы, доступные извне.

void in ();             // Объявлен метод класса для ввода данных

void out();            // Объявлен метод для вывода данных

};

В этом примере в секции protected (защищенные) определены три переменных типа float (вещественные) для хранения координат х, у, z. Смысл описателя protected в том, что значения координат могут быть заданы только с помощью public метода in(), a выведены на экран с помощью метода out() или с помощью каких-либо методов клас­сов, производных от данного. Описатель void означает, что метод не возвращает зна­чения в точку вызова после завершения его работы. (Это процедура, а не функция) Тела методов не приведены в модуле описания. Они задаются в отдельно компили­руемом программном модуле, хотя при необходимости они могут присутствовать и в модуле описания. Рассмотрим модуль реализации (implementation) методов класса.

Пример 5.2

void Coord:: in()         // Метод in() класса Coord

{

// Вывод подсказки на экран

cout « "Введите тип цели (не более 20 символов ";

cin » type;            // Ввод типа цели

cout « "Введите три координаты цели (х, у, z) ";

cin » х » у » z;           // Ввод координат

void Coord:: out()       // Метод out() класса Coord

{

cout « "Тип цели: " « type;

cout « "Координаты цели: "<<x<<y<<z;

};

Создадим главную функцию для демонстрации работы с объектами класса Coord.

main()

{

Coord a, b;                 // Объявлены два объекта класса Coord. Каждый

// объект содержит свои копии данных х, у, z.

a.in(); b.in();         // Ввод данных для целей а и b

a.out(); b.out();          // Вывод их на экран