《火球——UML大战需求分析》(第1章 大话UML)——1.1 UML基础知识扫盲

说明:

《火球——UML大战需求分析》是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张。欢迎你按文章的序号顺序阅读,谢谢!本书已经在各大网上书城及书店销售,欢迎你的关注。

------------------------------------------------------------------------------------------------------------------------------

 

 

第1章 大话UML

 

摘要:你只需要阅读完本章,就能从宏观上掌握UML的知识,在你的脑袋中形成一张UML的蓝图。你能全面了解UML的基本知识,UML的各种图的用途和概况,你能和实际工作遇到的问题联系起来,帮助你进一步规划下一步的学习。

1.1 UML基础知识扫盲

UML这三个字母的全称是Unified Modeling Language,直接翻译就是统一建模语言,简单地说就是一种有特殊用途的语言。
你可能会问:这明明是一种图形,为什么说是语言呢?伟大的汉字还不是从图形(象形文字)开始的吗?语言是包括文字和图形的!其实有很多内容文字是无法表达的,你见过建筑设计图纸吗?里面还不是很多图形,光用文字能表达清楚建筑设计吗?在建筑界,有一套标准来描述设计,同样道理,在软件开发界,我们也需要一套标准来帮助我们做好软件开发的工作。UML就是其中的一种标准,注意这可不是唯一标准,只是UML是大家比较推崇的一种标准而已,说不定以后有一个更好的标准可能会取代她呢!UML并不是强制性标准,没有法律规定你在软件开发中一定要用UML,不能用其它的,我们的目标是善用包括UML在内的各种标准,来提高我们软件开发的水平。
UML由1.0版发展到1.1、1.2、...,到现在的2.0、2.x,本书将会以2.x版本为基础开展讨论。网络上、书籍、还有各种UML工具软件,各自基于的UML版本可能会不一样,大家在学习过程中可能会有一些困惑,不过没关系,本课程在某些关键地方会描述1.x与2.x的差异。
UML有什么用?
有很多人认为,UML的主要用途就是软件设计!也有人认为,如果你不是开发人员,是难以理解UML的。
然而我第一次在实际工作中应用UML的却不是软件设计,而是软件需求分析!当时我们和客户面对面沟通调研需求的时候,直接用类图顺序图活动图用例图等UML。我们并没有因此和客户无法沟通,反而是沟通得更加顺畅。客户在我们的引导下,很快就会读懂这些UML图,因为UML图,让我们和客户的沟通效率和效果更好!你可能觉得很神奇,在后续章节中,我将会为你逐一揭开神奇背后的“秘密”。
UML可帮助我们做软件需求分析和软件设计的工作,在我工作中大概各占了50%的比例,当然在你的实际工作中不一定是这样的比例。UML会让你的需求分析或者软件设计工作更上一层楼,本书将会介绍UML在需求分析方面的最佳实践
告诉你一个秘密,UML应用于软件需求分析时,其学习门槛将会大大降低!语法复杂度会降低,而且你基本不需要掌握软件开发的知识。只要你对软件需求分析感兴趣,认真学习和应用UML,就很有机会成为软件需求分析高手。
UML的分类

UML有很多种图,大体可以分为两类:
结构型的图(Structure Diagram
类图(Class Diagram)
对象图(Object Diagram)
构件图(Component Diagram)
部署图(Deployment Diagram)
包图(Package Diagram)
行为型的图(Behavior Diagram)
活动图(Activity Diagram)
状态机图(State Machine Diagram)
顺序图(Sequence Diagram)
通信图(Communication Diagram)
用例图(Use Case Diagram)
时序图(Timing Diagram)
本书所描述的UML的各种图的名字,以上述的为准。

UML各种图的中文译名,因为翻译的原因可能会有所不一样,如:Sequence Diagram和Timing Diagram有时候都会被译成“时序图”,这是最让人困扰的地方!Sequence Diagram 除了被译为顺序图,还有序列图的译法。
中国软件行业协会(CSIA)与日本UML建模推进协会(UMTP)共同在中国推动的UML专家认证,两个协会共同颁发认证证书、两国互认,CSIA与UMTP共同推出了UML中文术语标准,该标准全称为:CSIA-UMTP UML中文术语标准v1.0(本书后文将会简称为UML中文术语标准)。本书将会遵循UML中文术语标准,并且我们会同时给出中文译名和英文原名,大家要留意看英文名字噢,这样能帮助你不会被众多的中文译名混淆。

UML图为什么会分为结构型和行为型两种呢?
顾名思义,结构型的图描述的是某种结构,这种结构在某段时间内应该是稳定的,“静态”的;而结构型的图描述的是某种行为,是“动态”的。
分析系统需求时,我们会面对很多业务概念,它们之间会有某些关系,这些内容可以看成是“静态”的,我们可以利用UML的结构性的图来分析。同时,业务会涉及大量的流程、过程等,这些内容是“动态”的,我们可以用行为型的UML图来分析。
在我们软件设计时,我们需要考虑需要那些类、哪些构件、系统最后怎样部署等,这些内容可以看成是“静态”的,我们可以利用UML的结构型的图来设计。同时,我们也需要考虑软件如何和用户交互,类、构件、模块之间如何联系等“动态”内容,我们可以利用行为型的图来设计。
所谓“静态”和“动态”不是绝对的,下文我们将会进一步介绍结构型的UML和行为型的UML。通过下面的学习,你将会初步认识UML的各种图,你可能还会有很多问题,本章的主要目的是让你对UML有一个宏观的认识,带着你的问题继续阅读后面的章节吧!

 

 

 

请看下一节……



作者:张传波

创新工场创业课堂讲师

华为某团队高级顾问

《火球——UML大战需求分析》作者

www.umlonline.org 创办人

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
好的,我可以给您提供一个简单的示例代码,实现一个多人回合英雄对战游戏,具体如下: 首先,我们需要定义一个 Hero 类,它具有以下属性和方法: ```python # Hero 类 class Hero: def __init__(self, name, hp, mp, atk): self._name = name # 名称 self._hp = hp # 生命值 self._mp = mp # 魔法值 self._atk = atk # 攻击力 def attack(self, target): pass # 攻击方法,具体实现由子类实现 def use_skill(self, skill, target): pass # 使用技能方法,具体实现由子类实现 def is_alive(self): return self._hp > 0 # 判断是否还活着 ``` 然后,我们定义几个子类,分别代表不同类型的英雄,这里我们只定义两个子类: ```python # 魔法师类 class Magician(Hero): def __init__(self, name): super().__init__(name, 100, 200, 30) # 继承父类属性,并设置自己的属性 def attack(self, target): target._hp -= self._atk # 攻击目标,减少目标生命值 def use_skill(self, skill, target): if skill == 'fireball': target._hp -= 2 * self._atk # 使用火球技能,减少目标生命值2倍攻击力 self._mp -= 50 # 减少自己的魔法值 ``` ```python # 战士类 class Warrior(Hero): def __init__(self, name): super().__init__(name, 200, 50, 50) # 继承父类属性,并设置自己的属性 def attack(self, target): target._hp -= self._atk # 攻击目标,减少目标生命值 def use_skill(self, skill, target): if skill == 'charge': target._hp -= 2 * self._atk # 使用冲锋技能,减少目标生命值2倍攻击力 self._mp -= 20 # 减少自己的魔法值 ``` 接下来,我们定义一个 GameManager 类,它负责管理游戏的进行,具有以下属性和方法: ```python # GameManager 类 class GameManager: def __init__(self, heroes): self._heroes = heroes # 所有英雄列表 self._round = 1 # 回合数 self._current_hero = 0 # 当前英雄索引 def start(self): while True: print('第 %d 回合开始' % self._round) for i in range(len(self._heroes)): hero = self._heroes[i] # 获取当前英雄 if not hero.is_alive(): # 如果当前英雄已经死亡,跳过 continue print('%s 的回合' % hero._name) while True: action = input('请选择行动:1.攻击 2.使用技能 3.结束回合') if action == '1': target = input('请选择攻击目标:') target_hero = self._heroes[int(target)] hero.attack(target_hero) break elif action == '2': skill = input('请选择技能:') target = input('请选择技能目标:') target_hero = self._heroes[int(target)] hero.use_skill(skill, target_hero) break elif action == '3': break if self.check_win(): # 检查是否有英雄死亡 print('游戏结束') return self._current_hero = (self._current_hero + 1) % len(self._heroes) # 轮换英雄 self._round += 1 # 回合数加1 def check_win(self): alive_heroes = [hero for hero in self._heroes if hero.is_alive()] # 获取所有还活着的英雄 if len(alive_heroes) == 1: # 如果只有一个英雄还活着,游戏结束 print('%s 获胜' % alive_heroes[0]._name) return True return False ``` 最后,我们可以创建若干个英雄对象,然后将它们添加到一个列表中,然后创建一个 GameManager 对象并传入这个英雄列表,然后调用 start 方法开始游戏: ```python magician = Magician('魔法师') warrior = Warrior('战士') heroes = [magician, warrior] game_manager = GameManager(heroes) game_manager.start() ``` 这样,我们就完成了一个简单的多人回合英雄对战游戏的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张传波

打赏的朋友很帅噢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值