《JAVA编程思想》读书笔记1——OOP思想

原创 2016年05月03日 22:34:28

面向对象思想

JAVA是一种面向对象编程语言,它基于Smalltalk语言,作为OOP语言,它具有以下五个基本特性

  • 万物皆对象,每一个对象都会存储数据,并且可以对自身执行操作。因此,每一个对象包含两部分:成员变量和成员方法。在成员方法中可以改变成员变量的值。
  • 程序是对象的集合,他们通过发送消息来告知彼此所要做的事情,也就是调用相应的成员函数。
  • 每一个对象都有自己的由其他对象所构成的存储,也就是说在创建新对象的时候可以在成员变量中使用已存在的对象。
  • 每个对象都拥有其类型,每个对象都是某个类的一个实例,每一个类区别于其它类的特性就是可以向它发送什么类型的消息,也就是它定义了哪些成员函数。
  • 某一个特定类型的所有对象都可以接受同样的消息。

另一种对对象的描述为:对象具有状态(数据,成员变量)、行为(操作,成员方法)和标识(成员名,内存地址)。

面向对象语言其实是对现实生活中的实物的抽象,而在我们实际的代码编写过程中,通常需要创建的类还包括很多不存在的事物,类似于实际存在的物体,定义类之前需要首先构思它拥有什么(需要定义哪些成员变量,分别是什么类型)、能够对它执行什么操作(需要定义哪些方法以及这些方法对成员变量的改变)。一旦类被建立,就可以在根据需要创建任意多个对象,不同对象可能拥有不同的成员变量(以此来表现它们的不同),然后通过方法操作它。

每个对象能够接受的请求(消息)由对象的接口所定义,而在程序中必须由满足这些请求的代码,这段代码称之为这个接口的实现。当向某个对象发送消息(请求)时,这个对象便知道该消息的目的(该方法的实现已定义),然后执行相应的代码。

每一个对象都提供服务

在设计对象时,较好的方法时将对象视为”服务提供者”,将该类的使用者想象成其它人(称之为用户),那么在设计的时候首先就要明确该对象需要哪些对象作为输入以及需要提供哪些接口供用户使用。这个过程一般是一个循序的过程,有时候会因为一个小功能而定义某个类,然后随着该类满足的需求增加则持续的增加一些新的成员变量和方法,如果一个类实现的功能过多,此时就需要考虑是否可以对此进行拆分。

通常,对于一个类有两种角色:类创建者和类使用者,通常情况下这两个角色是同一个人,但是对一些向外部提供的jar文件,使用者可能有很多。类创建者的目标是构建类,决定暴露给用户哪些,隐藏哪些。这样的一层关系可以划清两者之间的界限,使用者只需要理解他能够使用的接口,而创建者可以随意修改隐藏的部分。此时就能够彰显出接口的重要性。两个角色的沟通通过接口展现,此时最常见的方式创建者整理暴露出的接口文档,而使用者主需要根据该文档使用。

谈到了暴露和隐藏,就不得不提到java提供的访问控制:public、private和protected,public表示所有人可见、private表示只有类创建者和内部方法可见,protected类似于private,区别在于前者修饰的成员对子类是可见的。当不指定这三种权限控制时,java使用默认的权限,即包访问权限,表示它可以被该package下的方法使用。

当创建者和使用者建立基于接口的关系之后,就能够带来提高内聚性的好处,而这种方式也被称作:面向接口编程,而非面向实现编程。这样也就带来理想情况下的“高内聚,低耦合”。

组合和继承

随着代码量的增加,我们会发现一些代码会被重复编写,通常可以通过使用该类的一个对象来复用一个类,这种使用已存在的类组合成新的类称之为组合,组合能够带来较大的灵活性,通常会把该对象设置为private使得新类的使用者不能访问它们,屏蔽的好处就是当实现需要修改该成员时不会对现有用户造成任何影响。

继承是OOP语言最基本的特性之一,当继承现有类型(基类)的同时也创建了一个新类(派生类),新类不仅包含现有类的成员(即使是private成员也是包含的,只不过在新类中不能访问它),它还复制了现有类的接口,这样就使得向现有类对象发送的消息都可以发送给新类的对象。有两种方式可以使得派生类和基类产生差异:1、在基类的基础上增加新的接口,这样派生类具有了特有的特性;2、实现在基类中已经实现的接口,称之为覆盖。

对于一个非面向对象编译器(例如C编译器)产生的函数调用会引起所谓的“前期绑定”,它意味着编译器将产生一个具体函数名的调用,在运行时将这个调用解析成要执行得代码的绝对地址,而随着继承的使用,程序直到运行时才知道发送消息的对象和执行代码的地址。为了解决这个问题,OOP语言使用“后期绑定”,当向对象发送消息时被调用的代码直到运行时才确定,编译器只保证方法的存在。

在java中实现OOP区别于C++的最大特点就是所有的类都继承自单一的基类,并且每一个类只能拥有一个唯一的派生类,java中所有的终极父类成为Object(它是所有没有基类的类的基类),它拥有一些方法,这使得java中所有的类都会可以覆盖某些方法。

总结

本文主要介绍了一些OOP编程的基础和思想,大部分是基于《JAVA编程思想》的内容和个人的理解。

版权声明:本文为博主原创文章,未经博主允许不得转载。

OOP思想与Java实现

大纲: 《Java编程思想》第一章对象导论摘录 OPP的基本思想 OPP与面向过程的区别 OPP解决了什么问题 Java中的OPP表现 OPP为面向对象编程,其重点是“对象”上面,什么是对象?自然界中...
  • WuSicheng
  • WuSicheng
  • 2015年12月21日 23:38
  • 1215

OOP思想应该怎样来理解?

它强调对象的“抽象”、“封装”、“继承”、“多态”。  OOP思想浅谈 收藏 07年11月27号在校内举办了第一次技术讲座,主题是Java now and future.和以往的同主题的讲座不同,我在...
  • zyyr365
  • zyyr365
  • 2009年07月07日 16:12
  • 11003

编程思想的理解(POP,OOP,SOA,AOP)

1)POP--面向过程编程(Process-oriented programming ): 面向过程编程是以功能为中心来进行思考和组织的一种编程方法,它强调的是系统的数据被加工和处理的过程,在程序设...
  • hawksoft
  • hawksoft
  • 2011年11月29日 09:15
  • 25943

php之oop:编程思想从过程到对象

有一个人走进商店,他对老板说:我想要一个东西,这个东西呢,它是圆形的,是甜甜的,上面有奶油,并且有一些水果在上面,可以插蜡烛... 他繁复得叙述的这个什么东西,究竟是什么呢?其实我不说大家也猜得到:他...
  • u013782819
  • u013782819
  • 2015年05月07日 10:27
  • 369

Java编程思想重点笔记(Java开发必看)

Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理解题(比如is-a...
  • lanxuezaipiao
  • lanxuezaipiao
  • 2014年12月09日 13:22
  • 17718

《Java编程思想》学习笔记11——Java I/O

Java中使用流来处理程序的输入和输出操作,流是一个抽象的概念,封装了程序数据于输入输出设备交换的底层细节。JavaIO中又将流分为字节流和字符流,字节流主要用于处理诸如图像,音频视频等二进制格式数据...
  • chjttony
  • chjttony
  • 2011年11月13日 17:45
  • 3442

《Java编程思想》学习笔记18——并发编程(一)

线程是进程中一个任务控制流序列,由于进程的创建和销毁需要销毁大量的资源,而多个线程之间可以共享进程数据,因此多线程是并发编程的基础。 多核心CPU可以真正实现多个任务并行执行,单核心CPU程序其实不...
  • chjttony
  • chjttony
  • 2011年12月04日 16:51
  • 5815

【java】《java编程思想》 读书笔记

之前主要用的C++的比较多,之前花了快2个月的实际认真系统全面的学习了以下java的基础语法,《java编程思想》这本书翻译水平确实不是很好,很多话读着会比较拗口。推荐读之前,先去网上搜索 “java...
  • a2888409
  • a2888409
  • 2015年10月15日 10:07
  • 1929

Java编程思想重点笔记(Java开发必看)

  • 2016年11月27日 10:23
  • 437KB
  • 下载

java编程思想第五版——中文版(附学习笔记)

  • 2012年04月01日 16:26
  • 54.23MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《JAVA编程思想》读书笔记1——OOP思想
举报原因:
原因补充:

(最多只允许输入30个字)