この短い記事はよく書かれています。PHP を使用して UML を説明することは革新的であると言えます。この記事を通じて、www.phppatterns.com という優れた Web サイトも見つけました。各 UML 用語の翻訳は、私が読んでいる書籍「UML ユーザー ガイド (統一モデリング言語ユーザー ガイド)」から引用しています。
UML (Unified Modeling Language、統一モデリング言語) は、ソフトウェアを図で表現するためのメカニズムです。基本的に、絵を描くことでプログラムを設計でき、対応するツールが利用可能な場合は、絵から直接コードを生成することもできます。この記事では、UML クラス図を使用して PHP コードがどのように表現されるかを見ていきます。
UML の知識がすでにあることを前提として、直接開始し、例としていくつかの PHP コードとそれに対応する UML 表現をリストします。ただし、これはクラス図の完全な分析ではありません。
まだ UML に慣れていない場合は、読み始める前にいくつかの知識を追加してください。いくつかのリソースを収集し、この記事の最後にリストしました。
【継承関係】
PHP キーワード extends により、あるクラス (サブクラス) が別のクラス (親クラス) から継承することができます。
class Senior {
}
class Junior extends Senior {
}
?>
UML 表現は次のとおりです。
三角形は親上にあることに注意してください。クラス側。
[関連付け]
関連付けは、関係はありませんが、相互にアクセスする必要がある 2 つのクラス間で発生します。たとえば、モデルとビューでは、表示用のデータを提供するためにモデルが必要です。関連にはいくつかの異なるタイプがあります:
*Aggregation* 集約
集約 (集約) は、1 つのクラス (次の例では Model) が別のクラス (次の例では Dao) にアクセスするときに、2 番目のクラス (Dao) が外部 ($dao) でインスタンス化されています。最初のオブジェクト ($model) が「消滅」しても、2 番目のオブジェクト ($dao) は依然として「生存」し続けます。これは、多くのオブジェクトに渡される可能性があるデータ アクセス オブジェクト (データ アクセス オブジェクト) に関しては一般的であり、データ アクセス オブジェクトが「死亡」した場合でも、これらのオブジェクトは依然として「生存」しています。
このようにすると、通常、最初のクラス (Model) が 2 番目のクラス (Dao) の一部を制御することが説明されます。
例:
class Dao {
function getSomething() {
}
}
class Model {
var $dao) {
$this- > ;dao=& $dao;
}
関数 doSomething () {
$this->dao->getSomething();
}
$dao=新しい Dao;
$model=新しいモデル$dao);
$model->doSomething();
は、UML では次のように表されます:
コントロール クラス側にあります。
*Composition* 組み合わせ
Composition (Composition) は、あるクラス (例では View) が別のクラス (例では LinkWidget) をインスタンス化するときに発生します。そのため、前者 (View) が「ハング」し、Ther() も「終わった」状態。
言い換えれば、第 1 クラスは第 2 クラスのすべてを制御します。
これは PHP の例です:
class LinkWidget {
function Display () {
}
}
class View {
var $linkWidget;
function View () {
$this->linkWidget=new LinkWidget;
}
function renderPage () {
$this->page=$this->linkWidget->display()
}
}
?>
は、UML では次の図で表されます。
実線のひし形はコントロール クラス側にあります。
[メッセージ]
メッセージ (メッセージ) は、クラス (例では View) がその (HtmlUtils) インスタンスを制御せずに別のクラス (例では HtmlUtils) と「通信」するときに発生します。これらのクラス間の関係も関連付けです。
通常、PHP で演算子 :: が使用されているときに発生します。例:
注釈: このメソッドは、C++ の HtmlUtils クラスのメンバー関数 unHtmlEntities() が静的である場合と似ていると思います。そのため、HtmlUtils をインスタンス化する必要がなく、「クラス名」を直接使用できます。 ::メンバー関数名」メソッド(HtmlUtils::unHtmlEntities())が呼び出されます。 <?php
htmlutils($ str){$ trans_tbl = get_html_translation_table(html_entities);
} classビュー{
$ text = htmlutils :: unhtmlentities($ text)}}
> from View To HtmlUtils (一方向送信)
同様に、メッセージも両方向に送信できます。
class Debug {
function display () {
echo ($this->errorMsg)
}
}
class SomeClass {
var $errorMsg='これはエラー メッセージです'; function someFunction () {
if ( DEBUG == 1 ) {
Debug::display()
}
}
}
define ('DEBUG',1);$someClass= &new SomeClass;
$someClass->someFunction();
[出力メッセージ: 「これはエラーメッセージです」]
ここで SomeClass は Debug にメッセージを送信します。 SomeClass の $errorMsg 属性が変更されました。
[リソース]
オブジェクト管理グループによる UML の紹介
Posideon UML - UML ダイアグラムを描画し、Java を生成するためのツール (残念ながら PHP はありません)。オープン ソース プロジェクトである Argo UML に基づいたコミュニティ エディションは無料で使用できます。
UML のオブジェクト メンター
UML リファレンス カード