面向对象分析与设计

软件工程自学笔记

独自空忆成欢 提交于 2019-12-01 10:18:33
软件工程自学 emmm我们专业不学习软件工程,自学一点,权当休闲。 1.概述 应对不断变化的需求 开发占比比测试和维护小得多。 1.2 软件开发的三个阶段 私人化的软件环境中,软件的水平与个人的关系很大。 专家系统:提供专业知识与服务 网格计算:云计算 软件开发的初期,一定要先花时间把需求搞清楚 可读性、可理解性越好,可维护性越好 软件开发追求一致性和标准性 技术先进,需求不清楚是中国的现状。没有技术解决不了的,但是主要问题是把需求提清楚 好的需求本身就是一种资源 维护对一个公司的信誉很重要,要考虑到开发公司的流动性 维护费:技术支持(电话、邮件)、上门解决,这是一个长期的盈利(对客户就是花费) 软件的维护是一件很困难的问题。 软件!=程序,软件是由一个完整的配置组成的,还包括文档和数据。 在软件开发的不同阶段进行修改,需要付出的代价是很不相同的。 一旦发生错误应该马上修改 开发费与维护费是两回事。签合同的时候要说好 1.3 软件工程概述 好的项目管理要尽量准时。 一种策略:快速迭代、抢占市场、尽早上架 开发目的的折中、最优化 易于维护的软件,可靠性一般也比较高 可靠性和性能是互斥的,一个是求稳,一个是性能导向的 软件工程的原则: 例如类,就是对一组有共同特性的对象的抽象 局部化:资源的声明、使用和释放应该放在同一个模块中并且应该尽量靠近 一致性:要培训员工使用公司统一的命名

浅谈软件系统建模和表达方法

送分小仙女□ 提交于 2019-12-01 07:26:00
我常常陷入深思,我的女朋友为什么又生气了?是麻辣烫不好吃,还是韩剧不好看。直到有一天,她和我说,我知道你说xxx是为了我好,也很有道理,但你这样的表达让我瞬间不想理你。我想大家也有类似的经历。很多时候,我们明明出于好心,但由于不会表达,反而适得其反。 学会表达是一件很重要的事情。生活中,良好的表达让亲人、伴侣和朋友间的关系更融洽;工作中,团队内的表达关系着工作效率;展示时的表达影响着项目最终评定,甚至连你毕业时的论文答辩、职级晋升时的考核也考验着你的表达能力。 软件开发亦是如此。大中型软件系统开发工作一般需要大量的软件开发人员统一协作工作,有时开发周期还很长。作为一名合格的程序员,如何理解前辈们设计好的框架和已完成的工作,并让别人快速准确的读懂你写的代码,是一件很重要的事情。因此,本文旨在介绍软件系统的建模和表达方法。 UML(Unified Modeling Language)统一建模语言,又称标准建模语言,是用于软件系统在开发阶段的可视化建模。由于软件系统开发需要经过面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)三个阶段,而每个阶段都需要统一的符号设计描述和交流。而UML作为一种通用语言,能有效消除不必要的差异,从而为许多开发人员广泛使用。 本文将介绍UML基本概念、特点、种类和应用。 一、UML基本概念 UML是在软件开发阶段,说明、可视化

面向对象与面向过程的区别

旧城冷巷雨未停 提交于 2019-12-01 04:30:23
一、面向对象与面向过程的区别 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 可以拿生活中的实例来理解面向过程与面向对象,例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用不同的方法来实现。 如果是面向对象的设计思想来解决问题。面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。 可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

设计模式之美学习(一):设计模式对编程工作者是很重要的,它的作用不言而喻。

强颜欢笑 提交于 2019-12-01 02:40:19
继数据结构与算法之美后,王争老师的专栏又开始更新了,这次是《设计模式之美》,希望学习之后会对自己有所提升。在此记录下自己的学习笔记,希望对自己或者看到的读者都有所裨益。 为什么每个程序员都要尽早地学习并掌握设计模式相关知识? 1. 应对面试中的设计模式相关问题 学习设计模式和算法一样,最功利、最直接的目的,可能就是应对面试了。 不管你是前端工程师、后端工程师,还是全栈工程师,在求职面试中,设计模式问题是被问得频率比较高的一类问题。特别是一些像 BAT 、 TMD 这样的大公司,比较重视候选人的基本功,经常会拿算法、设计模式之类的问题来考察候选人。 2. 告别写被人吐槽的烂代码 我们经常说, Talk is cheap,show me the code 。实际上,代码能力是一个程序员最基础的能力,是基本功,是展示一个程序员基础素养的最直接的衡量标准。你写的代码,实际上就是你名片。 3. 提高复杂代码的设计和开发能力 大部分工程师比较熟悉的都是编程语言、工具、框架这些东西,因为每天的工作就是在框架里根据业务需求,填充代码。实际上,这样的工作并不需要你具备很强的代码设计能力,只要单纯地能理解业务,翻译成代码就可以了。 但是,有一天, leader 让开发一个跟业务无关的比较通用的功能模块,面对这样稍微复杂的代码设计和开发,就发现会有点力不从心,不知从何下手了。因为只是完成功能、代码能用

设计模式之美学习(一):设计模式对编程工作者是很重要的,它的作用不言而喻。

十年热恋 提交于 2019-12-01 02:34:39
继数据结构与算法之美后,王争老师的专栏又开始更新了,这次是《设计模式之美》,希望学习之后会对自己有所提升。在此记录下自己的学习笔记,希望对自己或者看到的读者都有所裨益。 为什么每个程序员都要尽早地学习并掌握设计模式相关知识? 1. 应对面试中的设计模式相关问题 学习设计模式和算法一样,最功利、最直接的目的,可能就是应对面试了。 不管你是前端工程师、后端工程师,还是全栈工程师,在求职面试中,设计模式问题是被问得频率比较高的一类问题。特别是一些像 BAT 、 TMD 这样的大公司,比较重视候选人的基本功,经常会拿算法、设计模式之类的问题来考察候选人。 2. 告别写被人吐槽的烂代码 我们经常说, Talk is cheap,show me the code 。实际上,代码能力是一个程序员最基础的能力,是基本功,是展示一个程序员基础素养的最直接的衡量标准。你写的代码,实际上就是你名片。 3. 提高复杂代码的设计和开发能力 大部分工程师比较熟悉的都是编程语言、工具、框架这些东西,因为每天的工作就是在框架里根据业务需求,填充代码。实际上,这样的工作并不需要你具备很强的代码设计能力,只要单纯地能理解业务,翻译成代码就可以了。 但是,有一天, leader 让开发一个跟业务无关的比较通用的功能模块,面对这样稍微复杂的代码设计和开发,就发现会有点力不从心,不知从何下手了。因为只是完成功能、代码能用

设计模式——面向对象设计原则

时光毁灭记忆、已成空白 提交于 2019-11-30 21:39:37
目录 一、开闭原则 二、依赖倒置原则 三、里式替换原则 四、单一职责原则 五、组合复用原则 六、迪米特原则 七、接口隔离原则 面向对象设计原则究其根源是为了 保证软件的可维护性和可复用性 知名软件大师Robert C.Martin认为一个可维护性较低的软件设计通常由于如下4个原因造成: 过于僵硬,过于脆弱,复用率低,黏度过高 。软件工程和建模大师Peter Coad认为,一个好的系统设计应该具备三个性质: 可扩展性,灵活性,可插入性 由此看出,可维护性和可复用性在软件的设计中具有举足轻重的地位 面向对象设计复用的目标在于 实现支持可维护性的复用 在面向对象的设计里面, 可维护性复用都是以面向对象设计原则为基础的 ,这些设计原则首先都是复用的原则,遵循这些设计原则可以有效地提高系统的复用性和可维护性 重构 是 在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性 常用的面向对象设计原则包括7个,这些原则并不是孤立存在的,它们相互依赖,相互补充 开闭原则——OCP 依赖倒置原则——DIP 里式替换原则——LSP 单一职责原则——SRP 组合复用原则——CRP 迪米特原则——LOD 接口隔离原则——ISP 一、开闭原则 1、定义 一个软件实体应当 对扩展开放,对修改关闭 在设计一个模块的时候

【UML】UML的九种建模图总结

烂漫一生 提交于 2019-11-30 19:24:57
UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。下面将对UML的九种图+包图的基本概念进行介绍以及在软工文档的各个阶段都需要什么UML图。文档中图的出现往往就会减少冗余的文字,所以图是软件工程文档中必不可少的核心内容,UML图就像是软件工程师的“建筑蓝图”,是我们“入行”的必不可少的一课。 一、基本概念 如上图所示,我按照4+1视图用例视图,设计视图,进程视图,实现视图,拓扑视图 将⑨种图分开。还可以分为静态图和动态图两类。静态图分为:用例图,类图,对象图,包图,构件图,部署图。动态图分为:状态图,活动图,协作图,序列图。 1、用例图(UseCase Diagrams): 用例图主要回答了两个问题:1、是谁用软件。2、软件的功能。从用户的角度描述了系统的功能,并指出各个功能的执行者,强调用户的使用者,系统为执行者完成哪些功能。 2、类图(Class Diagrams): 用户根据用例图,通过抽象得到类,包括类的内部结构和类之间的关系,是一种静态结构图。 3、对象图(Object Diagrams): 对象图是类图的一个实例,描述了系统在具体时间点上包含的对象以及各个对象之间的关系。描述的是交互的静态部分。 4、状态图(Statechart Diagrams): 是一种由状态、变迁

面向对象思想基础

て烟熏妆下的殇ゞ 提交于 2019-11-30 13:26:18
OO 面向对象 object oriented 面向对象:我这个东西是什么东西完成的,参加完成的东西就是对象。 对象:基本数据类能定义的对象就不是面向对象的对象 如果不能用基本数据类型定义的就是面向对象的对象。 属性:指的是对象身上有什么值数据,每一个对象,类都有自己的属性和行为 特征=属性 行为:对象可以做什么,或者我们想用这些对象做什么。行为=方法 面向过程:做一件事情的具体过程。就问题解决问题。 万物皆对象,对象因关注而产生。 类是对象的抽象,对象是类的实例。 类和对象的关系 1:类是具有相同属性和行为的一组对象的抽象。 2:在软件系统中,我们用类来模拟现实生活中的实体。 3:类是模板,不能被直接使用,而对象是具体纯在的,所以对象又被称之为类的实例。 4:通过类的产生对象的动作被称之为“实例化” 操作对象(属性和行为) 对象加“.”操作符 “.”:这个符号理解成为“的” student stu=new student(); stu.age(age年龄)理解成为:这个学生的年龄 在面向对象中,static是一种特殊情况,百分之90的方法都是没有static的 java基础是为了避开面向对象的概念。从现在开始,知道学习了static之前不写。 书写java类 java中的类用class声明,Java源代码文件中只能包含一个公共类,文件名必须与公共类的类名相同,文件扩展名为“

UML中的类图及类图之间的关系

喜夏-厌秋 提交于 2019-11-30 11:51:45
统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标准。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 统一建模语言能为软件开发的所有阶段提供模型化和可视化支持。而且融入了软件工程领域的新思想、新方法和新技术,使软件设计人员沟通更简明,进一步缩短了设计时间,减少开发成本。它的应用领域很宽,不仅适合于一般系统的开发,而且适合于并行与分布式系统的建模。 UML 从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等 9 种图。 本教程主要介绍软件设计模式中经常用到的类图,以及类之间的关系。另外,在实验部分将简单介绍 UML 建模工具的使用方法,当前业界使用最广泛的是 Rational Rose。使用 Umlet 的人也很多,它是一个轻量级的开源 UML 建模工具,简单实用,常用于小型软件系统的开发与设计。 类、接口和类图 1. 类 类(Class)是指具有相同属性、方法和关系的对象的抽象,它封装了数据和行为,是面向对象程序设计(OOP)的基础,具有封装性、继承性和多态性等三大特性。在 UML 中,类使用包含类名、属性和操作且带有分隔线的矩形来表示。 (1) 类名(Name

面向对象和构造器

吃可爱长大的小学妹 提交于 2019-11-30 07:33:56
面向对象 面向对象和面向过程的区别 面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。两者都贯穿于软件分析、设计和开发各个阶段,对应面向对象就分别称为面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)。C语言是一种典型的面向过程语言, Java是一种典型的面向对象语言。 面向对象和面向过程思想的总结 都是解决问题的思维方式,都是代码组织的方式。 面向过程是一种“执行者思维”,解决简单问题可以使用面向过程。 面向对象是一种“设计者思维”,解决复杂、需要协作的问题可以使用面向对象。 面向对象离不开面向过程: 宏观上:通过面向对象进行整体设计 微观上:执行和处理数据,仍然是面向过程。 类 类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象。我们要造一个汽车,怎么样造?类就是这个图纸,规定了汽车的详细信息,然后根据图纸将汽车造出来。 类:我们叫做class。 对象:我们叫做Object,instance(实例) 总结: 类可以看成一类对象的模板,对象可以看成该类的一个具体实例。 类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性、方法。 类的定义 属性 属性用于定义该类或该类对象包含的数据或者说静态特征 属性定义格式: [修饰符] 属性类型 属性名 = [默认值] ; 方法