建立抽象层,把存储格式和运算层隔离开

来源:互联网 发布:系统数据备份策略 编辑:程序博客网 时间:2024/06/14 03:47

      这是在学习《linux 从编程一站式学习》时分析的,源代码是书本上的,本书是开源图书,有兴趣在linux下c语言编程的可以看看,是一本不错的书籍(绝对不像大学课本),现在从新学习C语言,转移到linux平台,找到这样一本书感觉不错,把感觉不错的部分打出来,加深一下印象。

#include<math.h>//采用直角坐标系存储复数struct complex_struct{double x,y;};//单独返回复数的实部double real_part(struct complex_struct z){return z.x;}//单独返回复数的虚部double img_part(struct complex_struct z){return z.y;}//取模运算double magnitude(struct complex_struct z){return sqrt(z.x*z.x+z.y*z.y);}//double angle(struct complex_struct z){return atan2(z.y,z.x);}//直角坐标系样式输入复数存储,并返回结构体变量struct complex_struc make_from_real_img(double x,double y){struct complex_struct z;z.x=x;z.y=y;return z;}//极坐标样式输入复数存储,并返回 结构体变量struct complex_struct make_from_mag_ang(double r,double a){struct complex_struct z;z.x=r*cos(a);z.y=r*sin(a);return z;}//复数加法struct complex_struct add_complex(struct complex_struct z1,struct complex_struct z2){return make_from_real_img(real_part(z1)+real_part(z2),img_part(z1)+img_part(z2));}//复数减法struct complex_struct sub_complex(struct complex_struct z1,struct complex_struct z2){return make_from_real_img(real_part(z1)-real_part(z2),img_part(z1)-img_part(z2));}//复数乘法struct complex_struct mul_complex(struct complex_struct z1,struct complex_struct z2){return make_from_real_img(magnitude(z1)*magnitude(z2),angle(z1)+angle(z2));}//复数除法struct complex_struct div_complex(struct complex_struct z1,struct complex_struct z2){return make_from_mag_ang(magnitude(z1)/magnitude(z2),angle(z1)-angle(z2));}
这一部分代码,通过建立一个复数存储,实现结构体存储和运算函数隔离,运算函数不依赖具体的结构体存储。

分享这本书这一部分提到的一段话

     这里的复数存储层和复数运算层称为抽象层(Abstraction Layer),从底层往上层看,复数越来越抽象,把所有的这些层组合在一起就是一个完整的系统。组合使得系统可以任意复杂,而抽象使得系统的复杂性是可以控制的,任何改动都只局限在某一层,而不会波及整个系统。 "All problems in computer science can be solved by another
level of indirection.”--------著名的计算机科学家Butler Lampson。

原创粉丝点击