1.面向对象和面向过程的本质是什么?

面向对象与面向过程本质来说都是代码结构的设计或者思想,而编程则是通过编程语言将事物的逻辑根据需求描述出来,所以我觉得并不能说Java就是一种面向对象的语言,而c就是一种面向过程的语言,我的理解是Java内置的语法对面向对象的代码结构支持比较好。

2.为什么先出现面向过程后出现面向过程?

现代社会中一个新事物或者新概念的出现往往是伴随着需求而产生的。

比如我想要去一个很远的地方,但步行的时间太长,人们无法接受,所以慢慢的自行车,摩托车,汽车,飞机等交通工具就被发明和创造出来。

而以编程的发展史为例,一开始的软件都比较简单,常常只是执行单一的功能,例如计算加减,所以面向过程的代码结构已经足以满足需求。

但随着人类社会的不断发展,对计算机的功能要求也不断提高,需要计算机为我们的生活提供更大的便利,例如帮我们管理一个大公司的运营,从而出现数之不尽的管理系统。

3.应该如何理解

以面向对象的三大特性,继承,封装,多态为引子。

假设一个公司有ABCD四个部门,每个部门都有自己的工作内容,例如开会,汇报,总结数据,那么各个的部门的工作内容都可以定义为

function A_开会  function A_汇报  function A_总结数据  function A_自己的工作

function B_开会  function B_汇报  function B_总结数据  function B_自己的工作

function C_开会  function C_汇报  function C_总结数据  function C_自己的工作

function D_开会  function D_汇报  function D_总结数据  function D_自己的工作

如果把它们每个部门归类,那就变成以下形式

A {
  function 开会
    function 汇报
  function 总结数据
  function 做自己的工作
}

B {
  function 开会
  function 汇报
  function 总结数据
  function 做自己的工作
}

C {
  function 开会
  function 汇报
  function 总结数据
  function 做自己的工作
}

D {
  function 开会
  function 汇报
  function 总结数据
  function 做自己的工作
}

这个时候类的概念就呼之欲出了,也是一种抽象的体现,然后我们进一步发现不同部门里做的很多工作性质都是一样的,都是开会,只是讨论的问题不同,这个时候我们又可以抽象出一个部门类出来

Department {
  function 开会
  function 汇报
  function 总结数据
}

而各个部门就去继承部门类,实现各自具体的工作细节,继承的概念就体现了,而每一个部门所做的事都封装在各自类中的方法里,封装的概念也体现了。

至于多态往往体现在继承体系中方法的重载,如下代码所示

class Father {
    void sleep() {
        System.out.println("father is sleeping");
    }
}
class Son extends Father {
    @Override
    void sleep() {
        System.out.println("son is sleeping");
    }
}

public class Test{
    public static void main(String[] args){
        Father son = new Son();
        son.sleep();
    }
}
控制台打印
son is sleeping

父类引用指向子类对象,调用方法时会调用子类的实现,而不是父类的实现,也就是说我们可以在代码运行中根据具体角色去动态的执行相应的方法,

例如订单模块中根据选择的优惠去生成不同的优惠对象进而执行不同的优惠实现

4.总结

面向过程可以理解为根据事物发展的顺序串行的执行相应的代码,正如编年史的制作,将各个事物的发展按照时间的年限逐步讲述

面向对象则将将事物抽象化,总结归类并根据抽象后的规律运行,正如纪传史,根据一个起点描述出一个宏伟的故事

当然面向对象思想的出现也是因为有了复杂而宏大的系统需求应运而生

04-29 01:50