Бьерн Страуструп.
Язык программирования С++
295
порядке с
этим классом, это просто замаскированная реализация, а не представление абстрактного
понятия. Во многих случаях для ответа на вопрос: "Достаточно ли интерфейс класса независим от
реализации?"- надо указать, возможна ли для класса схема ленивых вычислений.
Отметим, что общие базовые классы и друзья (friend) являются частью общего интерфейса класса (см.
$$5.4.1 и $$12.4). Полезным упражнением может быть определение раздельного интерфейса для
классов-наследников и всех остальных классов с
помощью разбиения интерфейса на общую и
закрытые части.
Именно на этом шаге следует продумать и описать точные определения типов аргументов. В идеале
желательно иметь максимальное число интерфейсов со статическими типами, относящимися к области
приложения (см. $$12.1.3 и $$12.4).
При определении интерфейсов следует обратить внимание на те классы, где набор операций
представлен более, чем на одном уровне абстракции. Например, в классе file у некоторых функций-
членов аргументы имеют тип file_descriptor (дескриптор_файла), а у
других аргументы - строка
символов, которая обозначает имя файла. Операции с file_descriptor работают на другом уровне
(меньшем) абстракции, чем операции с именем файла, так что даже странно, что они относятся к
одному классу. Возможно, было бы лучше иметь два класса: один представляет
понятие дескриптора
файла, а другой - понятие имени файла. Обычно все операции класса должны представлять понятия
одного уровня абстракции. Если это не так, то стоит подумать о реорганизации и его, и связанных с ним
классов.
Достарыңызбен бөлісу: