web-dev-qa-db-ja.com

「行動」の定義は?

ソフトウェアエンジニアが「状態」( 「状態」の定義 )とは対照的に「動作」について話すとき、正確に何を意味しますか?

8
st88

答えには複数の層があります。

技術レベルでは、stateはオブジェクトのインスタンス変数であり、behaviorはメソッドです。これらはどちらも、オブジェクトのグループやシステム全体など、他の粒度単位に拡張できます。コンテキストから明確にする必要があります。

セマンティック(「意味」)レベルでは、特にオブジェクト指向の場合、どちらにも追加の制約があります。すべてのメソッドが「実際の」動作を構成するわけではありません。たとえば、ゲッター/セッターメソッドは動作ではありません。問題のあるドメインでは何も意味しないからです。 Behaviorは、実際のbehaviorになるために、何らかの形で要件に直接接続する必要があります。

追加の意味の層があるかもしれません。たとえば、ドメイン駆動設計のコンテキストでは、メソッドが要件の語彙(つまり、ユビキタス言語)とさらに厳密な関係を持つことを期待します。

多くのプロジェクトが技術レベルだけで解決すること、そしてドメイン駆動設計のコンテキストでさえ、多くはオブジェクトのセッター/ゲッターなどの無意味なメソッドで完全に問題がなく、まだ「振る舞い」(または「責任」について話していることを指摘する価値があります")何らかの形で。これは問題を多少混乱させるかもしれません。

5

行動とは意思決定です。

状態は記憶されている決定です。

OOP人々が行動について話すとき、彼らが意味することは、ビジネスルールが変更されるたびに変更されなければならないコードベースのねばねばした粘着性のある部分です。状態ではなく、これは通常、システムや言語が私たちにそれを要求するために主に存在する乾燥した構造セルモニアルコード。

しかし、行動と状態を対比するつもりなら、違いは頭の中にあることを認めます。 コードとデータは同じものです 。これはハッカーが悪用するのが大好きなものです。私たちは彼らのデータを受け入れ、彼らはそれをコードのように扱う方法を見つけ出します。

行動は、システムが何をしたいかについての私たちの心の構成要素です。動作コードは、その理想に焦点を当てたコードです。それは幻想ですが、私たちがそれを言うときに私たちが想像しているものです。状態は、すでに行われたことの結果です。これは、今後の決定に使用される可能性があります。私たちはそれを決定を下すとは考えていません。しかし、繰り返しになりますが、この区別はすべて頭の中にあります。本当に、コードかデータか、振る舞いか状態か、それはすべて実際には単なる数字です。

しかし、それが意味のない区別であるという意味ではありません。コンピュータは違いを気にしないかもしれませんが、人間は違います。違いは意図に由来します。これらのアイデアを分離して、予想される動作を明確にすることができます。

13
candied_orange

これは興味深い質問だと思います。質問することすら気づいていない人がたくさんいます。

一般的なソフトウェアの観点から、私はそれを次のように見たいと思います:

動作は状態を駆動し、状態は動作を駆動する可能性があります

特定のアクションが特定のフローの実行をトリガーできるため、双方向の関係です。一部のフロー内では、特定のアクションをトリガーできます。

したがって、次のようなアクションを実行すると、

送信ボタンをクリックしてフォームを送信します。フォームが完全または不完全な場合、警告がトリガーされる場合、電子メールが送信される場合、DBレコードが作成または更新される場合など、さまざまなことが起こります。

一方、これらの各アクションは、新しいアクションの実行をトリガーする可能性があります。したがって、これは明らかに双方向の関係です。

より多くのOOの観点から、たとえば、オブジェクトDogは、eatTreat()などのアクションを実行できるとしましょう。

犬が食べるときは、ビスケットの量を1つ減らすために、TreatSupplierクラスを内部で更新する必要がある場合があります。

ビスケットカウントが0に達した場合、ビスケットサプライヤーは犬が行ったアクションにより特定の状態に置かれたであったと言えます。

状態と動作の間のこの種の関係は、OO構造化システムが機能する方法の大部分を占めます。

0
Bruno Oliveira