6.1 什么是面向对象以及类和对象的区别

什么是面向对象

面向对象(面向对象编程的简称,Object Oriented Programming,OOP)是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。早期的计算机编程是面向过程的,典型的代表是 C 语言,解决的都是一些相对简单的问题。随着 IT 行业不断发展,计算机被用于解决越来越复杂的问题。

通过面向对象的方式,将现实世界的事物抽象成对象,将现实世界中的关系抽象成关联、继承、实现、依赖等关系,从而帮助人们实现对现实世界的抽象与建模。

通过面向对象的方法,更利于人们理解,更利于对复杂系统进行分析、设计与开发。同时,面向对象也能有效提高编程的效率,通过封装技术和消息机制可以像搭积木一样快速开发出一个全新的系统。

从五子棋中理解面向过程与面向对象的区别

什么是面向过程?面向过程与面向对象的区别是什么?下面通过对一个案例的介绍,帮助大家理解面向过程和面向对象的区别。

要编写一个五子棋的游戏,用面向过程的设计思路,其分析步骤如下。

  1. 开始游戏,绘制基本画面。
  2. 黑棋先走,绘制走完画面。
  3. 判断黑棋是否赢棋。
  4. 白棋走棋,绘制走完画面。
  5. 判断白棋是否赢棋。
  6. 返回步骤(2),继续执行。
  7. 输出五子棋输赢结果。

通过之前学过的流程控制和 Java API 方法,上述问题可以采用面向过程的方法解决。而面向对象则完全采用了另外一套设计思路,整个五子棋系统可以分为以下 3 个部分。

  1. 棋盘部分:负责绘制基本画面以及黑棋、白棋走完后的画面。

  2. 黑棋、白棋:除了颜色不一样外,其行为是一样的。

  3. 规则部分:负责判定输赢和犯规。

有了上述 3 个部分,整个五子棋系统运作方式如下。

  1. 首先棋盘部分先绘制基本画面。
  2. 然后黑棋、白棋部分接受用户输入,执行黑棋、白棋部分的行为,并告知棋盘部分。
  3. 棋盘部分接收黑棋、白棋部分的行为,绘制黑棋、白棋走完后的画面。
  4. 棋盘部分发生变化后,规则部分对棋局进行判定。

可以明显地看出,面向对象是根据各个部分(对象)来划分系统,而不是根据步骤,每个对象都拥有自己的属性(例如棋的颜色)和行为(例如绘制画面)。编写程序就是呼叫不同对象来执行它的行为,影响其他对象的属性或再呼叫其他对象的行为,最终完成程序的功能。

采用面向对象有这样的好处,例如同样是绘制棋盘画面,这样的行为在面向过程的设计中分散在了很多步骤中,需求变动后要在不同的地方进行修改。而面向对象的设计中,绘制棋盘画面只可能在棋盘部分出现,便于维护,后面我们还可以看到:得益于封装这项技术,修改绘制棋盘的代码不会影响原有的调用和新的调用

功能上的统一保证了面向对象程序设计的可扩展性。例如程序员要加入悔棋的功能,如果采用的是面向过程的设计,需要改面向过程代码中所有行棋、棋盘画面绘制部分。如果是面向对象,只用改动棋盘部分就行了,棋盘部分保存了黑棋、白棋双方的棋谱,简单回溯就可以了,不用调整其他部分,同时整体代码中调用方法的顺序都没有变化,只是在“棋盘”方法的内部进行了局部改动。

总的来说:

OOP 以对象来划分系统;
OOP 将属性和行为放入对象;
OOP 通过呼叫对象使其执行行为来完成功能;
OOP 使程序易于维护和扩展。

在这里插入图片描述

类和对象的概念

在这里插入图片描述

什么是类?类是对具有相同属性和相同行为的对象的抽象。例如,班级中有学生王云、刘静涛、南天华、雷静,他们 4 个都是现实世界的学生对象,而“学生”这个角色是我们大脑中的抽象概念,泛指一切学生。对应到 OOP 世界里,“学生”就是“类”。通过学生这个类,可以创建出一个一个具体的对象,通常也称为实例化出一个一个对象,如图所示。

在这里插入图片描述

通过对王云、刘静涛、南天华、雷静这些现实世界学生对象的抽象,可以分析出学生这个类具有的属性包括姓名、年龄、性别、年级等,方法包括听课、写作业等,如图所示。

在这里插入图片描述
总的来说:

1. 对象是具体事物,类是对一类对象的抽象;
2. 对象有属性和行为,对象和行为由对象所属的类统一描述;
3. 从类产生对象的过程,被称为实例化。

对象的初始化过程(重)

对象的初始化,实际就是先在堆内存中申请一块用于存放对象属性值的空间,然后再给这些属性值赋上默认值、程序员期望的数据或者用户指定的数据。当堆内存中的这块空间有了值以后,再在栈空间中申请一块空间并存放引用变量,然后用栈中的引用变量指向堆中的对象,最终就可以通过栈中的引用变量访问或者修改堆中的对象了,如图所示。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下题是重点!!!:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值