Александр Ильин писал(а):
Это работает в том случае, если реализация сервера импортируется клиентом напрямую. Если же вводятся абстрактные интерфейсы и фабрики, то структура импорта меняется.
Код:
Main --> AbstractBitmaps
^
Win32Bitmaps --/
Вы правы. С "официальной" точки зрения, то есть с точки зрения языка, модули Main и Win32Bitmaps совершенно равноправны. Это формальная сторона вопроса, просто импорт-экспорт и ничего личного
А с точки зрения программиста, который мыслит категориями паттернов, всем трём модулям отводится совершенно разная роль, и можно говорить о том, что структура импорта меняется. (Правда компилятор об этом ничего не знает
)
Но вопрос всё-таки был немного не об этом. Я хотел бы сейчас заострить внимание именно на формальной стороне вопроса. Попробую озвучить вопрос немного по другому. Тот факт, что модуль М1 (не Math
) находится сверху упорядоченного списка модулей, даёт ли нам достаточно оснований для того, чтобы утверждать, что он является модулем верхнего (или нижнего) уровня? И если такие основания есть, то какого он уровня?
Можно, кстати, отойти от модулей и говорить об иерархиях классов, объектов и даже контроллеров. У всех на слуху выражение "котроллер верхнего уровня". Но с контроллерами мне всё ясно и никаких вопрсов не возникает. Сейчас меня интересуют не классы, не объекты, а именно модули.
PS Аналогичные примеры неоднозначности терминологии можно привести и из другой "оперы". Половина авторов изображает память меньшими адресами сверху, другая половина -- снизу. Что такое тогда "верхние адреса памяти"? И даже привычный термин "вершина стека" может ввести неискушённого новичка в заблуждение.