Определение «состояния»

15

Каков хороший способ определить «состояние», как в переменной состояния или конечном автомате, для нового (ранее не) программиста? Какие есть хорошие способы объяснить, почему эта концепция полезна для написания программного обеспечения? Понятно ли понятие государства в начальных курсах по программированию или в книгах?

hotpaw2
источник

Ответы:

5

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

Та «вещь / информация», которую вам нужно запомнить, называется «состояние».

(не требуется, чтобы это «состояние» менялось со временем, это просто способ сказать «помнить / знать что-то»)

phant0m
источник
1
Я думаю, что это лучший ответ, если его перефразировать, чтобы он был понятен непрограммисту. Скажи: все действия обрабатывают вещи и / или информацию. Это происходит тремя способами: 1) любая деятельность может принимать или использование или читать кое - что: его вход ; 2) он может производить или писать что-то: его вывод ; 3) в процессе выполнения оно может что-то удерживать , сохранять , запоминать , хранить : его состояние, Для большинства компьютерных программ весь ввод, вывод и состояние состоят из информации, в то время как для других видов деятельности (скажем, приготовление пищи) обычно также задействованы физические объекты.
reinierpost
8

Из Википедии :

Состояние обычно относится к текущему состоянию системы или объекта ...

Это в значительной степени означает, что это означает в вычислительном контексте: данные, которые определяют состояние какого-либо объекта или системы.

Значение «состояния» не является специфическим для программирования. Есть примеры «государства» буквально везде, куда бы вы ни посмотрели. Телевизор выключен. Кофе горячий. Кроссовки а) синие; б) вонючий; в) не убирать; г) довольно изношен. «состояние» в смысле программирования точно так же, как «состояние» в смысле не программирования, за исключением того, что мы применяем его к объектам, с которыми мы имеем дело: переменные, объекты, потоки, базы данных, файловые системы и т. д. Если у вас есть Чтобы объяснить это, объясните это в терминах, которые знакомы - нет необходимости превращать это в иностранную техническую концепцию.

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

Сравните это с чем-то безгражданством, например с заявлением: «Дверь красная». Само утверждение не имеет государства. Может быть или не быть правдой, что дверь красная, но само утверждение не содержит никакого состояния. Покраска двери может изменить истинность утверждения, но само утверждение никогда не изменится. Аналогично, число, подобное 42, не имеет состояния: 42 - это 42, и вы ничего не можете изменить в этом.

Переменные имеют состояние, а значения - нет.

Калеб
источник
1
@ hotpaw2 Значение «состояния» не является специфическим для программирования. Есть примеры «государства» буквально везде, куда бы вы ни посмотрели. Телевизор выключен. Кофе горячий. Кроссовки а) синие; б) вонючий; в) не убирать; г) довольно изношен. «состояние» в смысле программирования точно так же, как «состояние» в смысле не программирования, за исключением того, что мы применяем его к объектам, с которыми мы имеем дело: переменные, объекты, потоки, базы данных, файловые системы и т. д.
Калеб
1
Так вы бы объяснили это студенту-программисту на конкретных примерах? Похоже, хорошая идея. Будет ли он эффективно передавать им понимание состояния в своих программах?
hotpaw2
2
@ hotpaw2 Переместил мой комментарий до ответа и немного расширил. Что касается понимания, я думаю, что лучше не слишком сосредотачиваться на «состоянии» в резюме с новичком. Большинству людей нужны конкретные примеры чего-либо, прежде чем они действительно смогут распознать более общий паттерн.
Калеб
1
Непонятно, почему «кофе горячий» является состоянием, а «дверь красная» не имеет состояния? Напротив, будет ли это означать, что «кофе черный» не имеет состояния, а «дверь горячая» является состоянием?
Адам Хьюз
1
@AdamHughes Посмотрите, где я использовал цитаты - в частности, я не использовал их в разговоре о кофе, потому что имел в виду реальный кофе, а не высказывания о кофе. Дело в том, чтобы объяснить разницу между переменными и значениями. Фактическая дверь в моем доме есть состояние: он может быть открытым или закрытым, красным или синим или зеленый, горячим или холодным, и т.д. Заявления о двери можно указать , что состояние, но заявление сам по себе является неизменной вещью.
Калеб
1

Состояние - это информация, которой манипулирует ваша программа для выполнения какой-либо задачи. Это данные или информация, которые изменяются или обрабатываются во время выполнения программы. «Состояние» программы в данный момент времени относится к снимку всех данных, которые программа просматривает или анализирует в настоящее время, чтобы перейти к следующему этапу ее выполнения.

Мой университет начал с Scheme, поэтому мы начали программировать с моделью без состояния. Затем мы переключились на C и очень четко рассказали о том, что такое состояние, почему оно полезно и почему оно делает вещи потенциально очень сложными. Поэтому некоторые университеты, безусловно, говорят о государстве, но не обязательно все из них

Oleksi
источник
1

Вы можете использовать аналогию светофора, который может находиться в одном из трех состояний: [ЗЕЛЕНЫЙ], [ЖЕЛТЫЙ] или [КРАСНЫЙ]. Это должно быть только в одном состоянии одновременно. Светофор - это фактический конечный автомат, который моделируется. Обычно он будет переходить из состояния [ЗЕЛЕНЫЙ в ЖЕЛТЫЙ], затем [ЖЕЛТЫЙ в КРАСНЫЙ], затем [КРАСНЫЙ в ЗЕЛЕНЫЙ].

введите описание изображения здесь

Альтернативный переход состояния (который действует в некоторых странах, например, в Великобритании) имеет два перехода [КРАСНЫЙ к ЖЕЛТЫМ, затем ЖЕЛТЫЙ к ЗЕЛЕНОМУ] вместо перехода [КРАСНЫЙ к ЗЕЛЕНОМУ].

dodgy_coder
источник