面向对象

面向对象

面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[1] 发展到一定阶段后的产物。

——百度百科

  • 核心:实现了面向对象的核心思想
  • 编程思想:
    需求==》建立思路==》目标代码

面向过程的编程思想

哥德巴赫猜想:

  1. 让用户输入一个数
    1).是不是大于6
    2).是不是偶数
    3).是不是数
  2. 对输入的数拆分
  3. 分别验证是不是质数

自顶向下逐步求精
将一个程序打散成n多个小程序,再将程序进一步细化,直到整理出最终代码为止

  • 独立过程
    哥德巴赫猜想:
    n=a+b;
    判断a和b的过程,是独立的,相互之间互不影响

函数是对抽取出来的独立的过程的封装

淘宝:
1.登陆浏览器2.登陆3.验证用户合法性4.浏览商品5.添加购物车6.下订单7.填写收货地
址。。。。。。
不适用于多过程的复杂需求

第一个面向对象的编程语言:SmallTalk
C语言==》C++加入了面向对象的思想
面向对象的革命:Java(纯面向对象的语言)

对象

万物皆对象:一切客观存在的事物
唯物主义哲学思想
例如:显示屏,桌椅板凳,错误(客观存在)

  • 对象
    1.有什么:属性
    2.能干什么:方法

    例如:
    电脑:
    有什么:显示器,鼠标,键盘,主机。。。
    能做什么:上网,打游戏,学习。。。
    除了属性和方法之外没有我们需要关注的东西。

  • 对象的属性

对象的属性可能又是一个对象

  • 对象的方法

对象的方法的使用者,一定也是一个对象,(这个对象可能是别的对象,也可能是自己)

  • 客观世界是由对象组成
  1. 小对象组成大对象(小对象作为大对象的属性而存在)
  2. 对象的方法彼此间相互调用
  • 如何建立解题思路

例如:校外实训:郑州==》北京

  1. 找对象
    有交通运输的方法(小黄车,摩拜单车,摩的,汽车,高铁,飞机)
  2. 找方法
    调用交通工具的运输方法
  • 解决客观问题的方法
  1. 把解决问题所需要的对象准备好
  2. 考虑对象之间如何配合,完成需求
  • 小结
  1. 面向过程的编程思想:自顶向下,逐步求精(适合于解决简单问题)
  2. 面向对象的编程思想:找到合适的对象是第一位,需要什么方法是第二位

面向对象在计算机领域中的使用

计算机需求,来源于客观世界
把客观世界的需求,用计算机来实现

例如:
京东:
需求:在人类社会中,有人买东西,有人卖东西
解决:利用了计算机网络,解决人和人之间的交易行为(没有计算,这样的需求依旧存在)

QQ:
需求:人与人之间有交流的需求
解决:利用计算机解决
用计算机解决问题:用面向对象的思想解决,和现实世界高度统一(生活中怎么解决这个问题,用计算就怎么解
决)

  • 计算机中的对象

在JVM中一块连续的存储空间(数据,代表生活中的对象)
例如:
学生管理系统:

  1. 人工:建立档案册,记录学生信息(管理的对象:学生,有血有肉的人)
  2. 计算机:建立档案册,记录学生信息(管理的对象:计算机在存储空间中表示的学生,其属性是需要的属性)
  • 小结
    面向对象的思想为解决生活中的问题提供了思路,应对复杂的需求
    一个系统,越接近生活,越是合理(生活是最合理的)
  1. 各司其职,对象应该保持简单性
  2. 弱耦合性,对象和对象之间的联系,尽量弱化
  3. 可重用性,创建对象下一次可以拿来直接用
  4. 可扩展性,在原有的功能基础之上曾加新功能

oop面向对象的编程思想Object Oriented Programming

  1. 面向对象的语法:编译通过
  2. 面向对象的思想:要按照以上4点纲领

面向对象的三大特性

封装,继承,多态(三大基石)

大专栏  面向对象

  • 定义
    封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

    封装把对象的所有组成部分组合在一起,定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。

    适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。

  • 特点
    对象会有明确的边界,保护对象中的属性‐‐‐‐数据隐藏
    封装的粒度(不宜过大,也不宜过小)
    public 公开的,不受边界的控制
    private 私有的,只能在本类中使用,无法突破边界
    (提供对应的get/set方法)
    好处:提供约束,设置只读性
    方法私有:private 返回值类型 方法名(参数列表)
    方法公开:声明公开,实现隐藏(在声明不变的情况下,如果实现改变,对架构的影响最小)

继承

父类‐‐子类(有继承关系) 父类把子类的共性抽取出来
关键字:extends
class 子类 extends 父类{}

  • 特点
  1. 子类可以继承父类中的方法和属性
  2. 可扩展性(子类,重用父类中的方法)
  • 本质
    Animal‐‐Dog
    创建过程:先创建父类对象,后创建子类对象,父类对象作为子类对象的的一部分
    访问修饰符:从严到宽
    private 私有的 本类内部(不能被继承)
    default 默认的 本类内部+同包可以访问+同包子类(可能被继承)
    protected 受保护的 同包+不同包子类
    public 公开的 全能访问

    构造方法不能被继承

方法覆盖

子类用特殊的方法实现,替换了父类中的一般方法实现
语法要求:

  1. 返回类型,方法名,参数列表和父类相同(参数列表变化,就是重载)
  2. 访问修饰符:相同,或者更宽
  3. 不能抛出比父类更多的异常

对象构造的过程

  1. 分配空间:本类和父类一并分配空间,所有的属性被赋予默认值
  2. 递归的构造父类对象(初始化分类的属性,调用父类的构造方法)
  3. 初始化属性
  4. 调用构造方法

super

  1. 在构造方法中指定调用父类的哪一个构造方法
  2. 必须在构造方法的第一个语句
  3. 如果一个构造方法的第一句,不指定this也不指定super 系统默认添加super();
  4. 表示父类对象,区分父类被遮盖的属性,或者调用父类被覆盖的方法
  • 小结
    系统默认添加:
    构造方法第一行:super();
    没有写构造方法:公开的无参构造
    每个程序:import java.lang.*;
    super常常用来把构造参数传递给父类

JAVA继承的分类

继承分为单继承和多重继承。单继承是指一个子类最多只能有一个父类。多继承是一个子类可以有二个以上的父类。由于多继承会带来二义性,在实际应用中应尽量使用单继承。Java语言中的类只支持单继承,而接口支持多继承。Java中多继承的功能是通过接口(interface)来间接实现的。

一个类最多只能有一个直接父类,这点和C++不同!

多态

编译时多态(方法重载) 运行时多态(引用多态)

  1. 子类对象可以看成是父类对象(继承关系合理)
  2. 父类引用指向子类对象

多态规则:

  1. 对象类型不变
  2. 只能调用引用类型中所声明的方法
  3. 发生了方法覆盖,调用覆盖后的方法

引用之间的传递

  1. 子类对象的引用可以直接赋值给父类引用
  2. 父类引用给子类引用赋值,需要强制类型转换
  3. 在强制类型转换之前要用instanceof 判断,避免类型转换异常
    引用 instanceof 类名 (表示:引用是否和类名相互兼容)

多态作用

将多个对象统一看做是同一个父类对象,屏蔽子类之间的差异,增加程序的灵活性和通用性。

多态的方法

  1. 方法声明中的形参可以用父类引用来表示,实参用子类对象来传输
  2. 用父类作为返回值类型
原文地址:https://www.cnblogs.com/lijianming180/p/12256346.html