《程序设计与数据结构》——框架与重用
周立功教授数年之心血之作《程序设计与数据结构》以及《面向AMetal框架与接口的编程(上)》,电子版已无偿性分享到电子工程师与高校群体,。书本内容公开后,在电子行业掀起一片学习热潮。经周立功教授授权,本公众号特对《程序设计与数据结构》一书内容进行连载,愿共勉之。
第四章为面向对象编程,本文为 4.5框架与重用。
重用不仅限于软件,比如,贝多芬在他的66号作品中,就重用了另一个伟大作曲家莫扎特的音乐。他从莫扎特的歌曲《魔笛》第22场中,借用了咏叹调"一个女朋友",然后在该咏叹调中为钢琴师配乐的大提琴家写了一连串7个变奏。
代码重用的问题与所有的设计方法一样,代码的可用性和可重用性取决于它是如何设计和实现的。虽然代码重用并不是OO设计所专有的,但OO方法确实提供了一些机制,有利于可重用代码的开发。
>>> 4.5.1 框架
框架被定义为"一组相互协作的类,形成某类软件的一个可复用设计。框架将设计划分为一组抽象类,并定义它们各自的职责和相互之间的协作,以此指导体系结构级的设计,开发者通过继承框架中的类和组合其实例定制该框架以生成特定的应用。"
从某种意义上来说,框架是可以通过某种回调机制进行扩展的软件系统或子系统的半成品。也就是说,首先,框架是半成品,这是它和其它所有软件组件的本质区别。而某种回调机制,通常面向过程编程使用函数指针作为参数实现回调机制,比如,冒泡排序和快速排序中的compare的形参就是一个函数指针,开发者只需知道自己实现特定的比较函数即可。而面向对象框架的组成部分包括具体类、抽象类和接口,使用抽象方法——多态支持回调机制实现逆向工程。
显然,创建可重用代码的一种方法就是创建框架,框架规定应用的体系结构,它定义了整体结构,类和对象的分割,各部分的主要职责,类和对象如何协作,以及控制流程。框架预定义了这些设计参数,便于设计者聚焦于应用本身的特定细节。但框架使开发程序变得更加容易,因此程序设计需要的许多能力都来源于大量可用的框架。
与代码重用紧密相关的一个概念是标准化,有时也称为即插即用,框架思想围绕的就是这些即插即用和重用原则。在GUI应用程序中,用户界面视为视图。而实际上在MVC框架中,视图是一个接口,一个抽象的概念,因此视图可能是一个用户界面,也可能是一个终端,但只要实现了update接口的类,都可以将它们看作视图,从而全面扩展了MVC框架的应用范围。因为无论怎么改变,MVC框架的模型与视图始终是不变的,可变的是具体模型和具体视图。
以温控器为例,通过传感器的温度检测是具体模型,而监听传感器的LED、数码管和蜂鸣器是具体视图。当温度达到或超过上限值时,则数码管更新显示,LED持续闪烁,蜂鸣器持续报警。根据开闭原则,可以继续重用MVC框架的抽象模型与视图。如果后续只要开发与温度检测相关的系列产品,就可以重用该温度检测模型。
如果设计的系统必须使用不可移植的代码,那么应该将这些代码抽象到类中,通过抽象将这些不可移植的代码隔离到各自的类中。比如,针对基于M0+、M3、M4、ARM9、A7、A8内核的ARM和DSP的不兼容性,周立功单片机公司开发的AWetal和AWorks就是一个将所有的接口、外围器件和组件全部都实现归一化,且与MCU和OS完全无关的框架,从而实现了"一次编程、终生使用、跨平台",详见《面向接口的编程》系列图书。
由此可见,由于软件的整体框架结构是一样的,因此用户不必学习新的框架;其次,开发人员只要遵循框架文档提供的类或类库的公共接口,以及应用编程接口API等规则,就可以充分利用原有的代码。
>>> 4.5.2 契约
抽象类与接口是实现代码重用的强大机制,为一个重要的概念"契约"奠定了基础。那什么是契约?契约是两方或多方完成或不完成某个指定工作所达成的协议——这是一个由法律保证的协定,因此契约是要求开发人员遵守应用编程接口规范所需的机制。
一般来说,API就是指一个框架,开发人员使用API时,必须遵守框架所定义的规则。比如,方法名和参数个数等。如果没有强制性的措施,一些比较差劲的程序员可能会私下编写他自己的代码,而不使用框架提供的规范。如果人们总是忽视或不考虑标准化,那么标准也就没有什么意义了。
面向对象的设计一个重要的目标就是将接口从实现中分离出来,一个类的接口提供了它的外部视图,记录了所有相关对象的共同属性和行为。其强调的是抽象,隐藏了它的属性和行为的秘密,不需要提供
程序设计 相关文章:
- 单片机与程序设计(下)(08-13)
- 单片机与程序设计(上)(08-12)
- 周立功手把手教你学嵌入式编程:函数指针与指针函数的应用(07-29)
- 周立功教你学程序设计技术:做好软件模块的分层设计,回调函数要这样写(07-30)
- 周立功《程序设计与数据结构》:字符串函数(08-05)
- 周立功教你学程序设计结构体:内存对齐和基本数据类型(08-01)