2

私は小さなPHPプロジェクト(約3000行)を持っており、使用図、シーケンス図、状態図、おそらくクラス図から始めて、その基本的なUMLモデルを作成し、コラボレーション図で拡張する必要があります。

私はUMLモデリングに不慣れであり、逆ではなく実装からモデルを作成するのはこれが初めてです(リバースエンジニアリングに興味がない限り、あまり有用ではありませんが、それは割り当てです)

さて、私はこの問題にどのように取り組むべきですか?一部のUMLツールは、プロジェクトにOO実装がある場合、私の生活をかなり楽にすることができますが、そうではないので、プロジェクトをOOとして書き直す必要があるかどうか、およびその方法を考えています(つまり、いくつかの標準的な基本がありますか?ガイドラインまたは手順に従う必要がありますか?)、またはプロジェクトのモデルをそのまま作成する必要がある場合(その場合、どのモデリングツールが最適か)。

また、私のプロジェクトはEclipse IDEで書かれていますが、このUMLモデリングタスクを支援するプラグインを誰かが知っていますか?

4

2 に答える 2

5

止まる

以前にオブジェクト指向プログラミングで作業したことがありますか?

OOモデリング手法を使用しましたか?

PHPファイルに名前空間または関数プレフィックス( "(" mylib.php "、" function mylib_dosomething(){...} ")")を使用していますか?

とても速くUMLにジャンプしないでください。UMLは、頭の中にあるもののドキュメントを作成することです。

最初に、Webサイトで何をするのかを考え、後で、新しいWebサイトがどのように機能するかを文書化してモデル化する必要があります。

UMLは素晴らしいツールですが、頭の中にあるデザインが混乱していると、ドキュメントが混乱することになります。

動作しているWebサイトがあり、それを置き換えたいと考えています。主な方法は2つあります。

(1)最初から始める:

OOの経験があり、古いサイトを忘れて機能し続け、OOまたはこのための既存のフレームワークのいくつかを使用して「スクラッチ」から新しいWebサイトを開始できる場合。

(2)リファクタリング

または、現在のWebサイトを維持し、段階的にOOに移行する必要があります。?「リファクタリング」としても知られています。

メインプログラムまたはメインphpファイルは大きなオブジェクト(プログラム)ファイルであり、各ライブラリファイルもオブジェクトであると考えることから始めることができます。

例:

あなたがいくつかのphpファイルを持っていると仮定しましょう。一部のファイルは、ページのメインファイルです。一部のファイルはページファイルに含まれ、繰り返されます。その他は、機能のみを備えた「ライブラリ」ファイルです。


<?php
// "indexfuncs1.php"

// this is an auxiliary file for "index.php",
// and has some free procedural code.

echo "indexfuncs1.php: dosomething()";

?>

<?php
// "funcslib.php"

// this is an library file,
// and has only functions and constants,

define ("ANYCONST", "Hello World");

function HelloWorld()
{
  echo ANYCONST;
}

?>

<?php
// "index.php"

// only declarations, doesn't do anything, by itself
//include("funcslib.php");
//require("funcslib.php");
//require_once("funcslib.php");
include_once("funcslib.php");

// this code is in other file, and its executed
include("indexfuncs1.php");

echo "index.php: Hello World";
HelloWorld();

// this code is in other file, and its executed
include("indexfuncs1.php");

?>

そして、それらをこれに変え始めます:

<?php
// "indexfuncs1.php"

// this is an auxiliary file for "index.php",
// and has some free procedural code.

function indexfuncs1_dosomething()
{
  echo "indexfuncs1.php: dosomething()";
}

?>

<?php
// "funcslib.php"

// this is an library file,
// and has only functions and constants,

define ("funcslib_ANYCONST", "Hello World");

function funcslib_HelloWorld()
{
  echo funcslib_ANYCONST;
}

?>

<?php
// "index.php"

// only declarations, doesn't do anything, by itself
//include("funcslib.php");
//require("funcslib.php");
//require_once("funcslib.php");
include_once("funcslib.php");

function index_main()
{
  // this code is in other file, and its executed
  indexfuncs1_dosomething();

  echo "index.php: Hello World";

  funcslib_HelloWorld();

  // this code is in other file, and its executed
  indexfuncs1_dosomething();    
}

?>

そして、まだOOはありません。なぜなら、その中間ステップだからです。

Lets start by transform each web page into a single class, without inheritance, without parent classes.

<?php
// "indexfuncs1.php"

// this is an auxiliary file for "index.php",
// and the free procedural code have become a class.

class indexfuncs1 {
    function dosomething()
    {
        echo "indexfuncs1.php: dosomething()";      
    } // function dosomething()
} // class IndexPage    

?>


<?php
// "index.php"

// only declarations, doesn't do anything, by itself
//include("funcslib.php");
//require("funcslib.php");
//require_once("funcslib.php");
include_once("funcslib.php");

class IndexPage {
    function main()
    {
      $myAux = new indexfuncs1();

      // this code is in other file, and its executed
      $myAux->dosomething();

      echo "index.php: Hello World";

      funcslib_HelloWorld();

      // this code is in other file, and its executed
      $myAux->dosomething();
    } // function main()
} // class IndexPage

function index_main()
{
    $myPage = new IndexPage();
    $myPage->main();
} // function index_main(...)

// --> the only allowed global procedural code:
index_main();

?>

(もっと来る)。

于 2011-12-03T16:56:14.607 に答える
2

Eclipse で UML をモデリングするには、Eclipse Modeling Tools (MDT)を参照してください。

于 2011-12-03T11:31:47.750 に答える