第三次作业

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三次作业相关的知识,希望对你有一定的参考价值。

一 编码规范和编码原则

1. C语言编码规范

(1)头文件命名规范

通常,每一个.cc 文件(C++的源文件)都有一个对应的.h 文件(头文件),也有一些例外,如单元测试代码和只包含 main().cc 文件。正确使用头文件可令代码在可读性、文件大小和性能上大为改观。

1.  内联函数

只有当函数只有 10 行甚至更少时才会将其定义为内联函数(inline function)。定义( Definition ):当函数被声明为内联函数之后,编译器可能会将其内联展开,无需按通常的函数调用机制调用内联函数。

优点:当函数体比较小的时候,内联该函数可以令目标代码更加高效。对于存取函数accessormutator)以及其他一些比较短的关键执行函数。

缺点:滥用内联将导致程序变慢,内联有可能是目标代码量或增或减,这取决于被内联的函数的大小。

2.头文件依赖

使用前置声明(forward declarations)尽量减少.h 文件中#include 的数量。当一个头文件被包含的同时也引入了一项新的依赖 dependency,只要该头文件被修改,代码就要重新编译。如果头文件包含了其他头文件,这些头文件的任何改变也将导致那些包含了头文件的代码重新编译。因此,我们宁可尽量少包含头文件,尤其是那些包含在其他头文件中的。

3.函数参数顺序( n Function  r Parameter  Ordering

 

定义函数时,参数顺序为:输入参数在前,输出参数在后。C/C++函数参数分为输入参数和输出参数两种,有时输入参数也会输出。输入参数一般传值或常数引用(const references),输出参数或输入/输出参数为非常数指针(non-const pointers)。对参数排序时,将所有输入参数置于输出参数之前。不要仅仅因为是新添加的参数,就将其置于最后,而应该依然置于输出参数之前。

4.  包含文件的名称及次序

包含次序标准化可增强可读性、避免隐藏依赖,次序如下: C 库、 C++库、其他库的.h、项目内的.h 项目内头文件应按照项目源代码目录树结构排列,并且避免使用 UNIX 文件路径.(当前目录)和..(父目录)。

(2)作用域规范

 

1.  命名空间( Namespaces

.cc 文件中,提倡使用不具名的命名空间(unnamed namespaces)。使用具名命名空间时,其名称可

 

基于项目或路径名称,不要使用 using 指示符。

2. 嵌套类( d Nested Class )

当公开嵌套类作为接口的一部分时,虽然可以直接将他们保持在全局作用域中,但将嵌套类的声明置于命名空间中是更好的选择。

3. 非成员函数( Nonmember )、静态成员函数( Static Member )和全局函数(Global  Functions )
使用命名空间中的非成员函数或静态成员函数,尽量不要使用全局函数。

4.局部变量( l Local Variables )

将函数变量尽可能置于最小作用域内,在声明变量时将其初始化。C++允许在函数的任何位置声明变量。我们提倡在尽可能小的作用域中声明变量,离第一次使用越近越好。这使得代码易于阅读,易于定位变量的声明位置、变量类型和初始值。特别是,应使用初始化代替声明+赋值的方式。

5.  全局变量(Global  Variables)

class 类型的全局变量是被禁止的,内建类型的全局变量是允许的,当然多线程代码中非常数全局变量也是被禁止的。永远不要使用函数返回值初始化全局变量。不幸的是,全局变量的构造函数、析构函数以及初始化操作的调用顺序只是被部分规定,每次生成有可能会有变化,从而导致难以发现的 bugs。因此,禁止使用 class 类型的全局变量(包括 STL 的 string, vector 等等),因为它们的初始化顺序有可能导致构造出现问题。内建类型和由内建类型构成的没有构造函数的结构体可以使用,如果你一定要使用 class 类型的全局变量,请使用单件模式(singletonpattern)。对于全局的字符串常量,使用 C 风格的字符串,而不要使用 STL 的字符串;

(3)类规范

1.  构造函数( Constructor)

构造函数中只进行那些没有实际意义的,简单初始化对于程序执行没有实际的逻辑意义,因为成员变量的“有意义”的值大多不在构造函数中确定初始化,可能的话,使用 Init()方法集中初始化为有意义的(non-trivial)数据。

2.明确的构造函数(Explicit  Constructors )

对单参数构造函数使用 C++关键字 explicit。定义:通常,只有一个参数的构造函数可被用于转换,例如,定义了 Foo::Foo(string name),当向需要传入一个 Foo 对象的函数传入一个字符串时,构造函数 Foo::Foo(string name)被调用并将该字符串转换为一个Foo临时对象传给调用函数。看上去很方便,但如果你并不希望如此通过转换生成一个新对象的话,麻烦也随之而来。为避免构造函数被调用造成隐式转换,可以将其声明为explicit。

3.  拷贝构造函数(Copy  Constructors)

仅在代码中需要拷贝一个类对象的时候使用拷贝构造函数;不需要拷贝时应使用DISALLOW_COPY_AND_ASSIGN。

4. 结构体和类( Structs vs. Classes )

仅当只有数据时使用 struct,其它一概使用 class。在 C++中,关键字 struct 和 class 几乎含义等同,我们为其人为添加语义,以便为定义的数据类型合理选择使用哪个关键字。struct 被用在仅包含数据的消极对象(passive objects)上,可能包括有关联的常量,但没有存取数据成员之外的函数功能,而存取功能通过直接访问实现而无需方法调用,这儿提到的方法是指只用于处理数据成员的,如构造函数、析构函数、Initialize()、Reset()、Validate()。如果需要更多的函数功能,class 更适合,如果不确定的话,直接使用 class。

5.接口( Interface )

接口是指满足特定条件的类,这些类以 Interface 为后缀(非必需)。定义:当一个类满足以下要求时,称之为纯接口:

1) 只有纯虚函数("=0")和静态函数(下文提到的析构函数除外);
2) 没有非静态数据成员;
3) 没有定义任何构造函数。如果有,也不含参数,并且为 protected;
4) 如果是子类,也只能继承满足上述条件并以 Interface 为后缀的类。

(4)代码书写规范

(1)建立标准的缩进大小(四个空格),并一致地使用此标准。用规定的缩进对齐代码节。

(2)在发布源代码的硬拷贝版本时使用特定的字体以及字号(新宋体、小五号)。

(4)当有多层嵌套时,每一层嵌套都要有完整的{ }。

(5)为注释和代码建立最大的行长度,以避免不得不滚动源代码编辑器,并且可以提供整齐的硬拷贝表示形式。

(6)当一行内容太长而必须换行时,在后面换行代码中要使用缩进格式。每一行上放置的语句避免超过一条。特殊循环如for(i =0;i<100;i++)等除外。

2. html编码规范

(1)省略可选标签

HTML5 规范中规定了 HTML 标签是可以省略的。但从可读性来说,在开发的源文件中最好不要这样做,因为省略标签可能会导致一些问题。省略一些可选的标签确实使得页面大小减少,这很有用,尤其是对于一些大型网站来说。为了达到这一目的,我们可以在开发后期对页面进行压缩处理,在这个环节中这些可选的标签完全就可以省略掉了。

(2)脚本加载

出于性能考虑,脚本异步加载很关键。一段脚本放置在 <head> 内,比如 <script src="main.js"></script>,其加载会一直阻塞 DOM 解析,直至它完全地加载和执行完毕。这会造成页面显示的延迟。脚本引用写在 body 结束标签之前,并带上 async 属性。

(3)语义化

根据元素(有时被错误地称作“标签”)其被创造出来时的初始意义来使用它。打个比方,用 heading 元素来定义头部标题,p 元素来定义文字段落,用 a 元素来定义链接锚点,等等。有根据有目的地使用 HTML 元素,对于可访问性、代码重用、代码效率来说意义重大。

(4)多媒体标签

对页面上的媒体而言,像图片、视频、canvas 动画等,要确保其有可替代的接入接口。图片文件我们可采用有意义的备选文本(alt),视频和音频文件我们可以为其加上说明文字或字幕。

(5)清晰地层次

  • 不使用超过一到两张样式表(i.e. main.css, vendor.css)
  • 不使用超过一到两个脚本(学会用合并脚本)
  • 不使用行内样式(<style>.no-good {}</style>
  • 不在元素上使用 style 属性(<hr style="border-top: 5px solid black">
  • 不使用行内脚本(<script>alert(‘no good‘)</script>
  • 不使用表象元素(i.e. <b><u><center><font><b>
  • 不使用表象 class 名(i.e. red, left, center)
  • 对于方法或属性,这些在类里面的统一采用,驼峰法命名,首字母小写,后面每个单词开头要大写,除了上面的private,等等要加相应的下划线。

    对于函数或变量,这些在类外面的,统一采用小写字母,函数和变量要尽量详细,都是小写字母+下划线的组合。

    对于花括号的换行,对于函数,方法,类这些主题部分,花括号都要重新换行写,在这些主题部分内部的花括号不换行,直接接到对应关键的后面

(6)内容至上

要让非内容信息污染了你的 HTML。现在貌似有一种倾向:通过 HTML 来解决设计问题,这是显然是不对的。HTML 就应该只关注内容。HTML 标签的目的,就是为了不断地展示内容信息。

  • 不要引入一些特定的 HTML 结构来解决一些视觉设计问题
  • 不要将 img 元素当做专门用来做视觉设计的元素。

 最后总结:

在读《构建之法》第四章以前,我们对代码规范化的认识程度不够,以为代码是给机器看的,我们写出来就可以了。但读了这一章后,才明白,我们的代码也要让旁人看的清清楚楚。现在这个项目是我们两个人在做,就更不能自己做自己的,毫无交流。我们应该时刻保持联系,对相关代码的问题做及时沟通和处理,争取把代码写的简洁明了无二义性,这对我们的-项目进行有重大意义。

二 数据库

技术分享

技术分享

 

 

 

 

ER图

 技术分享

三 团队项目主要功能流程描述

 本项目立足于LZO 类型的文件解压缩。用户输入LZO类型的样本数据,本程序自动将样本换成图像输出,方便用户观察样本的各项数据,更容易把握样本的各种特征值,方便数据分析人员得出实验结论。

关于在完成该项目时的分工,我负责完成数据解压缩部分,肖洪波负责完成把解压缩的数据转换成图像输出。我们两个各占50%吧。

  肖洪波的博客 :http://www.cnblogs.com/xiaohongbo/

 





以上是关于第三次作业的主要内容,如果未能解决你的问题,请参考以下文章

第三次寒假作业

第三次作业

第三次作业

第三次作业

第三次作业

第三次作业