PHP と UML のクラス図: PHP と UML のクラス図
2007-11-01 22:51
この短い記事は、PHP を使用して UML を説明する (またはその逆) と言えます。 ) はイノベーションです。この記事を通じて、www.phppatterns.com という優れたサイトも発見しました。各 UML 用語の翻訳は、私が読んでいる書籍「UML ユーザー ガイド (統一モデリング言語ユーザー ガイド)」から引用しています。 <?php class Senior { } class Junior extends Senior { } ?> ログイン後にコピー UML 表現は次のとおりです: 三角形が親クラス側にあることに注意してください。 [関連付け] 関連はありませんが、相互にアクセスする必要がある 2 つのクラス間で発生します。たとえば、モデルとビューでは、表示用のデータを提供するためにモデルが必要です。関連にはいくつかの異なるタイプがあります: *集約* 集約 集約 (集約) は、1 つのクラス (次の例では Model) が別のクラス (次の例では Dao) にアクセスするときに、2 番目のクラス (Dao) が外部 ($dao) でインスタンス化されています。最初のオブジェクト ($model) が「消滅」しても、2 番目のオブジェクト ($dao) は依然として「生存」し続けます。これは、多くのオブジェクトに渡される可能性があるデータ アクセス オブジェクト (データ アクセス オブジェクト) に関しては一般的であり、データ アクセス オブジェクトが「死亡」した場合でも、これらのオブジェクトは依然として「生存」しています。 この方法は、通常、最初のクラス (Model) が 2 番目のクラス (Dao) の一部を制御することを説明します。 例: <?php class Dao { function getSomething() { } } class Model { var $dao; function Model (& $dao) { $this->dao=& $dao; } function doSomething () { $this->dao->getSomething(); } } $dao=new Dao; $model=new Model($dao); $model->doSomething(); ?> ログイン後にコピー は、UML では次のように表現されます: 中空のひし形はコントロール クラス側にあります。 *合成* 組み合わせ 合成は、1 つのクラス (例では View) が別のクラス (例では LinkWidget) をインスタンス化するときに発生します。そのため、前者 (View) が「ハング」() した場合も「終了」状況に従います。 言い換えれば、第 1 クラスは第 2 クラスのすべてを制御します。 PHP での例を次に示します。 <?php class LinkWidget { function Display () { } } class View { var $linkWidget; var $page; 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 class HtmlUtils { function unHtmlEntities ($str) { $trans_tbl = get_html_translation_table (HTML_ENTITIES); $trans_tbl = array_flip ($trans_tbl); return strtr ($str, $trans_tbl); } } class View { function renderPage { $text=HtmlUtils::unHtmlEntities($text); } } ?> ログイン後にコピー これは次のように表されます: メッセージは View から HtmlUtils に送信されます (一方向の送信) 同様に、メッセージは両方向に送信することもできます。 <?php class Debug { function display () { echo ($this->errorMsg); } } class SomeClass { var $errorMsg='This is an error message'; function someFunction () { if ( DEBUG == 1 ) { Debug::display(); } } } define ('DEBUG',1); $someClass= &new SomeClass; $someClass->someFunction(); ?> ログイン後にコピー [出力メッセージ: 「これはエラー メッセージです」] ここで、SomeClass は Debug にメッセージを送信し、Debug は SomeClass の $errorMsg プロパティにアクセスします。 |