面向对象分析与设计

面向对象设计原则

[亡魂溺海] 提交于 2019-11-28 05:28:57
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员经理根据7条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。 1. 开闭原则(Open Closed Principle, OCP) 软件实体应该对扩展开放,对修改关闭。 这里的软件实体包括以下几个部分: 1) 项目中划分出的模块 2) 类与接口 3) 方法 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码的前提下,可以扩展模块的功能,使其满足新的需求。 1.1 作用 开闭原则是面向对象程序设计的终极目标,它使软件实体拥有一定的适应性和了灵活性的同事具备稳定性和延续性。具体来说,其作用如下: (1) 对软件测试的影响 软件遵守开闭原则的话,软件测试时只需要对扩展的代码进行测试就可以了,因为原有的测试代码仍然能够正常原型。 (2) 可以提高代码的可复用性 粒度越小,被复用的可能性就约到;在面对对象的程序设计中,更具原子核抽象编程可以提高代码的可服用性。 (3) 可以提高软件的可维护性 遵守开闭原则的软件,其稳定性高和延续性强,从而抑郁扩展和维护。 1.2 实现方法 可以通过“抽象约束、封装变化”来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。 因为抽象灵活性好,实用性广,只要抽象的合理

面向对象

谁说我不能喝 提交于 2019-11-28 01:00:07
(一)面向对象的概述 面向对象编程的思想: 面向对象编程思想实际上是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。 面向对象的分析(OOA,Object Oriented Analysis) 分析系统中涉及的事务,根据“对象”抽象出“类”; 找出对象共有的特点,并且在类中定义为属性; 找出对象共有的行为,并且定义为类的方法。 面向对象的设计(OOD,Object Oriented Design) 设计出这几个类型的对象,然后相互通信、传递消息完成系统功能。 面向对象的编程实现(OOP,Object Oriented Programming) 编写代码 编程思想的对比 面向过程 面向对象 系统以过程/方法为中心来组织 系统以对象为中心来组织 过程间相互发送数据 对象间相互发送消息 过程的执行动作与数据被明显分离 相关的属性和行为被统一到一个对象上 关注的焦点在于数据结构、算法和执行步骤 关注的焦点是对象及对象的职责 过程通常难以被复用 系统构建更容易,易维护,易扩展,易复用 从面向过程到面向对象,不仅仅是编程方式的改变,更重要的是 思考方式 的改变。 面向对象概念 抽象(abstract) 从事物中舍弃个别的非本质特征,抽取共同的本质特征 只考虑与问题域相关的信息,而忽略与问题域不相关的部分 类(class)

第二次实验

心已入冬 提交于 2019-11-27 18:25:10
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:黎静 学号:20135338 成绩: 指导教师:娄嘉鹏 实验日期:2015.5.17 实验密级: 预习程度: 实验时间: 仪器组次: 必修/选修: 实验序号:2 实验名称: Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装、继承、多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验要求 1.没有Linux基础的同学建议先学习《 Linux基础入门(新版) 》《 Vim编辑器 》 课程 2.完成实验、撰写实验报告,实验报告以博客方式发表在 博客园 ,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的 指导 3. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。 4. 请大家先在 实验楼 中的 ~/Code 目录中用自己的学号建立一个目录,代码和UML图要放到这个目录中,截图中没有学号的会要求重做,然后跟着下面的步骤练习。 实验步骤 (一)单元测试 需求:我们要在一个 MyUtil 类中解决一个百分制成绩转成“优

实验楼第二次实验

冷暖自知 提交于 2019-11-27 18:19:29
实验二 Java面向对象程序设计 ( 由于网速不好,实验楼的光标反映过慢,所以代码的调适与运行都是在电脑的Eclipse 里面完成的,没在实验楼里截图) 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O.L.I.D 了解设计模式 先在实验楼中的~/Code目录中 用自己学号建立一个目录 ,用于存放代码和UML图 实验步骤 (一) 单元测试 (1) 三种代码 想用程序解决问题时,要会写三种代码 l 伪代码 l 产品代码 l 测试代码 举例: 需求:我们要在一个 MyUtil 类中解决一个百分制成绩转成“优、良、中、及 格、不及格”五级制成绩的功能 l 伪代码(伪代码与具体编程语言无关,不要写与具体编程语言语法相关的语句, 伪代码 从意图层面来解决问题,最终, 伪代码 是 产品代码 最自然的、最好的注释) l 产品代码(把伪代码用Java语言翻译一下) l 测试代码(写了 产品代码 ,我们还要写 测试代码 ,证明自己的代码没有问题。Java编程时,程序员对类实现的测试叫 单元测试 。类 XXXX 的 单元测试 ,一般写建一个 XXXXTest 的类,针对 MyUtil 类写一个 MyUtilTest.java 的测试模块,代码如下) 这里我们设计了一个 测试用例(Test Case) , 测试用例 是

面向对象的软件开发与作业介绍

我的梦境 提交于 2019-11-27 12:02:29
面向对象的软件工程包括下面几个部: 1.面向对象分析(object oriented analysis, OOA) 软件工程中的系统分析阶段,要求分析员和用户结合在一起,对用户的需求做出精确的分析和明确的表述,从大的方面解析软件系统应该做什么,而不是怎么去做。 面向对象的分析要按照面向对象的概念和方法,在对任务的分析中,从客观存在的事物和事物之间的关系,归纳出有关的对象(对象的‘特征’和‘技能’)以及对象之间的联系, 并将具有相同属性和行为的对象用一个类class来标识。建立一个能反映这是工作情况的需求模型此时的模型是粗略的。 2.面向对象设计(object oriented design , OOD) 根据面向对象分析阶段形成的需求模型,对每一部分分别进行具体的设计。 首先是类的设计,类的设计可能包含多个层次(利用继承与派生机制)。然后以这些类为基础提出程序设计的思路和方法,包括对算法的设计。 在设计阶段并不牵涉任何一门具体的计算机语言,而是用一种更通用的描述工具(如伪代码或流程图)来描述 3.面向对象编程(object oriented programming, OOP) 根据面向对象设计的结果,选择一种计算机语言把他写成程序,可以是python。 4.面向对象调试(object oriented test,OOT) 在写好程序后交给用户使用前,必须对程序进行严格的测试

DDD初学指南

痞子三分冷 提交于 2019-11-27 11:03:48
  因为不想对原文进行修改了,所以直接把评论贴上来了,现在看来,当年的认识确实有些问题,不只评论提到的,当年只是按部就班,其实真的做好应该是于无声处听惊雷,不过既然是给初学者看的,还是从简单的地方来吧,虽然有问题,但是对初学者来说也是有参考价值的,还是建议看一看想一想,尤其那些整天提DDD,但是书都没看过的 2016-05-31 12:46 ImCoOLeR 写得不错,好话我就不说了,浪费时间也没意义。我不同意的是DDD不适用于小项目,你说的一点我很肯定,就是DDD是设计方法,但是适不适合小项目要看DDD架构,DDD是适用于多架构的。当然小项目也许没有必要用DDD,但不等同于小项目不适合用DDD。 关于精炼我也有不同看法,精炼不仅仅是业务领域,模型或者设计元件的细分,剥洋葱的说法我不赞同。精炼是对模型的锤炼,是对业务深层次探索得出的。精炼不等于细化,而是聆听领域专家,是模型跟接近于现实中的业务领域。 我没有全部看完,大致上的看法就是这样,希望共同进步。 @ ImCoOLeR 刚看到。。。,这篇开始写的时候比较早差不多是14年写了大概,一直在草稿里15年发的,就现在来看,这篇博客里有很多不准确的地方,但是作为当年的学习的历程,所以不想改了 说不适合小项目大概是因为当时正在公司推DDD,也是一边学一边推,按部就班的落实到项目中,忽视了其实所有项目都是可以借鉴DDD思想的

面向对象设计的六大原则

好久不见. 提交于 2019-11-27 09:25:58
https://blog.csdn.net/dhj199181/article/details/90637862 1) 单一职责原则:   一个合理的类,应该仅有一个引起它变化的原因,即单一职责,就是设计的这个类功能应该只有一个;   优点:消除耦合,减小因需求变化引起代码僵化。 2) 开-闭原则:   对扩展开放,对修改关闭   优点:降低了程序各部分之间的耦合性,其适应性、灵活性、稳定性都比较好。当已有软件系统需要增加新的功能时,不需要对作为系统基础的抽象层进行修改,只需要在原有基础上附加新的模块就能实现所需要添加的功能。增加的新模块对原有的模块完全没有影响或影响很小,这样就无须为原有模块进行重新测试。 3) 里氏代换原则:   很严格的原则,规则是“子类必须能够替换基类,否则不应当设计为其子类。”也就是说,子类只能去扩展基类,而不是隐藏或覆盖基类。任何基类可以出现的地方,子类一定可以出现。   优点:可以很容易的实现同一父类下各个子类的互换,而客户端可以毫不察觉。 4) 依赖倒换原则:   “设计要依赖于抽象而不是具体化”。换句话说就是设计的时候我们要用抽象来思考,而不是一上来就开始划分我需要哪些哪些类,因为这些是具体。   优点:人的思维本身实际上就是很抽象的,我们分析问题的时候不是一下子就考虑到细节,而是很抽象的将整个问题都构思出来,所以面向抽象设计是符合人的思维的

软件工程作业

烂漫一生 提交于 2019-11-27 09:15:26
软件工程作业1 (第1 ~4 章) 一、选择题: 1. 开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做( C )。 A. 软件工程 B.软件周期 C.软件危机 D.软件产生 2. 瀑布模型本质上是一种( A )模型。 A. 线性顺序 B.顺序迭代 C.线性迭代 D.早期产品 3. 瀑布模型存在的问题是( B )。 A .用户容易参与开发 B.缺乏灵活性C.用户与开发者易沟通 D.适用可变需求 4. 螺旋模型是一种将瀑布模型和( A )结合起来的软件开发模型。 A .增量模型 B.专家系统 C.喷泉模型 D.变换模型 5. 原型化方法是用户和设计者之间执行的一种交互构成,适用于( A )系统。 A .需求不确定性高的 B.需求确定的 C.管理信息 D.实时 6. 下列有关软件工程的标准,属于国际标准的是( D ) A.GB B.DIN C.ISO D.IEEE 7. 结构化方法是一种基于( D )的方法。 A. 数据结构 B.程序结构 C.算法 D.数据流 8. 软件可行性研究实质上是要进行一次( A) 需求分析、设计过程。 A 、简化、压缩的 B、详细的 C、彻底的 D、深入的 9. 可行性研究的目的是( D ) A 、分析开发系统的必要性 B、确定系统建设的方案 C 、分析系统风险 D、确定是否值得开发系统 10. 设年利率为i,现存入p元,不计复利

Java基础笔记五 面向对象

為{幸葍}努か 提交于 2019-11-27 05:49:54
5. 面向对象 5.1. 面向对象的简介 面向过程 是一种看待问题、解决问题的思维方式。着眼点在于,问题是怎样一步步的解决的,然后亲力亲为的去解决这个问题。 面向对象 是一种看待问题、解决问题的思维方式。着眼点在于,找到一个能够帮助解决问题的实体,然后委托这个实体帮助解决问题。 Java是一种面向对象的语言。 可以使用Java这门编程语言,更容易的写出具有面向对象编程思想的代码。 Java是一种面向对象的语言,因此用Java写的程序一定是面向对象的程序。 5.2. 类的设计与对象的实例化 对象 : 可以帮助解决问题的实体,就是一个对象。 万物皆对象 类 : 是由若干个具有相同的特征和行为的对象组成的一个集合。 类和对象的关系 : 类是对象的集合 , 对象是类的个体 备注: 在程序设计中,一定是现有的类,再有的对象。 5.2.1. 类的设计 语法 [ 访问权限修饰符 ] class 类名 { // 类体 // 类的所有的对象共有的特征 // 类的所有的对象共有的行为 } 语法说明: 1. 类名: 是一个标识符, 遵循大驼峰命名法。 2. 特征: 又叫属性, 在类中的体现是一个全局变量。 3. 行为: 在类中的体现,是一个方法。 类是一种自定义的数据类型 5.2.2. 对象的实例化 对象的实例化,需要使用到关键字new,也就是说,类是一种自定义的引用数据类型。 5.3. 构造方法

业务领域建模Domain Modeling

两盒软妹~` 提交于 2019-11-27 03:48:00
一、什么是业务领域建模 领域建模: 从领域模型开始,我们就开始了面向对象的分析和设计过程,可以说,领域模型是完成从需求分析到面向对象设计的一座桥梁。 顾名思义,就是显示最重要的业务概念和它们之间关系,是真实世界各个事物的表示(现实世界的可视化抽象字典)而不是软件中各构件的表示。领域模型是描述业务领域(业务实体)的静态结构。 理论派观点: Domain Model是一个商业建模范畴概念,即使一个企业不开发软件,也具备其业务模型; 所有同行企业,其业务模型必定有非常大的共性和内在的规律性。 由行业内的各个企业的业务模型再向上抽象出整个行业的业务模型,这个模型称之为“领域模型”。 领域模型是一种特殊的业务模型,它分析范围是整个行业,抽象出行业里共性和内在规律性的业务,比业务模型更加抽象,它不属于软件开发范畴的概念,与软件开发无关。 实战派观点: 领域模型是一个分析模型,帮助系统分析人员、用户认识现实业务的工具,描述的是业务中涉及到的实体及其相互之间的关系,它是需求分析的产物,与问题域相关。 是需求分析人员与用户交流的有力工具,是彼此交流的语言。 领域模型是一种分析模型,在软件开发过程分析阶段用于分析如何满足系统功能性需求,属于软件开发范畴,在UML中主要使用类图来描述领域模型。 业务模型是业务建模的输出物,业务建模研究的对象是公司或者组织,业务建模属于软件开发过程中的初始阶段。