OOAD理论知识小结

简介: 软件工程基本概念 软件工程三要素: 方法:完成软件开发的各项任务的技术方法,为软件开发提供 “如何做” 的技术 工具:为运用方法而提供的自动的或半自动的软件工程的支撑环境 过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤,如何将软件工程方法与软件工具相结合,合理、及时地进行软件开发   软件生命周期:   可行性分析阶段    需求分析阶段    系统设计阶段   系统实现阶段   测试阶段   维护阶段   软件开发过程: 软件开发过程是在软件生命周期的软件系统开发过程中,一系列活动和软件生成结果的集合。

软件工程基本概念

软件工程三要素:

方法:完成软件开发的各项任务的技术方法,为软件开发提供 “如何做” 的技术
工具:为运用方法而提供的自动的或半自动的软件工程的支撑环境
过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤,如何将软件工程方法与软件工具相结合,合理、及时地进行软件开发
 
软件生命周期:
  可行性分析阶段 
  需求分析阶段 
  系统设计阶段
  系统实现阶段
  测试阶段
  维护阶段
 
软件开发过程:
软件开发过程是在软件生命周期的软件系统开发过程中,一系列活动和软件生成结果的集合。软件过程模型描述软件开发过程的各项活动、角色、产品及其相互关系的模型。
目前有若干软件过程模型,各种模型有其不同的特点,并适用于不同的开发方法。例如,瀑布模型、循环模型、螺旋模型、增量模型和喷泉模型等。
不同的软件开发方法和软件开发模型要求有不同的工程体系。
 
统一建模语言UML
统一建模语言UML(Unified Modeling Language)是专门用来进行软件系统设计和架构建模的一门可视化建模语言,它通过各种图示展示了软件系统的方方面面。
 
UML图有很多种,对于程序员来说,最频繁使用的莫过于类图。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。类图中最基本的元素是类、接口。软件设计师设计出类图后,程序员就可以用代码实现类图中包含的内容。
在UML类图中描述 具体类
 
 
 
第一行表示:类名
第二行表示:属性
第三行表示:方法
- 表示:private
+表示:public
#表示:protected
 
在UML类图中描述 抽象类
在第一行会出现《abstract》
在UML类图中描述 接口
在第一行会出现《interface》
 
使用类图表示关系
类和类、类和接口、接口和接口之间存在一定关系,共有六种类型:分别是实现关系、泛化关系Generalization(继承关系)、关联关系、依赖关系、聚合关系、组合关系
 
泛化关系(Generalization)是指对象与对象之间的继承关系。
关联关系(Association)是指对象和对象之间的连接,它使一个对象知道另一个对象的属性和方法。在Java中,关联关系的代码表现形式为一个对象含有另一个对象的引用。关联关系有单向关联和双向关联
依赖 (Dependency) 关系是一种弱关联关系。依赖关系在Java中的具体代码表现形式为B为A的构造器或方法中的局部变量、方法或构造器的参数、方法的返回值,或者A调用B的静态方法。
聚合(Aggregation)是关联关系的一种特例,它体现的是 整体与部分的拥有关系,即“has a”的关系。此时 整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,所以聚合关系也常称为共享关系。 
组合(Composition)也是关联关系的一种特例,它同样体现 整体与部分间的包含关系,即“contains a”的关系。但此时 整体与部分是不可分的,部分也不能给其它整体共享,作为整体的对象负责部分的对象的生命周期。这种关系比聚合更强,也称为强聚合。 
 
面向对象系统分析与设计
在面向对象技术中,建造整个软件系统的过程常常被称为面向对象的分析和设计( Object-Oriented Analysis and Design,OOAD)。对于我们要开发的软件系统来说,OOAD解决了系统是什么(面向对象的系统分析,即OOA)以及如何做的问题(面向对象的系统设计,即OOD),OOP只是用编程语言去实现该系统。 
 
 
 
 
内聚度:
定义:表示一个应用程序的单个单元所负责的任务数量和多样性。内聚与单个类或者单个方法单元相关。
耦合度:
耦合度表示类之间关系的紧密程度。
设计原则
一)单一职责
Single Responsibility Principle,SRP
定义:所有的对象都应该有单一的职责,它提供的所有的服务也都仅围绕着这个职责。
二)开闭原则   开闭原则是面向对象设计的核心所在
开闭原则(Open-Close Principle,简称OCP)是指一个软件实体(类、模块、方法等)应该对扩展开放,对修改关闭。
遵循开闭原则设计出来的模块具有两个基本特征:
对于扩展是开放的(Open for extension):模块的行为可以扩展,当应用的需求改变时,可以对模块进行扩展,以满足新的需求。
对于更改是封闭的(Closed for modification):对模块行为扩展时,不必改动模块的源代码或二进制代码。
三)里氏替换原则
里氏替换原则(The Liskov Substitution Principle,LSP)
定义:在一个软件系统中,子类应该能够完全替换任何父类能够出现的地方,并且经过替换后,不会让调用父类的客户程序从行为上有任何改变。 里氏替换原则常用来检查两个类是否为继承关系。
最典型的例子:
正方形不是长方形
鸵鸟不是鸟
四)依赖倒转原则
依赖倒转原则(Dependency Inversion Principle,简称DIP)是指将两个模块之间的依赖关系倒置为依赖抽象类或接口。
具体有两层含义:
高层模块(调用类)不应该依赖于低层模块(被调用的类),二者都应该依赖于抽象;
抽象不应该依赖于细节,细节应该依赖于抽象。
要针对接口编程,不要针对实现编程
五)组合/聚合复用原则
组合/聚合复用原则(Composite/Aggregation Reuse Principle,CARP)
定义:是指要尽量使用组合/聚合而非继承来达到复用目的。另一种解释是在一个新的对象中使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象委托功能达到复用这些对象的目的。 
 六)接口隔离原则
接口隔离原则(Interface Segregation Principle,ISP)
定义:是指客户不应该依赖它们用不到的方法,只给每个客户它所需要的接口。换句话说,就是不能强迫用户去依赖那些他们不使用的接口。
接口的设计原则:接口的设计应该遵循最小接口原则,不要把用户不使用的方法塞进同一个接口里。
接口的继承原则:如果一个接口A继承另一个接口B,则接口A相当于继承了接口B的方法,那么继承了接口B后的接口A也应该遵循上述原则:不应该包含用户不使用的方法。
七)迪米特法则
迪米特法则(Law of Demeter,LOD),又称为“最少知识原则”,
定义:一个软件实体应当尽可能少的与其他实体发生相互作用。
最典型的例子:不要和陌生人说话。
 
创建型设计模式 
模式描述的是具有代表性的重复性问题及其解答方案. 
为什么要学习设计模式:
1) 促进复用,提高系统的重用性
2) 提高系统的可维护性
3) 增加表达能力: 设计模式有很强的语言表述性
4)帮助我们更好的进行软件设计
 
模式分类:
架构模式:架构是指一个软件系统整体的组织结构。架构模式描述软件系统的组织结构的一些规则和指南。通过这些规则和指南,我们可以把预定义的、职责明确的子系统有效地组织起来。
设计模式:设计模式描述的是在软件系统的某一局部不断重现的核心解决方案,这种解决方案以完善的设计结构出现,可以被应用到以后出现的类似的环境中。和架构模式相比,设计模式关注的是更为微观的问题。
 
设计模式的分类
基础设计模式(Gof23种设计模式): 不与特定域,平台或编程语言关联
1)创建模式: 涉及对象的创建 

工厂方法模式(Factory Method); 抽象工厂模式(Abstract Factory);创建者模式(Builder);原型模式(Prototype);单例模式(Singleton)。

2)结构模式:涉及类和对象的组合

外观模式(Facade);适配器模式(Adapter);代理模式(Proxy);装饰模式(Decorator);桥模式(Bridge);组合模式(Composite);享元模式(Flyweight)。

3)行为模式: 刻画了类和对象交换及分配职责的方式.主要目标是解耦
 
 模板方法模式(Template Method);观察者模式(Observer);状态模式(State);策略模式(Strategy);职责链模式(Chain of Responsibility);命令模式(Command);访问者模式(Visitor);调停者模式(Mediator);备忘录模式(Memento);迭代器模式(Iterator);解释器模式(Interpreter)。
 
 
单例模式(Singleton)
主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 
使用单例模式(1)
 1 public class Singleton {
 2   private Singleton(){}
 3   //在自己内部定义自己一个实例,注意这是private 
 4 //预加载
 5   private static Singleton instance = new Singleton();
 6   
 7        //这里提供了一个供外部访问本class的静态方法,
 8        //可以直接访问  
相关文章
|
9月前
|
程序员
学习学习再学习
学习学习再学习
78 0
|
9月前
|
前端开发 NoSQL Java
如何学习?今天聊聊关于学习
如何学习?今天聊聊关于学习
133 0
|
10月前
|
算法 Oracle Java
IT学习深入学习必备的技术网站
IT学习深入学习必备的技术网站
67 0
|
10月前
|
设计模式 安全 Java
【鸟瞰】C#的学习
前言: 在软件工程之C/S学习的过程中,我们已经学习过了软件工程,文档,九种UML图。下一个学习小阶段是C#和设计模式,视频里的老师上来就讲“.NET”,还说应该念成“dot Net”,念成“点NET”实在是太不专业了。我突然有点蒙圈了,为啥在这个阶段要学习C#?学C#为啥还和“dot Net”有关?怎么这么多C?什么C语言?C ++?C#?这些都是些什么鬼?晕!!! 于是开始在培养计划中寻找答案。。。
|
12月前
|
人工智能 城市大脑 达摩院
学习+思考+资料总结
基本结构 程序 = 算法+数据结构 软件 = 程序 + 软件工程 软件企业 = 软件 + 商业模式 闲是灵感的源泉,忙是思维的坟墓。
76 0
|
弹性计算 物联网 Linux
|
存储 弹性计算 负载均衡
学习资料
个人记录学习资料
|
网络协议 前端开发 Windows
学习分享系列(一):记日常学习中遇到的两个问题
学习分享系列(一):记日常学习中遇到的两个问题
学习分享系列(一):记日常学习中遇到的两个问题
|
Android开发
最新学习发现的好文章
1、即可学院关于 View 动画和属性动画的详解,对于使用方法讲解的超详细,里面也涉及了一部分的源码,如果想查看源码的话还是自己动手丰衣足食吧。这些文章主要都是用法和基本原理。Android 动画详解;
705 0

热门文章

最新文章