编程思想 -- 第9章 -- 接口

接口

接口和内部类为我们提供了一种将接口和实现分离的更加结构化的方法。

一、抽象类和抽象方法
    抽象类是普通类和接口之间的一种中庸之道。尽管在构建具有某些未实现方法的类时,你的第一想法可能是创建接口,但是抽象类仍旧是用于此目的的一种重要而必须的工具。因为你不可能总是使用纯接口。
    java提供抽象方法机制,仅有声明没有方法体。用abstract修饰。包含抽象方法的类叫抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的(否则编译器报错)。由于未抽象类创建对象是不安全的,所以我们会从编译时期哪里得到一条出错的消息。这样编译器会确保抽象类的纯粹性,我们不必担心误用它。
    如果从一个抽象类继承,并想创建该新类的对象,那么就必须为基类中的所有抽象方法提供方法定义。如果不这样做(可以不做),那么导出类也是抽象类,且编译器会强制使用abstract关键字来限定这个类。
    创建抽象类和抽象方法非常有用,因为他们可以使类的抽象性明确起来,并告诉编译器打算怎么样来使用它们。抽象类还是很有用的重构工具,因为它们使得我们可以很容易地将公共方法沿着继承层次结构向上移动。
    
二、接口
    interface这个关键字产生一个完全抽象的类,它根本没有提供任何具体实现。它允许创建者确定方法名,参数列表和返回类型,但是没有任何方法体。接口只提供了形式,而未提供任何具体实现。
    接口被用来建立类与类之间的协议。interface不仅仅是一个极度抽象的类,因为它允许人们通过创建一个能够被向上转型为多种基类的类型,来实现 某种类似多重继变种的特性。
    接口也可以包含域,但是这些域隐式地是static和final的。要让某个类遵循某个特定接口,需要使用implements关键字,表示interface只是外貌,但是现在我要声明它是如何工作的。
    
三、完全解耦
    创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式。这类方法包含所要执行的算法中固定不变的部分,而策略包含变化的部分。策略就是传递进去的参数对象,它包含要执行的代码。
    适配器设计模式--适配器中的代码将接受你所拥有的接口,并产生你所需要的接口。
    将接口从具体实现中解耦使得接口可以应用于多种不同的具体实现,因此代码也就更具复用性。
    
四、java中的多重继承
    接口是根本没有任何具体实现的--也就是说,没有任何与接口相关的存储,因此无法阻止多个接口的组合。
    在导出类中,不强制要求必须由一个是抽象的或具体的(没有任何抽象方法)基类。如果要从一个非接口的类继承,只能从一个类去继承,其余的基元素都必须是接口。需要将所有的接口名都置于implements关键字后,用逗号将它们一一隔开。可以继承任意多个接口,并可以向上转型为每个接口,因为每一个接口都是一个独立类型。
    使用接口的核心原因:为了能够向上转型为多个基类型(以及由此而带来的灵活性)。防止客户端程序员创建该类对象,并确保仅是建立一个接口。
    
五、通过继承来扩展接口
    通过继承可以很容易在接口中添加新的方法声明,还可以通过继承在新接口中组合数个接口。
    一般情况下,只可以将extends用于单一类,但是可以引用多个基类接口,只需将接口名一一分开即可。
    在打算组合的不同接口中使用相同的方法名通常会造成代码可读性的混乱,请尽量避免这种情况。
    
六、适配接口
    接口最吸引人的原因之一就是允许同一个接口具有多个不同的具体实现。
    接口的一种常见用法就是提到的策略模式:你可以用任何你想要的的对象来调用我的方法,只要你的对象遵循我的接口,这使得你的方法更加灵活,通用,更具可复用性。
    
七、接口中的域
    放入接口中的任何域都自动是static和final的,所以接口就称为了一种很便捷的用来创建常量组的工具。接口中的域自动是public的,所以没有显式地指明这一点。
    
八、嵌套接口
    接口可以嵌套在类或者其他接口中。
    当实现某个接口时,并不需要实现嵌套在其内部的任何接口。
    
九、接口与工厂
    接口是实现多重继承的途径,而生产遵循某个接口的对象的典型方式就是工厂设计模式。通过这种方式,代码完全与接口的实现分离,这就使得我们可以透明地将某个实现替换为另一个实现。
    
十、总结
    任何抽象性都应该是应真正的需求而产生的。当必需时,你应该重构接口而不是到处添加额外级别的间接性,并由此带来的额外的复杂性。
    恰当的原则应该是优先选择类而不是接口。从类开始,如果接口的必需性变得非常明确,那么就进行重构。接口是一种重要工具,但他们容易被滥用。
    
    
    
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 第九主要介绍了三种常见的用于优化问题建模的软件和应用,即CPLEX,OPL和AMPLLINGO。这些软件都使用了ilog的建模语言。 CPLEX是一种广泛使用的商业化优化软件,它基于整数线性规划(MILP)和混合整数线性规划(MIP)求解技术。CPLEX提供用户友好的图形界面和可视化工具,可以直观地了解模型的构建和求解过程。CPLEX还支持多种语言接口,如C,C++,Java和Python,使得用户可以方便地与其他软件和系统进行集成。 OPL是ilog的建模语言,它具有简单易学、表达能力强和可读性好的特点。OPL可以轻松地定义变量、约束和目标函数,并通过内置的求解器(如CPLEX)来求解模型。OPL还提供了强大的调试和优化工具,帮助用户识别和解决问题。 AMPLLINGO是另一种常用的建模语言,它为数学规划提供了统一的建模框架。AMPLLINGO将模型的构建和求解分为两个步骤,首先使用AMPL描述模型,然后使用LINGO进行求解。其优势在于AMPL提供了丰富的数学函数和表达式,方便用户建立复杂的数学模型,而LINGO提供了强大的求解能力和可视化工具。 综上所述,CPLEX,OPL和AMPLLINGO是基于ilog建模语言的优化软件和应用。它们都具有使用简单、表达能力强和求解效率高的特点,可以帮助用户解决各种优化问题。用户可以根据自己的需求和熟悉程度选择合适的软件和建模语言,来进行优化建模和求解。 ### 回答2: 第九 "ilog_opl_建模语言 优化软件与应用-cplexoplampllingo课件"主要介绍了三种常见的优化软件与应用,分别是CPLEX、OPL和LINGO。 CPLEX是由IBM开发的一种高性能数学编程库,可用于解决各种优化问题。它具有强大的求解能力和灵活的建模语言,能够应用于线性规划、混合整数规划、二次规划、约束规划等多种问题。CPLEX提供了直观的图形界面和丰富的算法库,使得用户能够更轻松地建模和求解问题。 OPL是一种基于约束编程(CP)思想的建模语言,用于描述和解决多种规划问题。与传统的基于数学公式的建模方法相比,OPL更加直观和易于理解。OPL语言支持线性规划、整数规划、非线性规划等多种问题,并且可以与CPLEX等求解器无缝集成,提供高效的求解效果。 LINGO是一种广泛应用于复杂优化问题的建模和求解软件。LINGO通过图形界面和文本界面提供了直观的建模和求解环境,支持线性规划、整数规划、非线性规划、混合规划等多种问题。LINGO提供了丰富的优化算法和参数配置选项,使得用户能够灵活地进行问题建模和求解。 这三种优化软件和应用在不同领域和问题中都有广泛的应用,具有各自的特点和优势。选择适合自己需求的优化软件和建模语言,可以提高问题求解的效率和准确性。 ### 回答3: 第九介绍了三种常用的优化软件与应用:CPLEX、OPL、AMPL和LINGO。它们都是基于ilog语言进行建模的,可以用来解决多种优化问题。 CPLEX是IBM公司开发的一款商业级的优化软件,能够解决复杂的线性规划、混合整数规划和二次规划等问题。CPLEX提供了强大的求解器,可以高效地求解大规模优化问题。此外,CPLEX还可以与其他建模语言和软件集成,灵活性较高。 OPL是IBM开发的一种建模语言,用于描述优化问题。OPL具有简洁明了的语法和丰富的数据类型,可以轻松地定义决策变量、约束和目标函数等。OPL与CPLEX紧密结合,用户可以使用OPL编写模型,并使用CPLEX求解器进行求解。通过OPL,用户可以将复杂的优化问题转化为易于理解和求解的形式。 AMPL是一种灵活强大的建模语言和环境,可用于求解各种优化问题。AMPL支持多种优化算法和求解器,并且可以与其他建模语言集成。AMPL提供了丰富的函数和命令,可用于定义变量、约束和目标函数,并进行模型求解和结果分析。 LINGO是一款广泛使用的优化软件,可用于解决线性规划、整数规划、非线性规划和混合整数规划等问题。LINGO具有直观的用户界面和易于使用的语法,使用户能够快速建立和求解模型。LINGO还提供了多种求解算法和结果分析工具,帮助用户获取最佳的优化解。 综上所述,CPLEX、OPL、AMPL和LINGO都是强大的优化软件与应用,提供了丰富的建模语言和求解器,可用于解决各种复杂的优化问题。它们的优势在于灵活性、效率和易用性,能够帮助用户快速建立模型并得到最优解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值