面向对象编程和面向接口编程——加深复习

2024-05-03 05:38

本文主要是介绍面向对象编程和面向接口编程——加深复习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

面向对象思想”和“ 面向过程思想”相对,而“针对接口(抽象)编程”和“针对实现编程相对”。

首先纠正楼主一个认识误区,任何编程思想都是在试图建立现实世界和计算机世界的“映射”。无论是面向过程还是面向对象或者是其它的什么思想,根本目的都是在计算机中建立现实世界的模型,通过模型的“沙盘推演”,达到解决现实问题的目的。宏观上说,无论是面向对象还是面向过程,都是一种世界观,是一种对世界的认知和划分。

只不过面向过程的思想把世界划分为数据结构和函数,而面向对象的思想把世界划分为对象和方法。相对于面向过程的思想而言,面向对象思想和现实世界的“映射”更容易建立,所以现在面向过程的思想已经逐渐被面向对象的思想所取代(但是这绝不是说面向对象思想可以完全取代面向过程的思想)。

c语言是面向过程思想的典范,而面向对象的思想的代表编程语言有Java和C++等(切忌语言和语法规则服务于编程思想)。任何的编程语言只是编程思想得以实现的载体。


面向接口编程本身是面向对象编程思想所提倡的一种编程规范。因为它能够最大限度的解耦,所谓解耦既是解耦合的意思,它和耦合相对。耦合就是联系,耦合越强,联系越紧密。在程序中紧密的联系并不是一件好的事情,因为两种事物之间联系越紧密,你更换其中之一的难度就越大,扩展功能和debug的难度也就越大。

举个硬件例子,道理和软件相同
软盘你知道吧,骨灰级的存储工具,最初是3.5英寸的,后来变成了2.5英寸,无论哪一种,都采用软驱中的磁头读取软盘上的数据,而且存储能力都小得可怜,现在你已经很难再见到它们了。后来出现了光盘,工作原理和软盘相似,但是传输速度和存储容量都大大超过软盘。遗憾的是软驱是无法读取光盘的,硬件制造商不得不提供光驱来替代软驱。今天既是一个不懂电脑的人,也不会利用软驱读取光盘?为什么呢?起码软盘和光盘的直径就不一样,塞不进去,然而你不这么做根本原因不是因为它太过匪夷所思,而是软驱和软盘的紧密“耦合”使得软驱只能用来读取软盘。

但是USB接口则不同,Intel睿智的设计者们提出了这种传输接口,它几乎能够接驳几乎所有你想得到的输入输出设备,现在无论你接驳的是外置的USB光驱,还是USB软驱,甚至是最新的比USB产生还要晚的面部识别系统他都恩那个够正常工作,硬件制造商们不需要再去费脑筋提出更新的“X驱”了。什么原因呢?因为USB接口是针对抽象“接口”设计的松耦合设备,USB接口的提供端并不知道也不需要知道接口的另一端是鼠标、键盘、摄像头还是其它的什么设备,它对任何传输进来的数据都采用相同的处理规则,管你是什么,你符合USB的传输方式我就支持你。这样你可以任意更换USB的另一端设备,而且你惊奇的发现他们都能够正常工作!

软件编程也是一样,Java类库中这样的例子太多。比如Arrays.sort()方法,该方法是一个排序方法,需要利用Compareble接口的compareTo()方法,但是compareTo()方法没有任何实现,它需要你自己去编写,这是合理的因为计算机并不知道如何比较你定义的数据(是字典排序字符,还是大小排序阿拉伯数字或者其它的什么方式)。那就只好交给你自己来编写,sort方法是一个针对抽象接口Compareble编程的方法。,该方法只是专注于采用哪种排序方式,是冒泡排序还是快速排序,而不考虑具体两个对象的比较方式。具体的你最好看看api。

总结一下针对接口编程给编写程序最大限度的解耦合,提供了最大的扩展性。它使得整个程序,不会因为局部的更改(无论是因为修正错误还是提供功能的扩展),而“牵一发而动全身”,造成整个软件必须重新编写。

这篇关于面向对象编程和面向接口编程——加深复习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec