「状態」の定義


15

状態変数や状態マシンなどの「状態」を新しい(以前は非)プログラマーに定義する良い方法は何ですか?この概念がソフトウェアの作成に役立つ理由を説明する良い方法は何ですか?状態の概念は、プログラミングコースや書籍の開始時に一般的に明示的に教えられていますか?

回答:


5

何かを覚える必要がある場合は、「状態」が必要です。関数(「メソッド」などではない)は、理想的には入力のみに依存します。入力が同じであっても、答えが時間とともに変化する可能性のある質問をする場合、答えの違いを覚えておく必要がありますか?そうしないと、他の要素が変更されていないため、別の答えを出すことができません(答えは時間に直接依存しないと仮定しましょう)。

覚えておく必要のある「もの/情報」は「状態」と呼ばれます。

(この「状態」は時間の経過とともに変化する必要はありません。基本的には「何かを覚えている/知っている」と言う方法です)


1
プログラマーでない人にもわかりやすいと言い換えれば、これが最良の答えだと思います。説明:すべてのアクティビティは物や情報を処理します。これは次の3つの方法で発生します。1)アクティビティは何かを取得使用、または読み取ります。その入力。2)何かを生成または書き込む場合があります。その出力。3)進行中に、何かを保持保持記憶保存できる:その状態。ほとんどのコンピュータープログラムでは、すべての入力、出力、および状態は情報で構成されますが、他の種類のアクティビティ(調理など)では、通常、物理オブジェクトも含まれます。
reinierpost

8

ウィキペディアから:

状態は通常、システムまたはエンティティの現在の状態を指します...

これは、コンピューティングコンテキストでの意味とほぼ同じです。オブジェクトまたはシステムの状態を定義するデータです。

「状態」の意味は、プログラミングに固有のものではありません。見たところどこにでも「状態」の例があります。テレビはオフです。コーヒーは熱いです。スニーカーはa)青です。b)臭い; c)片付けない。d)かなり使い古されている。プログラミングの意味での「状態」は、変数、オブジェクト、スレッド、データベース、ファイルシステムなど、扱うオブジェクトに適用することを除いて、プログラミング以外の意味での「状態」とまったく同じです。それを説明するには、馴染みのある用語で説明してください。外国の技術的な概念にする必要はありません。

クロックは、いくつかの状態を持つ単純なシステムの良い例です。クロックは、実行中または非実行中の場合があり、実際の時刻に対応する場合と対応しない場合があります。それらが変数のようなものであり、クロックの状態を変更すると他の物にどのように影響するかを確認するのは非常に簡単です。

「ドアは赤い」という声明のようなステートレスなものと比較してください。ステートメント自体には状態がありません。ドアが赤であることは事実かもしれませんが、ステートメント自体には状態が含まれていません。ドアをペイントすると、陳述の真実が変わる可能性がありますが、陳述自体は決して変わりません。同様に、42のような数値には状態がありません。42は42であり、変更できるものはありません。

変数には状態があり、値にはありません。


1
@ hotpaw2「状態」の意味はプログラミングに固有のものではありません。「状態」の一例であり、文字通りどこでもあなたが見ては。テレビはオフです。コーヒーは熱いです。スニーカーはa)青です。b)臭い; c)片付けない。d)かなり使い古されている。我々は我々が扱うことをオブジェクトに適用以外のプログラミングの意味での「状態」は、単に非プログラミングの意味での「状態」と同じである:変数、オブジェクト、スレッド、データベース、ファイルシステムなど
カレブ

1
それでは、具体的な例を使用してプログラミングの学生に説明しますか?良いアイデアのようです。プログラムの状態を理解している人に効果的に伝わりますか?
hotpaw2

2
@ hotpaw2コメントを答えに移動し、少し拡張しました。理解に関しては、初心者のアブストラクトの「状態」に集中しすぎないことが最善だと思います。より一般的なパターンを実際に認識する前に、ほとんどの人は何かの具体的な例を必要とします。
カレブ

1
「コーヒーが熱い」がステートフルであるが、「ドアが赤い」がステートレスである理由は明らかではありませんか?対照的に、「コーヒーは黒」はステートレスであり、「ドアは暑い」はステートフルであることを意味しますか?
アダムヒューズ

1
@AdamHughes引用符を使用した場所を確認します。具体的には、コーヒーについての説明ではなく、実際のコーヒーに言及しているため、コーヒーについて話す際に引用符を使用しませんでした。ポイントは、変数と値の違いを説明することです。それはAなど、開放または閉鎖、赤や青、緑、熱いまたは冷たいかもしれません:私の家上の実際のドアが状態を持っているの文その状態を示すことができ、ドア程度が、文自体は不変のものです。
カレブ

1

状態は、プログラムが何らかのタスクを達成するために操作する情報です。プログラムのランタイム全体で変更または操作されるのは、データまたは情報です。ある時点でのプログラムの「状態」とは、プログラムが現在実行している次のステップに進むために現在調べている、または分析しているすべてのデータのスナップショットを指します。

私の大学はSchemeで始まったので、ステートレスモデルでプログラミングを始めました。その後、Cに切り替えて、状態が何であるか、なぜそれが有用であるのか、そしてそれが物事を潜在的に非常に複雑にするのかについて非常に明確にしました。したがって、一部の大学は確かに州について話しますが、必ずしもすべてではありません


1

[緑]、[黄]、[赤]の3つの状態のいずれかにある信号機のアナロジーを使用できます。一度に1つの状態でなければなりません。信号機は、モデル化されている実際の状態マシンです。通常、状態は[緑から黄]、[黄から赤]、[赤から緑]の順に遷移します。

ここに画像の説明を入力してください

別の状態遷移(英国など一部の国で有効)には、[赤から緑]への遷移の代わりに、[赤から黄へ、次に黄から緑への2つの遷移があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.