资源预览内容
第1页 / 共31页
第2页 / 共31页
第3页 / 共31页
第4页 / 共31页
第5页 / 共31页
第6页 / 共31页
第7页 / 共31页
第8页 / 共31页
第9页 / 共31页
第10页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
掀起你的盖头来掀起你的盖头来掀起你的盖头来掀起你的盖头来掀起你的盖头来掀起你的盖头来掀起你的盖头来掀起你的盖头来如何分析既有代码的设计第一研究所 张长青 2011-07-16前言如果需求永远不变,Android自带的应用已 经可以满足需要,我们也不用这么辛苦地 学习了。但事实并非如此,运营商规范和 各种千奇百怪的需求往往会让我们焦头烂 额、疲于应付。为了将来的生活不至于太 痛苦,也为了不甘人后,更为了那份久违 的成就感,我们还要坚持学习。目录一、什么是软件设计? 二、概要设计要解决哪些问题? 三、什么是UML? 四、UMLet工具介绍 五、如何分析既有代码的设计?一、什么是软件设计?软件设计是把许多事物和问题抽象起来, 并且抽象它们不同的层次和角度。将复杂 的问题分解成可以管理的片断会更容易理 解。将问题或事物分解并模块化这使得解 决问题变得容易,分解的越细模块数量也 就越多,它的副作用就是使得设计者考虑 更多的模块之间耦合度的情况。一、什么是软件设计?从软件工程学的角度,软件设计分为概 要设计和详细设计。一、什么是软件设计?(续)概要设计 概要设计又可称系统设计,这里所说的 系统是指程序系统。编制的目的是说明对 程序系统的设计考虑,包括程序系统的组 织结构、基本处理流程、模块划分、功能 分配、接口设计、运行设计、数据结构设 计和出错处理设计等,为程序的详细设计 提供基础。一、什么是软件设计?(续)详细设计 详细设计是软件工程中软件开发的一个 步骤,就是对概要设计的一个细化,就是 详细设计每个模块实现算法,所需的局部 结构。详细设计的主要任务是设计每个模 块的实现算法、所需的局部数据结构。详 细设计的目标有两个:实现模块功能的算 法要逻辑上正确和算法描述要简明易懂。一、什么是软件设计?(续)简单来说,概要设计解决的是宏观的问 题,详细设计解决的是微观的问题。没有 宏观上的把握,容易迷失方向。没有微观 上的了解,无法解决实际问题。二、概要设计要解决哪些问题?1、本系统可以分为几个子模块? 2、每个子模块的功能分别是什么? 3、子模块之间如何交互? 4、子模块如何与外部模块交互? 5、中断、异常、错误是如何处理的? 6、数据存储是如何设计的?三、什么是UML?UML(Unified Modeling Language的缩写) 统一建模语言,是用来对软件密集系统进行可视化 建模的一种语言。UML为面向对象开发系统的产 品进行说明、可视化、和编制文档的一种标准语 言。UML是在开发阶段,说明,可视化,构建和 书写一个面向对象软件密集系统的制品的开放方 法。UML展现了一系列最佳工程实践,这些最佳 实践在对大规模,复杂系统进行建模方面,特别 是在软件架构层次已经被验证有效。UML被 OMG采纳作为业界的标准。三、什么是UML?(续)UML的目标三、什么是UML?(续)UML的图 UML的本意是要成为一种标准的统一语 言,使得IT专业人员能够进行计算机应用 程序的建模。它提供了多种类型的模型描 述图(diagram),通过把标准的UML图放 进您的工作产品中,精通UML的人员就更 加容易加入您的项目并迅速进入角色。最 常用的UML图包括:用例图、类图、序列 图、状态图、活动图、组件图和部署图。三、什么是UML?(续) 用例图(Use Case)用例图描述了系统提供的一个 功能单元。用例图的主要目的 是帮助开发团队以一种可视化 的方式理解系统的功能需求, 包括基于基本流程的“角色“ (actors,也就是与系统交互 的其他实体)关系,以及系统 内用例之间的关系。三、什么是UML?(续) 类图(Class)类图表示不同的实体(人、事 物和数据)如何彼此相关;换 句话说,它显示了系统的静态 结构。三、什么是UML?(续) 序列图(Sequence)序列图显示具体用例(或者是 用例的一部分)的详细流程。 它几乎是自描述的,并且显示 了流程中不同对象之间的调用 关系,同时还可以很详细地显 示对不同对象的不同调用。序 列图有两个维度:垂直维度以 发生的时间顺序显示消息/调用 的序列;水平维度显示消息被 发送到的对象实例。三、什么是UML?(续) 状态图(State)状态图表示某个类所处的不同 状态和该类的状态转换信息。 状态图的符号集包括5个基本 元素:初始起点,它使用实心 圆来绘制;状态之间的转换, 它使用具有开箭头的线段来绘 制;状态,它使用圆角矩形来 绘制;判断点,它使用空心圆 来绘制;以及一个或者多个终 止点,它们使用内部包含实心 圆的圆来绘制。三、什么是UML?(续) 活动图(Activity)符号集与状态图中使用的符号 集类似。像状态图一样,活动 图也从一个连接到初始活动的 实心圆开始。活动是通过一个 滑边矩形(活动的名称包含在 其内)来表示的。活动可以通 过转换线段连接到其他活动, 或者连接到判断点,这些判断 点连接到由判断点的条件所保 护的不同活动。结束过程的活 动连接到一个终止点(就像在 状态图中一样)。四、UMLet工具介绍UMLet是一个开放源代码轻量级UML建 模工具。UMLet能够让你快速建模,并且 能够方便地导出各种格式SVG, JPG, PDF and LaTeX-friendly EPS。 一般来说,UML工具都比较复杂难用, 但UMLet却是个例外。它弃繁从简,只保 留最实用的元素,也没有过多的修饰,让 我们把精力集中到设计中来。四、UMLet工具介绍(续)工作区属性编辑区图库UMLet软件界面介绍五、如何分析既有代码的设计?介绍四种常用的分析方法,综合运用,一 定会事半功倍。 1、阅读源码 2、分析Log信息 3、断点调试 4、UML图五、如何分析既有代码的设计?(续)1、阅读源码“书读百遍、其义自现”“熟读唐诗三百首 不会作诗也会吟”古老的智慧早就告诉我们熟能生巧的道理,所 以对于软件赖以生存的源码,我们要反复地阅 读、用心地阅读、硬着头皮去阅读。 这其实不是一种方法,而是一种态度。“学而时习之、不亦说乎!”五、如何分析既有代码的设计?(续)2、分析Log信息 软件的常态是运行时,Log信息是帮助我们分 析软件运行时状态最好的方式。分析前提是必须有Log可分析,如果没有 Log,要想办法加一些Log去分析。(备注:Android默认的打印log信息的类是不输出文件名和行号的,对 于我们习惯使用QXDM的人来说,可能不大习惯。我这里有一个可 以输出文件名、行号,设置调用栈的DGBLog类,可以方便地加到自 己的模块中使用。有兴趣的同事可以单独私信给我。)五、如何分析既有代码的设计?(续)3、断点调试对于有过FeaturePhone调试经验的人,断点 调试的方法再熟悉不过了。虽然进入了智能时 代,面向多进程、多线程编程,但还是有一些 方法可以帮助我们去实现断点调试。 不推荐以这种方式作为主要的调试方式,但是 当你想用它的时候,说明你真的需要它。五、如何分析既有代码的设计?(续)3、断点调试(cont.)(备注:Eclipse+Java远程调试+DDMS可以方便地帮助我们实现 Android Framework及应用层程序的调试。)五、如何分析既有代码的设计?(续)4、UML图 一提到“UML”,很多人会“望而生畏”。别害 怕,我们不是搞学术的,用不了那么多复杂的 元素。从实用角度出发,我这里只介绍两种常 用的图,类图(Class)和序列图 (Sequence)。五、如何分析既有代码的设计?(续)4、UML图(cont.) 类图就是表达类之间关系的图,类之间的关系 有关联、聚合/组合、依赖、继承。 一个类引用了另一个类的关系就是关联关系, 它的符号是: 一类继承另一个类就是继承关系: 如果是实现接口,符号是:五、如何分析既有代码的设计?(续)4、UML图(cont.)Gallery3D类 图五、如何分析既有代码的设计?(续)4、UML图(cont.) 序列图(Sequence Diagram),亦称为时序 图或循序图,它通过描述对象之间发送消息 的时间顺序显示多个对象之间的动态协作。五、如何分析既有代码的设计?(续)4、UML图(cont.)Gallery3D初始化序列图总结分析既有代码的设计不是一件容易的事情, 也不是一蹴而就的事情。越是复杂的系统就 越难,毕竟里面包含了很多人、很长时间的 心血。Android虽然是开源工程,我们可以看 到所有的源码,但是我们却看不到所有的设 计。所以,我们需要一点一点地去研究。随 着对学习的深入,我们对系统的理解也会逐 步深入。 惟有坚持,经验才会逐步增长。终有一天, 我们可以在Android世界里纵横驰骋。Thank you for your time!Thank you for your time!Thank you for your time!Thank you for your time!张长青 作品 Email:adamzhang126.com
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号