没有开发基础应该怎么学习UMl

ios开发好学么,没有基础一般得学习多久?__我爱台球网
您的当前位置: >
ios开发好学么,没有基础一般得学习多久?
ios开发好学么,没有基础一般得学习多久?
感谢评语:
满意答案&LV学习前可以多看看网上的教学视频,没有基础还是找合适的机构,现在针对于这类型的培训机构有很多,听说中软卓越挺不错的,这里的课程,效果还是很不错的。*00其他答案(6)匿名网友&LV至少得半年呢,要是想学的精一些还要更长的时间哦。学这个还是挺好的 加油哦*0匿名网友没有基础基本比较难*0匿名网友&LV最少半年吧,学习首先需要的就是信心。*0匿名网友&LV这个得看灵XING了*0
最新解决问题列表
问题还没解决?点击查看更多相关“ios开发好学么,没有基础一般得学习多久?”的答案!&&&
相关文章:
相关推荐:完全没有基础,想自学编程,有什么比较好的书或者方法?还有先学什么语言比较好? | Hello world!小组 | 果壳网 科技有意思
129134人加入此小组
如题。(推荐C语言和Java的就请不要回答了……)
+ 加入我的果篮
找个会编程的男朋友...好吧,其实看书什么的意义不大,选门好玩的语言开始折腾就可以了,一般我会上网找各种例子,照模样输入到电脑里,然后随便改改参数看会出来什么不一样的东西,如果是可以画图的例子可能可以试试画个圆或者画一个方块,然后在网上找找填个色什么的...语言推荐Java,既没有C的指针,内存分配等搞得头大,又可以初步接触面向对象等一些基础知识
当初我学Java的时候就是用servlet画了个围棋棋盘...然后一点一点添加规则..最后找了个同学跑来下五子棋...后来各种happy~棋盘还可以换皮肤^_^ 哈哈...
第一步。。了解计算机的基本知识……啥是内存这样的基础。。第二步。。找一个比较容易入门的语言,都是c语言不错— —。。。虽然我是从actionscript入门的— —。。。多做后头的习题。。。了解编程的思想。。然后就可以向高阶出发— —。。。
看《计算机程序的构造和解释》,mit的计算机教材,lisp这种语言掌握与否不重要,但是里面的知识一定要掌握,会很有帮助。你不理解程序是如何构造和运行,不能理解运行时环境,即使掌握了语法,也只是个搬砖的工人。
程序员,科幻迷
推荐Python不解释
打好基础才是重点,特别是数据结构,算法,设计模式,看下操作系统,软件工程UNl等,简单了解下程序在底层究竟是怎样的运行,例如值类型与引用类型是如何在内存中存取等,假如你用C#的话看那本《你必须知道的.net》主要讲底层的,入门的话可以看《C#入门精典》第四版我看完过不错,后面的版本可能会有点厚,设计模式《大话设计模式》用C#的讲各种设计模式的有趣易懂,数据库也可以用《C#数据库入门精典》。假如java的话看下《thinking in java》不过没基础看应该会看不懂,看多几遍就可以了,这边精典来的觉得无论用什么语言都可以看下,C++的话可以看《C++primer》,as的话网上资料比较少,可以看《ActionScript3.0 CookBook 中文版》或者《Flash_ActionScript3殿堂之路》其他的话我不是很清楚。多动手做才是硬道理,找个东西做,语言只是你实现的一种工具而已,不必那么纠结,算法解决问题的方法,思想才是重要的。书籍的话可能还有其他比较好的,我就推荐些我看过的,其他的不是很清楚~
从基础开始学习多枯燥哇...像我这种就是从玩开始学...回头觉得哪不对再补基础...不过如果是应付考试就还是从头开始看吧...
我也推荐Python有点疑惑2L说的其实是不是applet
的话:看《计算机程序的构造和解释》,mit的计算机教材,lisp这种语言掌握与否不重要,但是里面的知识一定要掌握,会很有帮助。你不理解程序是如何构造和运行,不能理解运行时环境,即使掌握了语法,也只是个搬砖的工人。作为一个初一学生,表示完全看不懂。
我很希望在我初学的时候有人对我说这样的话。呵呵,当时只注意语法什么的,完全对环境,程序的构造,解释,以及很多基础知识都不清楚,结果走了很多弯路。做了很多搬砖的体力工作,后来重新学习才成为更进一步的基础。如果只是解决实现功能问题,看这些帮助不大,如果解决深层次的问题:性能,扩展,健壮性。那会有大帮助。
现阶段你还是学好英语数学,适当培养爱好比较靠谱!
5L不解释,我解释一下。。从培养兴趣的角度来说,可以做一些小东西来获取成就感对学习是最有帮助的,至于基础的数据结构、操作系统原理神马的对初一的楼主来说都太扯淡了。待入门之后,你有的是时间来学习这些。Python的类库很多,运行平台也很广,最重要的是它很易学。即使你以后不干相关工作,将其作为shell来用也会省下你很多力气。《和孩子一起学编程》这本书你可以一看。
入门快,学JAVA
- - C语言的科学和艺术。。。我觉得不错 不过貌似书里的内容有一点老。。。不过书里的思路、方法和内涵很好!
的话:作为一个初一学生,表示完全看不懂。思想比语言要重要,才初一,搬砖先
放弃吧兄弟,爱玩什么玩什么,没必要学这种伤神伤脑的东西
当然从c语言学起,可以看看谭浩强的书!
就看这个吧。 照着做完之后就能自己想接下去看什么了做不完的话么。就放弃自学吧programing
的话:推荐Python不解释那还有什么比较适合初学者的语言?
的话:别害人了,谭浩强的书会导致大脑永久性损害并彻底失去编程能力,非常危险。那就怪我没说详细吧。谭的书只是做为入门级别看的,里面讲了一些c的基础语法、语义,如果再想深入学习,可以看《C Primer Plus》,这本书已经把C讲的相当详细了,还引入了c99标准以及简单的编程分析。但是编程的灵魂是算法,要是你都晋级到编程能力方面了,你就可以学习算法了,算法的入门白皮书《算法竞赛入门经典》。这也是我暑假打算学的一本书。我是软件工程专业的,希望这些对你有帮助。
还有,永远不要觉得C过时了,C在编程方面的地位是不可撼动的。你要是想专注于编程解决问题的话,这是必学的,但如果你侧重于应用,比如网络,就可以直接java或者javascript了。c是一种结构化编程语言,也许你只用三天就可以学会所有语法语义,但是如何应用却是问题,这就是为何要学习算法了。
入门学习的话最重要是提起学习兴趣 能在每个阶段看到自己的学习成果 我建议学python闲暇时间看看名词、算法、协议
可以先看看 网易公开课里Mehran Sahami的编程方法学
适合入门的一个课程 领会一下编程思想 培养下兴趣 然后再深入学习下比较好
完全有基础的人自学怎么可能学的动C,一个seg fault就可以把人逼疯,初学还是用谢简单功能少的语言比较好,pascal就不错,接触一些基础的语法,然后换高级一点用java或者python
的话:打好基础才是重点,特别是数据结构,算法,设计模式,看下操作系统,软件工程UNl等,简单了解下程序在底层究竟是怎样的运行,例如值类型与引用类型是如何在内存中存取等,假如你用C#的话看那本《你必须知道的.net》主要讲底层的,入门的话可以看《C#入门精典》第四版我看完过不错,后面的版本可能会有点厚,设计模式《大话设计模式》用C#的讲各种设计模式的有趣易懂,数据库也可以用《C#数据库入门精典》。假如java的话看下《thinking in java》不过没基础看应该会看不懂,看多几遍就可以了,这边精典来的觉得无论用什么语言都可以看下,C++的话可以看《C++primer》,as的话网上资料比较少,可以看《ActionScript3.0 CookBook 中文版》或者《Flash_ActionScript3殿堂之路》其他的话我不是很清楚。多动手做才是硬道理,找个东西做,语言只是你实现的一种工具而已,不必那么纠结,算法解决问题的方法,思想才是重要的。书籍的话可能还有其他比较好的,我就推荐些我看过的,其他的不是很清楚~这回复我看过不止一次
先玩着培养感觉吧。反正习惯的东西不让人教坏。你也不知道啥是好啥是坏玩到上手的感觉以后再考虑 更多具体的内容。至于其他的。不解释
的话:那还有什么比较适合初学者的语言?同问,另外喜欢楼主头像,卖萌向(ˇ_ˇ)
python或者ruby吧
python或是C++
的话:python或者ruby吧这个好,一般大学里都是python起步。现在ruby因有rails, ecosystem非常好;推荐ruby起步
另,建议从interpreted language起步,毕竟可以直接在terminal/console里操作。compiled language, java之类,反应木有那么快。另,我的同事,好多喜欢用clojure和scala,都是不错的选择~
通信工程、计算机硕士
楼主初一啊!我告诉你一个又容易开始学又很炫的语言:HTML做网站用的,你学了之后就可以给你们班做一个网站了。推荐站点如果喜欢算法类(就是可以用来做数学题的那种)语言,可以学计算机竞赛中用的语言,具体是哪个我不太清楚,可以和你们学校的计算机老师联系相关的计算机竞赛培训团队。
我自己接触的三门语言:面向对象:python(很易用)函数式:Mathematica(功能强大,简洁高效,语法奇葩)过程式: C (这个。。。太头疼了)
的话:这个好,一般大学里都是python起步。现在ruby因有rails, ecosystem非常好;推荐ruby起步大学里都是谭浩强的C。。。
的话:楼主初一啊!我告诉你一个又容易开始学又很炫的语言:HTML做网站用的,你学了之后就可以给你们班做一个网站了。推荐站点如果喜欢算法类(就是可以用来做数学题的那种)语言,可以学计算机竞赛中用的语言,具体是哪个我不太清楚,可以和你们学校的计算机老师联系相关的计算机竞赛培训团队。Pascal?
游戏程序员
的话:就看这个吧。 照着做完之后就能自己想接下去看什么了做不完的话么。就放弃自学吧programinghead first 的不错,多图,好笑
同问。。很多好答案啊,mark之~
的话:看《计算机程序的构造和解释》,mit的计算机教材,lisp这种语言掌握与否不重要,但是里面的知识一定要掌握,会很有帮助。你不理解程序是如何构造和运行,不能理解运行时环境,即使掌握了语法,也只是个搬砖的工人。《计算机程序的构造和解释》相当不适合新手啊,推荐替代品《程序设计方法》,同是Scheme(lisp方言)经典教材而且手把手养成。。。
的话:推荐Python不解释
1.从python入门,(OO,各种lib Scipy etc)2.C一定是逃不过的;推荐 C Prime Plus + C Programing Language 2e3.玩C的同时,以下的书是一定要看的:(推荐看原版,E文不好的先看中文再看E文)Computer Systems: A Programmer's PerspectiveDiscrete Mathematics and Its Applications 5eIntroduction to Algorithms4.选个自己用着比较愉快的语言做小型项目5.最重要的:学好数学啊!!!
的话:作为一个初一学生,表示完全看不懂。初一??学basic吧
的话:《计算机程序的构造和解释》相当不适合新手啊,推荐替代品《程序设计方法》,同是Scheme(lisp方言)经典教材而且手把手养成。。。+1
尤其后面的部分真的不简单
Lisp 教材有计算机程序构造与解释 虽然只是一个方言。不过很纯净的语言。lambda函数很牛逼的。实用common lisp编程。还有就是land of lisp,这本没有中文版的。但是英语基础好点,还是可以啃下来的。
初一先学pascal,基本掌握了,再转c++,同时看看算法书,像刘老大的黑书之类的
为什么不要提c??为什么不要提java??lz好奇怪。。。现在通用的编程语言的语法格式大部分都是从c来的啊,面向对象思想到现在也是java最棒啊。。。c学编程思维和变成习惯。。java学习面向对象和软件开发。。能把c所有的库文件头都使用过和java的包都使用过。。你就是大师了,可以用一半月薪5000_1W+
.NET程序员
LZ 是妹子?????
本人可以提供手把手培训服务。。。。。算法 结构
c c++ c# pascal java ......... 各种科目都有哦。。。
如果是竞赛啥的一般都用的Pascal吧,个人倒是推荐Python ,可以看看a byte of python 入门
的话:这回复我看过不止一次还有在哪来看到呢?
我初一的时候学了pascal,现在很。。后悔。。。pythoon很好的入门语言。。udacity的课不错
我初二开始自学的。。老实说,是从Visual Basic开始的。并且,我毫不吝啬对Visual Basic作出正面评价。(没错,我既看过SICP,也看过CLRS,最喜欢的语言是Ruby)我将从两个方面进行阐述,分别是VisualBasic为什么好;以及C,Python为什么对初学者不友好。最后,我将给出我的建议1.Why VisualBasic?1.1 快速的得到结果,只需要少量时间学习,楼主就可以做出 (a.有趣的 b.有实用价值的 c.有图形界面的)应用程序。简单性和趣味性对初学者才是最重要的。1.2 为什么大家反对Visual Basic? 因为VB是一门被Microsoft操纵的语言,它也没有被良好设计成方便做某些实际的应用。1.3 VisualBasic只是开始,你可以通过它学一些基本概念,比如变量,数组,循环,函数。经过一些时间后,比如一个月或者两个月,就可以继续学习新的东西2.Why not C, Python, Lisp, Haskell, Ruby or some other stupid things? 2.1 老实说,这些语言或许适合一个CS专业的大学生用来入门,但楼主只是一个初一的小loli。作为一个在初中开始自学编程的人来说,我很有体会。在你完全不知道函数这个名词的数学意义的时候,为什么想要去了解curring 和 lazy evaluate是怎么回事呢?2.2 另外一个重要问题是,这些语言想要做出一个GUI程序很困难(因为实际应用中很少有人做GUI),不适合初中小朋友的好奇心3.What do I recomended as a student who tried to study programming by myself in my junior high?3.1 对于VB这个选择,我是支持的。3.2 其实还有其他选择,实际上它并不是一门编程语言,但它确实每一个21世纪的hacker都必备的一项技能:html。 html是网页的标记语言,再加上CSS就可以做出完美的网页设计。再加上javascript,你就是一个合格的前端工程师了。3.3 总之,楼主可以选择VB,也可以选择html。我更推荐后者。
(C)2017果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号&&&&
违法和不良信息举报邮箱:&&&&举报电话:On the way to hard work ...
在开始讲述UML之前还有几个重要的概念必须要理解的。这些是UML中隐含的,非常重要的概念。但这些概念是很难理解的,不会用UML的表面原因是不知道在哪里用,怎么用,本质上是没有搞懂这些概念。下面将对这些概念逐一说明:
  建模是通过对客观事物建立一种抽象的方法用以表征事物并获得对事物本身的理解,同时把这种理解概念化,将这些逻辑概念组织起来,构成一种对所观察的对象的内部结构和工作原理的便于理解的表达方式。
  下图为业务建模公式:
二、用例驱动
  用例驱动是一个非常重要的概念,或者说整个软件生产过程就是一个用例驱动。实现用例是必须要做的事情,一旦用例实现了,那么问题领域就解决了。这就是用例驱动方法的原则。
  用例驱动包括以下内容:
  。逻辑视图:系统只有一个逻辑视图,该视图以图形的方式说明关键的用例实现,包括子系统和类。
  。进程视图:系统中有一个进程视图,该视图以图形的方式说明了处理活动在系统中进程的详细组织结构,其中包括类和子系统到进程或线程中的映射。
  。部署视图:系统只有一个部署视图,该视图以图形的方式说明了处理活动在系统中的各节点的分布,包括进程和线程的物理分布。
  。实施视图:实施视图的作用是获取为实施定制的架构决策,它通常包含以下内容:
  1、列举实施模型中的所有子系统
  2、描述子系统如何组织为层次和分层次的构件图
  3、描述子系统间的导入依耐的关系图解
  实施视图的作用哉:
  1、个人团队和分包商分配实施工作,
  2、估算要开发,修改,删除的代码数量
  3、阐明大规模复用理由
  4、考虑发布策略
  以下是用例视图的图解:
三、抽象层次
  抽象层次是面向对象中极其重要又难以撑握的知识。首先,抽象层次越高,具体信息就越少,但是概括力又最强,反之概括信息越丰富,结果越确定。相反概括力就没有那么明显。从信息的表达能力上说,抽象层次越高,表达能力越丰富,越容易理解。很多使用UML的朋友都会觉得选择用例的粒度是一件很困难的事,实际上,选择用例粒度困难的本质是由于没有找准抽象层次产生的。
  抽象有两种方法,一是自顶向下,另一种是自底向上,自顶向下的方法实用于让人们从头开始认识事物。例如汽车的工作方式是从发动机,传感装置,变速器等较高层次的概念来讲就更容易明白,如果降一个层次从改动机原理来讲就不容易让人明白。如果再降一个层次从热力学与力学原理来讲就更没有人能听懂。自底向上的方式适用于在实践中改进和提高的认识。例如在实践中发现发动机的问题,并改进或提高发动机的性能或者更换新的发动机,以便提汽车的整体性能。在软件编程中主体上应采用自顶向下的方法,用少量的概念覆盖系统需求,再逐步降低抽象层次,直到编写代码。同时应当辅以自底向上的方法,通过总结在较低抽象层次的实践经验来改进较高层次的概念以提升软件的质量。
下图为统一过程一般抽象层次过程图:
  视图是UML中另一个非常重要的概念,视图用于组织UML元素,表达出模型某一方面的元素。视图的准确应用是建立好模型的一个重要因素。&视角是人们观察事物的角度,不同的人从不同角度观察到事物也不相同,视角是针对视图来说的,不同的视角展示了同样信息的不同认知角度以便于理解。一方面,从信息的展示的角度来说,恰当的视角可以让观察者更容易抓住信息的本质;另一方面,从观察者角度来说,他只会关心信息中他所感兴趣的一部份,其它的视角对他来说没有多大意义。因此在展示信息时选择适当的视角并展示给适当的观察者是十分必要的。
五、对象分析方法
  对象分析方法具有以下特性:
  。一切都是对象
  。对象是独立的
  。对象都具有原子性
  。对象都是可抽象的
  。对象都有层次性
  以下为对象分析方法图解:
切记:当明白以上这些本质后,对以后能快速理解建模有着非常重要的意义。
阅读(...) 评论()9363人阅读
日记博文(52)
软件架构与设计(26)
在80年代末至90年代中,对面向对象分析与设计方法的研究发展到一个高潮。但是,诸多流派在思想和术语上有很多不同的提法,在术语、概念上的运用也各不相同,需要一种统一的符号来描述面向对象的分析和设计活动。UML应运而生。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且有进一步的发展,最终成为大众所共同接受的标准建模语言。它融入了软件工程领域的新思想、新方法和新技术。不仅支持面向对象的分析与设计,还支持从需求分析开始的软件开发全过程。
静态结构、动态行为、模型组织、
UML视图和图
类、关联、泛化、依赖关系、实现、接口
用例、参与者、关联、扩展、包括、用例泛化
构件、接口、依赖关系、实现
节点、构件、依赖关系、位置
状态、事件、转换、动作、
状态、活动、完成转换、分叉、结合
交互、对象、消息、激活
协作、交互、协作角色、消息
模型管理视图
包、子系统、模型
约束、构造型、标记值
类元是模型中的离散概念,拥有身份、状态、行为和关系。有几种类元包括类、接口和数据类型。其他几种类元是行为概念、环境事物、执行结构的具体化。这些类元中包括用例、参与者、构件、节点和子系统。图列出了几种类元和它们的功能。元模型术语类元中包括了所有这些概念。
系统的外部用户
类代表了被建模的应用领域中的离散概念。
最重要的特性是多重性
局限于某个给定状态的类
在合作中局限于某个使用的类元
系统的一个物理组成单元
刻划行为特征的操作命名集.
对象间的异步通信
作为且有规范、实现和身份的单元的包
与外界代理交互中的实体行为说明
2、类元之间关系
类元之间的关系有关联、泛化、各种形式的依赖关系,包括实现关系和使用关系。
关系的种类
类实例之间连接的描述
两个模型元素间的关系
更概括的描述和更具体的种类间的关系,适用于继承
说明和实现间的关系
聚集和组成
当用例视图在外部用户前出现时,它捕获到系统、子系统或类的行为。它将系统功能划分成对参与者(即系统的理想用户)有用的需求。而交互功能部分被称作用例。用例使用系统与一个或多个参与者之间的一系列消息来描述系统中的交互作用。参与者可以是人,也可以是外部计算机系统和外部进程。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 用例图
交互视图描述了执行系统功能的各个角色之间相互传递消息的顺序关系。类元是对在系统内交互关系中起特定作用的一个对象的描述,这使它区别于同类的其他对象。交互视图显示了跨越多个对象的系统控制流程。交互视图可用两种图来表示:顺序图和协作图,它们各有不同的侧重点。协作图也展示对象之间的交互关系,强调交互的语境和参与交互的对象的整体组织。协作图按照空间组织布图,而顺序图按照时间顺序布图。
状态视图是一个类对象所可能经历的所有历程的模型图。状态图由对象的各个状态和连接这些状态的转换组成。状态图是对单个对象的&放大&,它说明对象所经历的状态变化。强调单个对象内状态的变化。
活动图是状态图的一个变体,用来描述执行算法的工作流程中涉及的活动。活动状态代表了一个活动:一个工作流步骤或一个操作的执行。活动图描述了一组顺序的或并发的活动。活动视图用活动图来体现。活动图很像流程图,它显示出工作步骤,判定点和分支。可用于表达一个对象的操作和一个业务过程。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 活动图
物理视图对应用自身的实现结构建模,例如系统的构件组织和建立在运行节点上的配置。这类视图提供了将系统中的类映射成物理构件和节点的机制。物理视图有两种:构件图和部署视图。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 构件图
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 部署图
&&&&&&&&&&&&&&&&&&&&&&&&&&& 包
UML提供了几种扩展机制,允许建模者在不用改变基本建模语言的情况下做一些通用的扩展。这些扩展机制已经被设计好,以便于在不需理解全部语义的情况下就可以存储和使用。由于这个原因,扩展可以作为字符串存储和使用。对不支持扩展机制的工具来说,扩展只是一个字符串,它可以作为模型的一部分被导入、存储,还可以被传递到其他工具。我们期望后端工具设计成能够处理各种扩展,这些工具会为它们需要理解的扩展定义特定的语法和语义。扩展机制包括约束、标记值和构造型。
约束是用文字表达式表示的语义限制。
&&&&&&&&&&&&&&&&&&&&&&&&&&& 约束
标记值是一对字符串&一个标记字符串和一个值字符串&存储着有关元素的一些信息。标记值可以与任何独立元素相关,包括模型元素和表达元素。标记是建模者想要记录的一些特性的名字,而值是给定元素的特性的值。例如,标记可以是author,而值是对元素负责的人的名字,如Charles Babbage。
构造型是在一个已定义的模型元素的基础上构造的一种新的模型元素。构造型的信息内容和形式与已存在的基本模型元素相同,但是含义和使用不同。例如,商业建模领域的建模者希望将商业对象和商业过程作为特殊的建模元素区别开来,这些元素的使用在特定的开发过程中是不同的。它们可以被看作特殊的类&它们有属性和操作,但是在它们与其他元素的关系上和它们的使用上有特殊的约束。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 构造型
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3778183次
积分:40149
积分:40149
排名:第85名
原创:473篇
转载:402篇
评论:1091条
(7)(13)(4)(9)(5)(7)(1)(3)(1)(3)(3)(1)(1)(1)(3)(3)(1)(2)(1)(3)(2)(1)(7)(2)(2)(2)(4)(2)(4)(7)(1)(1)(21)(15)(3)(2)(3)(1)(3)(2)(7)(10)(5)(6)(7)(12)(3)(7)(7)(15)(9)(9)(18)(21)(7)(9)(7)(8)(44)(10)(26)(5)(2)(1)(7)(12)(1)(2)(1)(3)(7)(10)(10)(2)(3)(1)(1)(1)(9)(7)(3)(7)(1)(2)(5)(3)(1)(13)(92)(103)(25)(2)(57)(26)(4)(45)UML学习入门就这一篇文章
我的图书馆
UML学习入门就这一篇文章
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,就很有机会成为软件需求分析高手。
结构型的图(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有一个宏观的认识,带着你的问题继续阅读后面的章节吧!
1.2 结构型的UML(Structure Diagram)
类图(Class Diagram)
请看下面这个类图:
图 1.1 某模具系统类图
此图截取自某模具管理系统的业务概念分析图,图中一个一个的矩形就是类,这些类之间有各种线条连接,这些线条表示类之间的关系。类图是分析业务概念的首选,类图可能是使用率最高的UML图。
再看下面这个Person类图,这时软件设计时用到的一个图:
图 1.2 Person类图
该Person类有以下属性(Attribute):Name(姓名),Sex(性别),Department(部门)等,有以下操作(Operation):Work(工作)等。类有属性和操作,但用类图分析业务模型时,往往不需要使用操作,如图1.1中的类就只有属性。
Attribute有特性、特征等译法,Operation也称作方法,但本书遵循UML中文术语标准,即Attribute为属性,Operation为操作。
对象图(Object Diagram)
一般情况下只有在软件开发中才会使用到对象图,下面的内容以开发的角度来说明对象图,如果你没有开发经验,阅读起来可能有一点难度。
图1.2中的Person类,用代码实例化如下:
Person person = new Person();
类(Class)实例化后就是对象(Object),对象person是类Person的实例,上述代码可以用对象图表示如下:
图 1.3 Person类的对象图
对象图和类图的样子很相似,对象是类的实例化,“person : Person”表示对象person是类Person的实例。对象图往往只在需要描述复杂算法时才会使用,画出来的对象图往往不会只有一个对象,该图只画了一个对象,其目的是尽量简化以便读者的理解什么是对象图。
在需求分析工作中基本上不需要使用对象图,从严谨的角度来看某些情况下应该使用对象图,但我往往还是会用类图来处理,这样更加简便而且容易理解。我们将在类图一章再次讲解对象图。
构件图(Component Diagram)
构件图也叫组件图,两个名字均符合UML中文术语标准。
一辆汽车由轮子、发动机等物理部件组成,一个软件往往也是由很多“物理部件”(如:控件、重用构件等)组成的,构件图就是用来描述软件内部物理组成的一种图。下图是某权限构件设计图:
图 1.4 某权限构件设计图
图1.4右上方有这样标志 的矩形表示一个构件,构件可以再包含构件。
软件需求分析工作中,需要用到构件图的情况不是很多,以下情况除外:
1. 待开发的系统需要与第三方的系统、原有系统、某些老系统等交互,这时可用构件图描述交互要求。
2. 客户对软件设计有某些特殊要求,这时可用构件图来描述要求。
构件图有时不会单独使用,还会和部署图一起结合使用。
部署图(Deployment Diagram)
部署图是用来描述系统如何部署、本系统与其他系统是怎样的关系的一种图,如下图:
图 1.5 某24小时便利店的管理系统部署图
图中一个个立体的矩形是部署图的“节点”,一个节点表示一个物理的设备,节点之间的线条表示节点间的物理连接关系。
大部分客户都会具备一定的IT基础环境(如具备局域网、一些服务器、某些软件平台等),软件系统需要基于当前的IT基础环境来规划,这时我们可以使用部署图来做这个规划。
分析系统的需求,不能忽略系统架构、部署、IT架构等方面的要求,我们要基于客户当前的IT基础环境,做一个最符合客户利益的规划。
要活用构件图、部署图来分析需求,需要具备一定的IT基础架构知识和软件设计知识,如果你还不具备相关知识,那么可以考虑抓紧补充相关知识。不过需求分析工作更多的还是分析业务,提炼功能性需求,这部分工作能做好是相当不容易的事情。对于技术方面的非功能性需求分析,可交由有技术背景的专业人士负责。
包图(Package Diagram)
Package有“打包”的意思,包图的主要用途是“打包”类图。用类图描述业务概念时,很多时候会因为业务类太多,而导致类图非常庞大,不利于阅读,这时可以将某些类放入“包”中,通过包图来组织业务概念图。
下图是包图的一个示例:
图 1.6 包图
图中好像文件夹样子的就是一个“包”,包之间的线条表示包之间的关系。
1.3 行为型的UML(Behavior Diagram)
活动图、状态机图、顺序图处于三种不同的角度来描述流程,是分析业务流程的三种不同利器,下面将会逐一说明。
活动图(Activity Diagram)
我们将起床到出门上班这个过程画成活动图,可能是这样的:
图 1.7 起床到出门上班的活动图
活动图中的一个圆边框框表示一个“活动”,多个活动之间的带箭头线条表示活动的先后顺序,该图只是表达了一个顺序流程,活动图还可以表达分支结构。如果你以前曾学过流程图的话,你会发现活动图和流程图很相似。活动图可能是三种能表示流程的UML图中最接近我们思维习惯的一种,下面来学习另外两种能表达流程的图。
状态机图(State Machine Diagram)
状态机图又叫状态图,但状态图这个译名并没有译出Machine的意思。
状态机图从某个物品的状态是如何变化的角度来展示流程,下图某请假条审批流程:
图 1.8 请假处理流程
整个请假审批流程是围绕“请假条”这个物体进行的,随着不同的审批阶段,请假条具备不同的状态。我们分析业务流程时会发现很多流程其实是围绕某个物品进行的,这时可考虑使用状态机图。
顺序图(Sequence Diagram)
你去餐厅吃饭,向服务员点餐到服务员送菜上来,这个过程用顺序图可表示如下:
图 1.9 点菜的顺序图
该图有三个“小人”,每个“小人”下面的文字说明(如:顾客)表示其代表的角色。角色与角色之间有一些线条链接,表示角色之间是如何交互的。该图表示的意思是:顾客向服务员点菜后,服务员将点菜信息传递给厨师,然后厨师做菜,最后再由服务员送菜给你。
点菜过程涉及几个环节,每个环节均由不同的角色来负责,如果遇到类似的情况,你可以考虑使用顺序图来分析。用顺序图来分析的好处是能清晰表达整个过程所参与的角色,角色与角色之间的关系,各角色是如何被卷入这个过程当中的。
通信图(Communication Diagram)
UML1.1时,该图英文名为Collaboration DUML2.x时,英文名为Communication
Diagram。将英文名字直接翻译,原来的英文名字可译为协作图,而新的英文名字译为通信图。
通信图是顺序图的另外一种画法,点菜的顺序图,如果用通信图来画可表示如下:
图 1.10 点菜的通信图
三个“小人”分表表示三种角色:顾客、服务员、厨师;角色之间有直线联系表示他们之间有关系;带序号的文字和箭头,表示角色之间传递的信息。
顺序图更强调先后顺序,通信图更强调相互之间的关系。我觉得顺序图实用性更好一点,比通信图能表达更多的信息,更容易读懂,在需求分析工作中我基本不会使用通信图。
用例图(Use Case Diagram)
下图是用例图的示意图:
图 1.11 用例图
用例图表达的是什么角色通过软件系统能做什么事情,我们可以使用用例图系统地表达软件系统的绝大部分需求。
时序图(Timing Diagram)
时序图也叫时间图,时序图是UML中文术语标准的说法,而时间图不是标准的说法。
时序图是表示某东西的状态随时间变化而变化的一种图,参见下图:
图 1.12 灯的开关状态随时间变化图
此图表示在0秒到30秒,灯的状态是关的,30-60秒灯的状态为开,60秒后状态为关。
在实际工作中我基本上没有试用过时间图。
下面通过这个表格来总结一下我在需求分析工作中应用各种UML图的情况:
表 1.1 各种UML图实际应用情况
上表是根据我的工作经验总结的,相信会适用于很多情况。但每个人的工作经历、情况、环境等不太一样,上表仅作参考。
1.4 如何学好UML?
UML的认识误区
误区一:认为UML主要用于软件设计。
前面的文章你可以看到,UML除了用于软件设计,还能用于需求分析,而本书就是专门来说明如何在需求分析工作中活用UML的。
误区二:客户无法理解UML,在需求分析中应用UML实际意义不大。
我还不熟悉UML时,确实也有这样的怀疑,而实际工作中发现UML恰恰成为与客户沟通的良好桥梁!UML其实不难读懂,只要稍加解释客户马上就能读懂。我在所有的项目需求分析工作中,都直接使用UML图与客户沟通,并且给客户签署的需求规格说明书中含有大量的UML图。
UML能直观、形象、严谨地描述出业务概念、业务流程、客户的期望和需求,只要稍加引导客户,客户将会很容易读懂UML,甚至会主动使用UML与项目组交流。我曾经遇到过客户向我们索要画UML图的工具,客户见识过UML的威力后,也想在自己实际工作中使用。
误区三:认为UML语法繁杂,难以学习和应用。
某些UML资料和书籍可能将UML说得过于复杂了,官方的UML标准资料也确实是枯燥难懂、人见人晕。我刚开始学习UML时,也看过一些UML书籍,觉得UML的语法太多、太复杂、太容易混淆了!
在实际工作中,其实经常需要用到的UML语法并不多,而且很容易掌握。当我们在需求分析方面应用UML时,需要掌握的语法更少(在软件设计方面应用UML时需要掌握稍多一点的语法)。“二八原则”在这里完全适用,我们经常用到的UML语法,其实只占全部语法的20%,而本书将会重点介绍实用性强的UML语法。
误区四:UML用途不大。
很多人推崇UML,但也有不少人士不太认可UML。不认可的原因主要是因为一些人士学习UML后,发现在实际工作中发挥的作用并不是很大,有时候不用UML效果更好。
我不敢说UML能帮助我们解决所有问题,至少从我的多年使用经验上来说,UML对于提升我的需求分析能力帮助还是很大的。有人之所以感觉UML不太好用,我觉得原因还是只掌握了UML的形而没有领会UML的神。UML的常用语法可能几天就能学会了,而要真正做到“thinking
in UML”却没有这么容易,需要长期的锻炼。
我的学习经历
我读大学时没有听说过UML,出来工作两三年后才开始接触UML,当时的感觉就好像找到了新大陆,很想好好发掘一番!而我当时的运气还是相当不错的,我的上司是UML达人,他带领我参加了项目的需求分析工作。我很快就见识了UML威力,在他的言传身教之下,迅速掌握了UML。
在那个项目以后,我便独立担当了多个项目管理及需求分析工作,没有一个项目不应用UML,而且我毫不保留地传授UML知识给项目组的其他成员。多年的工作进一步磨练了自己,对UML在实际工作中的应用有了更深刻的认识,形成自己的一套方法。
我的UML知识绝大部分来自于工作实践,期间虽然也看过一些书籍,但对我的帮助很少。当然我最大的得益还是来自我的UML启蒙老师,他在实际工作中教会了我UML,帮助我踏上自我成长的道路。
我的UML学习最大体会就是:实践太重要了!如果有名师指导则会让你事半功倍!希望本书能成为你在实际工作中学习和应用UML的好帮手!
UML学习难点
学UML之难,不在于学习语法,关键是要改变思维习惯。UML是一种新的工具,但同时也是代表了一种新的先进的思考方法,如果不能掌握这样的方法,只能学到了UML的形,而没有掌握其神髓。
要用好UML,你需要在平时多多培养下面的能力:
1. 书面表达能力。
2. 归纳总结能力。
3. “面向对象”的思维能力和抽象能力。
平时你可以利用各种机会来提升第1和第2种能力,如多写写项目文档、写写日记或博客等,多思考和总结平时自己的工作得失等。
第3种能力说起来有点虚,大家在大学中可能也学过相关知识。训练这种能力的最好方法就是多应用类图,我们将会在类图的章节再重点介绍,通过实例来体会什么才叫“面向对象”!
本书将会重点培养你的这三种能力,只要你有进步之心,多练习、多实践、多思考、多总结,一定会取得长足进步!
本章的主要目标是让你不需要阅读全书的情况下,就可以了解到UML的全貌,大概知道UML各种图的用途,同时给你说明学习UML的难点,为最终活用UML做好准备。下面我们一起来复习一下本章的主要内容:
UML是Unified Modeling Language的简称,是软件开发界的一套标准,UML不仅可用于软件设计,也可以用于软件需求分析。但UML并不是强制标准,我们应该善用包括UML在内的各种标准来提高我们的水平。
UML可分为两类:结构型、行为型,结构性的UML有:类图、对象图、构件图、部署图、包图,行为型的图有活动图、状态机图、顺序图、通信图、用例图、时间图。
类图是业务概念模型分析的有利武器,也是面向对象分析能力的强有力训练工具。
对象图在需求分析工作中并不常用。
构件图、部署图是分析IT基础架构、软件架构等方面需求的有利分析工具,但需要你具备IT基础架构、软件设计方面的知识和经验。
包图可用来组织类图,在需求分析工作中应用的机会不是很大。
活动图、状态机图、顺序图是分析业务流程的强力武器。活动图的表达思路与流程图很类似,很容易掌握,而且大部分情况下都可以使用活动图来分析业务流程;某流程如果是围绕某个物品进行,该物品在流程中转换多种状态,那么使用状态机图来分析是首选;用顺序图来分析的好处是能清晰表达整个过程所参与的角色,角色与角色之间的关系,各角色是如何被卷入这个过程当中的。
通信图可以看作是顺序图的另外一种表达形式,顺序图更强调先后顺序,通信图更强调相互之间的关系。而从我的工作经验看,顺序图更加实用一点。
有人会将用例图称作“公仔图”,用例图表达的是什么角色通过软件系统能做什么事情,我们可以使用用例图系统地表达软件系统的绝大部分需求。
时间图是表示某东西的状态随时间变化而变化的一种图,我在实际工作中很少有机会能用到这种图。
学UML之难,不在于学习语法,避免陷入UML的认识误区,多练习、多实践,培养良好的“think
in UML”思想,锻炼面向对象分析的能力,成为活用UML的需求分析高手不远矣!
TA的最新馆藏[转]&

我要回帖

 

随机推荐