PHP UML

WBOY
リリース: 2016-06-23 14:37:15
オリジナル
1393 人が閲覧しました

PHP と UML のクラス図: PHP と UML のクラス図

2007-11-01 22:51

この短い記事は、PHP を使用して UML を説明する (またはその逆) と言えます。 ) はイノベーションです。この記事を通じて、www.phppatterns.com という優れたサイトも発見しました。各 UML 用語の翻訳は、私が読んでいる書籍「UML ユーザー ガイド (統一モデリング言語ユーザー ガイド)」から引用しています。

UML (統一モデリング言語) は、図を通じてソフトウェアを表現するためのメカニズムです。基本的に、絵を描くことでプログラムを設計でき、対応するツールが利用可能な場合は、絵から直接コードを生成することもできます。この記事では、UML クラス図を使用して PHP コードがどのように表現されるかを見ていきます。

UML の知識がすでにあることを前提として、直接開始し、例としていくつかの PHP コードとそれに対応する UML 表現をリストします。しかし、これはクラス図の完全な分析ではありません。

まだ UML に慣れていない場合は、読み始める前にいくつかの知識を追加してください。いくつかのリソースを収集し、この記事の最後にリストしました。

[継承関係]

PHP キーワード extends を使用すると、あるクラス (サブクラス) が別のクラス (親クラス) から継承できます。

<?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 プロパティにアクセスします。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート