数据结构与算法实习 实践之三:界面、排错、性能 北京大学信息科学技术学院 ●●●● 主讲:张铭、郝丹 ●●。●● zhang [at] net pku. edu. cn http://www.jpk.pku.edu.cn/pkuipk/course/sijig/shixi/o 2011.8 张铭赵海燕王腾蛟宋国杰,《数据结构与算法实验 教程》(国家十一规划教材),高教社20111月
数据结构与算法实习 ——实践之三:界面、排错、性能 北京大学信息科学技术学院 主讲:张 铭、郝 丹 mzhang [at] net.pku.edu.cn http://www.jpk.pku.edu.cn/pkujpk/course/sjjg/shixi/ 2011.8 张铭 赵海燕 王腾蛟 宋国杰,《数据结构与算法实验 教程》(国家十一五规划教材),高教社2011年1月
●●●●● ●●●● ●●● ●●●● ●●0● 界面( interface)
界面(interface)
●●● ●●● 界面的责任 ●●●●● ●●●● ●●● ●●●● ●●0● ●为调用者提供服务和访问 ●向调用者隐藏实现细节 ●管理资源的分配、释放和共享 ●错误处理
界面的责任 ⚫ 为调用者提供服务和访问 ⚫ 向调用者隐藏实现细节 ⚫ 管理资源的分配、释放和共享 ⚫ 错误处理
●●● 界面的分类 ●●●●● ●●●● ●●● ●●●● ●●0● ●程序界面 ●类和函数的接口 ●用户界面
界面的分类 ⚫程序界面 ⚫ 类和函数的接口 ⚫用户界面
●●● ●●●●● 程序界面:为别人用的库 ●●●● ●●● ●●●● ●●0● ●考虑的问题 ●提供的服务 ●统一方便又不过多过滥,正交的基本操作,同样的风格。 信息隐藏 ●哪些可见?哪些私用?访问方式?实现细节? 资源管理 谁管理内存分配和释放?共享信息要拷贝吗 错误处理 ●谁检查错误?报告还是忽略?怎么报告?有何恢复性操作? 制定规范
程序界面:为别人用的库 ⚫ 考虑的问题 ⚫ 提供的服务 ⚫ 统一方便又不过多过滥,正交的基本操作,同样的风格。 ⚫ 信息隐藏 ⚫ 哪些可见?哪些私用?访问方式?实现细节? ⚫ 资源管理 ⚫ 谁管理内存分配和释放?共享信息要拷贝吗? ⚫ 错误处理 ⚫ 谁检查错误?报告还是忽略?怎么报告?有何恢复性操作? ⚫ 制定规范
●●● 程序界面设计原则(1) ●●● ●●●●● ●●● ●●● 单一功能原则 ●●●● ●●0● ●什么是单一功能原则? 个函数完成的功能要单 个类处理的事务范围要单 ●从提供的服务上分析 ●从代码的修改角度分析 ●参考: 《 Head first面向对象分析与设计》 《 Head first设计模式》
程序界面设计原则(1) ——单一功能原则 ⚫ 什么是单一功能原则? ⚫ 一个函数完成的功能要单一 ⚫ 一个类处理的事务范围要单一 ⚫ 从提供的服务上分析 ⚫ 从代码的修改角度分析 ⚫ 参考: ⚫ 《Head first 面向对象分析与设计》 ⚫ 《Head first 设计模式》
程序界面设计原则(2 ●●● ●●●●● ●●●● ●●● 开放/闭原则 ●●●● ●●0● ●什么是开放闭原则? 个类应该对扩展开放,对修改关闭。 ●对新的功能的扩充,应该通过增加新类实现, 而不是修改已有类的代码 ●目的 ●降低程序各部分之间的耦合性,利于程序模块替换。 ●使软件各部分便于单元测试。 ●软件升级时可以只部署发生变化的部分,而不会影响其它 部分
程序界面设计原则(2) ——开放/封闭原则 ⚫ 什么是开放/封闭原则? ⚫ 一个类应该对扩展开放,对修改关闭。 ⚫ 对新的功能的扩充,应该通过增加新类实现, 而不是修改已有类的代码 ⚫ 目的 ⚫ 降低程序各部分之间的耦合性,利于程序模块替换。 ⚫ 使软件各部分便于单元测试。 ⚫ 软件升级时可以只部署发生变化的部分,而不会影响其它 部分
程序界面设计原则(3 ●●● ●●● ●●●●● ●●● 致性和规范性原则 ●●● ●●●● ●●0● 什么是一致性和规范性原则? ●实际是设计风格问题 ●如STL容器提供了一致的界面,即使面对一个 不熟悉的函数,预计应该如何使用它也会变得 很容易
程序界面设计原则(3) ——一致性和规范性原则 ⚫ 什么是一致性和规范性原则? ⚫ 实际是设计风格问题 ⚫ 如STL容器提供了一致的界面,即使面对一个 不熟悉的函数,预计应该如何使用它也会变得 很容易
程序界面设计原则(4) ●●● ●●●●● ●●● 完整、安全、高效、简短 ●●● ●●●● ●●0● 完整:提供所需的基本的合理功能 ●安全:使用安全的算法,其次是效率 memcpy, memmove ●高效且简短: 函数个数尽量少,功能不要重叠,达到 “多快好省
程序界面设计原则(4) ——完整、安全、高效、简短 ⚫ 完整:提供所需的基本的合理功能 ⚫ 安全:使用安全的算法,其次是效率 ⚫ memcpy,memmove ⚫ 高效且简短: 函数个数尽量少,功能不要重叠,达到 “多快好省
用户界面设计 ●●●●● ●●●● ●●● ●●●● ●●0● ●文本用户界面 提示信息的完整性 ●图形用户界面GU) °术语、单位、格式、字体、颜色统一和规范 ●显示内容的可拷贝性
用户界面设计 ⚫ 文本用户界面 ⚫ 提示信息的完整性 ⚫ 图形用户界面(GUI) ⚫ 术语、单位、格式、字体、颜色统一和规范 ⚫ 显示内容的可拷贝性