0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

API设计过程中的通用准则和约定准则

C语言专家集中营 2017-11-24 16:53 次阅读

API设计原则

一致、易于掌握和强大的API是Qt最著名的优点之一。此文总结了我们在设计Qt风格API的过程中所积累的诀窍(know-how)。其中许多是通用准则;而其他的则更偏向于约定,遵循这些约定主要是为了与已有的API保持一致。

虽然这些准则主要用于对外的API(public API),但在设计对内的API(private API)时也推荐遵循相同的技巧(techniques),作为开发者之间协作的礼仪(courtesy)。

如有兴趣也可以读一下Jasmin Blanchette的Little Manual of API Design (PDF)或是本文的前身Matthias Ettrich的Designing Qt-Style C++ APIs。

1. 好API的6个特质

API之于程序员就如同图形界面之于普通用户(end-user)。API中的『P』实际上指的是『程序员』(Programmer),而不是『程序』(Program),强调的是API是给程序员使用的这一事实。

在第13期Qt季刊,Matthias的关于API设计的文章中提出了观点:API应该极简(minimal)且完备(complete)、语义清晰简单(have clear and simple semantics)、符合直觉(be intuitive)、易于记忆(be easy to memorize)和引导API使用者写出可读代码(lead to readable code)。

1.1 极简

极简的API是指每个class的public成员尽可能少,public的class也尽可能少。这样的API更易理解、记忆、调试和变更。

1.2 完备

完备的API是指期望有的功能都包含了。这点会和保持API极简有些冲突。如果一个成员函数放在错误的类中,那么这个函数的潜在用户就会找不到,这也是违反完备性的。

1.3 语义清晰简单

就像其他的设计一样,我们应该遵守最少意外原则(the principle of least surprise)。好的API应该可以让常见的事完成的更简单,并有可以完成不常见的事的可能性,但是却不会关注于那些不常见的事。解决的是具体问题;当没有需求时不要过度通用化解决方案。(举个例子,在Qt 3中,QMimeSourceFactory不应命名成QImageLoader并有不一样的API。)

1.4 符合直觉

就像计算机里的其他事物一样,API应该符合直觉。对于什么是符合直觉的什么不符合,不同经验和背景的人会有不同的看法。API符合直觉的测试方法:经验不很丰富的用户不用阅读API文档就能搞懂API,而且程序员不用了解API就能看明白使用API的代码。

1.5 易于记忆

为使API易于记忆,API的命名约定应该具有一致性和精确性。使用易于识别的模式和概念,并且避免用缩写。

1.6 引导API使用者写出可读代码

代码只写一次,却要多次的阅读(还有调试和修改)。写出可读性好的代码有时候要花费更多的时间,但对于产品的整个生命周期来说是节省了时间的。

最后,要记住的是,不同的用户会使用API的不同部分。尽管简单使用单个Qt类的实例应该符合直觉,但如果是要继承一个类,让用户事先看好文档是个合理的要求。

2. 静态多态

相似的类应该有相似的API。在继承(inheritance)合适时可以用继承达到这个效果,即运行时多态。然而多态也发生在设计阶段。例如,如果你用QProgressBar替换QSlider,或是用QString替换QByteArray,你会发现API的相似性使的替换很容易。这即是所谓的『静态多态』(static polymorphism)。

静态多态也使记忆API和编程模式更加容易。因此,一组相关的类有相似的API有时候比每个类都有各自的一套API更好。

一般来说,在Qt中,如果没有足够的理由要使用继承,我们更倾向于用静态多态。这样可以减少Qtpublic类的个数,也使刚学习Qt的用户在翻看文档时更有方向感。

2.1 好的案例

QDialogButtonBox与QMessageBox,在处理按钮(addButton()、setStandardButtons()等等)上有相似的API,不需要继承某个QAbstractButtonBox类。

2.2 差的案例

QTcpSocket与QUdpSocket都继承了QAbstractSocket,这两个类的交互行为的模式(mode of interaction)非常不同。似乎没有什么人以通用和有意义的方式用过QAbstractSocket指针(或者能以通用和有意义的方式使用QAbstractSocket指针)。

2.3 值得斟酌的案例

QBoxLayout是QHBoxLayout与QVBoxLayout的父类。好处:可以在工具栏上使用QBoxLayout,调用setOrientation()使其变为水平/垂直。坏处:要多一个类,并且有可能导致用户写出这样没什么意义的代码,((QBoxLayout *)hbox)->setOrientation(Qt::Vertical)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1379

    浏览量

    60977

原文标题:API设计原则

文章出处:【微信号:C_Expert,微信公众号:C语言专家集中营】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    电子对抗系统的概率准则存在哪些缺陷?

      电子对抗系统的概率准则存在哪些缺陷?在电子对抗系统,概率准则是由电子干扰环境完成给定任务的概率决定,以评估电子对抗系统的抗干扰性能
    发表于 12-15 15:47

    FPGA设计指导准则

    FPGA设计指导准则
    发表于 05-14 17:02

    硬件开发的基本准则

    硬件开发的基本准则
    发表于 08-20 14:29

    FPGA设计指导准则

    FPGA设计指导准则
    发表于 06-08 23:21

    EICC 电子行业行为准则

    of Conduct ),旨在电子行业的全球供应链,建立标准化的社会责任感行为规范,以确保电子行业及信息通信技术产业供应链的工作环境安全、工人得到尊重,同时确保在制造过程履行必要的环保责任。该准则由一系列的基本规范
    发表于 08-05 17:39

    射频电缆通用设计准则概述

      该文详细讨论了射频电缆及测试电缆组件的各项指标和性能,为广大测试工程人员在选用高性能高可靠性射频测试电缆组件时所应关注的几个方面提出了专业建议。  —射频电缆的通用设计准则  射频电缆组件的正确
    发表于 07-11 07:14

    DIP插件的准则有哪些

    `请问DIP插件的准则有哪些?`
    发表于 12-26 16:49

    PCB设计电路可靠性设计准则

    谁来阐述一下PCB设计电路可靠性设计准则
    发表于 01-10 15:55

    如何解决功耗影响时序的问题?有哪些准则

    如何解决功耗影响时序的问题?工程师在解决功耗问题的时候,有哪些准则
    发表于 04-08 06:11

    介绍一下设计过程通用的SI设计准则

    信号完整性(SI)问题是如何提出来的?解决SI问题有哪几种方法?设计过程通用的SI设计准则有哪些?
    发表于 04-21 07:13

    Datapath综合的编码准则手册

    Datapath综合的编码准则手册 本文将综述用于Datapath综合的编码准则。编码准则可分为两类:►有助于RTL代码算式功能正确性和帮助达成预期行为的准则&#
    发表于 03-13 11:38 16次下载

    PCB布局的准则和操作技巧

    PCB布局的准则和操作技巧   摘要: PCB布局的准则操作技巧& 滤波电容、去耦电容、旁路电容作用& 在一个大的电容上还并
    发表于 11-18 09:19 2557次阅读

    电子功率准则和信息准则介绍

    在研究了现有几种电子干扰效果评估准则的基础上,深入分析各准则的自身属性,阐明功率准则与信息准则分别适用于压制性干扰和欺骗干扰效果评估,而概率准则
    发表于 12-04 17:34 968次阅读

    欧盟发布的无人机有哪些通用准则

    近日,欧洲航空安全局发布了适用于整个欧盟范围的无人机通用准则。该准则涵盖了无人机技术和操作要求,
    的头像 发表于 07-18 10:34 1691次阅读

    行业 | 欧航局发布无人机通用准则,明年6月起在正式启用

    近日,欧洲航空安全局发布了适用于整个欧盟范围的无人机通用准则
    的头像 发表于 07-25 09:48 2471次阅读