新手的总结:理解编程思想中抽象的概念
img_part(struct complex_struct z)
{ return z.r * sin(z.A); }
double magnitude(struct complex_struct z) { return z.r; }
double angle(struct complex_struct z) { return z.A; }
struct complex_struct make_from_real_img(double x, double y) { struct complex_struct z; double PI = acos(-1.0); z.r = sqrt(x * x y * y); if (x > 0) z.A = atan(y / x); else z.A = atan(y / x) PI;
return z; }
struct complex_struct make_from_mag_ang(double r, double A) { struct complex_struct z; z.r = r; z.A = A; return z; } 虽然结构体的存储发生了改变,但是我们的几个复数运算需要改,答案是不需要,一点都不需要,仍可以使用,原因上面已经说了,复数的加减乘除并没有直接访问结构体的成员,而是把整个复数的结构体看成一个整体,就好像我们使用int一样,难道系统有天升级了,改成使用4个字节存储了,我们就要修改我们的代码了吗?我们要像系统那样去编程,就不难理解为什么我们看见的例子怎么那么麻烦,写那么多个函数,直接使用不就行了吗. 这里介绍的编程思想成为抽象.其实“抽象”这个概念也没那么抽象,要在编程了使用抽象,学会怎么使用抽象也不难,简单的说就是提取公因式:ab ac=a(b c).如果a变了,ab和ac都要改,但如果写成a(b c)的形式就只需要该其中一个因子了,其他都不用变.再浅显的说就是当b,c都要用到a时,把a单独提取出来,这样再明白不过了吧. 拥有帝国一切,皆有可能。欢迎访问phome.net 在我们的复数运算程序中,复数是有可能使用直角坐标或极坐标表示的,我们把这个有可能变动的因子提取出来组成复数的存储表示层.这一层看到的是数据结构两个成员x和y,或者r和A,如果改变了结构体的实现就要改变这一层的现象,但是我们在复数的运算层是不需要改变的,函数的接口没有改变.复数运算层看到的知识一个抽象的“复数”的概念,知道它有直角坐标和极坐标,可以调用相关的函数使用这些坐标.在往上看其他使用复数运算的程序看到的数据就更抽象了,只知道它是一个复数,和int,double型等没有什么区别,关于它里面是怎么实现的根本不需要知道. 这里的复数存储表示层和复数运算层都称为抽象层,从底层往上看,复数的概念越来越抽象了,把所有的这些层组合在一起就是一个完整的系统.组合系统可以任意复杂,但这种复杂性是可以控制的,不会出现牵一发而动全身,任何改动都局限在某一层. 认真看完这篇我整理的笔记我相信对关于编程中的抽象性一定会有个大概的了解,对个人编程也是有相当大的好处的.好的东西总想和大家一起分享,希望你也有收获. 有误请帮我指出,谢谢!共同提高.
大四找实习中……没啥要求,哪里都可以,首选广东,我是广东清远的,现在在赣州读书.望有门路的朋友告诉我,无限感激! 本文出自 “梧名” 博客,请务必保留此出处http://hehongwei.blog.51cto.com/3005530/656739 拥有帝国一切,皆有可能。欢迎访问phome.net |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |