模型 面向对象(Object)

本系列文章 主要是 分享 模型,涉及各个领域,重在提升认知。万物归一。一即万物。


1 面向对象的应用

1.1 面向对象 与 计划制定

我们大多数人总有一个感觉,就是我们要计划做一件事情,比如:我要学好英语。一般情况下一两天不可能学会的!那怎么办呢?我们往往制定连续性的半年学习计划,目标是半年后学好英语!但大多数人往往中途因为各种事情耽误而停止,这一停就是半年。使得“半年后已经学好英语”的这个“目标”难以实现,为什么不能够实现?在这个过程中,“英语”这门功课是一个对象,我们通过“学”这个动作,而达到“半年后已经学好英语”这个目的!也就意味着,我们从拿到“英语”这门功课开始,直到学习结束,这整个过程是一个不停止的过程,人的精力毕竟有限,我们不可能永不停止的做同一个动作!显然这是不可能的。

如果我们按照“面向对象”的思想,对一个长期的目标进行细分,每一个细分出来的内容,我们都将起看作一个对象,我们称之为“子对象”!比如英语学习中的单词记忆,原本是 背1000个单词的目标,拆解成 每天10个。然后再对这个“子对象”作学的动作!如果这个“子对象”足够小,那么我们能够在很短的时间内实现“学会子对象”的目标。若干个“子对象”加起来就实现了“学好英语”这门功课的总体目标。

在我们生活中,尤其是长期计划得制定,我们一定要对其进行拆解,拆解成 一个个可以实现的短期目标,而面向对象的思想在这个过程中 尤其重要。

1.2 面相对象 与 软件工程

在做一个大型的软件开发时,我们会把一个大的工程细分成若干个模块,在把每个模块分成若干个对象,在将每个对象抽象出一个功能,一个人在一定的时间里实现一个功能!然后,再用一个总体贯穿调用函数将这些功能串联起来成对象,各个对象串联起来成为模块,各个模块汇集成为一个大的工程!如果我们直接去做这个“大的工程”,工程往往是会失败的。

1.3 面向对象 与 java编程思想

《java 编程思想》里有一句话:everything is an object!为什么会这么说?java 默认所有的对象都有一个共同的父类:Object。我们来看看这个类里的方法。该对象拥有的方法 如下所示:

Object()
getClass()
hashCode()
equals()
toString()
clone()
finalize()
wait()
notify()
notifyAll()

接下来我们来分别解读下 这些方法 背后的哲学。Object 类解释了哲学三大经典问题:我是谁?我从哪里来?我到哪里去?

  • 我是谁:getClass() 和 toString()。一个说明了本质,是人还是猪,一个是具体的描述。
  • 我从哪里来:Object() 和 clone()。构造函数表示来自于类似女娲造人的方式,而 clone() 则代表了繁殖。
  • 我到哪里去:finalize()。代表了消亡。

现实世界中万事万物都是不同的,世界上没有两片完全相同的叶子。同样程序世界里也应该没有两个完全相同的对象。hashCode() 是事物的唯一证明,而 equals() 是事物之间不同的有力体现。当然,在实际设计系统的时候,不同对象的 hashCode() 是有可能相等的,真正区分不同对象的是内存地址。但是哲学道理还是有的。

就像拍电影总会有时间线、感情线等各种发展顺序一样,程序世界也会有各种各样的线程。现实世界,人们可以通过某些方式在不同的线中来回切换,同样,在程序世界中的对象也应该有这种能力,这就是 wait() 和 notify()。人生中,我们总会遇到那个人,从相遇到相知,再到相爱。在面向对象中也是如此。当你们相遇了,你需要告诉她,跟她说:“我在等你,你跟我走吧”。这时候,notify()在你和她之间充当一条通信的介质,可是她还在想要不要和你走呢?wait()让你静静的等待着她的点头。她笑着跟你说,除非你让全世界都知道。所以,为了她,notifyAll()在你和世界间搭建了一条通道,终于,你和你的对象双双归去,过上了幸福快乐的生活,直到finalize() 。

1.4 面向对象 与 哲学体系

关于 面向对象的哲学体系 OO真经 整个系列的文章,在这方面解读的非常棒,参考链接如下:

OO真经——关于面向对象的哲学体系及科学体系的探讨(上)

OO真经——关于面向对象的哲学体系及科学体系的探讨(中)

OO真经——关于面向对象的哲学体系及科学体系的探讨(下)

万物即一,一即万物。这个“一”就是对象。 一种思想,往往产生于某个领域,但它的应用并不局限于某个领域!

2 模型 对象(Object)

对象的含义是指具体的某一个事物,即在现实生活中能够看得见摸得着的事物。它本身是一个哲学视角,但是目前在程序编写中用的比较多。接下来我们主要从 程序设计视角入手 理解面向对象思想:

2.1 面向对象程序设计 基本概念

在面向对象程序设计中,对象所指的是计算机系统中的某一个成分。在面向对象程序设计中,对象包含两个含义,其中一个是数据,另外一个是动作。对象则是数据和动作的结合体。对象不仅能够进行操作,同时还能够及时记录下操作结果。这里 先普及下 面向对象 程序设计的一些基本概念:

  • 方法:指对象能够进行的操作,方法同时还有另外一个名称,叫做函数。方法是类中的定义函数,其具体的作用就是对对象进行描述操作。
  • 继承:简单地说就是一种层次模型,这种层次模型能够被重用。层次结构的上层具有通用性,但是下层结构则具有特殊性。在继承的过程中类则可以从最顶层的部分继承一些方法和变量。类除了可以继承以外同时还能够进行修改或者添加。通过这样的方式能够有效提高工作效率。在这里举一个例子,当类X继承了类Y后,此时的类X则是一个派生类,而类Y属于一个基类。继承是从一般演绎到特殊的过程,可以减少知识表示的冗余内容,知识库的维护和修正都非常方便。更有利于衍生复杂的系统。
  • 类:具有相同特性(数据元素)和行为(功能)的对象的抽象。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。类映射的每一个对象都具有这些数据和操作方法,类的继承具有层次性和结构性,高层次对象封装复杂行为,具体细节对该层次知识保持透明,可以减小问题求解的复杂度。
  • 封装:将数据和代码捆绑到一起,对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。防止了程序相互依赖性而带来的变动影响,面向对象的封装比传统语言的封装更为清晰、更为有力。有效实现了两个目标:对数据和行为的包装和信息隐藏。 
  • 多态:指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。一个接口,多种方式。
  • 动态绑定:将一个过程调用与相应代码链接起来的行为。动态绑定是指与给定的过程调用相关联的代码只有在运行期才可知的一种绑定,它是多态实现的具体形式。
  • 消息传递:对象之间需要相互沟通,沟通的途径就是对象之间收发信息。消息内容包括接收消息的对象的标识,需要调用的函数的标识,以及必要的信息。消息传递的概念使得对现实世界的描述更容易。
  • 面向对象的方法:就是利用抽象、封装等机制,借助于对象、类、继承、消息传递等概念进行软件系统构造的软件开发方法。

2.2 面向对象程序设计 基本思想

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。

面对对象程序设计是尽可能地在模拟人类的思维。通过这样的方式能够让开发的软件更加符合人类的认知,人们使用起来也能够更加顺手。并且通过应用软件能够切实地解决现实生活中的问题。面向对象程序设计使得描述问题的问题空间和问题的解决方法空间组合在一起,并且尽可能地保持一致。能够将客观世界中的抽象问题转化为具体的问题对象。

面向对象的思维更符合人认识和思考问题的方式,面向对象的概念和应用已经超越了软件开发和程序设计,扩展到多个的领域,其中一个应用的分支就是面向对象的知识表示法。这种表示法把组成客观世界的实体抽象为数据和对数据的操作,并使用类把数据和对数据的操作封装成为一个不可分割、互相依存的整体。面向对象表示的知识更接近客观世界,表示方案更加自然,易于理解。面向对象技术良好的模块性,面向对象的系统良好的可维护性、可扩充性和可重用性等特点,正符合人们组织和管理知识库的需求。

2.3 理解面向对象思想

从世界观的角度可以认为:面向对象的基本哲学是认为世界是由各种各样具有自己的运动规律和内部状态的对象所组成的;不同对象之间的相互作用和通讯构成了完整的现实世界。因此,人们应当按照现实世界这个本来面貌来理解世界,直接通过对象及其相互关系来反映世界。这样建立起来的系统才能符合现实世界的本来面目。

从方法学的角度可以认为:面向对象的方法是面向对象的世界观在开发方法中的直接运用。它强调系统的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造系统,而不是围绕功能来构造系统。

2.4 应用范畴

面相对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。

3 模型简图

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图王大胜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值