GRASP ソフトウェア開発モデルに関する簡単な説明
あなたは優れたソフトウェア開発者ですか?グラスプってご存知ですか? GRASP ソフトウェア開発モデル (正式名は General Responsibility Assignment Software Patterns) は、有名なソフトウェア モデル GoF (Gang of Four、私たちがよく呼ぶ 23 のソフトウェア開発モデル) と同じくらい有名なもう 1 つのソフトウェア開発モデルです。ただし、GoF とは異なり、特定のソフトウェア組織構造を提案するのではなく、実際のビジネス機能をソフトウェア開発の特定のオブジェクトに抽象化するプロセスで従うべきいくつかの基本原則を提案します。これらの基本原則に従うことによってのみ、高品質のソフトウェアを開発することができます。開発したいソフトウェア プロジェクトでは、ファクトリー パターン、シングルトン パターン、オブザーバー パターンを使用する必要はありませんが、ソフトウェア開発において、現実世界のビジネス機能を特定のオブジェクトに抽象化しないことは不可能です。この観点から、ソフトウェア開発の品質を向上させるには、GoF の深い理解よりも GRASP の深い理解が重要です。しかし、GoFを紹介する記事が多く、GRASPを紹介する記事は少ないようです。このため、今回は GRASP を紹介します。 GRASPには9つの基本原則である9つのパターンが含まれています。これについては、ソフトウェア設計の第一人者であるクレイグ・ラーマンによる古典的な書籍『UML とパターン・アプリケーション』で詳しく説明されています。 GRASP は一般責任割り当てソフトウェア パターンと呼ばれます。GRASP を理解するには、なぜオブジェクトの分析および設計プロセス中に責任を割り当てる必要があるのかを理解する必要があります。
1. 責任の割り当てと責任主導の設計
ソフトウェア プロジェクトの開始時には、通常、顧客がどのような種類のソフトウェアを設計する必要があるか、ソフトウェアにどのような機能が必要かを理解するために要件分析を行う必要があります。要件分析では、現実世界で顧客が必要とするビジネス機能を理解します。多くの場合、各ビジネス機能はビジネス プロセス、つまり顧客が日常業務で完了し続けるビジネス プロセスです。同時に、ユーザーの問題の世界には、相互に関連するいくつかの事柄や事柄が存在するはずです。
ソフトウェアレビュー管理システムを例に挙げます。レビュー管理システムのビジネス要件は次のとおりです。
1.レビュー主催者はレビュー計画を作成し、リーダーに提出して承認を得た後、電子メールでレビュー担当者に通知します。
2.レビュー担当者には、レビュー オブジェクトをそれぞれレビューし、レビュー フォームに記入し、レビュー オブジェクトに関する質問を提起するように通知されます。
3.レビュー主催者はレビュー担当者の質問を要約し、レビュー会議を開催してこれらの質問について議論します。会議では、問題になった質問もあれば、問題にならなかった質問もあり、まだ確認できない質問もあった。
4.会議後、審査主催者が質問を整理して審査報告書を作成し、審査員による審査の合否の投票を行います。最後に、レビュー主催者は投票結果を要約し、レビューの結論を作成します。
5.レビューの主催者は問題の解決策を追跡します。
上記の要件の説明を通じて、レビュー主催者、レビュー計画、レビュー担当者、レビュー対象、レビューフォーム、質問、レビューレポート、レビュー結論、質問など、問題の世界全体から関連するものを見つけるのは難しくありません。たとえば、レビュー計画とレビュー担当者は 1 対多であるのに対し、レビュー報告書とレビュー結論は 1 対 1 であるなど、これらの関係を分析することは難しくありません。 RUP では、ビジネス要件はユース ケース モデル
とその記述ドキュメントのユース ケースを形成し、物事とその関係はドメイン モデルのオブジェクトを形成します。もちろん、ユース ケース モデルとドメイン モデルをどのように作成するかは範囲を超えています。この記事に興味があれば、友達は関連記事を読むことができます。 ドメイン モデル内のオブジェクトは、ソフトウェア開発で特定のオブジェクトを形成するための基礎になります (ソフトウェア開発でどのようなオブジェクトが形成されるかは、ソフトウェア開発の特定のニーズに従って決定され、必ずしもドメイン モデルのオブジェクトと一致する必要はありません)ドメインモデル)。ユース ケース モデルのユース ケースは、これらのオブジェクトに動作を割り当てることによって実装されます。ここで、ユース ケース モデル内の関数、または一連の動作をこれらのオブジェクトにどのように割り当てるべきかという疑問が生じます。つまり、同じタスクを完了するために、動作 A をオブジェクト X またはオブジェクト Y に割り当てることができます。動作 A の具体的な実装は、それをオブジェクト X に渡すときとオブジェクト Y に渡すときで異なりますが、どちらも動作 A のタスクを完了できます。それでは、オブジェクト X またはオブジェクト Y に渡すべきでしょうか?基本的な原則はありますか?そう、それは責任に応じてタスクを割り当てることです。理論的には、オブジェクトを任意に定義したり、オブジェクトを無意味にしたり、任意の作業を完了したりできますが、通常はそのように設計しません。通常、レビュー計画オブジェクトやレビュー担当者オブジェクトを設計するなど、オブジェクトを現実世界のオブジェクトに接続します。そして、オブジェクトを設計する際には「表現差の少なさ」を実現する必要があります。表現の差異が少ないということは、設計するオブジェクトが現実世界のオブジェクトと可能な限り一致する必要があることを意味します。たとえば、現実世界にはレビュー担当者が存在するため、「レビュー担当」というオブジェクトを設計します。同時に、レビューアー オブジェクトに割り当てる動作は、レビューアーの追加、レビューアーの変更、レビューアー情報の取得など、現実世界と可能な限り一致する必要があります。したがって、このオブジェクトにどの動作を割り当てる必要があるかは、責任によって決定する必要があります。 現実世界の分析またはドメインモデルの分析を通じてソフトウェアシステム内のオブジェクトを設計します。このとき、各オブジェクトに責任を割り当てる必要があります。オブジェクトの責任は何ですか? もちろん、それは現実世界とこのオブジェクトが完了すべきタスクの分析を通じて定義されます。たとえば、レビューアー オブジェクトの役割は、レビューアーに関連するデータにアクセスすることです。もちろん、オブジェクトの責任は必ずしも同じではありません。たとえば、レビュー計画にはレビューオブジェクトとレビュー担当者のサブ項目が含まれているため、レビューオブジェクトとレビュー担当者の情報アクセスを代理で処理できます。仕事が忙しくないときにオブジェクトを確認してください。ただし、オブジェクトの責任が多すぎてはならず (2 つまたは 3 つだけ)、関連性が高くなければなりません。たとえば、評価フォームのオブジェクトに、評価フォームを処理し、評価計画のデータも処理する責任が割り当てられている場合、これは責任独立と呼ばれます。
責任の分散は、現在、優れたソフトウェア設計が従うべき原則として認識されています。これには次の利点があります。
1.ソフトウェア開発は 1 人で行うものではないため、表現の違いが少ないため、ソフトウェアが明確に構造化され、理解しやすくなります。複数の人々が開発するソフトウェア プロジェクトでは、明確なソフトウェア構造により、開発者の誤解によって引き起こされる不要なエラーを回避できます。
2.保守と変更が簡単です。レビュー計画に問題がある場合、または修正が必要な場合は、レビュー担当者に問題がある場合はレビュー担当者に行きます。他人とは一切関係ありません。 。
このように、オブジェクト、責任、コラボレーションを考慮したオブジェクト設計とコンポーネントのアプローチを「責任駆動設計 (RDD)」と呼びます。責任駆動設計では、まずユースケースモデル、ユースケースモデルの説明、運用契約、システムシーケンス図、ドメインモデル、用語集を設計し、次に分析モデルと設計モデルを段階的に作成し、それぞれの相互作用図とクラス図を作成します。ここでは複雑なプロセスについては詳しく説明しません。ただし、非常に重要な点に注意してください。ソフトウェア システム内のオブジェクトは現実世界から抽象化されており、オブジェクトの定義に基づいて、いくつかの関連性の高いタスクが割り当てられます。ただし、これらの原則に従ったとしても、依然としてかなりの設計の柔軟性があり、同じ機能に対しても人によってそれぞれの理解に基づいて異なる設計が行われます。 GRASP は中国語で「一般責任割り当てソフトウェア パターン」と訳され、オブジェクトの分析と設計における責任割り当ての問題に関するいくつかの基本原則を提唱しています。同時に、これらの基本原則はある程度把握しておく必要があり、すべての状況に適用できるものではなく、絶対的な指標でもありません。たとえば、低結合は絶対的な非結合を意味するわけではありません。結合がなければ、ソフトウェアの凝集性を無限に高くすることはできません。そうしないと、システムが複雑になり、異常になります。
2. GRASP パターンを 1 つずつ分析
GRASP ソフトウェア デザイン パターン には 9 つのパターンが含まれています: Creator、Information Expert、Low Coupling、Controller、High Cohesion、Polymorphism、Pure Fiction、Indirect Sex、Prevent Mutation 。
以上がGRASP ソフトウェア開発モデルに関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









C言語では、以下などのエスケープシーケンスを通じて特殊文字が処理されます。\ nはラインブレークを表します。 \ tはタブ文字を意味します。 ESACEシーケンスまたは文字定数を使用して、Char C = '\ n'などの特殊文字を表します。バックスラッシュは2回逃げる必要があることに注意してください。さまざまなプラットフォームとコンパイラが異なるエスケープシーケンスを持っている場合があります。ドキュメントを参照してください。

Cでは、文字列でCharタイプが使用されます。1。単一の文字を保存します。 2。配列を使用して文字列を表し、ヌルターミネーターで終了します。 3。文字列操作関数を介して動作します。 4.キーボードから文字列を読み取りまたは出力します。

c言語のシンボルの使用方法は、算術、割り当て、条件、ロジック、ビット演算子などをカバーします。算術演算子は基本的な数学的操作に使用されます。割り当てと追加、下位、乗算、除算の割り当てには、条件操作に使用されます。ポインター、ファイル終了マーカー、および非数値値。

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

C言語では、charとwchar_tの主な違いは文字エンコードです。CharはASCIIを使用するか、ASCIIを拡張し、WCHAR_TはUnicodeを使用します。 Charは1〜2バイトを占め、WCHAR_Tは2〜4バイトを占有します。 charは英語のテキストに適しており、wchar_tは多言語テキストに適しています。 CHARは広くサポートされており、WCHAR_TはコンパイラとオペレーティングシステムがUnicodeをサポートするかどうかに依存します。 CHARの文字範囲は限られており、WCHAR_Tの文字範囲が大きく、特別な機能が算術演算に使用されます。

C言語では、charタイプの変換は、キャスト:キャスト文字を使用することにより、別のタイプに直接変換できます。自動タイプ変換:あるタイプのデータが別のタイプの値に対応できる場合、コンパイラは自動的に変換します。

Char Arrayは文字シーケンスをC言語で保存し、char array_name [size]として宣言されます。アクセス要素はサブスクリプト演算子に渡され、要素は文字列のエンドポイントを表すnullターミネーター「\ 0」で終了します。 C言語は、strlen()、strcpy()、strcat()、strcmp()など、さまざまな文字列操作関数を提供します。

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。
