连载:面向对象葵花宝典:思想、技巧与实践(6) - 不要说你懂“类”

2024-09-04 04:18

本文主要是介绍连载:面向对象葵花宝典:思想、技巧与实践(6) - 不要说你懂“类”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

方以类聚,物以群分——《周易 易传》。 


类是面向对象领域里最基础的一个概念,也是面向对象分析和设计的基石。 

然而,如此重要的一个概念,竟然很难找到深入的说明,绝大部分介绍面向对象的书籍或者资料基本上都是这么解释的:“类是一组对象的抽象”,这个解释看起来清晰明了,但实际上犯了一个逻辑上的错误:以未明确的概念来解释待明确的概念,什么是对象,什么是抽象,我们都还不知道,你却用这个概念来解释类?那当然看不懂了。 

还有另外一个解释:类就是属性和方法的集合!甚至还会给出如下这样的样例:

Class Person{

Int  age;

String  name;

Void play();

}

这种解释深究一下,其实很容易发现其犯了本末倒置的错误:类是本,代码是末,只有清晰地掌握了类的概念,才能写出好的代码。否则,即使写出了代码,也是一堆烂代码。

 

那究竟何为类呢? 

其实,抛开面向对象,抛开程序开发,即使在我们的现实世界中,类也是无处不在的:

古语云: 物以类聚,人以群分,这里的“类”,其实和面向对象中的“类”的逻辑含义并无不同。

我们的生物学将生物分为动物、植物、微生物等种类,这里的“类”,和面向对象中的类概念也是一致的。 

因此,当我们在定义什么才是“类”的时候,其实完全不需要和面向对象扯上关系。简单来说,类就是一组相似事物的统称。 

这个定义看起来再简单不过了,但为了避免在实践过程中设计不合理的类,我们还要深挖背后的玄机,玄机在哪里呢?

 

玄机就在定义里面,我们来认真分析一下定义:

首先:请看“一组”,思考一下为什么是“一组”,不是“一个”?

其次:请看“相似”,思考一下为什么是“相似”,不是“相同”?

最后:请看“统称”,思考一下为什么是“统称”,不是“名称”? 

第一个玄机——“一组”:一组的玄机在于“多个“,单个事物无法成为类。

一个很简单的例子:“人“可以是一类,但“我”就不是一个类(那又是什么呢,请看后文分解?) 

第二个玄机——“相似”:相似的玄机在于“比较像,但不完全相同”。

还是“人”这个例子:奥巴马和克林顿都是美国总统,都是人,有很多相似的地方,但他们两个绝对不是完全相同的。 

第三个玄机——“统称”:统称的玄机在于“统”,也可以叫做“通称”,统称要能够概括这多个事物。

还是上一个例子:奥巴马和克林顿的统称可以为“人”、“男人”、“总统”,但不会统称为“奥巴马”,因为奥巴马是一个具体的人了。 

类的定义玄机我们已经基本解读,看起来已经比较清晰了,但不要高兴太早,还有一个更大的玄机:我们怎么划分类?

 

一个很简单的问题:你和我是一类么?

。。。应该是:)

再一个简单的问题:你和猪是一类么?

你肯定会跳起来:我怎么和猪是一类呢?

但我要说,我们和猪确实是一类,我们都是“哺乳动物“。

再一个简单的问题:你和松树是一类么?

这次你可能学乖了:也是一类,都是“生物“。

。。。。。。

到这里你可能已经迷惑了“到底我和什么是一类“?

这个问题引出了类最重要的一个玄机:“如何定义类“? 

其实答案就隐藏在我们前面的问题中:“只要有相似点的就是同一类“!

我和你都是一类,是因为我们都是“人“;

你和猪是一类,是因为都是“哺乳动物“;

你和树一类,是因为都是“生物“;

。。。。。。

 

但这样又引出另外一个问题:如果只要有相似点就是同一类,那么最后是不是只要用一个类“事物”或者“东西”就可以了呢,干嘛还用得着分那么多类么?

万法归一,所有的事物当然最后都可以归为一类(例如在Java中就有一个大一统的类Class),但这显然远远不能满足我们的要求,实际应用中我们肯定需要不同的、多种多样的类,那么具体如何操作呢? 

有一句广告词可以很好的概括:角度决定看法!

也就是说:站在你的观察角度,能够看到相似点就是同一类!

当你观察人时,我和你是一类,但你和猪就不是一类了;

当你观察动物时,我、你、猪都是一类,但树就不是了;

当你观察生物时,我、你、猪、树都是一类

。。。。。。。

所以最后我们总结一下如何划分类:站在你的观察角度,具有相似点的事物就是同一类

这篇关于连载:面向对象葵花宝典:思想、技巧与实践(6) - 不要说你懂“类”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134970

相关文章

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

电脑报错cxcore100.dll丢失怎么办? 多种免费修复缺失的cxcore100.dll文件的技巧

《电脑报错cxcore100.dll丢失怎么办?多种免费修复缺失的cxcore100.dll文件的技巧》你是否也遇到过“由于找不到cxcore100.dll,无法继续执行代码,重新安装程序可能会解... 当电脑报错“cxcore100.dll未找到”时,这通常意味着系统无法找到或加载这编程个必要的动态链接库

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触