OberonCore https://forum.oberoncore.ru/ |
|
Где у дага ноги? https://forum.oberoncore.ru/viewtopic.php?f=35&t=1480 |
Страница 1 из 1 |
Автор: | igor [ Четверг, 16 Апрель, 2009 09:43 ] |
Заголовок сообщения: | Где у дага ноги? |
Поскольку мой вопрос касается терминологии, я решил его сунуть в ветку для начинающих. Ибо, как написание модуля начинается с определений, так и обучение часто начинают с терминологии. Роль "начинающего" в данном случае я решил примерить на себя. Иногда это бывает исключительно полезно ![]() Итак, дана программная система, состоящая из множества модулей, связанных между собой отношениями импорта-экспорта. Одни модули мы классифицируем как низкоуровневые, другие -- как высокоуровневые. И вот, собственно, мой вопрос: "Низкоуровневые модули -- это те, которые находятся ближе к корням дага, или ближе к его листве?" Но не торопитесь с ответом. Затруднение у меня вызывает не то, что я не могу ответить, а то, что правильных ответов два. И оба они обоснованы, и имеют своих приверженцев, но при этом исключают друг друга. Собственно, в этом неудобство и состоит. Услышав в разговоре про модуль высокого уровня, часто приходится уточнять (если непонятно из контекста), что имеется в виду. Интересно, что думает об этом уважаемая публика. Кстати, сам бы я не задумываясь ответил, что низкоуровневые модули -- это те, которые предоставляют низкоуровневые средства. Например, модуль Math в Блэкбокс, то есть те, которые ближе к корням дага. Но червячок сомнения гложет. |
Автор: | Илья Ермаков [ Четверг, 16 Апрель, 2009 10:40 ] |
Заголовок сообщения: | Re: Где у дага ноги? |
Модули типа Math вообще не имеет так классифицировать... Это - библиотеки функций. Касательно остального - исходим из угла зрения "слои виртуальных машин" (по Пратту, например) - и сразу видим, какие абстракции над чем наслоены.. А в даге может быть и так, и так. Если учитывать динамически инсталлируемые реализации. |
Автор: | Александр Ильин [ Четверг, 16 Апрель, 2009 10:43 ] |
Заголовок сообщения: | Re: Где у дага ноги? |
"Уровневость" не соотносится с положением в даге. В самом корне дага находится главный модуль приложения, а уж высокоуровневый он или низкоуровневый - это из другой оперы. Листьями могут быть как модули реализации, так и абстрактыне модули (не импортирующие реализацию напрямую). |
Автор: | igor [ Четверг, 16 Апрель, 2009 11:15 ] |
Заголовок сообщения: | Re: Где у дага ноги? |
Правильно ли я понял, что шкалы "корень-лист" и "низкоуровневый-высокоуровневый" не связаны друг с другом? В дном конретном случае связь между ними является одной, в другом -- противоположной. Но тогда встаёт вопрос о критериии оценки уровня того или иного модуля. Вариантов собственно два: 1. Критерий, который я указал в своём первом посте. 2. Традиционно схемы импорта (а также упорядоченные списки модулей) изображают таким образом, что модули-серверы располагаются сверху схемы (в начале списка), и в этом смысле они высокоуровневые, а модули-клиенты -- наоборот. Вопрос в том, насколько правомочно пользоваться вторым критерием. Кстати, даг в отличие от дерева может иметь несколько корней. Или я не прав? ![]() |
Автор: | Александр Ильин [ Четверг, 16 Апрель, 2009 11:30 ] |
Заголовок сообщения: | Re: Где у дага ноги? |
igor писал(а): 2. Традиционно схемы импорта (а также упорядоченные списки модулей) изображают таким образом, что модули-серверы располагаются сверху схемы (в начале списка), и в этом смысле они высокоуровневые, а модули-клиенты -- наоборот. Это работает в том случае, если реализация сервера импортируется клиентом напрямую. Если же вводятся абстрактные интерфейсы и фабрики, то структура импорта меняется.Вопрос в том, насколько правомочно пользоваться вторым критерием. Код: Main --> AbstractBitmaps Клиент здесь Main, а Win32Bitmaps - не клиент, а реализация сервера. Хотя в даге выглядят равноправно. Традиционная схема такова:^ Win32Bitmaps --/ Код: Main --> Win32Bitmaps --> AbstractBitmaps
|
Автор: | igor [ Четверг, 16 Апрель, 2009 12:57 ] |
Заголовок сообщения: | Re: Где у дага ноги? |
Александр Ильин писал(а): Это работает в том случае, если реализация сервера импортируется клиентом напрямую. Если же вводятся абстрактные интерфейсы и фабрики, то структура импорта меняется. Вы правы. С "официальной" точки зрения, то есть с точки зрения языка, модули Main и Win32Bitmaps совершенно равноправны. Это формальная сторона вопроса, просто импорт-экспорт и ничего личного Код: Main --> AbstractBitmaps ^ Win32Bitmaps --/ ![]() ![]() Но вопрос всё-таки был немного не об этом. Я хотел бы сейчас заострить внимание именно на формальной стороне вопроса. Попробую озвучить вопрос немного по другому. Тот факт, что модуль М1 (не Math ![]() Можно, кстати, отойти от модулей и говорить об иерархиях классов, объектов и даже контроллеров. У всех на слуху выражение "котроллер верхнего уровня". Но с контроллерами мне всё ясно и никаких вопрсов не возникает. Сейчас меня интересуют не классы, не объекты, а именно модули. PS Аналогичные примеры неоднозначности терминологии можно привести и из другой "оперы". Половина авторов изображает память меньшими адресами сверху, другая половина -- снизу. Что такое тогда "верхние адреса памяти"? И даже привычный термин "вершина стека" может ввести неискушённого новичка в заблуждение. |
Автор: | Александр Ильин [ Четверг, 16 Апрель, 2009 14:06 ] |
Заголовок сообщения: | Re: Где у дага ноги? |
Насколько я понимаю, "верхний" и "нижний" уровень - относительные понятия, всё зависит от того, как поставить вопрос, т.е. от контекста. В одном случае "верхний" уровень - это тот, где принимаются самые общесистемные решения (бизнес-логика и пр.), а в другом случае "верхним" могут называть абстрактный уровень, где вообще никаких решений никто не принимает. Пример первого - главный модуль программы, пример второго - интерфейсный модуль. Поэтому я считаю, что пара "верхний-нижний" просто используется в разных значениях, нет единой трактовки, да она и не нужна. Это все равно, что спрашивать, где "по-настоящему" право, а где лево. Если речь о политических партиях, то одна трактовка, а если лицом ко входу стоишь, то другая. Один и тот же модуль может быть в одном смысле "верхнего уровня", а в другом смыле - "нижнего". |
Автор: | igor [ Четверг, 16 Апрель, 2009 15:18 ] |
Заголовок сообщения: | Re: Где у дага ноги? |
Хм... Интересно. Вот какой вывод у меня получается. Термины "верхний" и "нижний" уровень применительно к модулям являются "неправильными" в том смысле, что в зависимости от контекста они могут обозначать сущности с точностью до наоборот. Конечно, это не означает, что на них нужно ставить крест. Но применять их (и слушать!) нужно осторожно. Иначе, мы рискуем быть не просто не понятыми, а понятыми неправильно, что ещё хуже, так как ошибка в понимании обнаружится не сразу. Личный опыт, однако, учит меня никогда не делать окончательных выводов ![]() Спасибо за ответы! |
Автор: | igor [ Четверг, 16 Апрель, 2009 16:43 ] |
Заголовок сообщения: | Re: Где у дага ноги? |
Илья Ермаков писал(а): Касательно остального - исходим из угла зрения "слои виртуальных машин" (по Пратту, например) - и сразу видим, какие абстракции над чем наслоены.. Поискал у себя Пратта. Нашёл только "Язык программирования C++. Лекции и упражнения". Но кажется это не та книжка. Илья, можно мне источник или ссылочку? Хочу посмотреть на досуге.
|
Автор: | Илья Ермаков [ Четверг, 16 Апрель, 2009 16:58 ] |
Заголовок сообщения: | Re: Где у дага ноги? |
Книга: Пратт, Зелковиц "Языки программирования: разработка и реализация". viewtopic.php?f=6&t=1090&start=0 - там сначала старое издание; в конец добавил новое. |
Автор: | igor [ Четверг, 16 Апрель, 2009 17:15 ] |
Заголовок сообщения: | Re: Где у дага ноги? |
Спасибо! Качнул. А книжица кстати на слуху оказалась. Жаль, что раньше не почитал ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |