OberonCore https://forum.oberoncore.ru/ |
|
Принципы структурирования https://forum.oberoncore.ru/viewtopic.php?f=6&t=831 |
Страница 1 из 2 |
Автор: | Илья Ермаков [ Среда, 16 Январь, 2008 11:15 ] |
Заголовок сообщения: | Принципы структурирования |
Что-то по утру опять какие-то идеи навязчивые в голову лезут Поводом стали компиляторы... Подумалось о естественной связи, идущей от качества/эффективности языков как нотаций к качеству/эффективности методов создания компиляторов. Т.е. больше и лучше понимаем правила построения хороших языков - приходим к простым и эффективным методам компиляции (например, имхо, LALR-разбор/средства построения можно считать в значительном смысле рудиментом, привязанным к устаревшим синтаксисам, которые нарушают очевидные сегодня требования к разработке формальных нотаций. И с обратного конца - если целевой язык (например, система команд процессора) построена более продуманно, то это таким же образом будет влиять на построение заднего плана компилятора). Эта мысля оформилась в следующие термины: "Структурирование языков ведёт к структурированию компиляторов". Вот с этого и понеслось. Вспомнилась фраза, читанная где-то у Федора Васильевича, тезис такой, что-то вроде "Программирование - это структурирование... (информации? не помню точно дополнения)". А что такое структурирование? Интуитивно это как-то очень очучаецца, а вот словами? Кажется, это непосредственно связано с выделением "паттернов" в чём-то нам данном (про которое говорилось в теме о двух уровнях мышления). Можно ли сказать, что структурирование - это процесс построения схемы (или сказать более "умно" - формальной системы?), который предназначен упорядочить некоторую данную информацию с целью её лучшей "понимабельности" и "трансформабельности"? Но ведь получается, что и алгоритмизация, и проектирование данных, и архитектура - всё это разные виды структурирования. Различные по своему объекту и по направленности... Можем ли выделить важнейшие принципы, хорошо известные нам по этим задачам программирования, и описать их один раз применительно к процессу структурирования? Чтобы потом это просто проецировать на частности... Иначе говоря, какие мы выделим правила, методы и типичные ошибки структурирования? (Мда, получается, что я предлагаю структурировать информацию о разных видах структурирования... И надо, описывая правила структурирования, соблюсти правила структурирования... Рекурсия, ёлки-палки ). Мне идут на ум правила (т.е. то, какими свойствами должна обладать построенная структура): а) модульность (включает в себя сокрытие информации, сюда же правило "пересказанное недавно В. Лосём из теории систем" - не > 13% отношения внешних связей к внутренним для формальных систем); б) иерархичность (любителям воевать с деревьями - не имею в виду древовидность, а только наличие уровней, подъёма от конкретики, деталей на нижнем уровне к постепенно уменьшающемуся числу более общих компонентов на верхних). Методы: а) Декомпозиция ("разделяй и властвуй") - "аналитический метод". б) Абстракция (последовательное вычленение всё меньшего числа всё более существенных компонент создаваемой структуры) - "синтетический метод". в) Модуляризация - продолжение декомпозиции, но уже с опорой на результаты абстракции, с "кристаллизацией" модулей и системы связей между ними. г) Пошаговая детализация с уточнением - метод организации процесса работы над структурой, "многопроходного структурирования". Про типичные ошибки ничего сразу в голову не идёт (интересны ведь не наиболее типичные вообще ошибки, коими является пренебрежение вышеописанными принципами, а ошибки не совсем верного их применения). Кстати, подумалось в свете сказанного об ООП и его меньшей фундаментальности по сравнению со структурным и модульным программированием. ("меньшая фундаментальность" не значит "меньшая практическая ценность"). ООП включает в себя конкретные технические средства для эффективного структурирования программных систем, но не заявляет никаких новых принципов относительно структурного/модульного программирования. Эти средства воспроизводятся и без явного наличия механизмов в языке (процедурные переменные в Обероне). А вот что важно и что выделил Вирт - это расширение типа. Это - тоже средство структурирования, по линии данных, но оно в языках со строгой типизацией не может быть вопроизведено. Поэтому его просто необходимо было ввести в язык. |
Автор: | Иван Кузьмицкий [ Среда, 16 Январь, 2008 13:11 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Илья, Вы не будете против, если я дополню Ваш текст цитатами из книги Вирта "Программирование на Обероне" в своём переводе? Цитата: Программа представляет из себя текст. Поскольку этот текст описывает довольно сложный процесс, и должен это делать предельно отчётливо и со вниманием ко всем деталям, то и значение этого текста должно быть указано очень точно. Для такой точности требуется соответствующий формализм, известный как «язык». Мы заимствуем это понятие, несмотря на то, что обычный язык употребляется в речи и определён менее точно. Цитата:
программа описывает вычисления или процессы; процесс осуществляется интерпретатором, обычно компьютером, выполняющим программу; значение программы формально определяется языком программирования; программа определяет класс вычислений, входные данные параметризуют каждый отдельный процесс; перед исполненем, программный текст переводится в машинный код. Этот процесс называется компиляцией. Это хорошая отправная точка - программа есть текст и поэтому, наверное, можно в какой-то мере использовать подходы, наработанные в других областях - лингвистике, семиотике... |
Автор: | Илья Ермаков [ Среда, 16 Январь, 2008 13:18 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Иван, спасибо за великолепные цитаты! (я надеюсь, у Вас хватит сил довести начатое дело до конца...) Собственно, я открыл эту ветку не совсем "праздно", у меня с февраля возобновляется спецкурс... А такое уж у меня свойство - читать два года одинаково не могу, если что-то сам понял глубже, обязательно перестраиваю подачу материала. Свойство-то положительное в целом, но плохо то, что даже для непроверенных обобщений я с трудом заставляю себя держаться на старом уровне (ну, если в голове уже "не так" думается, как я буду излагать "так"?). Посему прошу конкретного совета - можно так излагать студентам или нельзя? |
Автор: | Valery Solovey [ Среда, 16 Январь, 2008 13:44 ] |
Заголовок сообщения: | Re: Принципы структурирования |
В целом, конечно, можно и поспорить, но для этого нужно дольше подумать, чтобы яснее выразить свои мысли. А по поводу ошибок могу предложить следующую. Она касается того, что Вы назвали правилом иерархичности. Иерархия - это расположение чего-то-там по уровням. Зачастую, самым тяжёлым моментом построения иерархии (что является следствием большой вероятности допустить ошибку) является определения первого уровня. В общем случае, это не простая задача. Понятия, складываемые в иерархию и принадлежащие интересуемой предметной области, тесно связаны друг с другом. Эта связь более или менее прослеживается, но конкретизировать её не получается, что даёт возможность по-разному её интерпретировать. Из этого следует, что определив первый уровень мы можем связи интерпретировать неправильно и выстроить следующий уровень. А несоответствия появятся гораздо позже. Повторное построение иерархии пройдёт, конечно, гораздо быстрее, поскольку связи приняли более ясное очертание, но и оно не может давать никаких гарантий. Итак, первая ошибка: ошибка выбора первого (или начального) уровня иерархии. |
Автор: | Илья Ермаков [ Среда, 16 Январь, 2008 17:06 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Замечательно. Теперь пробуем предложить лекарство от ошибки... Думается, что упор на проектирование "сверху вниз" с постепенным "протаиванием" на нижние уровни может помочь? |
Автор: | Valery Solovey [ Среда, 16 Январь, 2008 17:32 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Если я ранее правильно понимал этот принцип, то, боюсь, он не поможет. Как узнать, что "верх" выбран правильно? |
Автор: | Geniepro [ Среда, 16 Январь, 2008 19:40 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Илья Ермаков писал(а): А вот что важно и что выделил Вирт - это расширение типа. Это - тоже средство структурирования, по линии данных, но оно в языках со строгой типизацией не может быть вопроизведено. Поэтому его просто необходимо было ввести в язык. Уточните, пожалуйста, эту мысль.Что именно Вы имеете в виду под структурированием по линии данных? И почему это невозможно в языках со статической типизацией без расширения записей/наследования классов?... |
Автор: | Илья Ермаков [ Среда, 16 Январь, 2008 20:09 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Давайте так: расширение типа является средством структурирования данных, а даже и кода (за счёт полиморфизма параметров)? А может оно быть воспроизведено, например, в Модула-2 без уж очень "экзистенциальных" изворотов? Виртуализация вызова от ООП - может. Сокрытие информации и так уж сто лет в модулях... |
Автор: | Илья Ермаков [ Среда, 16 Январь, 2008 20:11 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Valery Solovey писал(а): Если я ранее правильно понимал этот принцип, то, боюсь, он не поможет. Как узнать, что "верх" выбран правильно? Ну, если вести речь о фазе анализа проблемной области - то действительно, не особо поможет... Но я говорил о фазе синтеза системы - там абстракции ближайшего к нам уровня (т.е. самого верхнего) выбрать полегче. Хотя... Всё равно итеративно крутиться, конечно, придётся. |
Автор: | Geniepro [ Среда, 16 Январь, 2008 20:47 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Илья Ермаков писал(а): Давайте так: расширение типа является средством структурирования данных, а даже и кода (за счёт полиморфизма параметров)? То есть Вы рассматриваете только мэйнстримные, "обычные" языки? Так я и подумал...А может оно быть воспроизведено, например, в Модула-2 без уж очень "экзистенциальных" изворотов? Виртуализация вызова от ООП - может. Сокрытие информации и так уж сто лет в модулях... А то ведь есть и языки с полиморфными типами и функциями и без всякого ООП и расширения типов... Причём с вполне статической типизацией... |
Автор: | Борис Рюмшин [ Среда, 16 Январь, 2008 20:52 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Geniepro писал(а): Илья Ермаков писал(а): Давайте так: расширение типа является средством структурирования данных, а даже и кода (за счёт полиморфизма параметров)? То есть Вы рассматриваете только мэйнстримные, "обычные" языки? Так я и подумал...А может оно быть воспроизведено, например, в Модула-2 без уж очень "экзистенциальных" изворотов? Виртуализация вызова от ООП - может. Сокрытие информации и так уж сто лет в модулях... А то ведь есть и языки с полиморфными типами и функциями и без всякого ООП и расширения типов... Причём с вполне статической типизацией... А я так и подумал, что он об этом сейчас скажет... |
Автор: | AVC [ Среда, 16 Январь, 2008 21:46 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Борис Рюмшин писал(а): А я так и подумал, что он об этом сейчас скажет... Ну а я -- так вообще знал заранее... |
Автор: | Geniepro [ Среда, 16 Январь, 2008 22:14 ] |
Заголовок сообщения: | Re: Принципы структурирования |
AVC писал(а): Борис Рюмшин писал(а): А я так и подумал, что он об этом сейчас скажет... Ну а я -- так вообще знал заранее... И тем не менее, часто упускается из виду консервативно настроенными людьми, которые даже непонятно как переломили себя при переходе от простых записей к расширяемым... :о)) |
Автор: | Info21 [ Четверг, 17 Январь, 2008 00:02 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Илья Ермаков писал(а): ... Методы: а) Декомпозиция ("разделяй и властвуй") - "аналитический метод". б) Абстракция (последовательное вычленение всё меньшего числа всё более существенных компонент создаваемой структуры) - "синтетический метод". ... Интересный пример. Есть слова-объекты. Ими жонглируем -- в нумерованные списки составляем и т.п. А если пристально присмотреться? Вот а) и б) -- это не одно и то же? Почему абстракция -- "синтетический метод"? Ну и т.д. |
Автор: | Илья Ермаков [ Четверг, 17 Январь, 2008 01:01 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Мда, а слова-то многозначные... Только что в другой ветке употребляли "синтетический" совсем в другом - и более частом смысле. А я употребил в узко "корневом" их смысле. Имел в виду, что декомпозиция по сути "разлагательный", нисходящий метод, а абстракция - "собирательный", восходящий. |
Автор: | Илья Ермаков [ Четверг, 17 Январь, 2008 01:03 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Info21 писал(а): Вот а) и б) -- это не одно и то же? В том смысле, что декомпозиция тоже абстракция... Отрезание ломтя и отвлечение от несвязанных с ним особенностей соседних ломтей? |
Автор: | Илья Ермаков [ Четверг, 17 Январь, 2008 01:13 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Info21 писал(а): Ну и т.д. Ага, вот всё это "и т.д." как раз и самое интересное Мы тут "от сохи" пытаемся до чего-то дотумкаться, а представитель науки посильную помощь оказать не хочет |
Автор: | Info21 [ Четверг, 17 Январь, 2008 12:17 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Илья Ермаков писал(а): Info21 писал(а): Ну и т.д. Ага, вот всё это "и т.д." как раз и самое интересное Мы тут "от сохи" пытаемся до чего-то дотумкаться, а представитель науки посильную помощь оказать не хочет Да нет, не "и т.д." самое интересное. Пока с а и б не разберетесь. А посильную помощь я как раз оказываю. Даже более чем. В ущерб пока сплошной себе |
Автор: | Илья Ермаков [ Четверг, 17 Январь, 2008 13:43 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Хорошо, спрошу так: что толковое можно почитать касательно этих методов в их общенаучном смысле? Дело-то в том, что практические ощущения и правила накапливаются, и нестерпимо хочецца за деревьями лес хоть в ближнем радиусе увидеть... |
Автор: | Илья Ермаков [ Четверг, 17 Январь, 2008 13:45 ] |
Заголовок сообщения: | Re: Принципы структурирования |
Info21 писал(а): А посильную помощь я как раз оказываю. Даже более чем. В ущерб пока сплошной себе Я это понимаю. И благодарен. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |