OOP编程(面向对象)基础

类与实例

  • OOP: Object-Oriented Programming

    1. 对象: 对象是一个自包含的实体,用一组可识别的特性和行为来标识
    2. 类: 类就是具有相同属性和功能的对象的抽象集合
    3. 实例: 一个真实的对象(实例化就是创建对象的过程)

    类A name; // 声明一个 类A的对象 叫name

    name = new 类A(); // 将name对象实例化

构造方法/方法重载

  • 构造方法—构造函数,就是对类进行初始化. 在被new时调用
    1. 所有类都有个默认无参数构造方法,,如果你定义了构造方法,则默认的失效
  • 方法重载提供了创建同名的多个方法的能力, 需要参数类型,参数个数不同

封装,继承和多态

  • 封装: 每个对象都包含它能进行操作所需要的所有信息, 这就是封装, 所以对象不必依赖其他对象来完成自己的操作,好处:

    1. 良好的封装能降低耦合
    2. 类内部的实现可以自由修改
    3. 类有清晰的对外接口
  • 继承: 面向对象中 is - a 的关系,可以说为是一个 的关系 . (猫类继承动物类—猫是动物) 继承可使得修改和扩展 继承而来的实现 比较容易

    1. 子类拥有父类非private的属性和功能
    2. 子类具有自己的属性和功能
    3. 子类可以通过自己的方式实现弗雷德功能(方法重写)
    4. protected修饰的只对子类公开
  • 多态: 不同的对象可以执行相同的动作,但是要通过他们自己的实现代码执行(实现的结果一样,但是行为方式不同)

    1. 子类以父类的身份出现
    2. 子类在工作时以自己的方式实现
    3. 子类以父类的身份出现是,子类特有的实行和方法不可使用

    java

    1
    父 f1 =new 子();// 每个子类通过自己的方式完成

重构

重构就是在不改变软件系统外部行为的前提下,改善它的内部结构。具体实现方式不同

抽象类(abstract)

  • Java可以把类和方法声明为abstract, 即抽象方法和抽象类

    1. 抽象类不能实例化
    2. 抽象方法必须被自类重写
    3. 抽象方法必须在抽象类中
  • 抽象类拥有尽可能多的共同代码,尽可能少的数据

    J&DP

    1. 抽象类提供一个继承的出发点–一定使用来继承的
    2. 在一个继承关系里 – 树叶是具体类, 树枝是抽象类

接口(interface)

官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)

  • 特性

    1. 实现接口必须实现所有方法和属性
    2. 接口中的方法默认抽象的
    3. Java只支持单一继承,但是可以实现多个接口,接口也可以被多个类实现
  • 接口回调:

    java

    1
    接口 Interface =new 实现(); // 接口对象可以调用被实现类中的方法
  • 接口和抽象类

    1. 类是对对象的抽象 ,抽象类是对对象的抽象, 接口是对行为的抽象
    2. 如果行为跨越不同的类—可以用接口; 对于一些相似的类对象–用继承抽象类
    3. 实现接口和继承抽象类可以一起用不冲突
    4. 从设计角度来说: 抽象类是从子类中发现了公共选项,泛化出来的(重构); 而接口是预先定义设计出来的

委托与事件

一般我们在实现主要业务,一些辅助功能一般是父类(一般类或抽象类)中实现好了或者通过委托实现,大多数中一般使用父类,继承父类需要耦合在主类中,使用的委托的方式是解耦主类,使主类不知道谁帮我做了这些事,但是Java中没有对委托进行封装,则需要开发者自己实现。(待完成)

OOP编程的七大原则

  • 开闭原则: 对扩展开放,对修改关闭(首要遵守)
  • **里氏替换原则: ** 继承必须确保超类拥有的性质在子类中任然成立(尽可能不去重写父类)
  • 依赖倒置原则:摆脱面向过程中高层依赖底层, 抽象依赖于具体. 而是面向接口编程
  • 单一职责原则:控制累的粒度大小,将对象解耦合,高内聚(一个类的职责尽量单一)
  • 接口隔离原则: 为每个类建立属于它们需要的专用接口,使用多个专门的接口比使用单一的总接口要好。
  • 迪米特原则或最少知识原则: 只与直接朋友通信,或者通过朋友与陌生人传递消息
  • 合成服用原则: 关联关系优于继承关系。尽量使用 合成/聚合(has - a)、尽量不使用继承(is - a)。

OOP

要做到低耦合

资源时独立的(只有 属性和方法)