`
liwen19840617
  • 浏览: 42111 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

再读java思想----一切皆对象

    博客分类:
  • java
 
阅读更多

1、在良好的面向对象设计中,每个对象都能很好的完成一项任务,但是它并不试图做更多的事情。

 

2、将程序开发人员分为类创建者和客户端程序员。

 

     客户端程序员(client programmer)目标是收集各种用来实现快速应用开发的类。

 

     类创建者目标是构建类。该类只向客户端程序员暴漏必须的部分,而影藏其他所有部分。被影藏的部分通常都是代表对象内

 

部脆弱的部分,这样可以减少程序的bug。

 

3、java使用三个关键字在类的内部设定边界:public,protected,private。

 

    public:表示紧随其后的元素对任何人都可见。

 

    private:表示紧随其后的元素除类型创建者和该类型的内部方法之外的任何人都不能访问。

 

    protected:与private作用相当,差别仅在于继承类可以访问protected成员,但不能访问private成员。

 

4、类的复用

 

     最简单的复用就是直接使用该类的一个对象,此外也可以将该类的一个对象作为新类的成员。这种概念成为组合。组合

经常被视为“has-a”(拥有)关系。

 

5、类的继承

 

     通过类的继承,我们可以达到复制原有类的目的,并且还可以在新类上添加自己的属性和功能。但是,当原有类(超类,父类)发生了变更,那么这些变更将也会反映在导出类上。

 

     当我们继承某类的时候,也创造了新类。这个新类不仅包括了现有类型的所有成员(尽管private成员被影藏起来,并且不可访问),而且更重要的是它复制了基类的接口。也就是说,所有可以发送给基类对象的消息同时也可以发送给导出类。

 

     由于基类和导出类具有相同的基础接口,所以伴随此接口的必定有具体实现。如果导出类不具体去实现接口,那么直接就会继承基类的接口实现,这样导出类与基类就没有区分,导出类也就没有任何价值了。

 

     有两种方法可以使导出类和基类产生差异。其一:直接在导出类中加入新的方法。其二:重载。也就是说,使用相同的接口方法,但是却做不同的事情。

 

6、多态

 

     在处理类型的层次结构时,经常将一个对象当做其基类对象来对待,这样的代码是不会受添加新类型而影响的,而且添加新的类型是扩展一个面向对象程序最常用的方式。

 

     通过导出新的子类而轻松扩展设计的能力是封装改动的基本方式之一。

 

     我们将导出类看作是它的基类的过程,称之为“向上转型”。一个面向对象程序肯定会在某处包含向上转型,因为这正是你如何将自己从必须知道确切类型中解放出来的关键。

 

     这样做非常方便,用例子来说就是,如果你是shape类型,那么你就自己来出来自己的erase()和draw()吧。

 

     面向对象程序设计最重要的妙计:编译器不可能产生传统意义上的函数调用。一个非面向对象编译器产生的函数调用会引起所谓的“前期绑定”。这么做意味着编译 器将产生对一个具体函数名称的调用,而链接器将这个调用解析到将要被执行代码的绝对地址。在oop中,程序直到运行时刻才能够确定代码的地址,所以当消息 发送一个泛化对象时,必须采用其他的机制。为了解决这个问题,面向对象程序设计语言使用了“后期绑定”的概念。当你向对象发送消息时,并调用的代码直到运 行时刻才能被确定。编译器确保被调用的方法存在,并对调用参数和返回值执行类型检查,但是并不知道将会被执行的具体代码。

 

7、抽象基类和接口

 

     通常在一个设计中,你希望基类仅仅表示其导出类的接口,也就是说,你不希望所有人创建基类的对象,而只是希望他们将对象向上转型到基类,所以它的接口将派 上用场。这是通过使用abstract关键字把类标识成为抽象类来实现的。如果有人试图创建abstract类的对象,编译器都会加以阻止。

 

8、对象的创建、使用和生命周期

 

9、集合(collection)与迭代器(iterator)

 

10、单根继承

 

11、向下转型与模板/泛型

 

分享到:
评论

相关推荐

    重读JAVA编程思想

    当年如猪八戒吃人生果般的读了java编程思想,只是知道这是本好书,但是具体细节,真是不知所云,很多都是工作中用到哪些,然后翻《think in java 》和《core java》,有了这么多实际java编程经验之后,再翻这部著作...

    java面试题

    答:JDO是java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。 CORBA? 答:CORBA标准是公共对象请求代理结构,用途为:用不同的程序设计语言书写,在不同的...

    Java版水果管理系统源码-RefactorMindMap:重构第一版重构手法读书笔记思维导图

    要知道,Java是一种非常严格的面向对象编程语言,第1版中所有的重构都是基于面向对象的。我想通过再版来说明你可以用任何(编程)语言、在任何环境中、遵循书中提到的范例进行重构,这是我计划再版这本书的另一个...

    编程新手真言......

    面向对象并非一切? 无论你以为上述观点是惊天大秘或不过尔尔,你都需要这本书! -------------------------------------------------------------------------------------------------------------- Todo: 整合过...

    一个服务器对多个客户端的MFC Socket编程示例(实现简单的即时通讯功能)

    实现一个服务器对多个客户端的关键是,在服务端的使用集合CPtrList类用保存客户端的socket对象,思想与Java中的编程思想一样,只不过Java中会使用多线程技术,在Vector集合保存客户端的socket对象,而MFC框架提供了...

    asp.net知识库

    有了System.Data.IDataReader,一切皆成数据 理解DataSet的数据缓存机制 存储过程 可按任意字段排序的分页存储过程(不用临时表的方法,不看全文会后悔) 常用sql存储过程集锦 存储过程中实现类似split功能(charindex) ...

    二十三种设计模式【PDF版】

    者将面向对象的思想巧妙的融合在 Java 的具体技术上,潜移默化的让你感觉到了一种新的语言和新的思想方式的诞生。 但是读完这本书,你对书中这些蕴含的思想也许需要一种更明晰更系统更透彻的了解和掌握,那么你就...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     数据定义语言Data Definition Language(DDL),用来建立数据库、数据对象和定义其列。例如:CREATE、DROP、ALTER等语句。  数据操作语言Data Manipulation Language(DML),用来插入、修改、删除、查询,可以...

    c#学习笔记.txt

    很多人觉得它应该像C或者C++,但事实上它更像是java的一个clone,所以作为入门,读一下清华大学出版社出版的《Java 语言与面向对象程序设计》可能会对你有所帮助。本文假定你具备一切学习此语言所需的知识,没有也不...

    javaSE代码实例

    6.1.2 面向过程与面向对象思想的对比 78 6.1.3 面向对象技术的背景和特点 79 6.2 类的定义与对象的创建 80 6.3 成员变量 81 6.3.1 成员变量的开发与使用 81 6.3.2 成员变量的初始值 82 6.3.3 对象引用...

    外文翻译 stus MVC

    This article introduces Struts, a Model-View-Controller implementation that uses servlets and JavaServer Pages (JSP) technology. Struts can help you control change in your Web project and promote ...

    一个月挑战c++ 电子书

     作为一种灵活性高,体系庞大,支持面向对象思想的高级语言,C++的确比其它语言更难学习,很多正在学习它的在校大学生,以及很多正在从事编程工作想自学它的程序员,对于它的入门及各必要知识点掌握苦恼不已。...

    《一个月挑战C++》 chm格式电子书

     作为一种灵活性高,体系庞大,支持面向对象思想的高级语言,C++的确比其它语言更难学习,很多正在学习它的在校大学生,以及很多正在从事编程工作想自学它的程序员,对于它的入门及各必要知识点掌握苦恼不已。...

    C#微软培训资料

    17.3 读 写 文 件 .222 17.4 异步文件操作 .227 17.5 小 结 .234 第十八章 高 级 话 题 .235 18.1 注册表编程 .235 18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 ...

    Android程序设计基础

     阅读本书唯一的前提条件,是具备对Java编程或类似面向对象语言(比如说C#)的基本理解,不需要拥有为移动设备开发软件的经验。实际上,如果你确实有这方面的经验,反倒应该忘记它们。Android是如此与众不同,因此...

    我的编程感悟(中文PDF)(共37M二分卷)分卷二

    之前我经常奇怪,云风还非常年轻,他程序思想中的那种老练的智慧是从何处得来的呢?读完这本书之后,我终于明白,还是那句话:“无他,唯手熟耳”。 面对这沉甸甸的作品,我确实感到,这是云风用心写的书。用心写...

    ASP EXCEL导入SQL

     而动态数据是指用户在使用平台的过程中所产生的业务数据,在实现业务中,这部分数据大部分都是读操作比较多,而写操作比较少,因此可以针对这部分数据根据特定的缓存失效策略机制来进行相应的缓存;  缓冲层的...

Global site tag (gtag.js) - Google Analytics