刚开始学习任何一种语言的时候,相信大家都非常重视基础知识。但是当实际应用的时候,又有多少能数量并且恰当的使用呢?
java语言已经名列编程语言排行前3的日子很长时间呢。并且以其都特的特性 吸引了很多人去研究和学习他。总以为自己会写2行代码 就认为这个语言简单,认为就完
全掌握了他们 这就是中国的现状 会写代码的人很多 能写好的代码的寥寥无几。
废话不说了 进入正题。什么是OOP呢?
靠这样行业吃饭的人都知道是面向对象。往大的方向说 ,所有的编程语言都是对现实世界的一种抽象过程(抽象机制)。你所能够解决问题的复杂性 直接取决于你抽
象的类型和质量。我们所谓的类型值的就是你能抽象成什么?
例如c,FORTRAN BASIC都是对汇编语言的一种抽象 他们注重的是过程。他们所作的主要抽象仍要求你在解决问题时要基于计
算机的结构,而不是基于你试图要解决的问题的结构来考量。举个简单的例子吧。
就用灯举个例子 假如我们要实现开灯这个方法或者函数,使用面向对象语言 我们有可能会事先定义一个灯的对象
然后再具体实例为什么具体的灯或者个体的灯 传递对象就行 就能实现这个功能 例如在方法不变的情况下 我们只需要改变传递过来的对象 就能实现打开厨房的灯或者卫生间的灯
public void openLight(Light light){
system.out.println(开什么灯);
}
但是在c的情况下 实现
function void openLight(开什么具体的灯){
system.out.println(开什么灯);
}
对C不太了解 上面的方法有可能不对 望见谅,但是足可以说明这几种语言的区别。
还有一种对机器建模的方式就是对待解决问题建模。例如LISP和APL都选择世界的某种特定试图(分别对应于 所有问题最终都是列表 或者所有问题都是算法形式的)。这些方式对于他们被设计师所瞄准要解决的特定类型的问题都是不错的解决方案,但是一旦超出其特定领域,他们就力不从心了。
面向对象方式(object-oriented approach)通过向程序员体统用来表示在问题空间中的元素的工具而更近一步。这种表示方式足够的概括性,使得程序员不会受限于任何特定类型的问题。我们将问题空间中的元素及其在解空间中的表示称为对象。
这种思想的实质是:程序可以通过添加新类型的对象使自身适用于某个特定问题。因此 当你在阅读秒数解决方案的代码的同时,也是在阅读问题的藐视。相比以前我们所用于的所有语言,这是一种更灵活和更强有力的语言抽象。
OOP允许以问题的形式来描述问题,而不是以执行解决方案的计算机的形式来秒数问题。但是他仍然与计算机有显示。每个对象都有点像一台微型计算机 他具有状态 并且能够执行你富裕它的各种操作。如果要在现实世界中对对象做类比,那么说他们都具有特性(characteristic)和行为hehavior
alan kay曾经总结了第一个成功的瞄向对象语言的 同时也是java根基的语言之一的smalltalk的五个基本特性,这些特性表现了一种纯粹的瞄向对象程序设计方式:
1 万物皆为对象。将对象视为特殊的变量 他可以存储数据 初次室外 你还可以要求他在滋生上执行操作。
2 程序是对象的集合,他们彼此通过发送消息来调用对方。想要一个对对象的请求,就必须对该对象发送一条消息。更具体的说,你可以把消息想想为某个特定对象的方法的调用请求。
3每个对象都用于其他对象所构成的存储。你可以通过创建包含享有对象结合的包的方式来创建新类型的对象。因此,你可以再程序中构建复杂的体系。
4每个对象都用于其类型。按照通用的说法 每个对象都是某个类的一个实例,其中类就是类型的同义词。每个类中最重要的区别于其他类的特性就是你可以发送什么消息给他。
5 某一特定类型的所有对象都可以接受同样的消息。
booch提出了一个对对象的更加简洁的描述:对象拥有状态state行为behavior和表示identity这以为着每一个对象都可以用于内部数据和方法,并且每一个对象都可以唯一地与其他对象区别分开,具体来说,就是每一个对象在内存中都有一个唯一的地址。存储在堆中不同的位置,用二级制编码表示的具体的位置。