赞
踩
在做软件开发的过程中,UML图是必备不可的。我们在设计自己的软件UML建模时,对自己要开发的模块、构件、体系结构都有一个基本的想法,可以比较容易地绘制出UML图。但是最近在对别人的开源项目做项目分析的时候,涉及到UML的绘制让我傻眼了,因为对于别人的项目,我们只能通过一行行读代码来了解其架构,要想绘制一个较高质量的UML图难度非常大,当时就在想要是能有自动绘制UMl图的工具就好了,没想到还真有,这就是今天要介绍的主角——Enterprise Architect。
Enterprise Architect大多数用户简称EA ,是一个强大的辅助建模工具,广泛用于软件工程、业务过程管理、系统工程和其他需要复杂系统设计和分析的领域。它提供了一个综合的环境,支持从需求管理到系统设计的各种模型创建和文档编制。EA不同于普通的UML画图工具,(如VISIO),它将支撑系统开发的全过程。在需求分析阶段,系统分析与设计阶段,系统开发及部署等方面有着强大的支持,同时加上对10种编程语言的正反向工程,项目管理,文档生成,数据建模等方面。可以让系统开发中各个角色都获得最好的开发效率。
链接:https://pan.baidu.com/s/1xQ2q-_cSt_DTI3zIDvxkFw 提取码:wq83
软件图标如下:
安装好之后,我们进行一个尝试学习使用,看看效果如何。
(1)打开EA,点击左上角的图标新建项目。
(2)起一个项目名称,这里以test2为例
(3)在工程下新建一个包,点击Browser下的文件夹图标:
起一个名字后点击ok,然后会出现一个窗口。现在我们的包建好了,需要在包里添加视图,我们的类图和活动图等都是创建在视图上的。点击包右边的小图标添加视图:
(4)选择视图类型
由于我这里构建类图,就以类图为例
选择好模型之后,就可以手动绘制UML图了,在上方有工具栏,可以进行拖拽构建。
以上的功能其实Visio等工具也能实现,我们目的是解放双手,下面介绍下自动导入分析。
我们的目的是能够使得工具代码就能分析出UML图,下面详细介绍下。
首先,我们还是和前面一样,新建一个model,如果我们想导入要分析的代码,按File -> Code -> Import Source Directary的顺序操作,如下图,结果发现到如不了,这是因为我们需要先确定要分析的模型。
我们鼠标右击Model,点击Add a Moder.....
Add操作之后便会发现中间出现了很多模板,包括顺序图,包图,部署图,用例图等等,此处我们选择类图,然后点击下方的Create按钮即可。
此时,我已经创建好了类图模型,按时这个类图只是一个模板,我们需要导入自己的代码让软件分析。
还是按之前的步骤,File -> Code -> Import Source Directary,
执行之后会弹出选项框,可以选择要导入文件的路径,格式,编程语言等,此处我用python文件做测试。
我导入了“新建文件夹”,这个文件夹下面只有一个py文件,代码放在这里。可以先根据代码预测类之间关系,然后看看EA软件的效果如何。。。
- # -*- coding: utf-8 -*-
- """
- Created on Thu Jun 13 10:45:46 2024
- @author: M Q
- """
-
- class Person:
- def __init__(self, name, age):
- self.name = name
- self.age = age
-
- def get_details(self):
- return f"Name: {self.name}, Age: {self.age}"
-
- class Customer(Person):
- def __init__(self, name, age, customer_id):
- super().__init__(name, age)
- self.customer_id = customer_id
- self.accounts = []
-
- def add_account(self, account):
- self.accounts.append(account)
-
- def get_accounts(self):
- return [account.get_account_info() for account in self.accounts]
-
- class Account:
- def __init__(self, account_number, balance=0.0):
- self.account_number = account_number
- self.balance = balance
-
- def deposit(self, amount):
- self.balance += amount
-
- def withdraw(self, amount):
- if amount <= self.balance:
- self.balance -= amount
- else:
- print("Insufficient funds")
-
- def get_account_info(self):
- return f"Account Number: {self.account_number}, Balance: {self.balance:.2f}"
-
- class SavingsAccount(Account):
- def __init__(self, account_number, balance=0.0, interest_rate=0.01):
- super().__init__(account_number, balance)
- self.interest_rate = interest_rate
-
- def apply_interest(self):
- self.balance += self.balance * self.interest_rate
-
- class Bank:
- def __init__(self, name):
- self.name = name
- self.customers = []
-
- def add_customer(self, customer):
- self.customers.append(customer)
-
- def get_customers(self):
- return [customer.get_details() for customer in self.customers]
-
- if __name__ == "__main__":
- # Create a bank
- bank = Bank("MyBank")
-
- # Create a customer
- customer1 = Customer("John Doe", 30, "C123")
-
- # Create accounts for the customer
- savings_account = SavingsAccount("SA001", 1000.0, 0.02)
- checking_account = Account("CA001", 500.0)
-
- # Add accounts to the customer
- customer1.add_account(savings_account)
- customer1.add_account(checking_account)
-
- # Add customer to the bank
- bank.add_customer(customer1)
-
- # Apply interest to the savings account
- savings_account.apply_interest()
-
- # Print customer details and their accounts
- print("Bank Customers:")
- for customer in bank.get_customers():
- print(customer)
- for account_info in customer1.get_accounts():
- print(account_info)
下面就是这段代码对应的类图,很清晰的描述出来了。
我在演化课上测试了Lesin/ob-reposyncer项目的src,其中一部分类图如下:
看起来还是有点恐怖的,如果要人手工绘制可能会有疏忽,工作量也非常大。但用EA就能很好的解决,我想这就是软件的作用以及它带给我们的便利之处,当然,我们对它的结果也是参考作用,取其精华,弃其糟粕!
我对EA的了解还很少,它的大部分功能还值得探索,我们要牢记那句话——工欲善其事,必先利其器!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。