java基础22(Javaoo17)——OOAD

OOAD :面向对象的分析与设计。

程序设计方法:
软件工程学:是指导计算机软件开发和维护的一门工程学科。采用工程化的方法开发维护。
------------------------------------------------------------------------------------------
软件工程三要素:
1.方法 :完成软件开发各项任务的技术方法(面向对象方法)
2.工具 : EA(为运用方法提供的自动或者半自动的软件工程支撑环境)
3.过程 : 基于原型的增量迭代软件开发过程(一系列任务的框架)
-----------------------------------------------------------------------------------------
软件生命周期:
(寻找商机,投标等等)
项目:有明确的需求的提出方
产品:没有明确的需求提出方,根据市场需求,自己提需求,自己设计
1.可行性分析阶段
技术可行性、资金可行性、人员可行性、…………
主要成果:可行性分析报告
2.需求分析阶段
确定待开发的系统是”做什么”
确定软件系统的功能需求和非功能需求。
主要成果:软件需求规格说明书(Software Requirements Specification,即SRS)
3.系统设计阶段。
主要成果:概要设计说明(分几层),详细设计说明(接口,bean的提取)、数据库
设计说明书。
4.系统实现阶段(也称编码阶段)
主要成果:通过单元测试的源代码
5.测试阶段。
通过各种测试方法和工具,使bug降到最低
主要成果:软件测试报告
6.维护阶段。
主要任务:通过各种必要的维护活动使系统持久的满足用户的需要。
维护活动4类:
1.改正性维护
2.适应性维护
3.完善性维护
4.预防性维护。
主要成果:软件问题报告,软件变动记录,软件维护记录。

瀑布模型、喷泉模型、
---------------------------------设计语言:UML---统一建模语言(图形化语言)
---用在设计阶段,从各个角度来对项目进行描述。是被IBM统一了的
(流程图也包括在内,时序图,泳道图,类图(最多))
-----------------
接口与类之间的关系是实现关系。
虚线三角形箭头
对象与对象的关系:
1.泛化(is a) ----实线三角形箭头
2.关联
1>聚合关系(has a) ---共享关系 ---- 可分离,即是没有这个不影响对象的整体
2>组合关系(contains a) ---强聚合----不可分离的,eg :汽车和方向盘
--------箭头的菱形是在拥有者的身上
3>依赖关系(use a)
============================================================
面向对象设计原则:
标准: 1.满足功能需求
2.满足了也不一定是好设计
好的设计:
1.可读性(注释,代码,算法不要太复杂,尽量采用经典算法)
2.可复用性(抽取父类,接口,方法)
3.可扩展性(面对需求变化时,难易程度)
4.可维护性(错误的修改,遗漏的功能添加)
----------------------------------------------------------------------------
指标考量:(内聚度;耦合度)
内聚度:一个程序的某个单元负责的任务数量和多样性。
内聚与单个类和单个方法单元相关。
----------一个功能模块只做一个事情
---------------内聚的原因就是为了重用。
---------------------高内聚(一个系统单元只负责一个事情)
耦合度:表示单元与单元之间的关联程度。
耦合度决定了变更一个应用程序的容易程度。
-------------------------------------------------------------
高内聚低耦合是所有优秀软件的共同特征。
*************************************************************************************
--- 设计原则
1.开闭原则(是所有原则的核心原则)----需求改变的时候可以尽量不修改已有
代码,而是扩展其功能
2.单一职责SRP。----一个类仅有一个引起他变化的原因,永远不要让一个类存在
读个改变的理由。
单一职责围绕的所处环境的职责(不是指代的某个具体的功能)。
3.里氏替换原则
就是判断两个类该不该做继承关系。
子类应该能够完全替换父类能够出现的地方,并且替换后,不会让父类调用的
客户程序从行为上有任何改变
(不应该仅仅用生活知识(is a)来判断)
4.依赖倒转原则
是指两个模块如果有依赖关系,那么高层模块最好绑定依赖低层模块的抽象
或者接口
即是用调用的时候,用接口或者抽象类 来指向实现类。从而调用实现类里面
的方法(要针对接口编程,不要针对实现类编程)
优点:是如果以后如果需要修改的时候,就只需要从新写一个实现类,传给
接口指向,就不需要修改主代码。
5.组合/聚合复用原则。
即是少用继承。
新对象需要使用到老对象的属性或者方法,应该采用其他的一些方法来进行
处理。比如包含住作为一个属性,但是尽量不要用extends。
6.接口隔离原则 --------最小接口原则(不要用上层接口污染下层接口)
7.迪米特法则
最小知识原则。
一个软件实体应当尽可能少与其他实体相互摩擦。
eg : import 导入的时候不要导入过多,导入操作的就可以了。
==========================================================
模式分类:1.架构模式(eg:三层架构)宏观概念
表示层专用模式:MVC模式
----------------M 模型 C 控制器 V视图
V ---界面 C--Listener
三层架构-(不是纯面向对象的)----贫血模型
业务层里面既有bean也有行为 ----复血模型
2.设计模式 ---微观(对应某个具体的问题和场景)
模式包含的要素:
1.模式名称
2.该模式能解决的问题
3.解决方案
4.使用该模式后的效果(优缺点)
设计模式(23种经典设计模式):
根据设计模式是干什么的分类:
1.创建模式:涉及对象的创建
*单列模式(即是只能创建一个对象的)--Singleton 模式
设计一个能且只能产生一个对象的类
--------------------------------------------------------------------------
1.单列模式预加载模式实现---懒汉模式。
1>预加载实现,就算你不用,也会在内存产生放起。
---------------优点:线程绝对安全的
public class Singleton{
private static Singleton sin = new Singleton();
private Singleton(){

}
public static Singleton getInstance(){
return sin;
}
}
---------------------------------------------------------
2.单列模式二 -----------------饿汉模式。
1>延迟加载实现。只有真正要使用的时候才产生
2>不加同步线程不安全,加了同步效率就低
---------------缺点:这是线程不安全的。
public class Singleton{
private static Singleton sin;
private Singleton(){

}
public static Singleton getInstance(){
if(sin == null){
sin = new Singleton();
}
return sin;
}
}
--------------------------------------------------------
3.单列模式三----------双锁模式
1>既支持延迟加载,又支持线程安全的高并发。
public class Singleton{
private static Singleton sin;
private Singleton(){
}
public static Singleton getInstance(){
if(sin == null){
synchronized(Singleton.class){
if(sin == null){
sin = new Singleton();
}
}
}
return sin;
}
}
---------------------------------------------------------------------------
*工厂模式
定义:集中创建实例对象
将客户类和工厂类(eg:DBUtil)分开。最常见的模式
由一个类专门来产生对象,其余类来使用对象。
解耦:对象的创建和使用分离
---------------------------------------------------------------------------
1.简单工厂模式
一个工厂生产多个对象
2.工厂方法模式
多个工厂生产同一个对象
3.抽象工厂
产品和工厂都在变化,多个产品和多个工厂
---------------------------------------------------------------------------
建造者模式
---------------------------------------------------------------------------
*原型模式 Prototype
创建一个和已有的一模一样的新对象。
----------------------------------------------------------------------------
注意:重写的类必须实现Cloneable ---也只是一个标志性接口
克隆的方法:对属性的实现是用的值传递
--------------------------------------------------------------------
1.浅克隆
重写Object类的clone方法:
public Object clone() throws CloneNotSupportException{
return super.clone();
}
---------------------------------------------------------------------
2.深克隆
克隆的所有类实现Cloneable 接口,Serializable接口。
public 克隆对象类型 deepClone(){
当前对象类型 newObject = null ;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
ByteArrayOutputStream bos = null;
try{
bos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(bos);
oos.writeObject(this);
ois = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()));
newObject =(克隆对象类型) ois.readObject();
} finally{
………………
}
return newObject;

---------------------------------------------------------------------

----------------------------------------------------------------------------
2.结构模式 :涉及类与对象的组合
*Facade外观模式 eg:MVC
*适配器模式(Adaptor):
----即是 A B ,在C类中需要调用AB的方法。就是在C中包含住AB
*装饰器模式Decorator:
eg:IO 管道对接用的就是装饰器模式。
用的地方:东西有主次之分,
而且需要用次要的东西来修饰主的
代理模式(Proxy):
可以实现面向切面编程。也称面向方向编程。

桥梁模式(Bridge):
一个类型有两个或者多个维度的变化。
没有主次之分
3.行为模式:对于类和对象职责方法的设计
观察者模式
*命令模式
模版模式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值