重温经典《Thinking in java》第四版之第一章 对象导论(四)

简介: 重温经典《Thinking in java》第四版之第一章 对象导论(四)

下面进入到1.2每个对象都有一个接口这一小节,有点编程经验的不要被这里面的接口所误导,它不是interface的概念;初学者也不要被接口这个新概念所吓到,其实就是一个对象的行为。这个小节举了个银行出纳员问题这个仿真程序的例子来说明对象的特性和行为,跟我们的客户Customer例子一样,无非他这里的对象多一点。看到这里其实有点迷糊,就是出纳、客户和账户以及货币单位可以抽象成类,他们可以创建出对象,交易不是一个动词吗,怎么能成为抽象出一个类,然后创建出对象呢?可以把这里的交易理解为一次交易记录,不要把他理解为人为的动作。所以这里面很多东西,只要说明白了就好理解,说不明白想不明白,理解起来很是费解。其实有的时候有些动作确实可以抽象成类,后面会遇到。

 

接下来书中又举了一个例子说明每个对象都有一个接口的意思,我觉得这个例子标注的很清楚,就是每个对象都有方法,因为一个对象要被其他对象使用或者程序使用,必须有方法才能被调用。

image.png

这个图是使用UML(统一建模语言)绘制的,顶部是类名,方法也就是图中的接口在方框底部,中间其实还有一部分是数据成员(也称为状态或属性),被忽略了,比如Light的名称、大小等。UML属于软件工程里的内容,主要通过图形表示一些现实世界实体或者计算机世界中的类和对象等信息。

 

接下来就是1.3每个对象都提供服务,我认为这跟1.2小节是一样的概念,提供服务的形式就是把接口(这里指方法)暴露出去给需要服务的程序或者对象调用。1.3小节中举了几个例子也说明了这一点,比如查询支票信息,打印支票。这里面提到一个设计的问题,就是把很多功能(可以理解为接口或方法)放在一个对象里还是分几个对象的问题,文中给出不能把太多功能都放在一个对象里。这点也给我们以后设计程序的时候一个警告,合理的划分对象的职责,也是后期学习设计模式以及面向对象7大设计原则里会讲到的内容,主要学习让系统设计符合软件工程里的高内聚低耦合,便于维护、复用和扩展。

 

通过这两节的学习让我觉得思想指导的重要性,我们一毕业工作就开始疯狂的码代码,实现需求,往往忽略了我们写出的代码,实现的系统是否是最合理的。我们的程序员都很忙,996和007型的压根都没空考虑这个合理性的问题。难道我们就不能反过来想想,如果我们考虑好了程序设计的合理性,能否就避免996和007了呢?(例行加班的除外)

 

其实好的程序是设计出来的,不是只靠敲键盘敲出来的。所以重在思考,经典会让你一直处于思考当中,好好看书学习,多思考。

目录
相关文章
|
1月前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
2月前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
50 17
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
2月前
|
存储 Java 数据管理
Java零基础-Java对象详解
【10月更文挑战第7天】Java零基础教学篇,手把手实践教学!
31 6
|
2月前
|
Oracle Java 关系型数据库
重新定义 Java 对象相等性
本文探讨了Java中的对象相等性问题,包括自反性、对称性、传递性和一致性等原则,并通过LaptopCharger类的例子展示了引用相等与内容相等的区别。文章还介绍了如何通过重写`equals`方法和使用`Comparator`接口来实现更复杂的相等度量,以满足特定的业务需求。
29 3
|
1月前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
43 0
|
2月前
|
存储 前端开发 Java
你还没有对象吗?java带你创建一个吧
你还没有对象吗?java带你创建一个吧
14 0
|
5天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
35 6
|
20天前
|
设计模式 Java 开发者
Java多线程编程的陷阱与解决方案####
本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####
|
18天前
|
存储 监控 小程序
Java中的线程池优化实践####
本文深入探讨了Java中线程池的工作原理,分析了常见的线程池类型及其适用场景,并通过实际案例展示了如何根据应用需求进行线程池的优化配置。文章首先介绍了线程池的基本概念和核心参数,随后详细阐述了几种常见的线程池实现(如FixedThreadPool、CachedThreadPool、ScheduledThreadPool等)的特点及使用场景。接着,通过一个电商系统订单处理的实际案例,分析了线程池参数设置不当导致的性能问题,并提出了相应的优化策略。最终,总结了线程池优化的最佳实践,旨在帮助开发者更好地利用Java线程池提升应用性能和稳定性。 ####