2. Сильная форма закона Деметера запрещает доступ к экземплярам класса потомка.
Опишите преимущества и недостатки этого ограничения. Рассмотрите такие
моменты, как зацепление между классами и понятность кода программы.
3. Не кажется ли вам, что сильная форма закона Деметера должна ограничивать
доступ также и к глобальным переменным? Обоснуйте свое мнение. Обдумывая
ответ, вы можете обратиться к статье Вульфа и Шоу [Wulf 1973].
4. Какие еще можно предложить конкретные правила, аналогичные закону Деметера,
такие, что:
o их выполнение обычно приводит к системам с меньшей
взаимозависимостью;
o ситуации, когда правила должны нарушаться, встречаются редко.
Закон Деметера посвящен зацеплению между различными объектами. Можно ли
предложить правила, которые стимулировали бы большую связность внутри
объекта?
5. Защищенные данные (для клиентов-подклассов) занимают промежуточное
положение по степени закрытости между открытыми и закрытыми полями.
Представьте себе аналогичную промежуточную ступень между следующими
положениями: «доступ к объекту разрешен кому угодно» и «доступ к объекту
осуществляет только сам объект». Например: «экземпляры некоторого класса (и
только они) могут иметь доступ ко внутреннему состоянию объекта». В языке C++,
например, экземпляр класса имеет доступ к любому полю данных другого объекта
того же класса, даже если эти поля описаны как private или protected. В других
языках (например, в Smalltalk) такое не разрешается. Обсудите преимущества и
недостатки каждого из подходов.
6. Другая возможная вариация на тему правил видимости для клиентов-подклассов
состоит в том, чтобы разрешить доступ к непосредственному родителю класса, но
не к более удаленным предкам. Обсудите достоинства и недостатки этой идеи (см.
[Snyder 1986]).
7. Из рассмотренных нами языков только C++ и Delphi Pascal имеют явные средства
для отделения свойств, доступных клиентам-подклассам, от свойств, доступных
клиентам-пользователям. Тем не менее все языки имеют свой механизм описания
намерений программиста. Зачастую используются структурированные
комментарии (директивы компилятора) для передачи дополнительной информации
системе, обслуживающей язык программирования. Опишите соглашения по
комментированию, которые бы помогли определить уровень видимости. Затем
охарактеризуйте алгоритм, который должен использоваться программным
средством для обеспечения выполнения правил видимости.
Глава 18: Среды и схемы разработки
Класс — это механизм инкапсулирования решения конкретной задачи. Он предоставляет
определенный сервис, поставляет данные и обеспечивает необходимое поведение. Классы
совместными усилиями выполняют задачу, возложенную на прикладную программу.
Механизм классов полезен тем, что он позволяет разбить программу на компоненты,
которые анализируются независимо друг от друга. Однако отдельные классы сами по себе
редко предоставляют решение всей проблемы.
Учитывая этот факт, за последние несколько лет возрос интерес к способам, с помощью
которых классы могут работать совместно над решением проблемы. Наиболее
PDF created with pdfFactory Pro trial version www.pdffactory.com