我有一个小的PHP项目(大约3000行),我需要制作一个BASIC UML模型,从用例图,序列图和状态图开始,可能是类图,可能扩展它与协作图。
我是UML建模的新手,这是我第一次从实现中创建模型,而不是相反(除非你进入逆向工程,否则不是很有用,但无论如何,这是一项任务)
现在,我应该如何处理这个问题?如果我的项目有一个面向对象的实现,一些UML工具可以使我的生活变得非常容易,但事实并非如此,所以我想知道我是否应该将我的项目重写为面向对象以及如何做到这一点(我的意思是,是否有一些标准的基本指导方针或程序我应该遵循?),或者如果我应该只是使项目的模型原样(在这种情况下,哪种建模工具将是最好的)。
我的项目也是在Eclipse IDE上写的,有人知道有什么插件可以帮助我完成这个UML建模任务吗?
STOP
你以前学过面向对象编程吗?
您使用过oo建模技术吗?
您是否使用名称空间或函数前缀("("mylib.php", "function mylib_dosomething(){…}")")你的PHP文件?
不要这么快就说U.M.L。U.M.L.是制作一个文档,你脑子里有什么
你必须先考虑,你要用网站做什么,然后,记录和模拟你的新网站将如何工作。
U.M.L.是一个很棒的工具,但是,如果你脑子里的设计很混乱,那么,你的文档就会一团糟。
你有一个工作的网站,并想取代它。主要有两种方法。
(1) Start from Scratch:
如果你有使用O.O.的经验,你可以忘记你的旧网站,让它继续工作,并使用O.O.或一些现有的框架从头开始创建一个新网站。
(2)重构
或者,你想维持你目前的网站,并迁移到O.O.,一步一步来。? 这也被称为"重构"。
你可能会认为你的主程序或主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();
}
?>
现在还没有o。因为,这是一个中间步骤。
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();
?>
对于在Eclipse中建模UML,您可能想看看Eclipse建模工具(MDT)。