Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Java基础] 什么是面向对象 #188

Closed
zhonghuasheng opened this issue Mar 5, 2020 · 1 comment
Closed

[Java基础] 什么是面向对象 #188

zhonghuasheng opened this issue Mar 5, 2020 · 1 comment
Assignees
Milestone

Comments

@zhonghuasheng
Copy link
Owner

No description provided.

@zhonghuasheng
Copy link
Owner Author

zhonghuasheng commented Mar 5, 2020

  1. 先讲一下面向过程与面向对象编程
  2. 对比说明面向对象的优点
  3. 说说面向对象的三个特征:封装、继承、多态

先讲一下面向过程

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

可以拿生活中的实例来理解面向过程与面向对象,例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用不同的方法来实现。

如果是面向对象的设计思想来解决问题。面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

面向对象优点

  • 代码开发模块化,更容易维护和修改
  • 代码复用性强
  • 增加了代码的可读性
  • 相对来说代码的可靠性和灵活性也得到了增强

面向对象的三个特征

  • 封装
    封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。首先Java中提供了4中修饰符来修饰方法default, public, protected, private,对对象赋予了不同的访问权限;另外,对于对象内部的属性,通常写成私有的,然后通过setter方法来赋值,getter方法来取值,避免了直接与对象内部属性的操作。
  • 继承
    继承给对象提供了从基类获取字段和方法的能力,继承提供了代码的重用性,也可以在不修改类的情况下给现存类添加新特性。
  • 多态
     多态提供了同一个行为具有多个不同表现形式或形态的能力(say())。是指一个类实例(对象)的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
    多态的优点:
  1. 消除类型之间的耦合关系
  2. 可替换性
  3. 可扩充性
  4. 接口性
  5. 灵活性
  6. 简化性

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant