Когда бы я использовал псевдокод вместо блок-схемы?

9

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

  1. Когда я буду использовать псевдокод для планирования и когда я буду использовать блок-схемы? Или лучше сделать и то, и другое перед программированием. Особенно для небольшой аркадной игры в JAVA, так как это мой следующий проект.
  2. Я заметил, что псевдокод очень похож на реальный код, а не на блок-схемы. Может ли это сделать псевдокодирование лучше, потому что вы по сути копируете / вставляете псевдокод в свою программу (конечно, вы должны изменить его, чтобы он соответствовал языку. Я понимаю эту часть).
  3. Практично ли использовать оба из них при программировании? Особенно та же игра, упомянутая ранее. Спасибо.
kullalok
источник
Очевидно, что вы не будете использовать потоковые диаграммы там, где у вас нет потока, т. Е. Почти для всех декларативных объектов.
SK-logic
1
Я не могу вспомнить, когда в последний раз видел блок-схему кодирования. Класс и диаграммы потоков данных, диаграммы вариантов использования, да. Но не блок-схемы. Может быть, они более распространены в разработке игр.
Роберт Харви
@RobertHarvey, диаграммы FSM (которые, по сути, являются блок-схемами), довольно часто используются при проектировании аппаратного обеспечения
SK-logic

Ответы:

7

Блок-схемы и псевдокод часто имеют одинаковый уровень выраженности, но различаются по линеаризации. Псевдокод является линейным (то есть последовательность строк с инструкциями), блок-схема не является. Следовательно, блок-схемы представляют собой более высокий уровень абстракции, используемый перед написанием псевдокода или для документации.

Блок-схемы, на мой взгляд, имеют два сильных преимущества перед псевдокодом: во-первых, они графические. Многие нетехнические люди сильно боятся структурированного текста, но не графических описаний, поэтому блок-схемы будут намного приятнее с ними. Во-вторых, блок-схемы намного лучше выражают мета-соображения, например, показывают основную линию исполнения, а не ветви.

Ваши вопросы подробно:

  1. Для действительно сложной проблемы вы должны сначала использовать блок-схемы, а затем псевдокод. И то и другое не обязательно, когда вы чувствуете себя в безопасности.
  2. Да, псевдокод имеет то преимущество, что его можно объединить с реальным кодом. Стив Макконнелл, например, настоятельно рекомендует сначала писать методы в псевдокоде, а затем оставлять псевдокод в коде в качестве комментариев.
  3. Я всегда чувствовал, что необходимость рисовать блок-схему во время проектирования показывает недостаточное разделение вашей проблемы. Нетривиальные блок-схемы указывают на запутанную логику, которой следует избегать при больших затратах.
thiton
источник
1
Блок-схемы также являются отличным способом убедиться, что каждая точка принятия решения определяет действия для менее распространенного пути, а также для наиболее распространенного. Это поможет вам убедиться, что вы будете знать, что делать, если в утверждении отказано или заказ отменен! В крайних случаях часто встречается больше ошибок, потому что люди забывают их делать или спешат во время QA, когда тестирование обнаруживает их.
HLGEM
2

По псевдо-коду

Честно говоря, я не использую псевдокод много. Как правило, быстрее просто написать код, поэтому, когда я закончу с моим кодом, это будет настоящий код. В некоторых случаях псевдокод может быть полезен, но вы обычно работаете над чем-то очень сложным и просто пытаетесь сломать структуру метода или чего-то еще. В этих случаях я использую комментарии в своей IDE, чтобы выложить структуру, пока я не получу правильные вещи. Затем я вхожу и пишу фактический код в комментариях. Это помогает мне сделать несколько вещей:

  • Я могу видеть области, которые у меня есть и которые не реализованы, читая комментарии и видя очевидные пробелы в них.
  • Когда я заполняю реальный код, у меня есть комментарии, объясняющие на английском, что я делаю. (Возможно, он им понадобится, если он настолько сложен, что мне нужно сначала написать псевдокод).

На блок-схемах

Код обычно изменяется настолько, что блок-схемы бесполезны, за исключением более масштабной, более системной архитектуры или документации. В этих случаях я просто нарисую схему, чтобы понять суть вещей или показать кому-то еще в команде. Если вам действительно не нужна блок-схема, чтобы помочь вам понять, тогда вам не нужны они, чтобы «делать» программное обеспечение правильно. В настоящее время существует множество плагинов для IDE, которые будут генерировать потоковые диаграммы из самого кода, а также диаграмм классов и других (и наоборот `). Единственное реальное время, которое вам потребуется для создания действительно точной блок-схемы, - это если вы не можете сохранить всю архитектуру и то, как все работает в вашей голове, и вам нужно обсудить что-то визуальное, чтобы поймать изломы.

Райан Хейс
источник
0

Обычно я не пишу блок-схемы, пока работаю над личными проектами (поскольку проекты не очень большие), и большинство входов, выходов и процессов ясны.

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

Я бы порекомендовал вам писать псевдокод и UML-диграммы, так как эти инструменты помогут вам найти более совершенные классы, методы и т. Д. Иногда при написании псевдокода вы найдете другие и более эффективные способы решения программы.

CodeCracker
источник
0

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

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

Ryathal
источник
0

Блок-схемы представляют собой высокий уровень абстракции, они позволяют вам планировать, как все должно происходить, например

если х умрет, то победит

Им не нужно зависеть от того, как вы разрабатываете программу с точки зрения классов и методов, с другой стороны, псевдокод обеспечивает более низкий уровень абстракции (хотя это действительно зависит)

if (isdead (s)) y.win ()

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

Для игры я бы рекомендовал сначала использовать потоковую диаграмму, затем разработать классы и методы, написать псевдокод и, наконец, преобразовать его в программу.

nischayn22
источник
0

Я хотел бы рассмотреть природу кода, который вы пишете. Если это:

  1. Очень итеративный / рекурсивный
  2. Филиалы сложными способами
  3. Реализовано в нескольких системах, которые вы хотите представить

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

В третьем случае блок-схемы лучше представляют процессы, которые пересекают границы системы и представляют весь процесс.

Крис Питман
источник
0
  1. Вы должны использовать все, что вам удобно. Тем не менее, у меня сложилось впечатление, что блок-схемы не очень используются для того, чтобы наметить управление программой в эти дни; с одной стороны, они обычно неструктурированы по сравнению с псевдокодом. Для описания вашей архитектуры на гораздо более высоком уровне чаще используются диаграммы зависимостей классов, такие как UML. Кроме того, если ваше приложение имеет конечный автомат, необходимо нарисовать (похожую на блок-схему) диаграмму конечного автомата.
  2. Я думаю, что вы правы здесь. Один из способов работы - это записать свой псевдокод в виде комментариев в исходном файле и начать вставлять фактические строки реализации между ними.
  3. Опять же, используйте то, что вам удобно. Если вы не уверены, попробуйте оба варианта; Я ожидаю, что ваша практика быстро сойдет с того, что для вас наиболее полезно. Лично я не нахожу блок-схемы полезными, если я не пытаюсь распутать особенно сложный порядок выполнения.
comingstorm
источник
0

Зачем писать псевдокод, если вы можете писать на Java? Я нашел Java, хорошую IDE и Javadoc - самый простой способ понять проблему программирования - по крайней мере, объектно-ориентированную . (И аркадная игра должна быть ОО.) Язык был разработан с нуля для этого. Это просто и понятно. (Возможно, это слишком просто для многих целей, но лучшее, что я видел для этого.) Гипертекст в Javadoc и, через IDE, в самом коде создает более понятную «диаграмму», чем вы могли бы нарисовать даже большой лист бумаги. Java-код так же прост, как и любой псевдокод, и намного более строг. И после того, как вы его «наметили» и «псевдо» закодировали, программа действительно запустится!

RalphChapin
источник
1
java и другие могут быть длинными буквами. "public static void main .." или "system.out.println" или длинные идентификаторы с нотацией верблюдов, long winded there.n тогда исключения, которые перехвачены 2b ... И вызов любых библиотек может быть Я давно помню, как открывал файл 10 лет назад. что-то вроде нового BufferedReader (new InputStreamReader (System.in)); очевидно, теперь легче mkyong.com/java/… Но на самом деле любая библиотека, которую вы называете, может быть длинной, не такой, как псевдокод, который может быть настолько кратким, насколько вы можете себе представить
barlop
также в Java или любом другом языке вы попадаете на ошибки при компиляции. ничего этого с псевдокодом. Вы можете сосредоточиться на дизайне без отвлечения. Комментарии к псевдокоду могут быть намного более краткими, поскольку псевдокод яснее для разума, поскольку он от разума. Вы не ограничены мышлением только на одном языке, и вы можете увидеть, что я буду использовать этот другой язык. Писать быстрее и не так больно (компиляции не требуются - даже очень быстро получаются ошибки компиляции), и, следовательно, меньше времени на запись облегчает процесс редизайна.
Бароп
@ barlop: это работает для меня, но это может не работать для всех. Я оставляю много кода (например, «BufferedReader») вне своих классов до тех пор, пока он мне не понадобится или мне не нужно будет узнать, смогу ли я заставить его работать. Даже когда он у меня есть, он хорошо спрятан в классах, на которые мне не нужно смотреть при рассмотрении общего дизайна. Ошибки компилятора легко исправляются и могут предотвратить серьезные недостатки дизайна, такие как использование неправильного класса в точке, где вы даже не можете получить экземпляр правильного класса. Признаюсь, я уже «разработаны» программное обеспечение таким образом , что может только быть написано в Java, но OP это с помощью Java.
RalphChapin
скажем, вы хотите открыть файл, видите ли вы, как псевдокод openfile ("c: \ blah \ file") короче, чем Java, чтобы сделать это? или что печать "dfdfd" короче, чем Java, чтобы сделать это? Я никогда не делал (пока) страницы псевдокода и нескольких классов. частично потому, что я не писал большие программы в возрасте б) частично потому, что я не думаю, что смогу, думаю, я бы написал какой-нибудь псевдокод, а затем реализовал его. Любой другой псевдокод, если он есть, будет более высокого уровня. Я мог бы иметь список всех классов и методов, включая конструкторы. Так что я знаю, что такое классы, и что я могу получить экземпляр этого ...
barlop
так что я бы не стал использовать неправильный класс, но в любом случае, если бы это была моя программа, я бы записал в своих заметках, что это за класс .. классы довольно высокого уровня. У меня была бы записка об этом, если я не могу вспомнить это. И псевдокод - все о том, что значит один, так что если вы хотели создать экземпляр класса blah и написали bleh, то это просто опечатка, но она не мешает вашему дизайну. (если вы пишете для себя, потому что вы знаете, что имеете в виду, и вы использовали это как бла).
Бароп
0

Вы можете использовать блок-схему, если вас действительно смущают операторы if и вы пытаетесь это понять. Или, если вы пытаетесь понять цикл, посмотрите эффект счетчиков. Если вы учитесь, это может очень помочь.

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

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

Итак, полезно для себя.

Они также могут быть использованы для общения с другими.

barlop
источник