计算化学公社

 找回密码 Forget password
 注册 Register
Views: 11542|回复 Reply: 9
打印 Print 上一主题 Last thread 下一主题 Next thread

[算法与编程] 面向对象的编程思想是否会成功的应用于计算科学领域

[复制链接 Copy URL]

98

帖子

1

威望

551

eV
积分
669

Level 4 (黑子)

跳转到指定楼层 Go to specific reply
楼主
我本科计算机基础老师跟我们说过,
“现在很多做理工科的老师都在用fortran这个古老的语言,大该是他们的老师在用,所以他们也在用。”
这句话对我的触动很大,计算科学(计算化学,计算物理,材料,有限元)领域fortran确实是主流。
2003版fortran虽然支持面向对象的编程技术,但并没有广泛的应用。

在软件工程领域,面向对象的编程思想已经很早出现,现在已经广泛的应用了。
我是个刚进入理论计算领域的新手。
我面临一个选择,是直接从面向对象思想开始,还是走老师们走过的面向过程思路的道路。
我稍微接触过两者,感觉技术上学习,应用的难度都差不多的。
在我们计算科学领域,是否会出现大规模的运用面向对象编程思想的情况?
如果我用面向对象的思路去编程,我可能跟老师学长同行们交流会产生障碍,没有先例可以遵循。但这确实是一步跨越。

=============================================
我能想到分子动力学模拟,如果,把粒子定义成类,或者把溶剂定义成类,偶极、速度、之类的作为属性。用类生成一些列粒子对象,运算看成方法。这样的思路是很清晰的。与自然相贴近
我以后可能做跨尺度的fragmen的方法,估计面向对象能有之地。
=============================================

还请过来人,或者尝试过这么做的人给我的建议,谢谢了。大家的建议真的很关键


69

帖子

2

威望

1314

eV
积分
1423

Level 4 (黑子)

2#
发表于 Post on 2014-11-15 15:07:57 | 只看该作者 Only view this author
建议楼主看看lammps的源代码。

lammps最初是用Fortran编写的,后来改用C++
地址:

http://lammps.sandia.gov

5万

帖子

99

威望

5万

eV
积分
112354

管理员

公社社长

3#
发表于 Post on 2014-11-15 15:15:16 | 只看该作者 Only view this author
搞计算机的人对于Fortran有严重的偏见,他们自己不写科学计算程序,而且是从C起步,就往往以为Fortran是古老、过时,纯粹因为前人使用所以如今才继续存在,殊不知Fortran在编写科学计算程序上的便利性远远优越于C。虽然我也尊重偏向于用C写科学计算程序的人的选择,不会鄙夷他们。

至于面向对象编程在计算化学中的价值,也看具体什么方面,毕竟计算化学涉及面太广了,比如贴近化学信息学方面的研究可能其价值较高,诸如搞分子个数据库,每个分子作为对象有一系列属性和方法。但单纯对于计算程序来说,引入面向对象编程是没有绝对必要的!量化中很难找出其用处,而对于MD,虽然看似与之关联更多一些,但即便如此,像是粒子的速度、力、坐标之类,单独用几个数组记录就完事了,如果要想整合一下,在Fortran里设个专用于粒子的自定义类型,让每个粒子有这些属性就足矣了。本来不需要面向对象编程的地方却非要把那套东西硬塞进来,就纯属添乱了,学起来费劲,用起来麻烦,代码还很冗杂。除非你在实际写程序中确实觉得面向对象方式编写对于自己的程序有明显益处,否则不要盲目跟风效仿。

切不可以为面向对象编程就是计算科学的必然趋势、就是高大上的、就非得要学要用的。
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入“北京科音”微信公众号获取北京科音培训的最新消息、避免错过网上有价值的计算化学文章!
欢迎加入人气非常高、专业性特别强的综合性理论与计算化学交流QQ群“思想家公社QQ群”:1号:18616395,2号:466017436,3号:764390338,搜索群号能搜到哪个说明目前哪个能加,合计9000人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大的量子化学波函数分析程序)
ResearchGate:https://www.researchgate.net/profile/Tian_Lu
Money and papers are rubbish, get a real life!

98

帖子

1

威望

551

eV
积分
669

Level 4 (黑子)

4#
 楼主 Author| 发表于 Post on 2014-11-17 16:14:32 | 只看该作者 Only view this author
sobereva 发表于 2014-11-15 15:15
搞计算机的人对于Fortran有严重的偏见,他们自己不写科学计算程序,而且是从C起步,就往往以为Fortran是古 ...

非常谢谢你的指导~~

98

帖子

1

威望

551

eV
积分
669

Level 4 (黑子)

5#
 楼主 Author| 发表于 Post on 2014-11-17 16:14:47 | 只看该作者 Only view this author
truemantwo 发表于 2014-11-15 15:07
建议楼主看看lammps的源代码。

lammps最初是用Fortran编写的,后来改用C++

谢谢提醒~

83

帖子

3

威望

1445

eV
积分
1588

Level 5 (御坂)

6#
发表于 Post on 2014-11-18 05:49:08 | 只看该作者 Only view this author
我唱点反调,我认为是不是要用面向对象,要根据具体的目的。面向对象的特点,是把对象、属性、操作分的清清楚楚,这样的代码架构,有可扩展性好,适于合作开发等优点。当然,也有开发周期长等缺点。一般的分子模拟,尤其是短期项目,追求的是效率高、速度快,的确未必要用面向对象。然而,如果楼主要开发通用的分子模拟软件,或者希望能给实验室今后的积累提供便利,那为什么不呢?实际上,我认为应该使用面向对象的另外一个原因是,方便今后就业。现在搞计算的很难找工作,但我一个同事就去了google,如果他没有丰富的面向对象的经验,google怎么会要他?怎么说呢,每一份努力都会有回报。

127

帖子

1

威望

1231

eV
积分
1378

Level 4 (黑子)

7#
发表于 Post on 2014-11-24 07:56:08 | 只看该作者 Only view this author
我觉得没什么可能性,除了写用来给本科生,高中生教学的量子化学玩具程序。 量化的算法对程序运行效率的要求是在是太高了。SCF还有电子积分等用上OOP之后,估计就算不动了。对象的 property还有method的访问速度比普通的变量和方程慢了快100背(在maltab里,据说某些情况慢了10000倍)。
面向对象用来写 GUI还是很棒的,写起来快,改起来也方便

评分 Rate

参与人数
Participants 1
eV +2 收起 理由
Reason
sobereva + 2 我很赞同

查看全部评分 View all ratings

99

帖子

0

威望

1092

eV
积分
1191

Level 4 (黑子)

8#
发表于 Post on 2014-12-30 15:30:48 | 只看该作者 Only view this author
面向对象的一大作用就是提高团体协作开发大型程序的效率,当然,是以牺牲一定的运行效率为代价的。我的看法是,随着计算机硬件技术的发展,面向对象在大型量化程序开发中的作用将会越来越大,因为技术的进步总是以减轻人类的劳动强度为方向的:D。

评分 Rate

参与人数
Participants 1
eV +2 收起 理由
Reason
sobereva + 2

查看全部评分 View all ratings

265

帖子

5

威望

2363

eV
积分
2728

Level 5 (御坂)

9#
发表于 Post on 2014-12-30 18:00:25 | 只看该作者 Only view this author
最近很多需要看的小东西是c++写的,想顺便学习下,不过发现C++的书写得都很拖沓,没有明了把常用的面向对象内容在小篇幅讲清楚的。
本周目已沉沦,下个世界再会

30

帖子

0

威望

582

eV
积分
612

Level 4 (黑子)

10#
发表于 Post on 2017-3-27 14:01:43 | 只看该作者 Only view this author
感觉自己面向对象癌晚期,随便写一个公式的计算程序就要class开头,分读入、计算、输出等各个方法
我觉得还是挺方便的,代码的可读性很好,很好维护,如果有什么近似的处理看起来也会显得比成块的if else更清楚一些

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 23:57 , Processed in 0.174647 second(s), 22 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list