JAVA编程思想感悟之对象理解

面向对象五个特性:

以下是书中原话

1.万物皆为对象。
将对象视为奇特的变量,它可以存储数据,除此之外,你还可以要求它在自身上执行操作。理论上讲,你可以抽取待求解问题的任何概念化构件(狗、建筑物、服务等),将其表示为程序中的对象。

2.程序是对象的集合,它们通过发送消息来告知彼此所要做的。
要想请求一个对象,就必须对该对象发送一条消息。更具体的说,可以把消息想象为对某个特定对象的方法的调用请求。

3.每个对象都有自己的由其他对象所构成的存储。
换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象。因此,可以在程序中构建复杂的体系,同时将其复杂性隐藏在对象的简单性背后

4.每个对象都拥有其类型。
按照通用的说法,“每个对象都是某个类(class)的一个实例(instance)”,这里“类”就是"类型"的同义词,每个类最重要的区别于其他类的特性就是“可以发送什么样的消息给它”

5.某一特定类型的所有对象都可以接收同样的消息。
这是一句意味深长的表述,你在稍后便会看到。

因为"圆形"类型的对象同时也是“几何形”类型的对象,所以一个“圆形”对象必定能够接受发送给“几何形”对象的消息。这意味着可以编写与"几何形"交互并自动处理所有与几何形性质相关的事物的代码。

这种可替代性是OOP中最强有力的概念之一。

对象具有状态、行为和标识。

每个对象都提供服务,将对象看做一个服务者,它有助于提对象的内聚性

个人理解:对象不仅仅是属性私有,get/set生成。将他看做一个服务者,应不应该提供服务

比如ebean的作者,orm实现,将model看做一个对象,每个对象都需要提供保存,更新方法。如果对象有特殊意义,还有其他的方法,比如用户对象应该有开启、关闭、注销用户方法

被隐藏的具体实现

将程序开发人员按照角色分为类创建者(那些创建新数据类型的程序员)和客户端程序员。客户端程序员的目标是收集各种用来快速应用开发的类。类创建者的目标是构建类。这种类只向客户端程序员暴露必须的部分,而隐藏其他部分。为什么要这样呢?因为如果加以隐藏,那么客户端程序员将不能够访问它。这意味着类创建者可以任意修改被隐藏部分,而不用担心对其他任何人造成影响。被隐藏的部分通常代表对象内部脆弱的部分,他们很容易被粗心的或不知内情的客户端程序员所损坏,因此将实现隐藏起来可以减少程序bug.

访问控制的第一个存在原因就是让客户端程序员无法触及他们不应该触及的地方--这些部分对数据类型的内部操作是必须的,但并不是用户解决特定问题所需的接口的一部分。这对客户端程序员来说其实是一项服务,因为他们可以很容易地看出哪些东西对他们来说很重要,而哪些东西可以忽略。

访问控制的第二个存在原因就是允许库设计者可以改变;类内部的工作方式而不用担心会影响到客户端程序员。例如,你可能为了减轻开发任务而以某种简单的方式实现了某个特定的类,但稍后发现你必须改写它才能使其运行得更快。如果接口和实现可以清晰地分离并得以保护,那么你就可以轻而易举地完成这项工作。

存储到什么地方

1.寄存器

这是最快的存储区,因为它位于不同于其他存储区的地方---处理器内部。但是寄存器的数量及其有限,所以寄存器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。

2.堆栈

位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时,JAVA系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些JAVA数据存储于堆栈中--特别是对象引用,但是JAVA对象并不存储于其中。

3.堆

一种通用的内存池(也位于RAM区),用于存放所有的JAVA对象。堆不同于堆栈的好处是,编译器不需要要知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当需要一个对象时,只需要new 写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须付出相应的代价:用堆进行存储 分配和清理可能比用堆栈进行存储分配需要更多的时间。

4.常量存储

常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,在嵌入式系统中,常量本身会和其他部分隔离开,所以在这种情况下,可以选择将其存放在ROM(只读存储器)中。

5.非RAM存储

如果数据完全存活于程序之外,那么它可以不受程序任何控制。在程序没有运行时也可以存在。其中两个基本的例子是流对象和持久化对象。在流对象中,对象转化成字节流,通常被发送给另一台机器。在“持久化对象”中,对象被存放于磁盘上,因此,即使程序终止,它们仍可以保持自己的状态。这种存储方式的技巧在于,把对象转化成可以存放在其他媒介上的事物,在需要时,可恢复成常规的、基于RAM的对象。JAVA提供了对轻量级持久化的支持,而诸如JDBC和hibernate这样的机制提供了更加复杂的对在数据库中存储和读取对象信息的支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值