OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 19 Февраль, 2018 13:13

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Принципы структурирования
СообщениеДобавлено: Среда, 16 Январь, 2008 11:15 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8919
Откуда: Россия, Орёл
Что-то по утру опять какие-то идеи навязчивые в голову лезут :-)

Поводом стали компиляторы... Подумалось о естественной связи, идущей от качества/эффективности языков как нотаций к качеству/эффективности методов создания компиляторов. Т.е. больше и лучше понимаем правила построения хороших языков - приходим к простым и эффективным методам компиляции (например, имхо, LALR-разбор/средства построения можно считать в значительном смысле рудиментом, привязанным к устаревшим синтаксисам, которые нарушают очевидные сегодня требования к разработке формальных нотаций. И с обратного конца - если целевой язык (например, система команд процессора) построена более продуманно, то это таким же образом будет влиять на построение заднего плана компилятора). Эта мысля оформилась в следующие термины: "Структурирование языков ведёт к структурированию компиляторов". Вот с этого и понеслось.

Вспомнилась фраза, читанная где-то у Федора Васильевича, тезис такой, что-то вроде "Программирование - это структурирование... (информации? не помню точно дополнения)".

А что такое структурирование? Интуитивно это как-то очень очучаецца, а вот словами? Кажется, это непосредственно связано с выделением "паттернов" в чём-то нам данном (про которое говорилось в теме о двух уровнях мышления). Можно ли сказать, что структурирование - это процесс построения схемы (или сказать более "умно" - формальной системы?), который предназначен упорядочить некоторую данную информацию с целью её лучшей "понимабельности" и "трансформабельности"?

Но ведь получается, что и алгоритмизация, и проектирование данных, и архитектура - всё это разные виды структурирования. Различные по своему объекту и по направленности... Можем ли выделить важнейшие принципы, хорошо известные нам по этим задачам программирования, и описать их один раз применительно к процессу структурирования? Чтобы потом это просто проецировать на частности... Иначе говоря, какие мы выделим правила, методы и типичные ошибки структурирования?

(Мда, получается, что я предлагаю структурировать информацию о разных видах структурирования... И надо, описывая правила структурирования, соблюсти правила структурирования... Рекурсия, ёлки-палки :-) ).

Мне идут на ум правила (т.е. то, какими свойствами должна обладать построенная структура):
а) модульность (включает в себя сокрытие информации, сюда же правило "пересказанное недавно В. Лосём из теории систем" - не > 13% отношения внешних связей к внутренним для формальных систем);
б) иерархичность (любителям воевать с деревьями - не имею в виду древовидность, а только наличие уровней, подъёма от конкретики, деталей на нижнем уровне к постепенно уменьшающемуся числу более общих компонентов на верхних).

Методы:
а) Декомпозиция ("разделяй и властвуй") - "аналитический метод".
б) Абстракция (последовательное вычленение всё меньшего числа всё более существенных компонент создаваемой структуры) - "синтетический метод".
в) Модуляризация - продолжение декомпозиции, но уже с опорой на результаты абстракции, с "кристаллизацией" модулей и системы связей между ними.
г) Пошаговая детализация с уточнением - метод организации процесса работы над структурой, "многопроходного структурирования".

Про типичные ошибки ничего сразу в голову не идёт (интересны ведь не наиболее типичные вообще ошибки, коими является пренебрежение вышеописанными принципами, а ошибки не совсем верного их применения).

Кстати, подумалось в свете сказанного об ООП и его меньшей фундаментальности по сравнению со структурным и модульным программированием. ("меньшая фундаментальность" не значит "меньшая практическая ценность"). ООП включает в себя конкретные технические средства для эффективного структурирования программных систем, но не заявляет никаких новых принципов относительно структурного/модульного программирования. Эти средства воспроизводятся и без явного наличия механизмов в языке (процедурные переменные в Обероне). А вот что важно и что выделил Вирт - это расширение типа. Это - тоже средство структурирования, по линии данных, но оно в языках со строгой типизацией не может быть вопроизведено. Поэтому его просто необходимо было ввести в язык.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Среда, 16 Январь, 2008 13:11 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2920
Откуда: г. Ярославль
Илья, Вы не будете против, если я дополню Ваш текст цитатами из книги Вирта "Программирование на Обероне" в своём переводе?

Цитата:
Программа представляет из себя текст. Поскольку этот текст описывает довольно сложный процесс, и должен это делать предельно отчётливо и со вниманием ко всем деталям, то и значение этого текста должно быть указано очень точно. Для такой точности требуется соответствующий формализм, известный как «язык». Мы заимствуем это понятие, несмотря на то, что обычный язык употребляется в речи и определён менее точно.


Цитата:
    программа есть текст;
    программа описывает вычисления или процессы;
    процесс осуществляется интерпретатором, обычно компьютером, выполняющим программу;
    значение программы формально определяется языком программирования;
    программа определяет класс вычислений, входные данные параметризуют каждый отдельный процесс;
    перед исполненем, программный текст переводится в машинный код. Этот процесс называется компиляцией.


Это хорошая отправная точка - программа есть текст и поэтому, наверное, можно в какой-то мере использовать подходы, наработанные в других областях - лингвистике, семиотике...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Среда, 16 Январь, 2008 13:18 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8919
Откуда: Россия, Орёл
Иван, спасибо за великолепные цитаты! (я надеюсь, у Вас хватит сил довести начатое дело до конца...)

Собственно, я открыл эту ветку не совсем "праздно", у меня с февраля возобновляется спецкурс... А такое уж у меня свойство - читать два года одинаково не могу, если что-то сам понял глубже, обязательно перестраиваю подачу материала. Свойство-то положительное в целом, но плохо то, что даже для непроверенных обобщений я с трудом заставляю себя держаться на старом уровне (ну, если в голове уже "не так" думается, как я буду излагать "так"?). Посему прошу конкретного совета - можно так излагать студентам или нельзя? :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Среда, 16 Январь, 2008 13:44 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1532
Откуда: Беларусь, Минск
В целом, конечно, можно и поспорить, но для этого нужно дольше подумать, чтобы яснее выразить свои мысли.

А по поводу ошибок могу предложить следующую. Она касается того, что Вы назвали правилом иерархичности. Иерархия - это расположение чего-то-там по уровням. Зачастую, самым тяжёлым моментом построения иерархии (что является следствием большой вероятности допустить ошибку) является определения первого уровня.

В общем случае, это не простая задача. Понятия, складываемые в иерархию и принадлежащие интересуемой предметной области, тесно связаны друг с другом. Эта связь более или менее прослеживается, но конкретизировать её не получается, что даёт возможность по-разному её интерпретировать. Из этого следует, что определив первый уровень мы можем связи интерпретировать неправильно и выстроить следующий уровень. А несоответствия появятся гораздо позже.

Повторное построение иерархии пройдёт, конечно, гораздо быстрее, поскольку связи приняли более ясное очертание, но и оно не может давать никаких гарантий.


Итак, первая ошибка: ошибка выбора первого (или начального) уровня иерархии.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Среда, 16 Январь, 2008 17:06 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8919
Откуда: Россия, Орёл
Замечательно. Теперь пробуем предложить лекарство от ошибки... Думается, что упор на проектирование "сверху вниз" с постепенным "протаиванием" на нижние уровни может помочь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Среда, 16 Январь, 2008 17:32 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1532
Откуда: Беларусь, Минск
Если я ранее правильно понимал этот принцип, то, боюсь, он не поможет. Как узнать, что "верх" выбран правильно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Среда, 16 Январь, 2008 19:40 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Илья Ермаков писал(а):
А вот что важно и что выделил Вирт - это расширение типа. Это - тоже средство структурирования, по линии данных, но оно в языках со строгой типизацией не может быть вопроизведено. Поэтому его просто необходимо было ввести в язык.
Уточните, пожалуйста, эту мысль.
Что именно Вы имеете в виду под структурированием по линии данных?
И почему это невозможно в языках со статической типизацией без расширения записей/наследования классов?...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Среда, 16 Январь, 2008 20:09 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8919
Откуда: Россия, Орёл
Давайте так: расширение типа является средством структурирования данных, а даже и кода (за счёт полиморфизма параметров)?
А может оно быть воспроизведено, например, в Модула-2 без уж очень "экзистенциальных" изворотов?
Виртуализация вызова от ООП - может. Сокрытие информации и так уж сто лет в модулях...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Среда, 16 Январь, 2008 20:11 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8919
Откуда: Россия, Орёл
Valery Solovey писал(а):
Если я ранее правильно понимал этот принцип, то, боюсь, он не поможет. Как узнать, что "верх" выбран правильно?

Ну, если вести речь о фазе анализа проблемной области - то действительно, не особо поможет...
Но я говорил о фазе синтеза системы - там абстракции ближайшего к нам уровня (т.е. самого верхнего) выбрать полегче. Хотя... Всё равно итеративно крутиться, конечно, придётся.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Среда, 16 Январь, 2008 20:47 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Илья Ермаков писал(а):
Давайте так: расширение типа является средством структурирования данных, а даже и кода (за счёт полиморфизма параметров)?
А может оно быть воспроизведено, например, в Модула-2 без уж очень "экзистенциальных" изворотов?
Виртуализация вызова от ООП - может. Сокрытие информации и так уж сто лет в модулях...
То есть Вы рассматриваете только мэйнстримные, "обычные" языки? Так я и подумал...
А то ведь есть и языки с полиморфными типами и функциями и без всякого ООП и расширения типов...
Причём с вполне статической типизацией...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Среда, 16 Январь, 2008 20:52 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4058
Откуда: Россия, Орёл
Geniepro писал(а):
Илья Ермаков писал(а):
Давайте так: расширение типа является средством структурирования данных, а даже и кода (за счёт полиморфизма параметров)?
А может оно быть воспроизведено, например, в Модула-2 без уж очень "экзистенциальных" изворотов?
Виртуализация вызова от ООП - может. Сокрытие информации и так уж сто лет в модулях...
То есть Вы рассматриваете только мэйнстримные, "обычные" языки? Так я и подумал...
А то ведь есть и языки с полиморфными типами и функциями и без всякого ООП и расширения типов...
Причём с вполне статической типизацией...

А я так и подумал, что он об этом сейчас скажет... :lol:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Среда, 16 Январь, 2008 21:46 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Борис Рюмшин писал(а):
А я так и подумал, что он об этом сейчас скажет... :lol:

Ну а я -- так вообще знал заранее... :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Среда, 16 Январь, 2008 22:14 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
AVC писал(а):
Борис Рюмшин писал(а):
А я так и подумал, что он об этом сейчас скажет... :lol:
Ну а я -- так вообще знал заранее... :D
Ну да, ведь это же так очевидно.
И тем не менее, часто упускается из виду консервативно настроенными людьми, которые даже непонятно как переломили себя при переходе от простых записей к расширяемым... :о))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Четверг, 17 Январь, 2008 00:02 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7761
Откуда: Троицк, Москва
Илья Ермаков писал(а):
... Методы:
а) Декомпозиция ("разделяй и властвуй") - "аналитический метод".
б) Абстракция (последовательное вычленение всё меньшего числа всё более существенных компонент создаваемой структуры) - "синтетический метод".
...

Интересный пример.
Есть слова-объекты. Ими жонглируем -- в нумерованные списки составляем и т.п.
А если пристально присмотреться?

Вот а) и б) -- это не одно и то же?

Почему абстракция -- "синтетический метод"?

Ну и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Четверг, 17 Январь, 2008 01:01 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8919
Откуда: Россия, Орёл
Мда, а слова-то многозначные... Только что в другой ветке употребляли "синтетический" совсем в другом - и более частом смысле. А я употребил в узко "корневом" их смысле. Имел в виду, что декомпозиция по сути "разлагательный", нисходящий метод, а абстракция - "собирательный", восходящий.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Четверг, 17 Январь, 2008 01:03 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8919
Откуда: Россия, Орёл
Info21 писал(а):
Вот а) и б) -- это не одно и то же?


В том смысле, что декомпозиция тоже абстракция... Отрезание ломтя и отвлечение от несвязанных с ним особенностей соседних ломтей?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Четверг, 17 Январь, 2008 01:13 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8919
Откуда: Россия, Орёл
Info21 писал(а):
Ну и т.д.

Ага, вот всё это "и т.д." как раз и самое интересное :-)
Мы тут "от сохи" пытаемся до чего-то дотумкаться, а представитель науки посильную помощь оказать не хочет :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Четверг, 17 Январь, 2008 12:17 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7761
Откуда: Троицк, Москва
Илья Ермаков писал(а):
Info21 писал(а):
Ну и т.д.

Ага, вот всё это "и т.д." как раз и самое интересное :-)
Мы тут "от сохи" пытаемся до чего-то дотумкаться, а представитель науки посильную помощь оказать не хочет :(


Да нет, не "и т.д." самое интересное. Пока с а и б не разберетесь.

А посильную помощь я как раз оказываю. Даже более чем. В ущерб пока сплошной себе 8)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Четверг, 17 Январь, 2008 13:43 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8919
Откуда: Россия, Орёл
Хорошо, спрошу так: что толковое можно почитать касательно этих методов в их общенаучном смысле? Дело-то в том, что практические ощущения и правила накапливаются, и нестерпимо хочецца за деревьями лес хоть в ближнем радиусе увидеть...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Принципы структурирования
СообщениеДобавлено: Четверг, 17 Январь, 2008 13:45 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8919
Откуда: Россия, Орёл
Info21 писал(а):
А посильную помощь я как раз оказываю. Даже более чем. В ущерб пока сплошной себе

Я это понимаю. И благодарен. :-)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2018, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB