Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет45/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   41   42   43   44   45   46   47   48   ...   256
1.5.4 Инкапсуляция 
Пусть члену класса (неважно функции-члену или члену, представляющему данные) требуется защита 
от "несанкционированного доступа". Как разумно ограничить множество функций, которым такой член 
будет доступен? Очевидный ответ для языков, поддерживающих объектно-ориентированное 
программирование, таков: доступ имеют все операции, которые определены для этого объекта, иными 
словами, все функции-члены. Например: 
class window 

// 
... 
protected: 
Rectangle 
inside; 
// 
... 
}; 
class dumb_terminal : public window 


Бьерн Страуструп.
Язык программирования С++ 
 
44 

// 
... 
public: 
void 
prompt 
(); 
// 
... 
}; 
Здесь в базовом классе window член inside типа Rectangle описывается как защищенный (protected), но 
функции-члены производных классов, например, dumb_terminal::prompt(), могут обратиться к нему и 
выяснить, с какого вида окном они работают. Для всех других функций член window::inside недоступен. 
В таком подходе сочетается высокая степень защищенности (действительно, вряд ли вы "случайно" 
определите производный класс) с гибкостью, необходимой для программ, которые создают классы и 
используют их иерархию (действительно, "для себя" всегда можно в производных классах 
предусмотреть доступ к защищенным членам). 
Неочевидное следствие из этого: нельзя составить полный и окончательный список всех функций, 
которым будет доступен защищенный член, поскольку всегда можно добавить еще одну, определив ее 
как функцию-член в новом производном классе. Для метода абстракции данных такой подход часто 
бывает мало приемлемым. Если язык ориентируется на метод абстракции данных, то очевидное для 
него решение - это требование указывать в описании класса список всех функций, которым нужен 
доступ к члену. В С++ для этой цели используется описание частных (private) членов. Оно 
использовалось и в приводившихся описаниях классов complex и shape. 
Важность инкапсуляции, т.е. заключения членов в защитную оболочку, резко возрастает с ростом 
размеров программы и увеличивающимся разбросом областей приложения. В $$6.6 более подробно 
обсуждаются возможности языка по инкапсуляции. 


Достарыңызбен бөлісу:
1   ...   41   42   43   44   45   46   47   48   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет