软构——对OOP的感悟

        面向对象编程(OOP)是我们在学习完抽象数据类型(ADT)后随之而来的概念。

        所谓面向对象编程,就是以类的方式组织代码,以对象的形式封装数据。把构成的事件分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

 

  •         OOP的通俗理解

        通俗的话来说,就是不是围绕着要解决的任务来设计,而是通过代码来描述一个事物(对象)的行为。就像我们上课时学到的一个很典型的例子——下围棋程序的编写,如果是从前的结构化编程,我们需要写的是整个下棋过程中从前到后每一个步骤的代码,要用代码实现围棋规则,玩家下哪一步,要做出什么判断,是一个事件流的思维过程。而OOP的思维方式则是分别从不同对象的角度思考,如白棋(黑棋)会有什么属性,行为,棋盘有哪些功能,玩家起了什么作用,需要做的是完善每一个对象对应的功能和行为,每一个对象都准备齐全了,就能组合成一个围棋游戏了,这也是这两种编程方式很显著的思维方式区别。

  •         OOP中有类和对象这两个概念:

        类——抽象的描述,是一种概念性的描述,就比如棋子(白棋,黑棋),属性,行为等等,是一整个类的集体性共性描述。

        对象——具体的事物,就是利用类生成的真实存在的一颗棋子,拥有类的赋予的属性和方法。

  •         OOP的四种特点:
  1. 封装与信息隐藏:将一个类的使用和实现分开,只保留部分接口和方法与外部联系,只公开了一部分方法给开发人员使用。使用者只需要关注这个类如何使用,而不用去关心其内部的具体代码实现过程,有利于降低各类的耦合度,避免相互依赖。
  2. 继承与重写:子类继承父类中的属性和方法,并可以添加新的属性和方法,也可以对父类中的属性和方法进行重写(Override),使得同一个方法实现新的功能。继承增加了代码的可重用性,但是一个子类只能有一个父类(但可以实现多个接口)。​​​​​​
  3. 多态、子类型、重载:多态分为特殊多态,参数多态,子类型多态,重载和重写的概念类似,均是对已有方法的重新实现,但区别也很明显,具体区别在OOP的实现与功能文章中给出具体描述。
  4. 静态与动态分配:

        a、静态分配是根据变量的静态类型进行方法分派的行为。应用场景:方法重载(Overload)

        b、根据变量的动态类型进行方法分派的行为,即根据变量的动态类型确定执行哪个方法,发         生在运行期。应用场景:方法重写(Override)

  • OOP的发展历史
  1. 20世纪60年代: Simula 67是由挪威计算中心的克里斯汀·尼加德和奥勒-约翰·达尔开发的第一个面向对象的语言,用于支持离散事件模拟。(类、对象、继承等)
  2. 术语“面向对象编程(OOP)”最初是施乐PARC在他们的小语言中使用的
  3. 20世纪80年代: OOP已经很突出,而Java中的主要因素是C++。

  • 小结

         OOP是我们学习Java中非常重要的一项概念,虽然Java的基础语言部分与C语言十分相似,让我们原来学习过C语言的同学上手非常快,但其思维方式却是与C语言,或者说我们对编程的固有观念有着极大的不同,面向对象编程让我们把目光放在构成完整事件的事物身上,而不再执着于事件流的过程,这种思维非常的巧妙,需要我们花费很长时间与经历许多实践才能加深对其的理解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lyg809073256

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

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

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

打赏作者

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

抵扣说明:

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

余额充值