我被要求为我选择的高级OO语言编写API(我将使用Java).当然,API需要执行特定的功能,但它们是我知道我可以完成的非常基本的事情.
我熟悉Web应用程序的API概念,这很简单,但是为OO语言编写API究竟意味着什么?在Java的情况下,这是否意味着编写一个可以导入的包并通过类/函数提供所需的功能,所以我会写a)包和b)一个单独的模块来测试它? (为了澄清,除了“编写API”和“它需要做X,Y和Z”之外,我没有提供任何信息.进一步澄清:我提到了Web应用程序API概念,只是为了表明我知道什么是API是.这不是任何类型的Web API.)
解决方法:
根据具体情况和您的要求,有不同的定义.
有些人将模块公开的所有公共类型称为API.通过这个非常广泛的定义,几乎每个库或包都有一个API.我认为这是一个非常普遍的定义,但不是每个人都同意它.
在更抽象的层面上,API是一种定义某些功能的合同或规范.在这种情况下,API更像是模块或服务的定义良好的接口,用于将公共可用功能与其内部实现分开.这种API的一个很好的例子是Java EE API.
实际上,在Java中,API通常是一个接口(或者有时是一组接口).功能由接口方法和文档定义. API本身不需要任何功能(或者至多只有一些基本的默认类).
由另一个类来实现接口并提供已定义功能的实现.这些实现不应违反合同.
如果一个类想要使用API,它只访问接口而不是实现类.这是“接口程序,而不是实现”的原则.在我看来,这是API最重要的方面,也是API与常规接口的区别.它使API可重用,并使内部实现能够在不破坏API的情况下进行更改.
当然,如果类只使用API,那么仍然需要某种机制来获取实现API的类的实例.通常它是某种工厂方法或依赖注入.
包装通常取决于API的用法.由第一个定义定义的API通常包含在其库的jar中,因为单独导入它们没有意义.另一种API可以有多个实现,应该单独打包.
标签:java,oop
来源: https://codeday.me/bug/20190519/1138022.html