面向对象思想是什么?

华丽的转身138303170


这是一个非常好的问题,建立面向对象编程思想是学习面向对象编程的关键,下面就把面向对象思想做一个总结。

什么是面向对象思想呢?简单的说就是考虑问题以对象为出发点而不是以流程为出发点,通过对象之间的交互完成一系列功能的实现,这就是面向对象思想。

对象又是什么呢?简单的说就是一切都是对象,对象能够涵盖所有我们已经认知的事物和未认知的事物,只要是存在的东西都可以认为是对象,比如“黑洞”、“暗物质”等等,所以对象的范围非常广泛。

面向对象思想如何落地呢?面向对象编程思想包括四个概念、三个特征、一个过程,下面分别解释一下(以Java语言为例):

四个概念分别是类、对象、属性和方法,其中类表示定义,对象表示类的实例,属性表示对象的状态,方法表示对象的功能。举个例子,比如我们要通过面向对象的思维方式来描述学生,那么就需要为学生构建一个类:

类中定义了学生的学号和姓名,同时定义了一个打印学生信息的方法,这就是类,但是类只是一个定义,要想完成具体的应用,需要通过类来创建出一个实例,这个实例就是对象,看一个例子:

例子中通过构造方法创建初始化了一个实例,这个时候,这个实例就是一个实实在在存在的对象了,此时这个对象就可以调用方法来实现功能了。

通过这个例子,我们可以了解类、对象、属性、方法之间的关系,同时也阐述了面向对象的编程过程,这个过程分为三个步骤,分别是类的定义、对象的创建、方法的调用。

三个特征分别是封装、继承和多态,其中封装提高类的内聚性,封装包括三个步骤,分别是私有化成员属性、定义设置器、定义获取器,看一个例子:

继承是在一个类的基础之上再派生出一个新类的过程,通过继承,子类能够完成对父类方法的继承,看一个例子:

继承体现的是一种发展的概念,是面向对象编程过程中的一个重要概念。

多态的理解是一个稍微麻烦的事情,但是简单的总结一下,多态可以用两个方法和三个定义来描述多态。两个方法分别是方法重载和方法重写,三个定义分别是父类定义子类构建、抽象类定义实体类构建、接口定义实体类构建。

先看一下方法重载,方法重载简单的说就是同一个类中定义了多个方法,具有相同的名字,不同的参数列表,看一个例子:

方法重写简单的说就是一个前提、三个相同、两个规定,一个前提是在继承体系结构下,子类定义了某个方法与父类的方法具有相同的名字、参数列表、返回值类型,两个规定分别是子类方法的范围限定不能小于父类方法,子类方法不能抛出更多的异常,看一个例子:

下面再看一下三个定义,三个定义是理解多态的重点,也是一个小难点。第一个定义是父类定义子类构建,看一个例子:

第二个定义是接口定义实体类构建,看一个例子:

第三个定义是抽象类定义实体类构建,看一个例子:

以上内容就是对面向对象编程思想的一个简单描述,面向对象思想现在已经有了很大的扩展,Spring就是面向对象编程和面向方面编程结合的例子,Spring目前在Java开发领域也有广泛的应用。

我做软件开发工作多年,目前的研究方向是大数据和人工智能,也在带大数据方向的研究生,我会陆续在头条写一些关于软件开发方面的文章,感兴趣的朋友可以关注我的头条号,相信一定会有所收获。

如果有软件开发方面的问题,也可以咨询我。

谢谢!


IT人刘俊明


面向对象的思想主要是把构成问题的各个事务分解成各个对象,在解决问题的过程中围绕着“找对象”,“搞对象”来处理问题。


一切皆对象。


把很多的处理步骤都交给所创建的对象去处理,通俗简单的来说就是“你办事,我放心”。详细的可以看下配图,描述的还是比较形象的。


玩着学编程


面向对象是程序设计的方法之一,也是目前最为流行的设计方法。作为面试问题,考官无非是想知道你会不会实装,懂不懂类,继承,多态,封装这些知识。或者是想知道你会不会设计,懂不懂用例图,配置图,类图,时序图这些知识。相信回答中一定有非常精彩的说明。下面我分享几个代表性的软件设计方法拓展一下知识面吧。

面向过程

这是最早的结构化的编程思想。它把一个系统分成若干功能模块,然后用输入输出将模块联系起来。C语言,Basic,Fotran等早期编程语言都是以这种思想为基础的。面向过程的设计手法主要是流程图和状态图。特别是状态机,可分为摩尔机和米莉机都是面向过程中非常重要的理论。C语言中的回调函数,VB的事件(event),Oracle存储过程中的Trigger等都是基于状态机理论设计的。面向过程的设计接近于计算机的运算过程,适合于流程控制要求严格的场合,在一些硬件控制的程序设计上仍被广泛采用。不过,功能模块还有状态这些概念跟硬件配置太接近了,在管理系统应用领域运用起来很牵强,导致系统复杂难懂,设计的可靠性能极低。于是,人们开始思考接近管理模型的设计方法。

面向数据流

这是一种非常接近管理组织结构的设计方法。它把管理体制中的职能作为模块,模块通过数据连成整体,这样就定义了业务模型。按照一定的规则,逻辑模型可以被转化成包含输入输出数据存储和程序模块的物理模型。这被称为结构化的设计思想。面向数据流中逻辑模型和物理模型相结合的思想,大大提高了设计的可靠性,这一思想曾经是现在仍是信息系统设计的标准思路。SQL,ER等语言和设计方法都是从这一思想关系密切。值得一提的是ER模型,它就是面向对象思想的鼻祖。

面向对象

尽管有了逻辑和物理相结合的结构化思想,程序代码上的耦合性依旧严重影响系统的可靠性。比如,相同的处理被重复地被复制到不同的画面,经多次调试之后出现差异,导致错误。或者,本来不同的处理被强制做成共同函数,使用时不得不用大量分枝导致复杂度激增。为了解决这个问题,引入了对象的概念。最初人们从业务数据中抽出能保持业务特征的最小数据组合作为实体,实体之间用一对一,一对多和多对多来表现关系。这种做法在数据库表结构设计上取得了成功。抽出业务元素的思想被扩展为对象。对象之间的关系定义为继承,多态和封装。虽然不象ER模型那样严密,但对象的概念很实用。被广泛接受。面向对象继承了结构化设计思想,用例图>配置图>逻辑时序图>逻辑类图>物理类图的设计过程更好地实现了准确设计逻辑模型精确设计实装程序的目的。

面向服务架构

严格地说这个思想已经超越了程序设计的范畴,它的目标是将物理实现集中封装到服务器上,客户端只要关注逻辑运用就可以了。这个思路现在也很普及,SOAP,RPC之类就是这一思想的应用场景。封装物理实现一直都是程序设计的改善目标之一,跟这个思想类似的还有AGENT的思路,就是把功能封装到AGENT上,分布式的电脑网络可以通过调用AGENT实现逻辑功能。这个思路因安全问题被搁置了。现在随着区块链技术的发展,或许AGENT的思想会重现江湖吧。