Форум программистов, компьютерный форум, киберфорум
CoderHuligan
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Сверху или снизу? Сверху!!!

Запись от CoderHuligan размещена 22.02.2021 в 10:46
Показов 8723 Комментарии 45

Как проектируют программные системы? Обычно существует два основных подхода к написанию (проектированию) программ. Один из них так называемое проектирование сверху, другой - снизу.
Философию создания снизу, как известно, проповедовали фортисты или фортеры - поклонники языка Forth. Чарльз Мур, создатель форта, отвечая на вопрос: как он пишет программы, сверху или снизу, отвечал, что если ему нужно в программе нарисовать круг на экране, то он сразу приступит к его рисованию, путем создания слова(процедуры), которая нарисует круг. Он как известно был поклонником разработки снизу. Да и язык форт только способствует такому стилю.
Другие известные специалисты ратовали за разработку сверху. Это - Дейкстра, Вирт и мн. др. Алан Перлис, в одном из своих афоризмов заметил:
"Все нужно проектировать сверху вниз, за исключением фундамента, с которого нужно начинать."
То есть начинать с примитивов, снизу, а проектировать сверху. И он был абсолютно прав!
Раньше я тоже думал, что писать надо всегда снизу, а там по ходу видно будет куда выведет эта дорожка, однако сейчас думаю совершенно иначе.. Корифеи были правы, смею признать.
Проектирование программы начинается с самых главных процедур, а примитивы создаются по мере потребности в них. Только тогда программу, что называется, можно сразу "пощупать", увидеть сильные и слабые стороны проекта, так сказать, "в общем".
Сторонники нижней позы, возражают, что, мол, как вы будете тестировать программу, если написав её половину, вы обнаружите, что требуется изменить общую структуру? Но они заблуждаются. Как раз, общая структура проектируется с самого начала, хорошо отрабатывается, и её изменять уже не нужно. Написав же программу наполовину снизу мы еще не знаем общей главной структуры. При проектировании снизу, взаимосвязь компонентов не всегда очевидна в общей структуре, и изменив один компонент, надо искать связи выше. При компонентной разработке не строго регламентируются иерархические отношения между компонентами, так как общей структуры еще нет, и непонятно что, к чему будет принадлежать и что от чего будет зависеть в конечном итоге..
Общая, главная структура создается примерно так:
1. пишется главный код или процедура, подчиненные компоненты которого делаются в виде так называемых "заглушек". Заглушки это - пустые процедуры, которые возвращают какое-то значение, которое главный компонент будет интерпретировать должным образом.
2. Отработав общую схему, приступаем к созданию дочернего кода. Подчиненный код имеет свои функции-заглушки. И так далее, пока не дойдем до создания конкретных функций уже на "земле", спустившись с небес на землю.
3. Теперь раскручивая рекурсию в обратном направлении идем вверх создавая вместо заглушек рабочие компоненты.

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

Несколько позже затрону тему иерархичности вообще, общения компонентов между собой опосредованно путем посылки сообщений, и как ООП извратило эту объектную идею.

Теперь немного философии.
Те, кто верят в Творца вселенной, в разумное начало (а я к таковым отношу и себя), хорошо знают, что мир создавался и поддерживается путем проектирования сверху вниз, от общего к частному. Мы знаем, что любое знание, чтобы быть хорошо усвоенным должно преподноситься от общего к частному, от общей структуры или обзора, к деталям. Только сверху видна общая картина. Тот же Перлис сказал:
" Достаточно года работы над искусственным интеллектом, чтобы заставить поверить в Бога."
Апологеты нижнего подхода , думаю, упускают из вида одну наиважнейшую вещь: управляемость, разделение ответственности, иерархичность. Компонентный подход снизу, - против иерархичности: там каждый компонент не знает кому принадлежит, а зоны ответственности размыты. По сути это хаос. Вот поэтому языки типа форта и канули в лету как самостоятельные единицы: больших серьезных систем на них не создашь.
Объектный же подход возвел эту парадигму в ранг закона о чем позже. Правда это не относится к проектированию сверху или снизу - это другая тема.
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 45
Комментарии
  1. Старый комментарий
    От CoderHuligan
    Сверху или снизу? Сверху!!!
    ...
    CoderHuligan,
    А мне кажется, что нужно избегать крайностей и ответить так: - Посередине.
    Ну а если честно. К примеру у меня не решается задача. Что я делаю? Сильно упрощаю алгоритм. Порой настолько сильно, что это совсем другая задача. И что я получаю? Она (программа) работает! И я не ломаю голову над тем, как она вообще была решена... Сверху или снизу...

    Решение каждой задачи приносит программисту опыт. Вот он и нужен! Хотите сверху? Да на здоровье!!!

    CoderHuligan, поздравляю Вас С днём Защитника Отечества!
    23 февраля 2021
    Запись от wer1 размещена 23.02.2021 в 10:39 wer1 вне форума
  2. Старый комментарий
    Аватар для CoderHuligan
    Цитата Сообщение от wer1
    Что я делаю? Сильно упрощаю алгоритм. Порой настолько сильно, что это совсем другая задача. И что я получаю? Она (программа) работает! И я не ломаю голову над тем, как она вообще была решена... Сверху или снизу...

    Решение каждой задачи приносит программисту опыт. Вот он и нужен! Хотите сверху? Да на здоровье!!!
    wer1, - одно дело конкретная задача где вообще не важно сверху или снизу. Другое дело большой программный проект на больше 1000 строк кода. Тут уже простыми методами упрощения и декомпозиции не обойдешься. Тут нужно быть архитектором-проектировщиком-планировщиком и аналитиком, то есть - стратегом а не тактиком.
    И вас с праздником!
    Запись от CoderHuligan размещена 23.02.2021 в 10:59 CoderHuligan вне форума
  3. Старый комментарий
    Цитата Сообщение от CoderHuligan
    и на отладку и тестирование уходит туева куча времени.
    Ну в общем понятно, пока вы такими темпами будете в своей чудо парадигме программировать непадающие боинги, люди уже летающие тарелки изобретут
    Запись от Катафалк размещена 23.02.2021 в 11:10 Катафалк вне форума
  4. Старый комментарий
    Мне тут специалист по программированию, как-то лет 7 назад спор проиграл, о AI и абстрактном мышлении. Модераторы конечно потёрли этот его успешный слив.
    Я взял на решение вопроса пол-года. А вопрос - гавно, но только с позиции горе-ученика он был на веру взят как нерешаемый. Он утверждал то, чему его научили в ВУЗе, я жизненный опыт.
    Чтобы опыт суметь формализовать - нужно время. За пол-года я сформулировал.

    Вот поэтому нужно время чтобы сформулировать -
    [url]https://www.livemaster.ru/topic/2182845-bystro-kachestvenno-nedorogo-vybirajte-lyubye-dva-punkta[/url]

    В общем он утверждал, что он, как и все люди наделены дарами небывалыми и неслыханными - даром абстрактного мышления. Через пол-года я ему объяснил что такое есть - явление абстрактного мышления, и что ничего в нём особенного не было и нету, и никаких проблем оно особых вообще не решает в поставленных задачах.
    [B][I]Уметь видеть зависимости и связи, манипулировать ими - вот что решает поставленные задачи, а не способность абстрагирования.[/I][/B]

    Из того-же опыта:
    тот у кого падают боинги - летающие тарелки изобретает только в своих фантазиях глупых.
    Запись от Hrethgir размещена 23.02.2021 в 11:17 Hrethgir вне форума
  5. Старый комментарий
    Аватар для Usaga
    Если вы так хотели намекнуть на то, что автор сего блога может видеть истину, а мы все тут заблуждаемся, то я вас обломаю. ТСа попросили доказать, что его идеи работают и позволяют писать лучше и быстрее. Уже почти два года прошло с тех пор, а доказательств все нет. Вот и все, что нужно знать про ТСа
    Запись от Usaga размещена 23.02.2021 в 12:23 Usaga вне форума
  6. Старый комментарий
    Аватар для Curry
    Цитата Сообщение от CoderHuligan
    Те, кто верят в Творца вселенной, в разумное начало (а я к таковым отношу и себя), хорошо знают, что мир создавался и поддерживается путем проектирования сверху вниз, от общего к частному.
    В точности наоборот. По библии, вначале бог создал землю, потом солнце, луну, а потом звёзды, а звёзды то это звёздные системы, состоящие из собственно звёзд, планет, их спутников. Явно снизу вверх.

    Цитата Сообщение от CoderHuligan
    а голый си, где выход за границу массива ничем не отслеживается автоматически и где все нужно ручками ручками пилить. и на отладку и тестирование уходит туева куча времени.
    Это батюшка на вас такую епитимью наложил - на голом си писать?
    Хотя и на нём можно к массивам не напрямую обращаться, а понаделать макросы получения и записи значения в массив вначале проверяющие выход за границу.
    Запись от Curry размещена 24.02.2021 в 00:42 Curry на форуме
  7. Старый комментарий
    Аватар для Usaga
    Это батюшка на вас такую епитимью наложил - на голом си писать?
    Видимо это единственный язык, что он смог осилить хоть как-то. Хотя, судя по скорости с которой морской бой пишется, то и тут у меня есть сомнения.
    Запись от Usaga размещена 24.02.2021 в 09:18 Usaga вне форума
  8. Старый комментарий
    Так это ж парадигма у кодерхулигана такая. Только голый си и гоуту во все поля. И никаких сторонних библиотек. А иначе боинги падать будут.
    Запись от Катафалк размещена 24.02.2021 в 09:32 Катафалк вне форума
  9. Старый комментарий
    Аватар для CoderHuligan
    Цитата Сообщение от Curry
    В точности наоборот. По библии, вначале бог создал землю, потом солнце, луну, а потом звёзды, а звёзды то это звёздные системы, состоящие из собственно звёзд, планет, их спутников. Явно снизу вверх.
    Все правильно. Звезды происходят из планет. Есть такое понятие - "эволюция планет". Есть гипотеза, что планеты растут и в конце концов превращаются в звезды. Смею доложить, что эта гипотеза недалека от истины (для адекатных людей).
    Цитата Сообщение от Curry
    Это батюшка на вас такую епитимью наложил - на голом си писать?
    Сам на себя. Я мог написать например на free basic, на euphoria, на худой конец на tcl, но пишу на голом си для собственного саморазвития, чтобы глубже познать си, потому как считаю, что лучше знать в совершенстве один язык, чем десять плохо. К тому же голый си позволяет такое, что и не снилось нашим мудрецам, что тоже имеет вес.
    Цитата Сообщение от Curry
    Хотя и на нём можно к массивам не напрямую обращаться, а понаделать макросы получения и записи значения в массив вначале проверяющие выход за границу.
    Обычно в таких случаях пользуются ассертами, но дебажу старыми дедовскими методами, хотя это может быть и неправильно с точки зрения профи. Но я не профи, поэтому с меня взятки гладки, как хочу так и пишу, как хочу таки дебажу. Дебажу в файл через fprintf.
    Запись от CoderHuligan размещена 24.02.2021 в 09:36 CoderHuligan вне форума
  10. Старый комментарий
    Аватар для CoderHuligan
    Цитата Сообщение от Катафалк
    Так это ж парадигма у кодерхулигана такая. Только голый си и гоуту во все поля. И никаких сторонних библиотек. А иначе боинги падать будут.
    Все верно!
    Запись от CoderHuligan размещена 24.02.2021 в 09:38 CoderHuligan вне форума
  11. Старый комментарий
    Аватар для CoderHuligan
    Цитата Сообщение от Usaga
    Видимо это единственный язык, что он смог осилить хоть как-то. Хотя, судя по скорости с которой морской бой пишется, то и тут у меня есть сомнения.
    Скорость с моей точки зрения достаточно высокая. Я начал практически с нуля примерно месяц назад, так как старый код годовой давности меня не устроил. За месяц неспешной работы и то не каждый день, я уже создал вполне рабочий консольный вариант. То есть я уже играю в морской бой. и вроде все крутится и работает. Осталось выровнять диалоги, доработать меню, и так по мелочи. Основная логика работает. текущий вес файла с исходником примерно 28 килобайт. 1100 с лишним строк кода. Для меня это достаточно сложный был проект, так как игра включает в себя элементы ИИ.
    Кстати, возможно, не точно, портирую на free basic. Хотя склоняюсь к чистым апи виндовс. Хотя в последнем случае будет сложно портировать её на линукс.
    Запись от CoderHuligan размещена 24.02.2021 в 09:43 CoderHuligan вне форума
  12. Старый комментарий
    Аватар для Usaga
    Скорость с моей точки зрения достаточно высокая.
    А. Ну с такой позиции, когда вы сами себе критик, то да - у вас всё замечательно. А вот с позиции сравнения с другими вы проигрываете с такой "скоростью". Это доказывает, что вы не правы. Вы можете себе сколько угодно говорить обратное, но на деле вы доказали недееспособность подхода.

    Хорош тот боинг, что не падает потому, что не летает.
    Запись от Usaga размещена 24.02.2021 в 10:33 Usaga вне форума
  13. Старый комментарий
    Аватар для CoderHuligan
    Цитата Сообщение от Usaga
    А. Ну с такой позиции, когда вы сами себе критик, то да - у вас всё замечательно. А вот с позиции сравнения с другими вы проигрываете с такой "скоростью". Это доказывает, что вы не правы. Вы можете себе сколько угодно говорить обратное, но на деле вы доказали недееспособность подхода.

    Хорош тот боинг, что не падает потому, что не летает.
    Что ты там все трындишь, а? Мил человек, 28 к. кода за ~30 дней работы, это много. + отладка. Доказывать надо? Ткнуть куда надо? Скоростник-ударник ты мой. Ты забываешь мил человек, что тут си, а не си# со сборкой мусора к чему ты привык и отвыкать не будешь. А я привык делать все ручками. А тебе если твой начальник предложит запрограммировать контролер где ты окажешься в итоге? Не буду говорить где, ты умный мальчик все сам поймешь..
    Одно дело написать, к примеру обработчик пользовательского ввода на высокоуровневом ЯП, другое - драйвер на си или асме. И время по строчкам тут не прокатит. Или ты вообще ничего не соображаешь а только тролишь троллишь и троллишь лишь бы потроллить?..
    Запись от CoderHuligan размещена 24.02.2021 в 10:58 CoderHuligan вне форума
  14. Старый комментарий
    Аватар для Usaga
    Успокойтесь) Всё, что вы хотели доказать вы уже доказали. И бредовость и неадекватность подхода, который пропагандируете, и скорость его медленную и качество околоплинтусовое.

    Вы заявляли, что в таком ключе писать быстрее и взялись доказать это. Ну и? Почти два года прошло. За это время две версии .NET Core вышло. Портировали WinForms и WPF на Core. Илон Маск с десяток запусков в космос произвёл. А вы консольный свой бой всё пишете. Вот настолько оно у вас "быстрее" и "лучше".

    Так что тролль тут один и это точно не я.
    Запись от Usaga размещена 24.02.2021 в 11:33 Usaga вне форума
  15. Старый комментарий
    Аватар для CoderHuligan
    Цитата Сообщение от Usaga
    Успокойтесь) Всё, что вы хотели доказать вы уже доказали. И бредовость и неадекватность подхода, который пропагандируете, и скорость его медленную и качество околоплинтусовое.

    Вы заявляли, что в таком ключе писать быстрее и взялись доказать это. Ну и? Почти два года прошло. За это время две версии .NET Core вышло. Портировали WinForms и WPF на Core. Илон Маск с десяток запусков в космос произвёл. А вы консольный свой бой всё пишете. Вот настолько оно у вас "быстрее" и "лучше".

    Так что тролль тут один и это точно не я.
    Еще и последний раз для непонятливых а потом в полный игнор НАВСЕГДА.
    НИЧЕГО НИКОМУ Я НЕ СОБИРАЛСЯ ДОКАЗЫВАТЬ И ТЕМ БОЛЕЕ НЕ НАМЕРЕВАЛСЯ ПИСАТЬ КОД ДЛЯ ТОГО, ЧТОБЫ КОМУ-ТО ЧТО-ТО ДОКАЗАТЬ!!! Это вы уже сами придумали. Еще раз повторяю: пишу только для себя.
    Ты тут просто несешь бред бред и еще раз бред. Ты сам-то слышишь самого себя?
    Ты говоришь, что за это время вышло две версии нет кор, как буд-то этот нет кор делал один человек, а не 1000. ты пишешь, что за это время илон маск слетал на рбиту, но забываешь уточнить, что он это сделал не один и не за один доллар. Это, рябята - тролль. Самый настоящий, типичный тролль. пример всем троллям. Поэтому, тролль, я тебя посылаю в игнор на ВЕКИ ВЕЧНЫЕ! И свято обещаю не нарушать его! Пусть эта запись будет подтверждением моих слов. ты уже конкретно достал не только меня. Адью бэйби.
    Запись от CoderHuligan размещена 24.02.2021 в 12:07 CoderHuligan вне форума
  16. Старый комментарий
    Аватар для Usaga
    НИЧЕГО НИКОМУ Я НЕ СОБИРАЛСЯ ДОКАЗЫВАТЬ И ТЕМ БОЛЕЕ НЕ НАМЕРЕВАЛСЯ ПИСАТЬ КОД ДЛЯ ТОГО, ЧТОБЫ КОМУ-ТО ЧТО-ТО ДОКАЗАТЬ!!!
    Переобуваешься в прыжке?
    Запись от Usaga размещена 24.02.2021 в 12:33 Usaga вне форума
  17. Старый комментарий
    Аватар для CoderHuligan
    Usaga, извини конечно, но я твоих сообщений не вижу, так что перед другими можешь показывать свою значимость за счет других, но не передо мной. Поверь: я все сделал правильно, так что успокойся и продолжай делать свое дело в разделе c#, это у тебя неплохо получается.
    Запись от CoderHuligan размещена 24.02.2021 в 13:04 CoderHuligan вне форума
  18. Старый комментарий
    Аватар для Usaga
    но я твоих сообщений не вижу
    Но при этом отвечаешь) Чудеса)
    Запись от Usaga размещена 24.02.2021 в 13:23 Usaga вне форума
  19. Старый комментарий
    Аватар для Справлюсь
    * зашёл на кликбейтный заголовок *
    Запись от Справлюсь размещена 24.02.2021 в 14:52 Справлюсь вне форума
  20. Старый комментарий
    Мужики,
    ну что вы все набросились на многоуважаемого CoderHuligan. Он тут вообще никому ничего не должен. Ну допустим, что он даже что-то пообещал... Ведь он, славный CoderHuligan - не раб своего слова. Он его хозяин. Слово дал и назад взял. Это его личное дело (его слово, а не ваше). Мы тут все на форуме решаем свои задачи. А кто-то от них отдыхает. Вот последние просто соскучились по глубокоуважаемому CoderHuligan. Ибо он смотрит сверху на тех, кто снизу (иначе никак)... Ребята, давайте жить дружно!
    ...
    примечание
    А ведь по существу этой записи (темы) никто ничего не сказал...
    Запись от wer1 размещена 24.02.2021 в 16:15 wer1 вне форума
 
Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru