为可重用软件模块创建一致且适当的接口是嵌入式软件设计中最关键和最受忽视的方面之一。接口通常是在飞行中开发的,几乎没有预见到。但是为了确保软件可以从一个应用程序轻松地用于下一个应用程序,每个开发人员都应该记住五个提示。
提示1 -从一个必需的列表开始操作
在开始为软件模块编写接口之前,开发人员应该花一些时间写出接口需要执行的简单操作列表。该列表充当开发人员的便笺簿,以便思考接口需要做什么。模块的操作是什么?它需要什么输入?它将产生什么输出?所有这三个问题都需要回答。列表和问题将作为设计界面的起点。
技巧#2 -使用UML类图
UML类图用于表示类,但也可用于表示模块更重要的是,模块接口。类图的基本组件是由三个部分组成的框。第一部分(顶部)包含模块的名称。第二部分(中间)包含模块的属性。第三个也是最后一个部分用于定义接口公开的操作和方法。
模块的属性可以被认为是接口操作将要操作的私有和公共变量。属性前面的加号表示它是公共的,并直接作为界面的一部分公开。减号表示该属性是私有的,只能通过使用界面公开的操作在幕后进行操作。将这些操作视为提示#1中列出的相同操作。图1显示了左侧通用模块定义的示例和EEPROM模块的简化接口。
图1 - 示例类/模块图
技巧#3 -将接口与实现分开
当开始开发模块的接口时,开发人员应该尽一切可能将接口与模块的实现分开。接口的面向公众的部分的详细信息都应该包含在头文件中,在这种情况下,头文件定义了模块的接口。实现细节应保存在源文件中。将实现细节与接口分开,开始为开发人员提供隐藏实现的能力。这种隐藏导致了模块类的抽象,并提供了以后重新定义实现而不影响接口的能力。
技巧#4 -使用抽象数据类型
要求总是改变并预测要求如何变化通常是徒劳的,即使一个人配备了水晶球。抽象数据类型旨在帮助开发人员处理不断变化的需求。例如,在头文件中定义为接口的一部分的数据结构。引用头文件的任何模块都能够基于该数据结构创建和修改数据。当需求发生变化并且数据结构发生变化时,结果是需要为使用头文件的任何文件提供更新。
如果开发人员创建了一个抽象数据类型,其中数据结构的详细信息隐藏在实现中,则只需要更新源文件实现。使用头文件的任何模块都将继续使用公共接口,底层实现将处理更改的数据类型。
提示#5 -封装数据
计算机科学课程中教授的第一个概念之一是变量或对象应限于可能的最小程序范围。类似地,如何实现接口的细节应限于需要知道的基础。开发人员应尝试从模块的用户中隐藏尽可能多的数据和实现。隐藏细节有助于防止用户直接操作模块的内部数据,这可能导致模块进入未知或不一致状态。
最终想法
发展充满了不断变化的需求和短暂的开发周期。使用适当的界面设计技术可以改善软件的整体设计,并最大限度地减少不断变化的需求移动目标的影响。我们已经研究了五个设计界面的简单技巧。在开发经得起时间考验的界面时,开发人员应该考虑哪些其他注意事项?
全部0条评论
快来发表一下你的评论吧 !