В ООП становится возможным разделение фазы описания (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(); // Вывод их на экран
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.