JAVA面向对象编程(孙卫琴)读书笔记(一)

到网上查了下java基础方面的书籍,最后选出了三本比较经典的:分别是 java编程思想(第四版)、JAVA2核心技术、JAVA面向对象编程(孙卫琴),很想买来看看,奈何口袋空空如也,只好看电子版的(可怜的娃啊!)

外国人和我们的思想方式不同,决定从 JAVA面向对象编程(孙卫琴) 看起,呵呵看看我们孙MM的水平如何,顺便也支持下国产哦。

第一章 面向对象开发方法概述
(此章为软件开发的总体思路,概念性的东西比较多,需要多花点时间理解)

一.软件开发的生命周期一般为:
1.软件分析
2.软件设计
3.软件编码
4.软件测试
5.软件部署
6.软件维护

而一个好的软件必须具备以下特点:
1.可重用性:减少软件中的重复代码,减少重复编码。
2.可扩展性:当软件需要增加新的功能是,可在现有的子系统上创建新的子系统,新的子系统继承了原有的子系统的一些特性,并还具有一些新的特性,从而提高软件的可重用性和扩展性。
3.可维护性:当用户需求发生改变的时候,之需要修改局部的一个或多个子系统中的少量代码,而不是前一发动全身。

如何才能具备上面所说的功能呢?我们需要把软件分解成多个小的子系统,这样这些小系统就像积木一样灵活地构成了整个软件系统。
而每个小系统又具备如下特点:
1.结构稳定性:软件分解成小的系统后,设计更加合理,使系统比较健壮。
2.可扩展性:(上面已经说过了)。
3.内聚性:每个子系统只完成特定的功能,不同的子系统之间不会有功能的重叠,为了避免功能重叠,每个系统的粒度要尽可能的小,这种方式构成的系统结构被称为精细粒度系统结构。内聚性会提高软件的可重用性和可维护性。(现在明白了在看Hibernate的时候,当一个表中的列多的时候可以将其进行细粒度划分的原因了。)
4.可组合性:多个小系统组合变成大的系统,可组合性提高了软件的可重用性和可维护性,大大简化了软件的开发过程。
5.松耦合性:子系统之间相互独立,修改一个子系统不会影响到其他的子系统。

二.开发方法:
1.结构化开发方法:主要用于早期的高级计算机语言,其程序的主体是方法,方法是最小的功能模块。
2.面向对象开发方法:把软件看成是各种对象的集合,对象就是最小的子系统。

三.对象模型和UML
在面向对象分析和设计阶段,致力于建立模拟问题领域的对象模型,将抽象的业务逻辑问题用对象模型表示出来,在这我们将用到UML(Unified Modeling language 统一建模语言)。

小结:面向对象开发中的核心思想和概念
在面向对象开发的过程中,我们开发者主要的任务是先建立模拟问题领域的对象模型,然后通过程序代码来实现对象模型。而到底如何建立对象模型,如何用代码实现对象模型,如何保证软件的可重用性和可扩展性和可维护性,这将需要我们在以后的成长过程中慢慢了解了。


四.问题领域、对象、属性、状态、行为、方法、实现
问题领域是指软件系所模拟真实世界中的系统。
对象是问题领域中事物的抽象。
对象有如下特点:
1.万物皆对象
2.每个对象都是唯一的(内存分配的地址不一样)
3.对象有属性和行为(属性即变量,行为即方法)
4.对象具有状态(状态指某个时候,对象的各种属性的取值)
5.对象都属于某个类

五.类、类型
类是一组具有相同属性和行为的对象的抽象,类以及类与类之间构成了对象模型的主要内容。
在面向对象编程的主要任务就是定义对象模型的各个类。

六.消息、服务
软件系统的复杂功能是有各种对象协同工作来共同完成的。
例如:遥控器和电视机
当按遥控器的开机按钮后,遥控器对象向电视机对象发送一个开机的消息,电视机对象接受到开机这个消息后则执行开机动作。
每个对象都有自己特定的功能,对于其他的对象而言,他的功能就是为其他的对象提供服务的。
我们再回头看下上面这个例子,电视机具有开机、关机的功能,遥控器为了得到电视机的服务,则发送消息给电视机,电视机实现这个服务。
对象提供的服务是由方法实现的,而发送消息也是调用了一个方法的对象,遥控器给电视机发送开机消息,也就是说遥控器对象调用了电视机对象的方法。

七.接口
既然每个对象都是服务提供者,那么它是如何对外提供服务的呢?他是通过接口来对外提供服务的。
例如:鼠标上的按钮,键盘上的按键,洗衣机上的按钮,都是对象向外面提供的接口。
如此看来现实生活中接口也可以是实体,而在面向对象的领域里,接口是一个抽象的概念,他指的是系统对外提供的所有服务,而系统的接口只描述了系统能提供那些服务,却不包括具体的实现。刚说到的系统可以说是整个系统,也可以小到对象,每个对象都是服务提供者,因此每个对象都有接口(这里要注意的是,对象中所有向使用者公开的方法声明构成了对象的接口,要方法是公开声明的)。
接口是提高系统之间松耦合的有力手段,例如电视机和遥控器,电视机向遥控器公开了红外线接受器的接口,是电视机和遥控器之间相互独立,当电视机发送改变的时候,比如换成了液晶的,而只要他提供的红外线接口不变,就不会影响遥控器的功能。

java中,接口有两种意思
1.指的是刚上面介绍的概念性的接口,即指系统对外提供的所有服务,在对象中声明为public的方法。
2.指的是用关键字interface关键字定义的实实在在的接口,也称为接口类型,他用于明确描述系统对外提供的所有服务,其能更家清晰地把系统的实现细节与接口分离。

八.封装、透明
封装指的是隐藏对象的属性和方法实现细节,仅仅对外公开接口,其优点如下:
1.便于使用者正确、方便地理解和使用系统,防止使用者错误修改系统的属性。(现在知道,在做持久层时,为什么要用接口了)
2.实现各系统的松耦合性提高系统的独立性。当系统里面的实现发生了改变,只要接口不变,不会影响到其他的系统。
3.提高软件的可重用性,每个系统都是独立的,可在不同的环境中重用。
4.减低了构建大型系统的风险,及时整个系统不成功,个别独立系统依然可以使用。

所以一个好的系统会封装了所有的实现细节,把它的接口与实现清晰地隔离开来,系统之间通过接口进行通信。

而面向对象的编程主要通过访问控制机制来进行封装,这种机制能控制对象的属性和方法的可访问性。在java中提供了四种访问控制级别:
1.public 对外公开,访问级别最高。
2.protected 只对同一个包中的类和子类公开。
3.默认 只对同一个包中的类公开。
4.private 不对外公开,只能在对象内部访问,访问级别最低。
灵活运用这4种访问级别就能有效控制对象的封装程度。

而对象的属性和方法那些该隐藏,那些公开,这里提供了两大原则:

1.尽可能多的东西藏起来,对外提供简洁的接口
系统封装的程度越高,那么他的独立性就越强,使用起来也方便。例如:半自动洗衣机和全自动洗衣机,半自动的提供了电源开关,和进水、定时、洗涤、排水等洗衣功能。而全自动洗衣机之提供了电源开关、洗衣模式等几个少数功能,他把进水和定时、排水等功能进行了全部放入了洗衣模式里面去进行了封装,对外只提供了几个简洁易用的接口,使洗衣机洗衣更方便。

2.把所有属性藏起来
假如某种属性允许外界访问,那么提供访问该属性的公开方法。例如电视机的声音:
private int volume;

public void setVolume(int volume)
{
  this.volume=volume;//这里的this.volume是指类的属性volume,下面的例子也是一样
}
public int getVolume()
{
  return volume;
}

这里为什么不把volume属性定义为public类型呢,原因如下:

①.符合真实世界外因通过内因起作用的规律。一个对象的属性发生变化是外界和内界因素共同作用的结果,外界发送把音量调低的消息,即调用了电视机的setVolume()方法,内因便是电视机对象本身调用音量控制方法,即setVolume()方法。(呵呵,记得以前写东西的时候,属性和方法统统都是public)

②.能灵活控制属性的读和修改的访问级别。
有些属性只允许使用者读,而修改只有对象内部才能修改 如电表:
private double electrical;
public doublie getElectrical()
{
  return elecrical;
}
private void setElectrical(double electrical)
{}

③.防止用户错误修改属性
银行的用户密码进行设置的时候需要6位,而且不能为空
private String password;
public void setPassword(String password)
{
  if(password==null||password.length!=6)
       throw new IllegelArgumentException("some errors");  
  else
       this.password=password;
}

④.有助于对象封装细节的实现
有时候,如果一个对象的属性发生变化,会引起其内部的一系列的反应,但是这些是对使用者是透明的,也就是说使用者是看不见的。
例如:计算器的属性sacale 表示数学的进制,当用户选择了是二进制的时候
private int date;
private int sacale;

public void setScale(int sacale)
{
  int oldScale=this.scale;
  this.sacle=sacale;
  tranefer(oldScale,sacale);
}

private void tranefer(int oldScale,int sacale){};


现在小结一下:
与封装具有相同含义的一个概念是透明。对象封装了具体实现细节,这也就意味这具体实现细节是对使用者透明的,也就是看不见的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值