疯狂Java讲义 第二章 理解面向对象

jefxff 153,611 2020-03-05

第二章 理解面向对象

Java 语言是纯粹的面向对象的程序设计语言,这主要表现为 Java 完全支持面向对象的三种基本特征:继承、封装、多态。Java语言完全是以对象为中心,Java程序的最小单位是类,整个Java程序由一个一个的类组成。
面向对象的方式实际上由OOA(面向对象分析)OOD(面向对象设计)OOP(面向对象编程),三个部分有机组成。


2.1 面向对象

结构化程序设计了解

理解:结构化程序设计方法主张按功能来分析系统需求,其主要原则可概括为:自顶向下、逐步求精、模块化等。
结构化程序设计里最小的程序单元是函数,每个函数都负责完成一个功能,用以接收一些输入数据,函数对这些输入数据进行处理,处理结束后输出一些数据。整个软件系统由一个个函数组成,其中作为程序入口的函数被称为主函数,主函数依次调用其他普通函数,普通函数之间依次调用,从而完成整个软件系统的功能。
结构化程序设计也有缺陷:一是设计不够直观,与人类的习惯思维不一致;二是适应性差,可扩展性不强。

程序的三种基本结构

  1. 顺序结构
    表示程序中的各操作是按照他们在源代码中的排列顺序依次执行的;Java的方法类似于结构化程序设计的函数, 因此在方法中代码的执行也是顺序结构.
  2. 选择结构
    表示程序的处理需要根据某个特定的条件选择其中一个分支执行,选择结构有:单选择、双选择、多选择三种形式
  3. 循环结构
    循环结构表示程序反复执行某个或某些操作,直到某条件为假(或为真)时才停止循环。循环结构的重点:在什么情况下循环? 那些操作需要重复循环?
    循环结构的基本形式: 当型循环结构 和 直到型循环结构
    当型循环结构: “当条件为真是执行循环” 先判断条件,当条件为真时执行循环体,并且在循环体结束时自动返回到循环入口处,再次判断循环条件;如果条件为假则退出循环体到达流程出口处。
    直到型循环结构: “直到调条件为假时结束循环” 从入口处直接执行循环体,循环体结束时判断条件,如果条件为真,则返回入口处继续执行循环体,直到条件为假时退出循环体到达流程出口处,是先执行后判断。

面向对象程序设计简介

面向对象的基本思想
  1. 面向对象的基本思想是使用类、对象、继承、消息等基本概念来进行程序设计。
  2. Java采用面向对象方式开发的软件系统,其最小的程序单元是类,这些类可以生成系统中的多个对象,而这些对象则直接映像成客观世界的各种事物。
  3. 类代表了客观世界中具有某种特征的一类事物,这类事物往往有一些内部的状态数据,比如人的升高、体重、年龄、爱好等各种状态数据---当然程序没必要记录该事物的所有状态数据,程序只要记录业务关系你的状态数据即可。
  4. 理解 成员变量(状态数据) + 方法(行为) = 类定义
    从这个等式来看,面向对象要比面向过程的编程粒度大,面向对象的程序的单位是类,而面向过程的程序的单位是函数(相当于方法),因此面向对象编程更简单、易用。从面向对象的眼光来看,开发者希望从自然的认识、使用角度来定义和使用类。也就是说开发者希望直接对客观世界进行模拟:定义一个类,对应客观世界的那种事物;业务需要关心这个事物的哪些状态,程序就为这些状态定义成员变量;业务需要关心这个事物的哪些行为,程序就为这些行为定义方法。

面向对象的基本特征

三个基本特征
  1. 面向对象的三个基本特征:封装(Encapsulation)继承(Inheritance)多态(Poiymorphism)
  2. 理解抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是考虑部分问题。
  3. 封装、继承、多态的含义
  • 封装:指的是将对象的实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能;
  • 继承:当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法;
  • 多态:指的是子类对象可以直接赋给父类变量,但运行是依然表现出子类行为特征,这意味着同一个类的对象在执行同一个方法的时,可能表现出多种行为特征。
面向对象功能
  1. 对象是面向对象方法中最基本的概念,它的基本特点有:标识唯一性、分类性、多态性、封装性、模块独立性好。
  2. 类是具有共同属性、共同方法的一类事物。类是对象的抽象;对象则是类的实例。而类是整个软件系统最小的程序单元,类的封装性将各种信息细节隐藏起来,并通过公用方法来暴露该类对外所提供的功能,从而提高了类的内聚性,降低了对象之间的耦合性。
  3. 对象间的这种相互合作需要一个机制协助进行,这样的机制称为“消息”。消息是一个实例与另外一个实例之间相互通信的机制。
  4. 在面向对象的方法中,类之间共享属性和操作的机制称之为继承。继承具有传递性。继承可分为单继承(一个继承只允许有一个直接父类,即类的等级与树形结构)与多继承(一个类允许有多个直接父类)【Java不支持多继承,因为会引起继承结构混乱】

2.2 UML(统一建模语言)了解

面向对象过程:

  1. OOA(面向对象分析):对目标系统进行分析,建立分析模型,并将之文档化;
  2. OOD(面向对象设计):用面向对象的思想对OOA的结果进行细化,得出设计模型。
  3. OOP(面向对象编程)
  4. UML就是用来、记录OOA和OOD结果的符号表示法。

UML2.0 13 种正式图形:

活动图(activity diagram)类图(class diagram)、通信图(communication diagram,对应于UML1.x中的协作图)、组件图(component diagram)、复合结构图(composite structure diagarm, UML2.0新增)、部署图(deployment diagram)、交互概观图(interactive overview diagram, UML2.0新增)、对象图(object diagram)、包图(package diagram)、顺序图(sequence diagram)状态机图(state machine diagram)、定时图(timing diagram, UML2.0新增)、用例图(use case diagram)

常用的UML图

用例图

用于描述系统提供的系列功能,而每个用例图则代表系统的一个功能模块,目的:帮助开发团队以一种可视化的方式理解系统的需求功能,用例图对系统的实现不做任何的说明,仅仅是系统功能的描述;用例图不要做的过多,尽可能多的使用文字说明。

类图

表示系统中应该包含哪些实体,各实体之间如何关联;它显示了系统的静态结构,类图可用于表示了逻辑类,逻辑类通常就是业务人员所谈及的事物种类。
类之间三种基本关系:
1. 关联:(包括聚合、组合) 单向关联,双向关联. (关联和属性的区别在于:类里面的某个属性引用到另外一个实体时,则变成了关联。)
2. 泛化:(与继承同一个概念)
3. 依赖: 如果一个类的改动会导致另一个类的改动,则称两个类之间存在依赖关系。
依赖常见的原因:
1. 改动的类将消息发给另一个类;
2. 改动的类以另一个类作为数据部分;
3. 改动的类以另一个类作为操作参数。

组件图

提供系统的物理视图,它的用途是显示系统中软件对其他软件组件(例如,库函数)的依赖关系。组件图可以再一个非常高的层次上显示,仅显示系统中粗粒度的组件,也可以在组件包层次上显示。 组件图通常包括:组件、接口、Port等图元。
接口的两种表现形式:
1. 用一条实线连接到组件边界的圆边表示;
2. 使用位于组件内部的圆圈表示。
组件出来可以对外提供服务接口之外,组件还可能因爱与某个接口,组件依赖于某个接口使用带半圆的实线来表示。

部署图:

用于描述软件系统如何部署带硬件环境中,它的用途是显示软件系统不同的组件将在何处的物理运行,以及他们将如何彼此通信。

顺序图:

显示具体用例(或者是用例的一部分)的详细流程,并且显示流程中不同对象之间的调用关系,同事还可以很详细的显示对不同对象的不同调用。顺序图描述了对象之间的交互(顺序图和通信图都被称之为交互图),重点在于描述消息及其时间顺序。
顺序图两个维度:
1. 垂直维度:以发生的时间顺序显示消息/调用的序列;
2. 水平维度:显示消息被发送到对象的实例。

活动图:

主要用于描述过程原理,业务逻辑以及工作流技术。活动图非常类似于传统的流程图,它也是用圆角矩形表示活动,是用带箭头的实线表示事件,活动图支持并发。


2.3 Java的面向对象特征

一切都是对象

对象

对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能代表具体的事物,还能表示抽象的规则,计划或事件。

对象的状态

一个对象用数据值来描述它的状态,Java通过为对象定义成员变量来描述对象的状态。

对象的操作

对象的操作也称为对象的行为,Java通过为对象定义方法来描述对象的的行为。

注意

Java里的对象具有唯一性,对象都有一个标识来引用他,如果某个对象是去了标识,这个对象就变成了垃圾,等待系统回收。
Java语言不允许直接访问对象,只能通过对对象的引用来操作对象。

类和对象

具有相同或相似性质的一组对象的抽象就是类。类是对一类事物的描述,是抽象的、概念上的定义;
对象是实际存在的该类事物的个体,因此也称之为实例(instance)对象的抽象化是类,类的具体化就是对象Java语言使用 class 关键字定义类,使用成员变量来描述该类对象的数据,使用方法来描述该类对象的行为特征。

Java类中的两种关系
  1. 一般---特殊关系:这种关系就是典型的继承关系,使用 extends 关键系来表示这种继承关系,Java的子类是一种特殊的父类,是一种 “ is a ” 关系。
  2. 整体---部分结构关系:也称之为组装关系,通过在一个类里保存另外一个对象的引用来实现这种组合关系, 是一种“ has a ” 关系。

# Java