“抽象”的级别

面向对象三大特性是:封装,继承,多态。

所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。


以上是摘抄的定义。


抽象是建立在封装之上的。抽象是从不同的角度,不同的层次看待问题。层次越高,就越抽象。


抽象的几种级别:

  1. 将过程封装成一个方法。方法对外屏蔽了具体的实现和操作。使用者只需要根据方法签名使用即可。使用者眼中是各个不同的方法,无需关心细节。这种级别的抽象,是最低级别的抽象。

  2. 将事物封装成类。使用者眼中是各个不同的现成的,不用关心类具体的实现,将这些类组装调用,即可完成相应的工作。这是高一层的抽象。

  3. 将类封装模块或者构件。使用者眼中是一个完整的模块。比如说,日志有log4j。将系统划分成不同的模块。站在这个层次上看问题,只需要将各个模块拼装即可,也无需关心模块具体的实现,也无需关心模块包含哪些类。因为这个层次更高,抽象程度更高。比如说UML中的构件图,这个层次更关心各个构件之间的协作关系。

  4. 应用级别的抽象。这是最高层次的抽象。SOA就是一个例子,一个独立的服务,是一个独立的应用。。我们不需要去关心各个应用内部由哪些模块,构件组成,只需要将各个应用拼装来完成不同的任务。通常系统的架构图就是这样,只画出各个具体的服务,关注服务之间的调用关系。一个服务,一个数据库,一个消息队列,一个缓存服务都只是一个圆圈而已。站在这个层次看待问题,会当凌绝顶,一览众山小。

<think>嗯,用户想理解"抽象级别"在计算机科学或编程中的含义。这个问题很有意思,因为抽象确实是计算机科学的核心概念之一。从用户提供的引用来看,ta似乎已经接触过一些相关资料,但可能对抽象级别的层次性还不够清晰。 用户引用的材料很有价值:引用[1]提到抽象是为了隐藏细节,引用[3]用历史发展说明抽象层次的演进,引用[4]展示了抽象的界面保护作用。这些正好构成了解释抽象级别的三个维度:目的性、层次性和保护性。 我注意到用户特别困惑"同一个东西的不同抽象级别"这个问题(引用[2])。这很典型,比如内存管理在机器语言层是物理地址,在高级语言层是变量名,在云平台可能是资源池。需要重点解释这种"同一事物的多层抽象"现象。 用户似乎有工程背景(引用[5]提到"应用到问题解决"),所以解释时要侧重实际案例。准备用网络协议栈的例子,从物理层到应用层逐级说明,这样比纯理论更容易理解。另外要强调抽象级别与细节隐藏的对应关系,这是ta反复提及的点(引用[1][2])。 考虑到用户可能接触过编程,但不确定熟练程度,避免使用专业术语时要解释清楚。比如"文件抽象磁盘"这种说法,需要说明文件如何隐藏磁道扇区细节。OS进程管理的例子可能比编程语言更普适,因为所有程序员都会接触。 最后要解决用户的核心困惑:抽象级别如何帮助实际工作。准备举开发电商系统的例子,展示从架构设计到代码实现的抽象层级,说明每层关注的焦点如何变化。这应该能回应ta"应用到问题解决"的需求(引用[5])。</think>在计算机科学中,"抽象级别"(Levels of Abstraction)指**通过隐藏底层复杂细节,用更简化、更高级的概念来表示系统或组件的层次化方法**。其核心作用是降低认知负担,提高开发效率和系统可维护性。以下是具体解析: --- ### **一、定义** 1. **分层隐藏细节** 每个抽象级别只暴露必要的接口,屏蔽实现细节。例如: - **硬件层**:晶体管、电路(物理细节) - **操作系统层**:文件(抽象磁盘)、进程(抽象CPU)、内存地址空间(抽象物理内存)[^3] - **编程语言层**:变量、函数(隐藏机器指令) - **框架层**:Spring的`@Controller`(隐藏HTTP协议处理)[^3] 2. **语义化表达** 用符合人类思维的语义代替底层操作。例如: - 数据库查询 → SQL语句(隐藏磁盘I/O和索引算法) - 网络通信 → `socket.send()`(隐藏数据包拆分和路由) --- ### **二、作用** | **作用** | **案例** | |-------------------|--------------------------------------------------------------------------| | **降低复杂度** | 程序员调用`print()`无需理解显存如何驱动像素[^1] | | **提高复用性** | 使用加密库函数,无需重写AES算法实现 | | **隔离变化** | 修改数据库引擎(如MySQL→PostgreSQL)不影响上层应用代码[^4] | | **增强可维护性** | 分层调试:网络层问题查TCP包,应用层问题查业务逻辑 | --- ### **三、典型抽象层级(从低到高)** 1. **硬件层** - 逻辑门、电路信号 - *抽象实现*:二进制机器码 2. **操作系统层** - 抽象硬件为进程、文件、内存块 - *示例*:`fopen()`隐藏磁盘扇区读写细节[^3] 3. **编程语言层** - 变量(抽象内存地址)、循环(抽象跳转指令) - *示例*:Java的`ArrayList`隐藏动态数组扩容算法 4. **框架/库层** - Spring MVC抽象HTTP请求为Controller方法 - *示例*:`@GetMapping("/user")`隐藏Servlet API调用[^4] 5. **领域模型层** - 业务对象(如"订单"、"支付")抽象真实业务流程 - *示例*:电商系统的`Order.process()`隐藏库存校验和支付网关交互 --- ### **四、抽象级别的关键特性** - **相对性**:同一概念在不同层级含义不同 - 例:内存地址 - 硬件层 → 物理电信号地址 - OS层 → 虚拟地址(进程隔离) - JVM层 → 对象引用(自动垃圾回收) - **漏洞风险**:抽象可能"泄露"底层细节 - 例:C语言的`sizeof(int)`依赖硬件字长,需开发者关注 --- ### **五、实际应用案例** ```java // 高层抽象:业务逻辑 orderService.pay(orderId); // 中间抽象:框架层(Spring) @Transactional public void pay(Long orderId) { Order order = dao.findById(orderId); // 抽象数据库访问 paymentGateway.charge(order); // 抽象支付接口 } // 底层抽象:JDBC驱动(隐藏TCP连接和SQL协议封装) Connection conn = DriverManager.getConnection(url); ``` > 每一层只关注本层职责,下层变化(如数据库迁移)不影响上层[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值