【OOP and Equality of ADT】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

一、OOP(面向对象编程)

从需求到代码,就是将现实世界中对象的状态和行为变成类中的属性和方法

静态/实例 变量/方法

类方法/成员变量:不被实例化的,与类本身联系的,被所有实例化对象共享的方法和成员变量(static修饰)
实例方法/成员变量:与类的某一个具体对象相联系的、被实例化的方法/成员变量

接口

一个接口可以扩展(extends)多个接口,一个类可以实现(implements)多个接口
实际上,我们经常将接口interface用于确定ADT规约,而类class用于实现ADT,用接口来定义变量,将客户端和内部实现分离开来
默认方法:接口中带有方法体的可以被继承和重写的方法(default修饰)
静态工厂方法:接口中带有方法体的但是不能被继承和重写的方法(static修饰)

枚举构造

enum Car {
    lamborghini(900),tata(2),audi(50),fiat(15),honda(12);
    private int price;
    Car(int p) {
        price = p;
    }
    int getPrice() {
        return price;
    } 
}
public class Main {
    public static void main(String args[]){
        System.out.println("所有汽车的价格:");
        for (Car c : Car.values())
        System.out.println(c + " 需要 " 
        + c.getPrice() + " 千美元。");
    }
}

输出结果:
所有汽车的价格:
lamborghini 需要 900 千美元。
tata 需要 2 千美元。
audi 需要 50 千美元。
fiat 需要 15 千美元。
honda 需要 12 千美元

二、等价性

immutable(不可变类型)

1、AF表示等价性

如果抽象函数映射的抽象值相同,则等价

2、观察等价性

站在外部观察者角度,对两个对象调用所有操作(构造器、生产器、观察器),都会得到相同的结果,则认为这两个对象是等价的。由于不可变类型没有变值器,故其观察等价性等同于行为等价性

比较操作———— ==和equals()

1、引用等价性==

对于基本数据类型,是比较值是否相等;对于引用数据类型,比较是否指向内存中相同的地址空间。若相等,其实就是同一对象。

2、对象等价性equals()

即按我们定义的内容相等。需要重写equals()和hashCode()方法,满足自反、对称、传递三个性质

mutable(可变类型)

1、观察等价性

站在外部观察者角度,对两个对象调用所有构造器、生产器、观察器操作,都会得到相同的结果,则认为这两个对象是等价的。
此处的“相同的结果”指的是,等价的输入应该产生等价的输出

2、行为等价性

对两个对象调用所有操作(包括变值器在内),都会得到相同的结果,则认为这两个对象是等价的。

对于不可变类型而言,一般倾向于使用观察等价性,但即使是观察等价性,也有可能破坏RI,因此一般不可变类型不重写equals()和hashCode()方法,而是以其他方法取代之

总结

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值