Thinking in java-1

/*************************************************

function:java language Technology
author  :chinayaosir   QQ:44633197 
blog    :http://blog.csdn.net/chinayaosir
note    :禁止其它网站转载此文章

**************************************************/
第1章 对象导论

目录
1.1抽象过程
1.2每个对象都有一个接口
1.3每个对象都提供服务
1.4被隐藏的具体实现
1.5复用具体实现
1.6复用类的接口
1.7多态的可互换对象
1.8集合与迭代器
1.9异常处理
1.10并发性
1.11持久性
1.12java与internet
1.13java为什么会成功
1.14java与C++

计算机革命起源于机器,编程语言的产生也始于对机器的模仿
计算机并非机器那么简单,而是头脑延伸的工具,也是不同类型的表达媒体

1.1抽象过程
所有编程语言都提供抽象机制。
A由程序模型到问题模型的转换:
人产所能解决的问题复杂度直接取决于抽象的类型和质量
汇编是对底层机器的轻微模仿,其它高级语言c,basic,fortran都是对汇编语言的模仿
程序员们必须建立机器模型与实际待解问题模型的映射是非常费力的,使程序难以编写和不方便维护
B由问题模型到程序模型的转换:
这种转变非常适合人们的逻辑思维,也就是OOP模型,早期的编程语言LISP和APL,PROLOG都具有OOP概念,
但它们都是对特定领域非常有效,不是通用的编程语言
java,Smalltalk在支持oop概念比较彻底。
Booch对象提出非常简洁的描述:对象具有状态,行为和标识
状态:指类的数据成员
行为:指类的方法成员
标识:指每个对象在内存中有唯一的地址标识

ALan Kay曾经总结过成功的OOP应该具有的特性是:
1)万事皆为对象
2)程序是由对象组成的集合,它们通过发送消息来相互工作
3)每个对象都有由其它对象构成的存储
4)每一个对象都拥有类型(也就是说每个对象都属于一种特定的类的类型)
5)某特寂类的所有对象都可以接收到同样的消息(从基类查找开始,如后期动态绑定调用方法)

1.2每个对象都有一个接口
接口通常指类的公用的方法,以方便对象间相互调用和传递消息
因为类描述了具有相同特性(数据元素)和行为(方法又叫成员函数)的对象的集合,
所以类实际上是一个数据类型。
任何程序都是你所设计的系统的一种仿真,
OOP技术的应用确实可以将大量的问题很容易的降解为一个简单的问题。
事实上,OOP设计的挑战之一就是在问题空间的元素和解空间的对象之间建立一对一的映射!
每个对象只能满足特定的请求,这些请求由对象的接口定义,决定接口的便是选择什么类
UML是表达和设计类的一个非常方便的工具语言。

1.3每个对象都提供服务
把每个对象想成为服务提供者:
好处1:有助于提高对对象的内聚性,高内聚是软件设计的质量要求之一。
好处2:是一个非常伟大的简化工具,在设计和使用类的过程中都要简单很多

1.4被隐藏的具体实现
把程序开发人员分成类创建者和类使用者两种,是非常有好处的
类创建者的目标是构建类,对类使用者只暴露公共的部分,隐藏其它部分,修改隐藏部分不会影响到类使用者的代码
类使用者的目标是收集各种专用的类来组装程序,也不会动到类的隐藏部分。
类的访问控制产生的原因:
1)类的使用者无法改动他们不应该改动的代码部分,即不能修改类的私有部分
2)允许类的设计者可以改变类的私有部分而不会影响到类的使用者的代码
java内部访问设定办界有public,protected,private和包访问权限

1.5复用具体实现
一旦类被创立并测试完毕,那么它就应该代表一个有用的代码单元。
代码复用是OOP程序设计语言最伟大的优点之一
复用一个类的简单方法有:
1)复用一个类的对象
2)用现成的类组合成一个新类,它经常视为"has-a"的复用关系

1.6复用类的接口
类把数据和方法封装到一起,当建立一个新类,除了在现成类的基础上还要增加一个功能时,
通过继承基类从而得到一个导出类是一个非常好的复用基类接口的方法。
有2种方法使用基类和子类产生差异:
1)先继承基类,然后直接在子类添加新的方法,称为add方法,视为"is-like-a"的复用关系
2)先继承基类,然后改变基类的方法的行为,称为覆盖(overriding),视为"is-a"的复用关系

1.7多态的可互换对象
在处理类层次时,经常把一个对象当作对象的基类来对待,从而让方法可以操作类继承树上各个子对象
OOP程序设计语言用“后期绑定”的概念来完成多态行为。在C++中是通过virtual关键字,在JAVA不需要关键字
如基类class shape
从shape继承来的3个子类,circle,square,triangle
用基于基类的引用来实现多态调用的函数如下
void do(shape s) /*用基类作为传递参数*/
{
 s.erase();
 s.draw();
}

调用方法
circle c=new circle();
square s=new square();
triangle t=new triangle();
do(c);  /*用后期绑定法自动调用circle子类的方法,发生多态行为*/
do(s);  /*用后期绑定法自动调用square子类的方法,发生多态行为*/
do(t);  /*用后期绑定法自动调用triangle子类的方法,发生多态行为*/

1.8集合与迭代器
Java中也有如同C++的STL数据结构和算法的一套集合与类库。

1.9异常处理
Java一开始就内置了异常处理,在除错能力非常棒。

1.10并发性
并发又叫多线程。
Java具有多线程,它内置于java语言中,使用的C++下面的多线程在JAVA下面变得非常简单。

1.11持久性
当创建一个对象后,只要需要它,它就一直存活着,在程序终止后,它就结束,这是大部分程序的模式。
Java支持轻量级的持久性,并可通过对象序列化到磁盘上,如比Hibernate数据库连接框架。


1.12java与internet
1.12.1WEB是什么
WEB就是一台巨型服务器,有许多台服务器和客户端相互连接并存于网络中。
客户端统一的软件都是浏览器,发布新程序不需要更新客户程序,
远远超过基于C/S的模式。

1.12.2客户端编程
在没有出现JAVA和.NET平台之前,B/S网站的解决方案是使用CGI
后台程序可用C,C++,Perl,python等语言开发。
设计灵活难非常复杂和难以维护。
1)插件:它的好处是允许专家级的程序员开发某种语言,并将其添加到服务器中去,
  因此插件的引进可以说开启了一个后门
2)脚本语言:主要有JavaScript和VBscript,这些脚本嵌入HTML中,以解决客户端80%的问题。
3)JAVA语言:基于JAVA的解决方案有多种,JSP,servlet,applet,web start.
4).NET和C#
在sun的applet流行时,它不允许对客户端电脑的数据进行读写.安全性非常好。
微软推出ActiveX控件与之竞争,它功能特别强大,允许对客户端电脑的数据进行读写。
提供方便的同时,也给WEB的黑客开启了大门.
在JAVA的J2EE开始流行的时候,微软推出了.NET平台和专用开发语言C#与J2EE竞争.
C#是在综合JAVA语言的优缺点之后,语法完全如同JAVA,功能比JAVA更多。

1.12.3服务器编程
没有java以前,服务器编程都是通过使用perl,python,c,c++来编写CGI程序来实现的,
结果却造成更加复杂的系统。
java编写的servlet及基衍生物JSP,是许多开发网站的公司迁移到JAVA上的两个主要原因

1.12.4应用
java引起人们的注意很大程序上始于applet,在理论上讲java确实是一种通用的编程语言。
java目前最大的竞争对手就是.NET平台上的C#语言。

1.13java为什么会成功
java的基本目标是为了提高软件的生产效率,
1)基于OOP的系统易于表达和理解
2)类库的巨大影响力。C++著名类库有STL,MFC,VCL及第3方库
3)错误处理支持。C语言的错误码处理就是一个名声狼籍的问题
4)java具备编写大型应用程序的。
例如oracle就用java重写之前基于C/C++的oracle数据库系统

1.14java与C++
目前软件开发领域的c,c++,java排行榜是
java第一
c   第二
C++ 第三
java是不会取代C++,它们目前都是各自专长,C++特别适用于对速度要求快的游戏,图形,视频等领域
Java有自动回收垃圾功能,不会产生内存泄漏问题,许多大型企业级信息系统C++应用都会被java取代。
java的跨平台应用能力是c与c++不能相提并论的
java项目开发进度要比C++快2倍以上,也有C++团队采用先用java建立项目模型,然后再翻译成c++项目
java的代码速度比c慢10倍~20倍,比c++慢5-10倍,
代码运行速度慢成了唯一的缺点,随着计算机硬件的升级和java编译器的速度不断优化,
java运行速度与c,c++的代码速度会越来越少!
可以预见:在速度不是很重要的软件项目中,将是java代替c,C++大发光彩的亮点!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值