学习心得

伪代码编程

伪代码是指某种用来描述算法、子程序、类或完整程序的工作逻辑的、非形式的、类似于英语的记法。

1. 用类似英语的语句来精确描述特定的操作

2. 避免使用目标编程语言中的语法元素

  这点是关键,程序员很容易就进入了角色,混淆了,写的伪代码与真正的代码没什么两样。这就没什么意义了。需要从编码的思维中跳出来,伪代码应该是比代码要高的层次,也可以说是更高的抽象。

3. 伪代码也需要反复迭代

  与说明文档类似,伪代码也可以通过不断地迭代,来细化,从高层次到中层次,再到低层次。一个好的伪代码完成之后,真正的代码将会变得容易。



软件构建

1.打好基础,具体包括如何选择编程语言和构建实践方法,如何理解软件开发的过程。软件开发本质上说就是工程,可以用建筑工程对其作比喻。不过由于软件产品本身的特性,使其需求产生变化的可能性很大,因而也产生一系列需要额外考虑的问题(否则的话,直接套用现在的工程方法就OK了)。

2.整体程序,包括构建类的考虑因素,创建子程序需要注意的地方,以及如何进行防御式编程。个人以为防御式编程是很重要的,不光是可以保证程序现在的正确性,同时也可以较长时期保证程序不至于出现大的问题。由于防御式编程,所以可以在出现问题之后,较快的确定问题所在甚至是处理部分问题。这个实现技术主要是异常处理机制,断言等等。实际上一个真正强大的软件大部分的逻辑应该是异常逻辑,只是解决正常工作情况的程序,不能称之为软件,其鲁棒性远远没有达到要求。

3.变量,这是最细微的单元。主要包括如果对变量命名,变量与数据的绑定时间,基本的数据类型以及一些不常见的数据类型,比如指针、全局变量等等。变量命名是有多种方法的,用哪种无所谓,关键是要统一。变量与数据的绑定时间,这个问题我以前没有系统考虑过。代码大全中的观点是绑定时间越滞后,则系统越灵活。这个我赞同。硬编码到程序中的,是直接赋予数值的常量,除非修改源码,否则不变;编译时刻确定的,是一些静态变量;运行时间确定的,就难说了,可能是从I/O获得,也可能是从内存获得。其它是介绍基本数据类型,在此不赘述。

4.语句,这是构建程序主体的基本构成单元,比变量又高了一级。这部分主要描述语句的组织结构,比如直线型、循环控制、条件控制、表驱动等。一般的方法比如条件循环等等,大部分情况下可见。表驱动,我是不常见的,应该是对程序逻辑的高度概括,并且高度灵活化。这个只在写编译器课程实践代码的时候简单运用过。

5.代码改善,这部分包括以下几个主题,协同、测试、调试、重构、调整。这里的测试是开发者测试,应该是指单元测试了,现有很多合适的工具,比如NUnit、CppUnit、JUnit等等。调试主要难点在于寻找和定位问题,解决问题虽然也不容易,但需要的是远见,因为再不济,总会存在一种打补丁的方法可以临时解决问题。重构和代码调整是我近期需要关注并且不断提高自己的主题。这两个技术的运用,可以较好的弥补前期代码设计不足所带来的隐患。代码调整的目标是进行性能优化。这需要考虑方法以及后果,往往表面看起来有效的优化却并不有效,尤其是你看似整洁不重复的代码,却还不如一个重复代码执行效率高。要达到这一步,需要在每次的调整后进行性能测试,以判定性能是否优化。

6.系统考虑,这部分是对软件管理方面的考量,具体包括程序规模对构建的影响,如何去管理构建过程,如何集成模块,以及介绍软件构建的工具。这部分内容像是给Manager准备的哈,现在的我,需要在多个项目中逐步体会。

7.软件工艺。软件说到底,也就是一个产品,只不是产品的形式与一般不同。一部分是构建出来的可执行程序,一部分是完整的软件源码。对于源码的书写,就涉及到工艺了,不同层次的人写出来的代码是完全不一样的。水平高低暂且不论,单是注释的规范整齐程序,就可见一斑。

构建模式

Factory Method Pattern (工厂方法模式)

说到工厂方法,其实本质就是尽量避免Client使用SomeObject object = new SomeObject()这种可以直接使用new构建对象的方法。转而提供一些工厂类来避免暴露我的具体的类名。举个例子来说明,有一家餐馆,卖各种调料酱,这家店的老板告诉他的顾客,这些调料酱有沙拉酱,烧烤酱和番茄酱等等,但怎么要看顾客的使用就行;还有一家餐馆,老板不想让顾客知道我用的什么酱,我只告诉你你可以用调料酱。 
上面两个例子,前面那个餐馆就可以视为没有工厂,直接用new来“使用酱”;后边的餐馆,就有一个工厂屏蔽了顾客和餐馆,只有餐馆的人知道我给你的啥酱。

Abstract Factory(抽象工厂模式)

抽象工厂模式:提供接口以创建一组相关/相互依赖的对象,但不需要指明其具体类。

还是餐馆的例子,还有一家老板,比较死板,我不想让你顾客因为你要的酱不对影响我菜的味道,我规定你要了其中某种菜,只能再要与其搭配的那种酱,而不能要其他的酱。比如,我要了沙拉,想要酱那么我只提供沙拉酱;但是你有自由选择不要酱(即我利用Abstract Factory创建的不是一个完整的产品,而是一个产品族)。

Builder (构造器模式)

创建复杂队形,包含多个组成部分

仍然是餐馆的例子,还有一家老板,死板但是良心,我觉得你要了我的菜只有搭配我的酱才会更好吃,所以我干脆你只要点了我的菜就认为你需要我的酱。比如,我要了薯条套餐,直接给我的就是薯条和番茄酱(Builder模式创建的是一个完整的产品,有多个部分组成,Client不需要知道我各个部分是怎样创建怎样组合的)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值