程序设计范型

要支持一种范型,不仅在于某些能直接用于该种范型的显见形式的语言功能,还在于一些形式上更加细微的,对无意中偏离了这种范型的情况做编译时或者运行时的检查。类型检查是这类检查中的最明显例子。

程序设计范型发展:

1.过程式程序设计

原始的程序设计范型是:确定你需要哪些过程,采用你能找到的最好的算法

double sqrt(double arg)
{
  //计算平方根的代码  
}

void fun()
{
  double root = sqrt(2);
   //  
}

附:C++中,一个char变量具有某种自然的大小,正好能保存给定机器里的一个字符(通常是一个字节),int变量正好适合给定机器里的整数运算。C++能在基本类型之间完成任何所有有意义的相互转换。

 

2.模块程序设计

程序设计重点从有关过程转到对数据的组织。一集相关的过程与被它们所操作的数据组织在一起,通常被称作一个模块。

程序设计的范型变成了:确定你需要的哪些模块;将程序分为一些模块,使数据隐藏于模块当中。这一范型被作为数据隐藏原来而广为人知。

 

典型例子,定义一个堆栈:

【1】为堆栈提供一个用户界面(例如函数pushu()和pop())。

【2】保证堆栈的表示(例如,一个元素的数组)只能够通过用户界面访问。

【3】保证堆栈在被使用之前已经做了初始化。

namespace Stack    //界面
{
  void push(char);
  char pop();
}

void f()
{
  Stack::push('c');
  if(Stack::pop() != 'c')
  error("impossible");
}

这里Stack::限定词表面push()和pop()是来自Stack名字空间。这些名字的其他使用不会与之混乱。

Stack的定义可以通过程序的另一个单独编译的部分提供:

namespace Stack{
const int max_size=200;
char v[max_size];
int top = 0;

void push(char c){/*检查上溢并压入c*/}
char pop(){/*检查下溢并弹出*/}
}

 

该Stack模块的关键点是,用户完成隔离于Stack的数据表示之外,隔离的方式通过写出Stack::push()和Stack::pop()代码实现的。用户不必知道Stack是用数组实现的,这个方式实现可以修改而不会影响用户的代码。

模块化是一切成功大型程序的一个最基本特征。

3.用户定义类型

基于模块的程序设计,趋向于以一个类型的所有数据为中心,在某个类型管理模块的控制之下工作。例如,如果希望有很多堆栈——而不是像前面只用一个由Stack模块提供的堆栈——我们就可能会定义一个堆栈管理器,具有如下界面:

namespace Stack{
struct Rep;
typedef Req& stack;

stack create();
void destroy(stack s);

void push(stack s ,cha c);
char pop(stack s);
}


以某种方式实现Stack。可以是先预先分配几个堆栈,而让Stack::create()递交出到某个尚未使用的堆栈的引用。而Stack::destroy()则将一个堆栈表示标记为未使用,以是Stack::create()能够重用它

namespace Stack{               //表示
const int max_size=200;
struct Rep{
  char v[max_size];
  int top;
};

const int max=16;               //最大堆栈数

Rep statcks[max];

boolean used[max];

typedef Rep& stack;
}

void Stack::push(stack s, char c){}

char Stack::pop(stack s){}

Stack::stack Stack::create()(){
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值