跳转至

面向对象

对象是编程的基本单位,一切都是对象。

一切都是对象,是否是语言设计失误?

基础概念

抽象

汇编语言是对计算机底层的一个极简化的抽象;所谓的高级语言都是各自对汇编语言的抽象。

解题空间(计算机的结构,机器模型,代码世界) <- 思考 -> 问题空间(问题的结构,问题模型,现实世界)。

面向计算机的设计方式理解成本高。

面向对象编程的一大挑战是,如何关联问题空间中的元素和解题空间中的对象。

对象

对象具有状态、行为及标识。

同一类对象:状态不同,但结构相同。

生命周期

创建对象,分配内存;销毁对象,释放内存。

引用

引用的作用是关联对象。

类描述了一系列具有相同结构和行为的对象。

基本特性

封装

将变化的事物和保持不变的事物分离。

分离接口和实现,通过访问控制隐藏实现,封装数据和功能,面向问题空间。

界限在任何关系中都很重要,所有相关方都应该遵循。

继承

复用实现,优先组合。

向上转型

继承图 —— 单根层次结构。

向下转型

多态

将一个方法调用和一个方法体关联起来的动作称为绑定。

前期绑定(编译时),后期绑定(运行时绑定,亦动态绑定)。

在 Java 中,除了 static/final/private 方法外,都是动态绑定。

多态将做什么和怎么做解耦。

基本原则

里氏替换原则

定义

如果对每一个类型为 T1 的对象 o1,都有类型为 T2 的对象 o2,使得以 T1 定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型;

所有引用基类的地方必须能透明地使用其子类的对象。

实践

尽可能应用纯替换原则。


最后更新: September 10, 2023

评论