Java工程师成神之路笔记-面向对象、平台无关性、值传递

原文地址:Java工程师成神之路

面向对象

面向过程与面向对象

什么是面向过程?

面向过程:将问题拆解成一个一个步骤,每个步骤用函数实现,依次调用即可。

面向对象:将问题拆解成一个一个步骤,对每个步骤进行相应的抽象,形成对象,对每个对象进行组合调用来解决问题。

总结:面向过程是自顶向下的编程模式,面向对象是将事务高度抽象化的编程模式。

举例说明:

比如写一个五子棋程序:

面向过程:开始->黑棋走->规则判断->白棋走->规则判断->循环。

面向对象:拆解成棋盘、棋子、规则等几个对象,棋盘负责渲染棋局,棋子负责创建棋子、下子等动作,规则负责演算,各个对象通过组合调用来解决问题。

从例子中可以看出,面向对象能避免重复造轮子。

优劣对比:

面向过程:占用资源低,速度相对较快。

面向对象:占用资源高,速度相对较慢。

面向对象三大基本特征

封装:将客观存在的事物封装成对象,事物的数据用属性表示,事物的行为、动作用方法来表示。

继承:假如有两个对象:A和B,B继承A,则表示B可以使用A的全部功能,A称为父类,B称为子类,继承的过程是由一般到特殊的过程,因为子类可以重写父类的方法。

多态:同一个类的实例在不同情况下有不同的行为。

面向对象的五大基本原则
单一职责原则(Single-Responsibility Principle)

核心思想:一个类,最好只做一件事。

开闭原则(Open-Closed Principle)

体现在两个方面:对扩展开放,对修改封装。开闭原则的核心就是面向抽象(接口)编程,而不面向具体过程编程,因为抽象相对稳定。让具体业务依赖于固定的抽象,所以修改是封闭的,而通过继承和多态,能实现对固定抽象功能的扩展,所以扩展是开放的。

里氏替换原则(Liskov-Substitution Principle)

核心思想:子类必须能够替换父类。在具体编程中,父类替换成子类,程序的行为不会发生任何改变,反之则不一定成立。

依赖倒置原则(Dependency-Inversion Principle)

核心思想:依赖于抽象。依赖于抽象,就是对接口编程,而不是对实现编程。

接口隔离原则(Interface-Segregation Principle)

核心思想:使用多个小而专的接口,而不要使用大而全的接口。体现在:接口应该是内聚的,而不是万能的。理想的接口设计:每个接口职责单一,即接口隔离强调了接口的单一性。

面向对象的复用技术

继承:是联结类与类的层次模型,属于is-a关系。

组合:体现的是整体与部分的关系,属于has-a关系。

组合继承
封装性不破坏封装,整体类与局部类是松耦合破坏封装,子类与父类紧耦合
继承具有良好扩展支持扩展,但增加了代码复杂度
动态选择支持动态组合,整体对象可以选择类型不同的局部对象不支持动态继承,子类无法选择不同的父类
接口调整整体对象可以通过包装局部对象的接口,提供新接口子类无法修改父类的接口
接口获取整体类不能获取和局部类一样的接口子类自动获取父类的接口
创建开销创建整体类时,需要创建所有的局部类创建子类对象,无需创建父类对象

实际开发中,一般选择组合,只有当新类需要基于父类进行向上转型时,才选择继承。

平台无关性

Java如何实现平台无关性
  • Java语言规范

    规定Java语言中基本数据类型的取值范围

  • 字节码文件(Class文件)

    所有Java文件要编译成统一的字节码文件

  • Java虚拟机

    通过Java虚拟机将字节码文件转成对应平台的二进制文件

Java的平台无关性是建立在Java虚拟机的平台有关性上的,因为Java虚拟机屏蔽了底层操作系统和硬件的差异。

值传递

值传递与引用传递

编程语言中,方法间进行参数传递,传递的策略叫求值策略。

求值策略有三种:

  • 值传递
  • 引用传递
  • 共享对象传递(值传递的特例,只是拷贝的副本为对象的地址)

值传递和引用传递的区别:参数传递过程中有没有复制一个副本出来,如果有复制副本,则是值传递,否则是引用传递。

在Java中,只有值传递,只不过对于对象来说,传递的内容是对象的引用。

在 《The Java™ Tutorials》中,对参数传递的说明:

基本类型传递

Primitive arguments, such as an int or a double, are passed into methods by value. This means that any changes to the values of the parameters exist only within the scope of the method. When the method returns, the parameters are gone and any changes to them are lost.

对象传递

Reference data type parameters, such as objects, are also passed into methods by value. This means that when the method returns, the passed-in reference still references the same object as before. However, the values of the object’s fields can be changed in the method, if they have the proper access level.

推荐文章:

为什么Java只有值传递

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值