计算化学公社

标题: 面向对象的编程思想是否会成功的应用于计算科学领域 [打印本页]

作者
Author:
chenxin199261    时间: 2014-11-15 14:17
标题: 面向对象的编程思想是否会成功的应用于计算科学领域
我本科计算机基础老师跟我们说过,
“现在很多做理工科的老师都在用fortran这个古老的语言,大该是他们的老师在用,所以他们也在用。”
这句话对我的触动很大,计算科学(计算化学,计算物理,材料,有限元)领域fortran确实是主流。
2003版fortran虽然支持面向对象的编程技术,但并没有广泛的应用。

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

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

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



作者
Author:
truemantwo    时间: 2014-11-15 15:07
建议楼主看看lammps的源代码。

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

http://lammps.sandia.gov

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

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

切不可以为面向对象编程就是计算科学的必然趋势、就是高大上的、就非得要学要用的。
作者
Author:
chenxin199261    时间: 2014-11-17 16:14
sobereva 发表于 2014-11-15 15:15
搞计算机的人对于Fortran有严重的偏见,他们自己不写科学计算程序,而且是从C起步,就往往以为Fortran是古 ...

非常谢谢你的指导~~
作者
Author:
chenxin199261    时间: 2014-11-17 16:14
truemantwo 发表于 2014-11-15 15:07
建议楼主看看lammps的源代码。

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

谢谢提醒~
作者
Author:
ChemiAndy    时间: 2014-11-18 05:49
我唱点反调,我认为是不是要用面向对象,要根据具体的目的。面向对象的特点,是把对象、属性、操作分的清清楚楚,这样的代码架构,有可扩展性好,适于合作开发等优点。当然,也有开发周期长等缺点。一般的分子模拟,尤其是短期项目,追求的是效率高、速度快,的确未必要用面向对象。然而,如果楼主要开发通用的分子模拟软件,或者希望能给实验室今后的积累提供便利,那为什么不呢?实际上,我认为应该使用面向对象的另外一个原因是,方便今后就业。现在搞计算的很难找工作,但我一个同事就去了google,如果他没有丰富的面向对象的经验,google怎么会要他?怎么说呢,每一份努力都会有回报。
作者
Author:
Shannon    时间: 2014-11-24 07:56
我觉得没什么可能性,除了写用来给本科生,高中生教学的量子化学玩具程序。 量化的算法对程序运行效率的要求是在是太高了。SCF还有电子积分等用上OOP之后,估计就算不动了。对象的 property还有method的访问速度比普通的变量和方程慢了快100背(在maltab里,据说某些情况慢了10000倍)。
面向对象用来写 GUI还是很棒的,写起来快,改起来也方便
作者
Author:
qwoop    时间: 2014-12-30 15:30
面向对象的一大作用就是提高团体协作开发大型程序的效率,当然,是以牺牲一定的运行效率为代价的。我的看法是,随着计算机硬件技术的发展,面向对象在大型量化程序开发中的作用将会越来越大,因为技术的进步总是以减轻人类的劳动强度为方向的:D。
作者
Author:
zhanfei    时间: 2014-12-30 18:00
最近很多需要看的小东西是c++写的,想顺便学习下,不过发现C++的书写得都很拖沓,没有明了把常用的面向对象内容在小篇幅讲清楚的。
作者
Author:
etoac    时间: 2017-3-27 14:01
感觉自己面向对象癌晚期,随便写一个公式的计算程序就要class开头,分读入、计算、输出等各个方法
我觉得还是挺方便的,代码的可读性很好,很好维护,如果有什么近似的处理看起来也会显得比成块的if else更清楚一些




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3