疯狂java第二章

知识点记录

1.面向对象的方式实际上有OOA(面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三个部分有机组成,其中OOA和OOD的结构需要使用一种方式来描述记录,目前业界采用UML(统一建模语言)来描述并记录OOA和OOD的结果。
2.结构化程序设计
.结构化程度设计方法主张按功能来分析系统需求,其主要原则可概括为自顶向下,逐步求精、模块化等;因为结构化程序设计主张按照功能把软件系统逐步西峰,因此这种方法也被称为面向功能的设计方法。
.结构化程序设计菹行的程序单元是函数,每个函数负责完成一个功能,用以接受输入数据,函数对这些输入数据进行处理,处理结束后输出数据。整个软件系统由一个个函数组成,其中作为程序入口的被称为主函数,主函数以此调用其他普通函数,普通函数之间依次调用,从而完成整个软件系统的功能。
.结构化程序设计非常强调某个功能的算法,而算法的实现过程是由一系列操作组成的这些操作之间的执行次序就是程序的控制结构:任何简单的或复杂的算法都可以由顺序结构、选择结构和循环结构这三种基本结构组合而成。
a.顺序结构,个人理解:程序从上到下,依次执行。
b.选择结构,个人理解:程序中的条件判断,if…else…。
c.循环结构,个人理解:程序反复执行某个操作,制动为假或者真时停止,for循环加if
其实java语言的方法体中也是由这3种程序控制组成,虽然java是面向对象的,但是java的方法里则是一种结构化程序流。
3.面向对象设计
.面向对象是一种更优秀的程序设计方式,它的基本思想是使用类、对象、继承、封装、多态、消息等基本概念进行设计。它从现实中客观存在的事物从发来构造软件系统,强调以现实世界中的事物(及对象)为中心思考,认识事物,并根据这些事物抽象表示为系统中的类,作为系统的基本构成单元。
.面向对象的软件系统由多个类组成,类代表客观世界中具有某种特种的一类事物,比如人的身高、年龄,体重等各种状态数据,当然我们不需要记录事物的所有特征,我们只关系业务上面的状态数据即可。
.面向对象语言不仅使用类来封装一类事物内部状态数据,这种数据对应程序中成员变量;而且提供操作这些状态数据的方法,还为这类事物的行为特征提供相应的操作实现,也就是程序中的方法,也就是:
成员变量(状态数据) +方法(行为)=类定义
.以“猪八戒吃西瓜”这样一件事情说明:
a.在面向过程设计中,一切以函数为中心,函数最大,因此这件事件可以用如下语句表达:
吃(猪八戒,西瓜);
b.在面向过程设计中,一切以对象为中心,对象最大,因此这件事件可以用如下语句表达:
猪八戒.吃(西瓜);
.面向对象的3个基本特征:
a.封装;指的是将对象的实现细节隐藏起来,然后通过一些公共的方法来暴露该对象的公能。
b.继承;是面向对象软件复用的重要手段,当子类继承父类后,作为一种特殊的父类可以直接使用父类的方法和属性。
c.多态;指子类对象可以直接赋值父类变量,但是运行时还是表项子类行为特征,这标识同一类型对象使用同一个方法时,可能表现多种不同特征。
d.抽象是面对对象的重要组成部分,但它不是特征之一,因为抽象是所有编程语言都需要的,但是具体需要哪些特征是根据业务进行选择,而没有具体定义需要抽象哪些。
3.UML
a.用例图
介绍:用例图仅仅用于描述系统提供的功能,他主要目的是帮助开发团队以一种可视化的方式理解系统的需求功能;用用例图表示出系统功能之间的关系—要么是整个系统的全部功能关系,要么是一些具体功能之间的关系;用例图通常用于需求分析阶段使用。
用法:用例(也就是功能)用一个椭圆表示,用例的名称放在椭圆的中心或者下边;角色,也就是与系统交互的其他实体,以一个人形符合表示,角色和用例之间的关系用一条线段表示,用例与用例之间用一个带箭头的虚线表示,箭头指向所依赖的用例。
b.类图
介绍:类图表示系统中应该包含那些实体,这些实体之间的关系,也就是java程序中的实体类,UML中实体类的画法:类在类图使用中是一个分为3个部分的矩形,最上边可以写类的名称;中间写类的属性;最下边写类的方法;+表示public,-表示私有。类图之间的关系有三种:
(1)关联
关联区别于依赖,依赖是一种弱关联,如汽车和驾驶员,驾驶员用完汽车后关系就解除了,是一种临时关系,代码层面,在java中,依赖表现为:局部变量,方法中的参数和对静态方法的调用,UML图中用一条带箭头的虚线表示,箭头指向被依赖的类;关联关系是一种长期性的关系,如职员和公司(箭头指向员工),代码层面,在java中,关联表项为:类的成员变量,UML图中用一条实线表示,带箭头表示单项关联,指向被包括的一部分,没有箭头表示双向关联。
其中,关联关系包含2种特例:聚合和组合,在代码层面,聚合和组合根关系是一样的,只能在语义上面区分,它们都是部分和整体之分,其中聚合关系中,成员对象是整体的一部分,但是又可以脱离整体单独存在,汽车(Car)与引擎(Engine)、轮胎(Wheel)、车灯(Light),UML中用空心的菱形表示,java代码如下:

public class Engine{}
public class Wheel{}
public class Light{}
///聚合
public class Car
{
    private Engine engine;
    private Light light;
    private Wheel wheel;
    
    public Car(Engine engine, Light light, Wheel wheel)
    {
        super();
        this.engine = engine;
        this.light = light;
        this.wheel = wheel;
    }
    public void drive()  {  }
}

而组合关系中,整体可以控制成员的生命周期,成员也不能脱离整体,比如人的头(Head)和嘴巴(Mouth)、鼻子(Nose),UML中组合关系用带实心菱形的直线表示,在java代码中可以表现如下:

public class Mouth{}
public class Nose{}
组合
public class Head
{
    private Mouth mouth;
    private Nose nose;
    
    public Head()
    {
        mouth = new Mouth();
        nose = new Nose();
    }
    public void shake(){}
}

总结:
关联和聚合的区别主要在于语义上:关联的两个对象之间一般是平等的,聚合则一般是不平等的。

聚合和组合的区别则在语义和实现上都有差别:组合的两个对象之间生命周期有很大的关联,被组合的对象在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁,一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象;聚合则不一样,被聚合的对象可以属于多个聚合对象。
(2)泛型
泛型和继承是同一个概念,都是指子类是一种特殊的父类,UML中用带空心三角形实线表示,三角形指向父类,还有一种与继承相似的关系,类接口的实现,UML中用带空心三角形的虚线表示,三角形指向接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值