Java 语言是纯粹的面向对象的程序设计语言,这主要表现为Java完全支持面向对象的三种基本特征:继承、封装和多态。整个Java程序是由一个一个类组成的。
Java完全支持使用对象、类、继承、封装、消息等基本概念来进行程序设计,允许从世界中客观存在的事物(即对象)出发来构造软件系统,再系统构造中尽可能运用人类的自然思维方式。面向对象的方式实际上由OOA(面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三个部分有机组成,其中,OOA和OOD的结构需要使用一种方式来描述并记录,目前业界统一采用UML(统一建模语言)来描述并记录OOA和OOD的结果。
常用的UML图形有例图、类图、组件图、部署图、顺序图、活动图和状态机图。暂时了解这么多足够了。
2.1 面向对象
在目前的软件开发领域有两种主流的开发方法:结构化开发方法和面向对象开发方法。面向对象可以提供更好的可重用性、可扩展性和可维护性。
2.1.1 结构化程序设计简介
结构化程序设计方法主张按功能来分析系统需求,其主要原则柯概括为自顶向下、逐步求精、模块化等。架构话程序设计首先采用结构化分析(Structured Analysis, SA) 方法对系统进行需求分析,然后使用结构化设计(Structured Program,SP)方法对系统进行概要设计、详细设计,最后采用结构化编程(Structured Program,SP)方法来实现系统,使用这种SA、SD和SP的方式可以较好地保证软件系统地开发进度和质量。
因为结构化程序设计方法主张按功能把软件系统逐步细分,因此这种方法也被称为面向功能地程序设计方法:结构化程序设计地每个功能都负责对数据进行一次处理,每个功能都接受一些数据,处理完后输出一些数据,这种处理方法也被称为面向数据流的处理方式。
结构化程序设计里最小的程序单元使函数,每个函数都负责完成一个功能,用以接受一些输入数据,函数对这些输入数据进行处理,处理结束后输出一些数据。整个软件系统由一个个函数组成,其中作为程序入口的函数被称为主函数,主函数依次调用其他普通函数,普通函数之间依次调用,从而完成整个软件系统的功能。

由图可以看出,结构化设计需要自顶向下的设计方式,在设计阶段就需要考虑每个模块应该分解成哪些子模块,每个子模块又分解成哪些更小的模块…依此类推,直至将模块细化成一个个函数。
每个函数都是具有输入、输出的子系统,函数的输入数据包括函数形参、全局变量和常量等,函数的输出数据包括函数返回值以及传出参数等。结构化程序设计方式又如下两个局限性:
(1)设计不够直观,与人类习惯思维不一致。采用结构化程序分析、设计时,开发者需要将客观世界模型分解成一个个功能,每个功能用以完成一定的数据处理。
(2)适应性差,可扩展性不强。当用户的需求发生更改的时候,都需要自定向下地修改模块结构,这种方式地维护成本太高。
有一说一,这个结构化设计看得我懵懵的,原话说就是像我们使用c语言一样,用函数作为最小单位,然后主函数负责连接各个功能的子函数。但是这样的系统会出现上面提到的一些问题。所以,我看了半天,这个结构化设计是不好的???
2.1.2 程序的三种基本结构
不知道为什么,书里面这一节提到在Java语言中,拒绝使用GOTO语句,但是把它作为了保留字。
重点:任何简单或复杂的算法都可以由顺序结构、选择结构和循环结构三中基本结构组成。所以,这三种结构就被称为程序设计的三种基本结构,也是结构化程序设计必须采用的结构。
2.1.2.1 顺序结构

这个很简单啦,我就不多写了,就是在源代码种按排列顺序依次执行语句。如图:程序从a进入到S1再到S2再从b出来,就很顺的完成一个结构。
2.1.2.2 选择结构

选择结构也是非常容易理解的,相信学过c语言的人都了解选择结构。很简单,做选择然后执行语句。
2.1.2.3 循环结构

(1)当型结构 :先判断条件,当条件为真时执行循环体,并且在循环体结束时自动返回到循环入口处,再次判断循环条件:如果条件为假,则退出循环体到达流程出口处 因为是"当条件为真时执行循环",即先判断后执行,所以被称为当型循环。
(2)直到型循环: 从入口处直接执行循环体,循环体结束时判断条件,如果条件为真,则返回入口
处继续执行循环体,直到条件为假时退出循环体到达流程出口处,是先执行后判断。因 为是"直
到条件为假时结束循环",所以被称为直到型循环。
前面三种结构已经非常熟悉了,我就没记多少笔记。跟其他语言一样,Java语言的方法体内同样是由这三种程序结构组成的,换句话说,肃然Java是面向对象的,但Java的方法里则是一种结构化的程序流。
2.1.3 面向对象程序设计简介
看了书感觉,对面向对象的介绍有点抽象,在这里我就按自己的了解,写一写。面向对象一切以对象为中心,大家一定要记住对象这个概念,比如:你要写一个管理系统,那么你的对象就是管理员和成员等。就这样的话很直观地可以直接映像到客观世界,就感觉你写这个程序就是在写一个世界。
采用面向对象方式的软件系统,其最小的程序单元是类,这些类可以生成系统中的多个对象,而这些对象则直接映像成客观世界的各种事物。结构如下:

下面一个公式:
我的理解就是,一个类的定义,需要包括一个成员的基本属性,比如人的身高,体重等。还需要有一个成员的行为,比如人吃饭,运动等动作。这样整合在一起才叫做一个类。如果理解有误,可以指证。
书中有一个很好的例子,讲述了面向对象和面向过程的区别。比如完成猪八戒吃西瓜这个事件
- 用面向过程表达:吃(猪八戒,西瓜)
- 用面向对象表达:猪八戒.吃(西瓜)
好好感受一下,就知道两者的区别巨大有木有。
2.1.4 面向对象的基本特征
面向对象方法具有三个基本特征:封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。这三个以后应该会仔细将,这里我就不记太多笔记。
除此之外,抽象也是面对对象的重要部分,抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关地方面。抽象不打算了解全部问题,只是考虑部分问题。
面向对象还支持如下几个功能:
- 对象是面向对象方法中最基本的概念,它的基本特点有 标识唯 性、分类性、多态性、封装性、模块独立性好。
- 类是具有共同属性、共同方法的 类事物 类是对象的抽象;对象则是类的实例 而类是整个软件系统最小的程序单元,类的封装性将各种信息细节隐藏起来,并通过公用方法来暴露该类对外所提供的功能,从而提高了类的内聚性,降低了对象之间的稿合性。
- 对象间的这种相互合作需要 个机制协助进行,这样的机制称为"消息" 消息是 个实例与另个实例之间相互通信的机制。
- 在面向对象方法中,类之间共享属性和操作的机制称为继承 继承具有传递性 继承可分为单继承( 个继承只允许有 个直接父类,即类等级为树形结构)与多继承( 个类允许有多个直接父类)
在编程语言领域,还有一个“基于对象”的概念,这两个概念极易混淆。“基于对象”也使用了对象,但是无法利用现有的对象模板产生新的对象,也就是说,“基于对象”没有继承的特点。例如JavaScript。
















