学习C++,学习C++标准模板库(STL, Standard Template Library)。今天使用vector容器实现了一个堆栈的类模板。实现代码如下:
[cpp]
/*
This project is used for learning template technique of cpp language.
Author: Duan Zhiyan @ Cybery Studio!
Date: 07.02.17
*/
#include
#include
#include
using namespace std;
// Class declaration.
template
class Stack{
private:
vector elems;
public:
void push(T const& );
T pop();
T top() const;
bool empty() const{ return items.elems(); }
};
// Push a element into the stack.
template
void Stack::push(T const& elem){
elems.push_back(elem);
}
// Pop the element at the top of the stack out.
template
T Stack::pop(){
if(elems.empty()){
throw std::out_of_range(“Stack::pop : empty stack!”);
}
T elem = elems.back();
elems.pop_back();
return elem;
}
// Return the element at the top of the stack.
template
T Stack::top () const {
if(elems.empty()){
throw std::out_of_range(“Stack::top : empty stack!”);
}
return elems.back();
}[/cpp]
在对系统进行分析设计时,很重要的一点就是抽象出系统的高层视图。然后进行逐步细化。一般的系统的高层视图如下(个人意见,仅供参考):
点击查看大图
昨天写了设计与编码的不同。今天开始学设计了。
先说说系统边界的确定。这是在工程开发中紧接着需求分析的第二步。顾名思意,这个过程就是要确定我们要开发的系统和外部环境之间的界限,也就是要区分系统本身和它的外部环境。其中的外部环境可能包括用户、其它系统、软硬件条件等。
举个例子,一个银行系统,它的系统边界如何确定呢?
首先,银行系统的外部活动者有储户、前台出纳员、银行管理员,这些都不属于银行系统本身,他们是此系统的外部环境;
其次,银行系统是运行在操作系统上的软件,它在运行过程中可能要进行生成文件、获取时间等操作,这涉及到操作系统的API,所以操作系统对于银行系统来说是外部环境;
再次,银行系统要打印交易凭条,打印机对于系统来说是外部环境;
第四,银行系统可能与客户的工作单位的工资发放系统有交互,那么客户工作单位的工资发放系统也是外部环境。
而对于银行系统来说,使用此系统的银行的建筑格局、人员构成、所处地域等就不是此系统的外部环境。
确定了系统的边界有什么用呢?系统边界一确定,我们就已经知道有哪些外部对象在与系统进行交互,于是我们就可以在系统中为该对象设计相应的接口,从而实现这些交互。用上面的例子说,我们应该给储户、前台出纳、管理员设计不同的接口,还要给客户工作单位的工资发放系统设计接口,为打印机设计接口。这些是我们需要关心的,如果这些外部环境改变了,我们可能要重新设计我们的接口。但不在系统边界上的因素我们就不用考虑,比如我们不必为银行建筑格局的改变而改变我们的系统接口,这是下水管道设计师应该关心的问题。
确定系统边界在项目开发中是非常重要的一步,如果系统边界确定得不好,会给接下来的分析设计和编码工作带来障碍,也会给系统的维护带来麻烦。
说到这吧。
从前编程总是从写代码开始,早就知道不对,但一直不知道怎么样才对。现在好像知道一点了。前些天在做Cybery知道的时候就已经有所体会了,在编码实现之前先做一些设计和规划是十分有必要的,而且其效果也十分明显。以前需要一个星期才能完成的工作,现在三天就已经搞定了,而且其中的一天是在做设计。
这些天在看面向对象编程,学习了一些项目开发的流程,发现最重要的就是分析设计。一个好的设计不但十分容易实现,而且容易修改和维护。但要想从实际问题中抽象出一组科学的对象,做一个好的设计却不是那么容易的。这个工作需要更多的智慧和经验。而编码则需要更多的逻辑和体力。
上大一的时候老师就说,那些整天写代码的Coder们不是编程大佬,他们只不过是苦力。而那些“架构师”们才是真正的牛人。听,“架构师”,名字就很牛。别人看来整天摆弄键盘面对屏幕的程序员应该是高科技的工作人员吧,可谁知道在计算机的世界里也有老农和白领之分。这个世界上到了什么时候都有分化,人的分工不同就必然导致高低不同。有将军就有士兵,所谓的大家一律平等,只不过是给那些受人管制的下层人民一点心理上的安慰而已,道德上讲是人人平等的,可是现实中不可能平等,你让国家主席和街头流氓平等?可能吗?
在IT界,道理一样,架构师们就是牛。不因为别的,只因为人家做的工作有难度,没人能替代,如果一个公司的首席架构师抬屁股走人了,那公司的老总肯定要慌了,因为这样的人能找,一时找不出来,而编码工作则不然,一个编码者要是要飞,那明天有一成千上万的人可以代替他。所谓千军易得,一将难求啊。