- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
“没有规矩,不成方圆” 随着软件规模越来越大:
– 软件开发人员:“个人” “团队” – 编码的目标:强调“效率” 强调“简洁清晰”; – 程序员的目标:追求“聪明和技巧” 追求“简明直接”
wenku.baidu.com
抛弃“华而不实的技巧”,遵循“严格的编码规范”
10 软件编码与实现
编码规范是一种“道德约束”
“法律” vs “道德” :前者是强制约束,后者是自律性 约束
10 软件编码与实现
代码的版式:空行
在源代码中适度的使用空行可以使程序结构更加清晰
两个空行分隔一般出现在源文件的各个节之间; 单个空行分隔一般出现在:
– 方法定义之间; – 局部变量定义和第一个语句之间; – 注释之前; – 语句的不同逻辑分段之前;
10 软件编码与实现
代码的版式:空格
一行代码只写一条语句,避免使用复杂的语句行;
第四代语言 模型驱动的 语言
10 软件编码与实现
各种程序设计语言的对比
年代
应用领域 商业 科学计算 COBOL FORTRAN
主要语言
其他语言 Assembler ALGOL, BASIC, APL Forth SNOBOL C, PL/1 BASIC Ada, Modula
1960年代
系统 人工智能 商业 科学计算
编码规范就是软件开发人员应遵循的一种“道德约束”
不遵守道德会怎么样?
Themis: Goddess of Justice
10 软件编码与实现
编码规范的两个方面
形式规范:使代码“看起来很美”
– 面向代码的可读性、可维护性、可移植性
内容规范:使代码“运行起来很美”
– 面向代码的正确性、可靠性、运行效率
效率 开发时间 内存数 3 5 1 2 4 语句数 3 5 2 1 4 4 2-3 5 2-3 1
程序可读性最佳 输出可读性最佳 空间复杂性最佳 语句简洁性最佳 开发时间最短
软件工程
5.2 程序设计语言选择
10 软件编码与实现
5.2.1 程序设计语言的演进
第 6 级:应用程序 第 5 级:高级语言 第 4 级:汇编语言 第 3 级:操作系统 第 2 级:机器语言 第 1 级:微程序
5.2.3 编码语言的选择
“程序设计语言不是引起软件问题的原因,也不能用它来解决软件问题。 但是,由于语言在一切软件活动中所处的中心位置,它们能使现存的 问题变得较易解决,或者更加严重。” ——D.A. Fisher
“编码语言并不是最重要的,但却是影响软件质量的一个敏感点 (sensitivity point)。”
用户需求
使用“模型”编程,而不是使用程序语言。
语义鸿沟
——模型驱动 ——代码自动生成
高级语言代码
可执行程序 (机器代码)
10 软件编码与实现
模型驱动的体系结构(MDA)
CIM:计算无关模型
自动映射与转换
PIM:平台独立模型 业务人员 PSM:平台相关模型 软件设计人员
程序员
Code:最终代码
10 软件编码与实现
10 软件编码与实现
源文件内容的组织
任何语言的源文件均需要按“节”组织,节与节之间使用空行和注释 分割开; 文件的长度最大不超过2000行;
10 软件编码与实现
源文件内容的组织
用于说明版权和版本信息的文件头注释; package/import语句或include语句; 用于说明类的功能、作者、版本、日期与更新历史的注释; 类的定义语句 类的实现注释 变量注释;变量声明语句 构造函数的语句 方法注释;方法定义的语句
软件编码
使用程序设计语言 进行编码
#include <…> main () { out.println(“Hello World!”) } … …
软件设计描述(SDD) 逻辑概念(不可执行)
程序代码(Program Code) 物理实体(可执行)
10 软件编码与实现
你的观点是?
软件编码是将软件设计模型机械地转换成源程序代码,这是一种低水 平的、缺乏创造性的工作。软件程序员是所谓的“软件蓝 领”(software blue-collar)。
10 软件编码与实现
5.3.2 编码的形式规范
源文件的命名与组织 代码的版式
– 适当的空行 – 代码行及行内空格 – 分行、对齐、缩进 – 命名规则 – 声明 – 注释
10 软件编码与实现
源文件的命名与组织
一个软件系统由多个文件构成,对文件的有效管理与组织是保持软件 代码清晰的第一步。 对源文件进行分类:
应用软件
系统软件
软硬件分界
硬件
第 0 级:硬联逻辑
10 软件编码与实现
程序设计语言的演进
面向机器的 语言
高级语言 (第三代)
甚高级语言
机器语言 (第一代)
汇编语言 (第二代)
基础语言 FORTRAN COBOL Algol 60 BASIC
结构化语言 C Ada Pascal
面向对象 语言 C++ SmallTalk Java C#
10 软件编码与实现
选择语言的标准
应用领域:商业?科学计算?… 设计模型的特征:数据处理为主?交互性强?… 算法复杂性 数据结构的复杂性 运行效率:时空复杂性 后期维护与升级要求:可测试?可复用?易维护? 用户要求 系统兼容 可移植性 程序员的能力与水平:学习周期?开发周期?开发工具? 语言的未来发展前景
根目录 公司标识 项目标识 源文件类型 功能分类 (子系统)
10 软件编码与实现
功能分类 (二级子系统)
原子功能
mgmt mgmt src src nerp nerp mainframe mainframe pub pub ices ices
示例:源文件的组织
10 软件编码与实现
源文件的命名与组织
/** * ...constructor Blah documentation comment... */ public Blah() { // ...implementation goes here... }
/** * ...method doSomething documentation comment... */ public void doSomething() { // ...implementation goes here... } /** * ...method doSomethingElse documentation comment... * @param someParam description */ public void doSomethingElse(Object someParam) { // ...implementation goes here... }
– 基础功能库
• 完成系统调度与控制功能的源文件 • 通用功能的源文件
– 用户功能
• • • • • 用户界面源文件 业务逻辑源文件 资源文件(图片、声音等) 配置文件 帮助文件
组织方式:存储在不同的文件夹下,每个文件夹下的文件数目进尽可 能维持在10个以下。
com com huiton huiton cerp cerp web web login login pub pub sale sale plan plan order order NewOrder NewOrder ChkOrder ChkOrder
软件工程
5.3 软件编码规范
10 软件编码与实现
科学?艺术?
“编程既是一门科学,也是一门艺术”,这是一项很有艺术性、独创性、 技巧性的实践工作; 编程技巧像艺术技巧一样,深不可测、奥妙无穷; 程序员像艺术家一样,有发挥创造性的无限空间。
你是否认同上述说法?说出你的理由。
10 软件编码与实现
5.3.1 编码规范的必要性
/* * 10 软件编码与实现 * @(#)Blah.java 1.82 99/03/10 * * Copyright (c) 1994-1999 Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. * All rights reserved. * * This software is the confidential and proprietary information of Sun * Microsystems, Inc. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you * entered into with Sun. /** instanceVar2 documentation comment */ */ protected int instanceVar2; package java.blah; import java.blah.blahdy.BlahBlah; /** * Class description goes here. * @version 1.82 10 Mar 1999 * @author Firstname Lastname */ public class Blah extends SomeClass { /* A class implementation comment can go here. */ /** classVar1 documentation comment */ public static int classVar1; /** * classVar2 documentation comment that * happens to be more than one line long */ private static Object classVar2; /** instanceVar1 documentation comment */ public Object instanceVar1; } /** instanceVar3 documentation comment */ private Object[] instanceVar3;
你是否认同这种观点? 如果不认同,你如何看待软件编码?
10 软件编码与实现
软件编码
软件编码是一个复杂而迭代的过程,包括程序设计(program design)和程序实现(program implementation)。 软件编码要求
– 正确的理解用户需求和软件设计思想 – 正确的根据设计模型进行程序设计 – 正确而高效率的编写和测试源代码
软件编码是设计的继续,会影响软件质量和可维护性。
10 软件编码与实现
软件编码的基本要求
简明 正确 高效 可靠
清晰
养成良好的编码习惯; 选择合适并且熟悉的编码语言; 对代码进行持续不断的测试与优化;
10 软件编码与实现
软件编码的基本要求
结果名次
编码要求
评判项目
清晰性 程序 1-2 1-2 4 5 3 输出 2 1 4 3 5
Assembler LISP COBOL, C++, Java FORTRAN, C, C++, Java C, C++, Java LISP, Prolog
现代
系统 人工智能
10 软件编码与实现
5.2.2 第四代编程语言
如果在高级语言的基础上,对其进一步抽 象,使其更加接近于现实空间,是否可以 消除语义鸿沟?
行内空格一般出现在:
– 关键字和括号之间; – 参数列表中的逗号之间; – 二元运算符之间; – 语句中的表达式之间; – 赋值符号之间; while(d++=s++) {n++;} printf(“size is ”+foo+“\n”); for(expr1;expr2;expr3) myMethod((int)(cp+5),((int)(i+3)+1)); while(true) { ... }
10 软件编码与实现
软件工程 5.2 软件编码与实现
刘铭 2016年9月19日
10 软件编码与实现
主要内容
5.1 什么是软件编码 5.2 程序设计语言选择 5.3 软件编码规范 5.4 软件调试 5.5* 软件代码的检查 5.6* 如何成为一名好的程序员
软件工程
5.1 什么是软件编码
10 软件编码与实现
文件名应尽可能采用有意义的、通用的英文缩写; 如果由多个单词构成,每个单词的首字母应为大写; 同种类型的文件应采用同样的命名规则; 即使在不同的文件夹下,也要尽量避免重名; 杜绝使用汉语拼音;
几个例子:
– SAL1010.jsp – CreateOrderHandler.java – Chuangjiandingdan.cpp、cjdd.cpp – ProdResMgmt.h