重学Java(一):什么是对象
前言
本系列文章内容来自于《Thinking in Java》作者的最新续作《On Java》基础卷,作者根据最新 Java 8、11、17的内容,重讲了Java的编程思想,值得初学者阅读。
引子
编程语言是用于创建应用程序的思维模式。而面向对象编程(OOP)是使用计算机作为表达媒介的一种尝试。
抽象
所有编程语言都是一种抽象。汇编语言对计算机底层进行了抽象,一些命令式的编程语言对汇编语言进行了抽象,这些抽象的方式主要是根据计算机的结构来决定的,而不是实际解决问题的方式。
在这种情况下,程序员必须必须在机器模型(实际解决问题的方式,如计算机)和问题模型(问题实际存在的地方,比如某个业务逻辑)建立关联。
而面向对象编程通过其向程序员提供的展示问题模型的通用工具,使程序员可以不再局限于特定的问题。问题模型中的元素以及其解决方案中的具体呈现,就是对象。
面向对象编程的语言,有以下几个基本特征:
- 万物皆对象。
- 一段程序实际上就是多个对象通过发消息来通知彼此干什么。
- 从内存角度而言,每一个对象都是由其他更为基础的对象组成的。
- 每一个对象都有类型。
- 同一类型的对象可以接受相同的消息。
接口
创建抽象数据类型(即类)是面向对象编程的基本概念。类描述了一系列具有相同特征(数据元素)和行为(功能方法)的对象,是一种数据类型。
抽象数据类型和内置数据类型不同的是,可以通过一个新定义的类来解决问题,而不局限于内置数据类型。
一旦创建了类之后,就可以用它创建多个对象。对象发挥作用,是它的接口决定的。而它所属的类则定义了这些接口。
Light lt = new Light();
lt.on();
以上代码加上隐藏的数据,是对类 Light
中方法on()
的实现。
对象提供服务
从要解决的问题开始,可以拆分其为一系列的对象,然后将其简化为对象提供的服务,来简化问题。
让对象提供服务,还能提升对象的聚合程度,体现高内聚性。
实现
类创建者在创建新类时,只暴露必要的接口给其使用者,同时隐藏其他不必要的信息。隐藏代码的具体实现可以有效减少程序错误。
设置访问控制的首要原因,一是防止使用者接触到他们本不该触碰到的内容,二是让库的设计者在改变类内部的工作机制时,不用担心其是否会影响到使用者。
(未完待续)