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

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

1.1抽象过程中间有一小段讲述了早期编程语言对机器建模的方式只是针对待解问题的建模形式,比如举了两个例子,LISP语言选择的方式是所有问题最终都是列表;APL语言选择的方式所有问题都是算法性的;Prolog语言将所有问题都归结为一系列决策。举这些语言的例子目的是说明他们都不够灵活,只是针对特定类型的问题,超出了特定类型的领域就不好使了。上述语言我们也没用过,比较小众,可能在特定领域非常出名,但是在这里无非就想说明的是,他们还不能表示通用的问题。接下来就是我们本章甚至本书重要的角色出场了:面向对象方式(这里不是指具体语言,先不要把JAVA放在首位)。

 

书中接着写到的是”面向对象的方法进一步提供了工具,使程序员能够表示问题空间中的元素。这种表示足够通用,使程序员不受任何特定类型问题的限制。”。这句话只当是看来可以说史无前例,感觉我们找到了灵丹妙药,而且独霸一方。但是现在在看,在这个人工智能的时代,大数据的时代,通用大语言模型盛行的时代,面向对象方式还是我们计算机解决现实问题唯一选择的方式吗?有部分问题的解决已经不是通过面向对象的方式去解决了。但是大多数问题还是的。

下面我们继续沿着书中认为面向对象是如何表达我们现实世界的通用性这个话题走下去。”面向对象编程允许您根据问题而不是计算机的角度来描述问题,而不是描述解决方案将运行的计算机。仍然存在与计算机的联系”。在这句话的后面还有一段,我们暂时不去管他,可能我认为把对象比喻成一个小型计算机不合适。按照面向对象的方法现在我们做系统设计确实是从现实世界问题角度和考虑的,比如E-R图,这个软件工程中的概念,翻译过来就是实体-关系图。可以把现实世界总业务问题中的名词以及名词之间的关系通过E-R图表示,E-R图就可以转换成我们计算机世界中的类,这样就可以通过程序去实现了。

 

这一小节的最后一部分有一个叫Alan Kay的名人,他总结了面向对象编程语言的五个基本特征,虽然是基于第一种成功的面向对象编程语言Smalltalk的,但是针对其他所有的面向对象语言都是通用的。

image.png

我们在使用面向对象的编程语言去写程序的时候,程序中任何变量(定义出来的东西)都是对象(先忽略java中的原子类型)。我们的程序就是这些对象组成的,程序需要对象做什么事情,就调用该对象的方法(就是发消息)。每个对象可以包含其他对象,可以构建满足自己业务需求的复杂的对象。第4点我觉得是个公理,没必要解释,属于自然现象。第5点涉及到继承多态的概念。这个概念后续会详细介绍。很重要的一点。

 

还有一个叫Booch的名人用更简洁的一句话描述了对象的概念:对象具有状态、行为和标识。

状态不是说静止的,活动的意思,当然也包含上面的意思,就是我们说的一名客户的姓名,年龄等也属于状态,行为就是客户买东西,标识这个对我们来讲不够明显,可以理解为对象的身份证,唯一的,在计算机里就是一段内存地址码,一串看不懂的英文文字。

目录
相关文章
|
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
|
3月前
|
存储 Java
Java编程中的对象和类
【8月更文挑战第55天】在Java的世界中,“对象”与“类”是构建一切的基础。就像乐高积木一样,类定义了形状和结构,而对象则是根据这些设计拼装出来的具体作品。本篇文章将通过一个简单的例子,展示如何从零开始创建一个类,并利用它来制作我们的第一个Java对象。准备好让你的编程之旅起飞了吗?让我们一起来探索这个神奇的过程!
37 10
|
3月前
|
存储 Java
Java的对象和类的相同之处和不同之处
在 Java 中,对象和类是面向对象编程的核心。
66 18
|
3月前
|
Java
Java 对象和类
在Java中,**类**(Class)和**对象**(Object)是面向对象编程的基础。类是创建对象的模板,定义了属性和方法;对象是类的实例,通过`new`关键字创建,具有类定义的属性和行为。例如,`Animal`类定义了`name`和`age`属性及`eat()`、`sleep()`方法;通过`new Animal()`创建的`myAnimal`对象即可调用这些方法。面向对象编程通过类和对象模拟现实世界的实体及其关系,实现问题的结构化解决。
32 4