Сверху или снизу? Сверху!!!
Запись от CoderHuligan размещена 22.02.2021 в 10:46
Показов 8723
Комментарии 45
|
Как проектируют программные системы? Обычно существует два основных подхода к написанию (проектированию) программ. Один из них так называемое проектирование сверху, другой - снизу. Философию создания снизу, как известно, проповедовали фортисты или фортеры - поклонники языка Forth. Чарльз Мур, создатель форта, отвечая на вопрос: как он пишет программы, сверху или снизу, отвечал, что если ему нужно в программе нарисовать круг на экране, то он сразу приступит к его рисованию, путем создания слова(процедуры), которая нарисует круг. Он как известно был поклонником разработки снизу. Да и язык форт только способствует такому стилю. Другие известные специалисты ратовали за разработку сверху. Это - Дейкстра, Вирт и мн. др. Алан Перлис, в одном из своих афоризмов заметил: "Все нужно проектировать сверху вниз, за исключением фундамента, с которого нужно начинать." То есть начинать с примитивов, снизу, а проектировать сверху. И он был абсолютно прав! Раньше я тоже думал, что писать надо всегда снизу, а там по ходу видно будет куда выведет эта дорожка, однако сейчас думаю совершенно иначе.. Корифеи были правы, смею признать. Проектирование программы начинается с самых главных процедур, а примитивы создаются по мере потребности в них. Только тогда программу, что называется, можно сразу "пощупать", увидеть сильные и слабые стороны проекта, так сказать, "в общем". Сторонники нижней позы , возражают, что, мол, как вы будете тестировать программу, если написав её половину, вы обнаружите, что требуется изменить общую структуру? Но они заблуждаются. Как раз, общая структура проектируется с самого начала, хорошо отрабатывается, и её изменять уже не нужно. Написав же программу наполовину снизу мы еще не знаем общей главной структуры. При проектировании снизу, взаимосвязь компонентов не всегда очевидна в общей структуре, и изменив один компонент, надо искать связи выше. При компонентной разработке не строго регламентируются иерархические отношения между компонентами, так как общей структуры еще нет, и непонятно что, к чему будет принадлежать и что от чего будет зависеть в конечном итоге..Общая, главная структура создается примерно так: 1. пишется главный код или процедура, подчиненные компоненты которого делаются в виде так называемых "заглушек". Заглушки это - пустые процедуры, которые возвращают какое-то значение, которое главный компонент будет интерпретировать должным образом. 2. Отработав общую схему, приступаем к созданию дочернего кода. Подчиненный код имеет свои функции-заглушки. И так далее, пока не дойдем до создания конкретных функций уже на "земле", спустившись с небес на землю. 3. Теперь раскручивая рекурсию в обратном направлении идем вверх создавая вместо заглушек рабочие компоненты. Так как общая структура уже спроектирована, написание кода является механическим созданием и отладкой отдельных компонентов. Несколько позже затрону тему иерархичности вообще, общения компонентов между собой опосредованно путем посылки сообщений, и как ООП извратило эту объектную идею. Теперь немного философии. Те, кто верят в Творца вселенной, в разумное начало (а я к таковым отношу и себя), хорошо знают, что мир создавался и поддерживается путем проектирования сверху вниз, от общего к частному. Мы знаем, что любое знание, чтобы быть хорошо усвоенным должно преподноситься от общего к частному, от общей структуры или обзора, к деталям. Только сверху видна общая картина. Тот же Перлис сказал: " Достаточно года работы над искусственным интеллектом, чтобы заставить поверить в Бога." Апологеты нижнего подхода , думаю, упускают из вида одну наиважнейшую вещь: управляемость, разделение ответственности, иерархичность. Компонентный подход снизу, - против иерархичности: там каждый компонент не знает кому принадлежит, а зоны ответственности размыты. По сути это хаос. Вот поэтому языки типа форта и канули в лету как самостоятельные единицы: больших серьезных систем на них не создашь. Объектный же подход возвел эту парадигму в ранг закона о чем позже. Правда это не относится к проектированию сверху или снизу - это другая тема. |
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 45
Комментарии
-
От CoderHuligan
Сверху или снизу? Сверху!!!
...
CoderHuligan,
А мне кажется, что нужно избегать крайностей и ответить так: - Посередине.
Ну а если честно. К примеру у меня не решается задача. Что я делаю? Сильно упрощаю алгоритм. Порой настолько сильно, что это совсем другая задача. И что я получаю? Она (программа) работает! И я не ломаю голову над тем, как она вообще была решена... Сверху или снизу...
Решение каждой задачи приносит программисту опыт. Вот он и нужен! Хотите сверху? Да на здоровье!!!
CoderHuligan, поздравляю Вас С днём Защитника Отечества!
23 февраля 2021Запись от wer1 размещена 23.02.2021 в 10:39
-
wer1, - одно дело конкретная задача где вообще не важно сверху или снизу. Другое дело большой программный проект на больше 1000 строк кода. Тут уже простыми методами упрощения и декомпозиции не обойдешься. Тут нужно быть архитектором-проектировщиком-планировщиком и аналитиком, то есть - стратегом а не тактиком.
Сообщение от wer1
И вас с праздником!Запись от CoderHuligan размещена 23.02.2021 в 10:59
-
Ну в общем понятно, пока вы такими темпами будете в своей чудо парадигме программировать непадающие боинги, люди уже летающие тарелки изобретут
Сообщение от CoderHuligan

Запись от Катафалк размещена 23.02.2021 в 11:10
-
Мне тут специалист по программированию, как-то лет 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
-
Если вы так хотели намекнуть на то, что автор сего блога может видеть истину, а мы все тут заблуждаемся, то я вас обломаю. ТСа попросили доказать, что его идеи работают и позволяют писать лучше и быстрее. Уже почти два года прошло с тех пор, а доказательств все нет. Вот и все, что нужно знать про ТСаЗапись от Usaga размещена 23.02.2021 в 12:23
-
В точности наоборот. По библии, вначале бог создал землю, потом солнце, луну, а потом звёзды, а звёзды то это звёздные системы, состоящие из собственно звёзд, планет, их спутников. Явно снизу вверх.
Сообщение от CoderHuligan
Это батюшка на вас такую епитимью наложил - на голом си писать?
Сообщение от CoderHuligan
Хотя и на нём можно к массивам не напрямую обращаться, а понаделать макросы получения и записи значения в массив вначале проверяющие выход за границу.Запись от Curry размещена 24.02.2021 в 00:42
-
Запись от Usaga размещена 24.02.2021 в 09:18
-
Так это ж парадигма у кодерхулигана такая. Только голый си и гоуту во все поля. И никаких сторонних библиотек. А иначе боинги падать будут.Запись от Катафалк размещена 24.02.2021 в 09:32
-
Все правильно. Звезды происходят из планет. Есть такое понятие - "эволюция планет". Есть гипотеза, что планеты растут и в конце концов превращаются в звезды. Смею доложить, что эта гипотеза недалека от истины (для адекатных людей).
Сообщение от Curry
Сам на себя. Я мог написать например на free basic, на euphoria, на худой конец на tcl, но пишу на голом си для собственного саморазвития, чтобы глубже познать си, потому как считаю, что лучше знать в совершенстве один язык, чем десять плохо. К тому же голый си позволяет такое, что и не снилось нашим мудрецам, что тоже имеет вес.
Сообщение от Curry
Обычно в таких случаях пользуются ассертами, но дебажу старыми дедовскими методами, хотя это может быть и неправильно с точки зрения профи. Но я не профи, поэтому с меня взятки гладки, как хочу так и пишу, как хочу таки дебажу. Дебажу в файл через fprintf.
Сообщение от Curry
Запись от CoderHuligan размещена 24.02.2021 в 09:36
-
Запись от CoderHuligan размещена 24.02.2021 в 09:38
-
Скорость с моей точки зрения достаточно высокая. Я начал практически с нуля примерно месяц назад, так как старый код годовой давности меня не устроил. За месяц неспешной работы и то не каждый день, я уже создал вполне рабочий консольный вариант. То есть я уже играю в морской бой. и вроде все крутится и работает. Осталось выровнять диалоги, доработать меню, и так по мелочи. Основная логика работает. текущий вес файла с исходником примерно 28 килобайт. 1100 с лишним строк кода. Для меня это достаточно сложный был проект, так как игра включает в себя элементы ИИ.
Сообщение от Usaga
Кстати, возможно, не точно, портирую на free basic. Хотя склоняюсь к чистым апи виндовс. Хотя в последнем случае будет сложно портировать её на линукс.Запись от CoderHuligan размещена 24.02.2021 в 09:43
-
А. Ну с такой позиции, когда вы сами себе критик, то да - у вас всё замечательно. А вот с позиции сравнения с другими вы проигрываете с такой "скоростью". Это доказывает, что вы не правы. Вы можете себе сколько угодно говорить обратное, но на деле вы доказали недееспособность подхода.
Хорош тот боинг, что не падает потому, что не летает.Запись от Usaga размещена 24.02.2021 в 10:33
-
Что ты там все трындишь, а? Мил человек, 28 к. кода за ~30 дней работы, это много. + отладка. Доказывать надо? Ткнуть куда надо? Скоростник-ударник ты мой. Ты забываешь мил человек, что тут си, а не си# со сборкой мусора к чему ты привык и отвыкать не будешь. А я привык делать все ручками. А тебе если твой начальник предложит запрограммировать контролер где ты окажешься в итоге? Не буду говорить где, ты умный мальчик все сам поймешь..
Сообщение от Usaga
Одно дело написать, к примеру обработчик пользовательского ввода на высокоуровневом ЯП, другое - драйвер на си или асме. И время по строчкам тут не прокатит. Или ты вообще ничего не соображаешь а только тролишь троллишь и троллишь лишь бы потроллить?..Запись от CoderHuligan размещена 24.02.2021 в 10:58
-
Успокойтесь) Всё, что вы хотели доказать вы уже доказали. И бредовость и неадекватность подхода, который пропагандируете, и скорость его медленную и качество околоплинтусовое.
Вы заявляли, что в таком ключе писать быстрее и взялись доказать это. Ну и? Почти два года прошло. За это время две версии .NET Core вышло. Портировали WinForms и WPF на Core. Илон Маск с десяток запусков в космос произвёл. А вы консольный свой бой всё пишете. Вот настолько оно у вас "быстрее" и "лучше".
Так что тролль тут один и это точно не я.Запись от Usaga размещена 24.02.2021 в 11:33
-
Еще и последний раз для непонятливых а потом в полный игнор НАВСЕГДА.
Сообщение от Usaga
НИЧЕГО НИКОМУ Я НЕ СОБИРАЛСЯ ДОКАЗЫВАТЬ И ТЕМ БОЛЕЕ НЕ НАМЕРЕВАЛСЯ ПИСАТЬ КОД ДЛЯ ТОГО, ЧТОБЫ КОМУ-ТО ЧТО-ТО ДОКАЗАТЬ!!! Это вы уже сами придумали. Еще раз повторяю: пишу только для себя.
Ты тут просто несешь бред бред и еще раз бред. Ты сам-то слышишь самого себя?
Ты говоришь, что за это время вышло две версии нет кор, как буд-то этот нет кор делал один человек, а не 1000. ты пишешь, что за это время илон маск слетал на рбиту, но забываешь уточнить, что он это сделал не один и не за один доллар. Это, рябята - тролль. Самый настоящий, типичный тролль. пример всем троллям. Поэтому, тролль, я тебя посылаю в игнор на ВЕКИ ВЕЧНЫЕ! И свято обещаю не нарушать его! Пусть эта запись будет подтверждением моих слов. ты уже конкретно достал не только меня. Адью бэйби.Запись от CoderHuligan размещена 24.02.2021 в 12:07
-
Запись от Usaga размещена 24.02.2021 в 12:33
-
Запись от CoderHuligan размещена 24.02.2021 в 13:04
-
Запись от Usaga размещена 24.02.2021 в 13:23
-
Запись от Справлюсь размещена 24.02.2021 в 14:52
-
Мужики,
ну что вы все набросились на многоуважаемого CoderHuligan. Он тут вообще никому ничего не должен. Ну допустим, что он даже что-то пообещал... Ведь он, славный CoderHuligan - не раб своего слова. Он его хозяин. Слово дал и назад взял. Это его личное дело (его слово, а не ваше). Мы тут все на форуме решаем свои задачи. А кто-то от них отдыхает. Вот последние просто соскучились по глубокоуважаемому CoderHuligan. Ибо он смотрит сверху на тех, кто снизу (иначе никак)... Ребята, давайте жить дружно!
...
примечание
А ведь по существу этой записи (темы) никто ничего не сказал...Запись от wer1 размещена 24.02.2021 в 16:15

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

