面向接口编程优缺点

下面是我对面向接口编程的理解

优点:

1.程序结构清晰,使用方便

2.接口经过合理设计后,有利于程序设计的规范化,并可以并行开发,提高工作效率

3.实现了程序的可插拔性,对于不同的需求切换不同的实现,降低了耦合度,随着系统复杂性的提高这个优势会越来越明显

4.允许多重实现,弥补了继承的缺陷

缺点:

1.增加了设计的复杂度,不佳的接口的设计会对所有使用接口的层都有影响,并且并不是所有的程序的都需要使用接口,接口只有在系统的复杂性达到一定程度才能体现出它的优势,否则只是纯粹的增加工作量,当然选择接口是不会错的,这需要自己的衡量

2.可能会降低代码的可复用性

3.可能会降低程序的执行效率

使用接口的经典案例:

1.JDBC接口,如果使用的标准SQL,mysql和sqlserver的切换只是切换不同的JAR,一个新的DB厂商想支持JAVA,只要实现JAVA的JDBC接口即可。

2.JMS接口,你选择了Apache ActiveMQ作为你的消息中间件,某天你发现WebSphere更佳适合,切换成WebSphere实现后你会发现你没有太多需要改动的地方。

反之以上设计如果没有使用接口,我们会发现这种情况:

mysql.jar提供的连接方法叫:connectMysql(String url ,String userName) sqlServer.jar提供的连接方法叫:connectSqlServer(String userName,String url)

当我们的程序中至少有1万处使用连接方法,并且所有的执行查询,设置参数等等方法都是不同的,程序的改造无疑是非常恐怖的。

接口和继承的选择:

有人问Jams Gosling(Java之父):“如果你重新构造Java,你想改变什么?”。“我想抛弃 classes”他回答。在笑声平息后,它解释说,真正的问题不是由于class本身,而是实现继承(extends 关系)。接口继承(implements关系)是更好的。你应该尽可能的避免实现继承。

结构化编程面向对象编程是两种常见的软件开发范式,它们在设计思想、代码组织方式、可维护性、扩展性等方面各有特点和适用场景。 ### 结构化编程的特点和优缺点 结构化编程是一种基于模块化和顺序执行的编程方法,其核心思想是将程序分解为多个独立的步骤,每一步完成特定的功能。这种编程方式通常依赖于三种基本控制结构:顺序、选择和循环。 #### 优点 - **逻辑清晰**:程序的执行流程直观,易于理解和调试。 - **模块化设计**:通过将程序划分为多个函数或过程,降低了问题的复杂度,便于分工协作。 - **易于实现**:对于小型项目或教学用途,结构化编程较为简单直接,学习曲线平缓。 #### 缺点 - **数据与行为分离**:数据和操作数据的代码通常是分离的,导致程序难以维护和扩展。 - **缺乏封装性**:全局数据的广泛使用使得修改一个部分可能影响到整个程序的稳定性。 - **重用性差**:由于缺乏继承、多态等机制,代码复用率较低,开发效率受限。 ### 面向对象编程的特点和优缺点 面向对象编程(OOP)是一种以对象为基础的编程范式,强调将数据(属性)和操作数据的方法(行为)封装在类中,并通过继承、多态和封装等机制实现代码的复用和扩展。 #### 优点 - **模块化和封装性**:每个对象都封装了自身的数据和行为,对外提供接口,内部实现的修改不会影响到其他部分,提升了系统的可维护性和可扩展性。 - **代码复用性高**:通过继承和多态,可以复用已有类的功能,并根据需要进行扩展或修改。 - **贴近现实世界的建模**:对象和类的设计方式更符合人类的思维方式,便于理解复杂系统。 - **高内聚、低耦合**:良好的面向对象设计使得系统各部分之间的依赖性降低,增强了系统的灵活性和可测试性。 #### 缺点 - **性能开销**:面向对象的抽象层次和动态绑定可能带来一定的性能损耗,不适合对性能要求极高的场景。 - **学习成本较高**:面向对象的概念如继承、多态、接口等需要一定的理解门槛,对初学者而言较为复杂。 - **过度设计风险**:在小型项目中,使用面向对象可能导致设计复杂化,反而增加开发和维护成本。 ### 两种方法的对比总结 | 特性 | 结构化编程 | 面向对象编程 | |------------------|-----------------------------|----------------------------------| | **核心思想** | 顺序执行、模块化 | 对象建模、封装、继承、多态 | | **数据与行为关系** | 分离 | 绑定在对象中 | | **可维护性** | 一般 | 高,局部修改不影响整体 | | **代码复用性** | 低 | 高,通过继承和多态实现复用 | | **学习难度** | 低 | 较高 | | **适用场景** | 小型程序、教学、批处理任务 | 大型系统、图形界面、复杂业务逻辑 | ### 示例代码 以下是一个简单的结构化编程示例,计算两个数的和: ```python def add(a, b): return a + b result = add(3, 5) print("Result:", result) ``` 而面向对象编程的实现则如下: ```python class Calculator: def add(self, a, b): return a + b calc = Calculator() result = calc.add(3, 5) print("Result:", result) ``` 通过对比可以看到,面向对象编程将行为封装在类中,便于扩展和维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值