求知可以作为消遣,可以作为装潢,也可以增长才干。读书使人头脑充实,讨论使人明辨是非,做笔记则能使知识精确。我想在做有关于java网络编程书籍学习的笔记,也是有好处的,就像培根说的做笔记可以使知识更精确。接下来接着上次的继续做笔记。
1.3 面向对象与面向过程的差异
一种程序设计语言的产生,不仅是程序设计技术的改进,也包含了表达和认知思想的进步。
以C语言为代表的部分早期语言,被称为面向过程的语言,不仅因为其程序设计的表达形式是以过程为基本元素,本质上更在于此时对计算机化的系统的理解的主导思想还是控制流或者数据流的,构成系统的要素是模块——处理逻辑。
面向对象语言的产生,是因为对于系统的理解或抽象到了更为高级的层次。此时的认知思想不仅更接近于现实世界,其抽象程度也很高。因而,既有易懂的一方面,也有难懂的另一方面,就看理解的境界了。
1.3.1 面向过程思想回顾
面向过程思想和程序设计语言的体现,可以简单总结为以下几条:
对系统的认识采用结构化分析的过程——自顶向下,逐步求精地进行功能分解;
每个功能就是处理数据的一个模块,因而IPO描述充分刻画了模块的内外特征;
每个模块都是控制流的,因而有典型的三种程序结构——顺序、分支、循环;
模块间的关系通过调用维系,因而模块成为了函数,这也是面向过程方式下最主要的代码重用方式;
尽管函数调用有参数和返回值,但数据总是和函数分开的,不仅有了著名的断言——程序=算法+数据,也使得绝对平等产生了无序的麻烦——所有的函数和数据的关联关系没有限制;
如果要使用数据流,那么只能是在数据产生之后的适当时机调用函数。
这一时期的主要缺点是:对系统的理解比较难,系统地开发效率低,代码的可重用性差。
1.3.2 面向对象思想介绍
面向对象思想,对现实世界采用直观的理解,计算机化时候采用深度的抽象,简单地可以总结如下:
系统是由事物构成的,事物之间是有联系的,复杂的事物也是系统;
系统与系统、系统与事物、事物与事物之间是有明确界限(边界)的;
系统或事物的状态刻画可以用属性表示,属性一般是些简单的数据,如果复杂那就是事物了;
系统或事物的状态会发生变化,称为行为,产生变化是有原因的(内部的或外部的),变化的过程可能是复杂的;
不同的事物之间会具有共同的属性和行为,共同的极端情形就是完全包含。
基于以上的认识,一个运行时(动态)的具体系统或事物,是由几个更小的具体事物构成(极端的事物就是一个简单的属性数据),它们是不断发生变化的。如果对事物这一概念进行了有效的抽象,那么问题就迎刃而解。
首先,将任何一个具体的事物称为对象(Object),它的极端情形就是过去的变量;事物是分类的,每一类事物都具有统一的属性和行为,即类型——抽象数据类型,简称为类(Class);行为既然是过程,那么就抽象成函数,命名为方法,以示区别。
例如:
描述身高或姓名,各自只是一个简单的数据变量;
描述一个学生,可以使用学号、姓名、宿舍、班级等;那更换宿舍算什么呢!
那描述宿舍、班级,又要有许多个项目。
1.4 面向对象程序设计中的主要概念和特征
面向对象程序设计(Object Oriented Programming,OOP)语言中,为了进行更为高度的抽象,会引入一些现实世界中难于找到的概念,但对于一个程序语言来说确实很有价值的。以下暂时介绍的概念基本上都来源于对现实世界的抽象,要从程序设计的角色中去理解它们。
面向对象程序设计使系统更易于理解,也使代码具有更好的重用性、可扩展性、易于管理和维护。
1.4.1 主要概念
1、类
类是对一类事物的抽象表示,其角色就相当于数据类型,当然可以算作复杂的数据类型。如学生、宿舍、班级。
2、对象
对象表示一个具体的事物,其角色就是变量,即一个复杂数据类型——xx类的变量。如周瑜、张飞、瑜飞居,飞虎班。
3、成员
一个事物的构成元素,讨论类的时候就是虚拟的,讨论对象的时候就是具体的。如在类中,一个变量属于成员——成员变量,一个对象也属于成员——成员对象,一个函数也属于成员——成员方法。
1.4.2 主要特征
OOP语言有三个特征:封装、继承及多态性。
1、封装
类的构成包括成员变量/对象与成员方法,这样将相关的数据与函数包装在一起,同其他的类相区分,就是封装。显然,避免了面向过程语言的平行缺陷,说明了类和成员之间的所属关系。进一步地,可以限制类的成员在外部的可见性,那么就将封装体现得更完美。
2、继承
当一种事物甲完全是另一种事物乙的特例,那么,一般地,类甲只是比类乙多出一些成员变量/对象与成员方法,称为类甲继承类乙,类甲称为(类乙的)子类,类乙称为(类甲的)父类。
父类也称为基类、超类,子类也称为导出类、派生类。
显然编写子类就没有必要重复书写父类中乙有的代码部分,这是OOP中最典型的代码重用。
3、多态
多态表示一个类的某种行为存在多种实现版本。简单的情况是在一个类中,给出多种不同的实现,复杂的情况是在多个子类中各自给出不同的实现。
*1.5 Java与C++的差异
学习完这一章节的关于java 入门书籍的知识,做完这次的笔记,我就能够做到解释Java语言的三种平台。解释支撑Java语言目标的三种主要技术(自查资料完善)。了解到关于面向对象与面向过程的不同,从问题理解和问题表示两种角度,按照个人的理解和认识,例示其不同的地方。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29130002/viewspace-769434/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29130002/viewspace-769434/