什么是接口?

论坛 期权论坛 金融     
0e4fk8   2022-6-18 14:07   4927   14
前言

很惭愧,学习编程2年多了,今天才明白接口的含义。从最开始接触师兄的Project,到后面自学Python开发,机器学习,一直都不懂接口有何作用。直到近几天在学习Java的过程中,才明白了接口——这个在编程中非常重要而又让初学者摸不着头脑的词的含义。
接口简述

先用最简单一句话概括接口:接口就是规定要程序做什么,但不在其中实现。
从疑问开始

或许我说完这句话,你可能就要问了,"既然接口什么都没干,那我写它干啥?"
的确,我最初也是这么想的,比如我要实现对一个HelloWorld.txt文档中的带文本"Hello"的行进行提取,我直接用python写以下代码不就好了?
with open("HelloWorld.txt", "r") as f:
    lines = f.readlines()
for line in lines:
    if "Hello" in line:
        print(line)什么?要多次调用?那我加个函数框,将line放到lineList里返回不就好了?
def getHello(filename):
    with open(filename, "r") as f:
        lines = f.readlines()
    for line in lines:
        if "Hello" in line:
            print(line)

def main():
    getHello("HelloWorld.txt")

if __name__ == '__main__':
    main()什么?要面向对象?那我定义一个Reader类,把函数放进去不就好了?
class Reader():

    def __init__(self, filename):
        self.filename = filename

    def getHello(self):
        with open(self.filename, "r") as f:
            lines = f.readlines()
        for line in lines:
            if "Hello" in line:
                print(line)

def main():
    reader = Reader("HelloWorld.txt")  # 创建一个Reader对象实例reader
    reader.getHello()  # 调用Reader对象的getHello()方法

if __name__ == '__main__':
    main()你可能会说,你看,我根本没用到接口,也把问题解决了,不是吗?
问题在于,在实际的软件开发过程中,并不仅仅设计getHello()这样一个方法,还有许许多多的方法调来调去。比如,我们需要实现一个在机器A和机器B之间数据共享传输的应用。那么必然会有读的方法,写的方法,同步的方法,其中,同步又有实时同步,非实时同步,读写又需要读写的授权方案,这些方法的实现不是一个人就能完成的,是需要很多人配合、合作完成的。此外,一个项目的完成还包括前、后端的沟通、协作。
那么问题来了,如果你写了上述代码,领导B来了,觉得这个方法通用性太差,只能打印带有"Hello"的行,要是能指定字符串打印就好了。于是你把它改成这样。
class Reader():

    def __init__(self, filename, keywords):
        self.filename = filename
        self.keywords = keywords

    def getHello(self):
        with open(self.filename, "r") as f:
            lines = f.readlines()
        for line in lines:
            if self.keywords in line:
                print(line)

def main():
    reader = Reader("HelloWorld.txt", "hello")  # 创建一个Reader对象实例reader
    reader.getHello()  # 调用Reader对象的getHello()方法

if __name__ == '__main__':
    main()你把这段代码给领导看,领导说,嗯,这样就好了很多,不过方法名你怎么还是getHello()啊,改成get()更合适,于是你又去修改方法名称。过了一段时间,领导又说,你这个不要直接打印,打印了就没法做其他自定义操作了,我只要最后一行。作为字符串的列表返回不行吗?然后你又去改代码,最后,它长这样了
class Reader():

    def __init__(self, filename, keywords):
        self.filename = filename
        self.keywords = keywords

    def get(self):
        lineList = list()
        with open(self.filename, "r") as f:
            lines = f.readlines()
        for line in lines:
            if self.keywords in line:
                lineList.append(line)
        return lineList

def main():
    reader = Reader("HelloWorld.txt", "Hello")  # 创建一个Reader对象实例reader
    hello_lines = reader.get()  # 调用Reader对象的getHello()方法
    print(hello_lines[-1])

if __name__ == '__main__':
    main()领导看了很满意,对你说,你跟前端那边交接下吧,然后给了你前端C的联系方式。然后C问你要TextReader接口,你懵了,接口是啥啊?(未完待续)
分享到 :
0 人收藏

14 个回复

正序浏览
15#
972233131  1级新秀 | 2022-6-18 14:15:03 发帖IP地址来自 中国
你写了这么多,还是没说。。。程序员的思维都是这么发散吗?定义都没有,就开始唠了
14#
bk6if  1级新秀 | 2022-6-18 14:14:45 发帖IP地址来自 中国
接口测试已经换成ApiPost很长一段时间了,各方面来说都比较适合国人使用,而且是中文界面的很方便,同样的操作,感觉用着更顺手。
顺便分享一下链接:Apipost-基于协作,不止于API文档、调试、Mock
13#
lh_8gc  1级新秀 | 2022-6-18 14:14:06 发帖IP地址来自 中国
哪章里有这个,看了好像没记得有[捂脸]
12#
eyof  1级新秀 | 2022-6-18 14:13:18 发帖IP地址来自 北京
但凡看过计算机科学导论你都不可能不知道这东西
11#
吴宇  管理员  伦敦金丝雀码头交易员 | 2022-6-18 14:12:37 发帖IP地址来自 北京
求更新~~楼主还在吗
10#
lm66m  1级新秀 | 2022-6-18 14:12:03 发帖IP地址来自 北京
催更
9#
dlq3378  2级吧友 | 2022-6-18 14:11:56 发帖IP地址来自 北京
+1
8#
5avnm  1级新秀 | 2022-6-18 14:11:28 发帖IP地址来自 北京西城
竟然没了,看的正起劲
7#
461996320  1级新秀 | 2022-6-18 14:10:52 发帖IP地址来自 北京
[赞同]后续?
6#
a3l  1级新秀 | 2022-6-18 14:10:25 发帖IP地址来自 云南
刚开始写作,谢谢你的支持[赞同],后面会带来更多有意思的内容
5#
gyac5  1级新秀 | 2022-6-18 14:09:45 发帖IP地址来自 北京
谢谢你的支持[赞同][赞同][赞同],当时是随手在知乎写的,以为看的人不多,我后面会持续更新[大笑]。
4#
18982353210  1级新秀 | 2022-6-18 14:09:01 发帖IP地址来自 北京
写的是真的好[飙泪笑][飙泪笑][赞同]
3#
sjwe  1级新秀 | 2022-6-18 14:08:44 发帖IP地址来自 中国
待续呢?
2#
p2prc  1级新秀 | 2022-6-18 14:07:57 发帖IP地址来自 中国
。。。。。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP