Redian新闻
>
问个参数读入和传递的设计问题
avatar
问个参数读入和传递的设计问题# Programming - 葵花宝典
j*o
1
Dr. A. Behal's group at the U. of Central Florida has an opening starting
Fall 2011 in the exciting area of modeling, estimation, and controls issues
related to biological systems. An MS in Electrical Engineering or related
field is preferred. Students with experience on related topics and/or
interested in this type of research should contact Dr. Behal directly at his
email below with their resume to request details.
Interested graduate students are invited to e-mail their resume to:
Aman Behal, Ph.D.
Asst Professor, EECS & NSTC, University of Central Florida
email: [email protected] ucf.edu
avatar
l*s
2
第一次当农民,南加,可家里院子没有太多的阳光。
现在准备种地了,有啥东西可以推荐给我这种新手的吗?
准备当个菜农。。。
avatar
m*z
3
这两天特别不平静,家里出了太多事情,让我有了今天和老公的谈话,结果到现在让我心塞的难以入睡。平时我一向睡得挺早,因为现在怀孕几个月了,比较累,困的就早。家里发生的最大最让我难以从痛苦中走出来的是我的妈妈意外车祸去世。接着发生的事情让我大跌眼镜的是我的爸爸居然在我妈去世后三个月不到的时间内谈恋爱了,但更让我难以接受的是刚恋爱那个女人居然就上了我妈曾经睡过的床,还有就是我爸承诺人家要帮那个女人带大她的孙子,因为她的儿子离婚又准备再娶不打算养这个小孩,所以这个小孩只能跟着奶奶改嫁。想想我和弟弟的孩子无人带我真感觉心酸。
在我妈去世不到半年我爸的恋爱已经全部公开化,已然成了当地的笑柄。我现在是又气愤又难过。这是背景。于是就有了今天晚上的谈话,我问老公:若我死了,你会再娶吗?老公答:看孩子多大 我:孩子多大你会再娶。老公:小的时候孩子需要一个完整的家庭需要再娶一个。或者孩子大了后 我:孩子要是十几岁呢?老公:那时候孩子敏感,等过了那时候再找。我立马就玻璃心了:那你意思是我要是死了要么早死,要么晚死,别不早不晚的耽误你再娶!他就说我:你神经病。我现在想想人活着真的没什么意义,太薄情了。
我和老公认识时无车无房无存款。当时的他一无所有甚至身上只有几千块钱。我觉得这个男人虽然没钱但是人踏实,厚道。结果连这么厚道的男人都是这样的回答。我彻底绝望了。我们老家有个同学的妈妈去世后同学的爸爸差点因此病死,被同学给弄出来帮助他慢慢恢复情绪,已经过去几年了迄今未找。身边还有其他的例子是这样,而我自己的亲人却是这么做的。我的老公的回答也令我失望透顶,我在怀孕期间就是这么答复的,太心寒了。我真的已经没有再为这个家操心的动力了。想想我的妈妈为我们吃了一辈子苦,小时候家里穷的连盐都吃不上,我妈却仍然无缘无悔的付出。后来有一些好吃的都给我爸吃了觉得我爸要干活要挣钱吃好吃的才有力气,结果换来个我妈辛苦辛苦一辈子经营的家就这么被外人占领了,而且攒的钱全部被我爸拿走留着了,我妈要是知道她辛苦挣得钱没给孩子们任何一分都留给别的女人花了不知道该多失望伤心。
avatar
a*i
4
rt.
avatar
y*b
5
看看能不能说的清楚:
科学计算程序,一次性从数据文件中读入很多参数,不同的(一个或几个相关参数)要传
递给不同的对象,很多对象还具有这种特点:初始化的时候只需要某些参数,其他动作
时还需要其他参数,比如空间一个多面体,初始化只需要空间坐标和密度等等,而后面
发生移动时还需要时间步长和重力加速度等等(时间步长和重力加速度逻辑上不应该是
该多面体的数据成员)。
第一,我是应该把时间步长/重力加速度等等作为该对象的成员,进行初始化;还是作
为该对象某个成员函数的的形参,想办法传入实参呢?
第二,我想设计一个class/struct来存储所有参数,以便MPI编程时用唯一一个进程来读
取参数,然后将这个存储参数的对象(通过boost.mpi)序列化并一次性broadcast给其他所
有进程(而不是一个参数一个参数地broadcast)。那么将包含所有参数的这个参数对象作
为实参,传递给任意一个只需要某些参数(而不是全部参数)的其它类的成员函数,是不
是很怪异呢?还是应该重新设计该成员函数的形参,使之仅仅获取所需要的参数,但这
样一来需要另行构造这些参数的类型?
谢谢。
avatar
g*e
6
欢迎新菜农。叶子菜对阳光要求不严。最容易的莫过于小青菜,葱,蒜。蒜用蒜瓣,葱
可以用超市葱的带根葱白,青菜可以直播种子。种子在顺发,san gabriel nursery有。

【在 l******s 的大作中提到】
: 第一次当农民,南加,可家里院子没有太多的阳光。
: 现在准备种地了,有啥东西可以推荐给我这种新手的吗?
: 准备当个菜农。。。

avatar
N*w
7
太ingdown 了

【在 a*****i 的大作中提到】
: rt.
avatar
p*o
8

Try to put it as parameters first. If you find many member functions
are using this parameter later, then you know it should be changed
to a member. On the other hand, if one group of member functions
utilize this data while the other group don't, consider refactoring
your class into two.
来读
A popular way is to have a singleton to hold all configuration data, e.g. as
key/value pairs, and everyone else query it for parameters by name. Those
data,
as you mentioned before, could be read from a file and it makes sense to
broadcast in a distributed environment once at setup. You got great
flexibility
by not hard-coding all the parameters in that singleton class.

【在 y**b 的大作中提到】
: 看看能不能说的清楚:
: 科学计算程序,一次性从数据文件中读入很多参数,不同的(一个或几个相关参数)要传
: 递给不同的对象,很多对象还具有这种特点:初始化的时候只需要某些参数,其他动作
: 时还需要其他参数,比如空间一个多面体,初始化只需要空间坐标和密度等等,而后面
: 发生移动时还需要时间步长和重力加速度等等(时间步长和重力加速度逻辑上不应该是
: 该多面体的数据成员)。
: 第一,我是应该把时间步长/重力加速度等等作为该对象的成员,进行初始化;还是作
: 为该对象某个成员函数的的形参,想办法传入实参呢?
: 第二,我想设计一个class/struct来存储所有参数,以便MPI编程时用唯一一个进程来读
: 取参数,然后将这个存储参数的对象(通过boost.mpi)序列化并一次性broadcast给其他所

avatar
l*s
9
太感谢了!!!蒜就是大华的蒜掰开了直接埋地下就能发芽?

有。

【在 g***e 的大作中提到】
: 欢迎新菜农。叶子菜对阳光要求不严。最容易的莫过于小青菜,葱,蒜。蒜用蒜瓣,葱
: 可以用超市葱的带根葱白,青菜可以直播种子。种子在顺发,san gabriel nursery有。

avatar
m*t
10
+1 Funny

【在 a*****i 的大作中提到】
: rt.
avatar
g*g
11
通常的做法是写成key/value pair,所谓的properties文件。
初始化的时候全部导入到一个hashmap里,用一个singleton维护
这个hashmap,需要的时候直接调。不需要把参数传来传去的。
既然参数是只读的,也不需要什么broadcast,不同进程读同一个
文件也是一样的。读一次文件的开销可以忽略不计。如果你有多个
结点,同样可以把这个文件拷到每个节点上。

来读
他所

【在 y**b 的大作中提到】
: 看看能不能说的清楚:
: 科学计算程序,一次性从数据文件中读入很多参数,不同的(一个或几个相关参数)要传
: 递给不同的对象,很多对象还具有这种特点:初始化的时候只需要某些参数,其他动作
: 时还需要其他参数,比如空间一个多面体,初始化只需要空间坐标和密度等等,而后面
: 发生移动时还需要时间步长和重力加速度等等(时间步长和重力加速度逻辑上不应该是
: 该多面体的数据成员)。
: 第一,我是应该把时间步长/重力加速度等等作为该对象的成员,进行初始化;还是作
: 为该对象某个成员函数的的形参,想办法传入实参呢?
: 第二,我想设计一个class/struct来存储所有参数,以便MPI编程时用唯一一个进程来读
: 取参数,然后将这个存储参数的对象(通过boost.mpi)序列化并一次性broadcast给其他所

avatar
P*5
12
葱 is the best and easiest for starters.
avatar
r*n
13
so creative and funny.

【在 a*****i 的大作中提到】
: rt.
avatar
N*m
14
没看懂你想说什么,胡乱打个酱油撒。
时间步长啥的难道不是独立于模型的撒?

来读
他所

【在 y**b 的大作中提到】
: 看看能不能说的清楚:
: 科学计算程序,一次性从数据文件中读入很多参数,不同的(一个或几个相关参数)要传
: 递给不同的对象,很多对象还具有这种特点:初始化的时候只需要某些参数,其他动作
: 时还需要其他参数,比如空间一个多面体,初始化只需要空间坐标和密度等等,而后面
: 发生移动时还需要时间步长和重力加速度等等(时间步长和重力加速度逻辑上不应该是
: 该多面体的数据成员)。
: 第一,我是应该把时间步长/重力加速度等等作为该对象的成员,进行初始化;还是作
: 为该对象某个成员函数的的形参,想办法传入实参呢?
: 第二,我想设计一个class/struct来存储所有参数,以便MPI编程时用唯一一个进程来读
: 取参数,然后将这个存储参数的对象(通过boost.mpi)序列化并一次性broadcast给其他所

avatar
g*e
15
对. 如果是红皮蒜头就更好.

【在 l******s 的大作中提到】
: 太感谢了!!!蒜就是大华的蒜掰开了直接埋地下就能发芽?
:
: 有。

avatar
p*t
16
如果是一个大project,最好先用uml之类的把每个class都画出来,把class之间的关系
也写出来,如果有inheritance什么的,也标出来。这样更清楚些。

来读
他所

【在 y**b 的大作中提到】
: 看看能不能说的清楚:
: 科学计算程序,一次性从数据文件中读入很多参数,不同的(一个或几个相关参数)要传
: 递给不同的对象,很多对象还具有这种特点:初始化的时候只需要某些参数,其他动作
: 时还需要其他参数,比如空间一个多面体,初始化只需要空间坐标和密度等等,而后面
: 发生移动时还需要时间步长和重力加速度等等(时间步长和重力加速度逻辑上不应该是
: 该多面体的数据成员)。
: 第一,我是应该把时间步长/重力加速度等等作为该对象的成员,进行初始化;还是作
: 为该对象某个成员函数的的形参,想办法传入实参呢?
: 第二,我想设计一个class/struct来存储所有参数,以便MPI编程时用唯一一个进程来读
: 取参数,然后将这个存储参数的对象(通过boost.mpi)序列化并一次性broadcast给其他所

avatar
g*a
17
以前A大推荐过毛豆,如果地里从没种过东西,可以增加土地的营养

【在 l******s 的大作中提到】
: 第一次当农民,南加,可家里院子没有太多的阳光。
: 现在准备种地了,有啥东西可以推荐给我这种新手的吗?
: 准备当个菜农。。。

avatar
y*b
18
多谢pptwo and goodbug! 按这个思路做了,感觉不错,有几个问题再请教一下:
1. 这个singleton维护的hashmap类似于一个全局变量,无需传递函数参数,
任何对象和函数都可以取用,很方便,可是总觉得有点特别。想问一下这样做
很普遍吗?有个实验室开发的一个大型面向对象程序包,读入数据之后进行了
无数的分离和传递,直到每个用到(不同数据部分)的对象都完全用local的数据
结构来维护所需数据,好处是各个对象显得high cohesion, 缺点是非常繁琐、
数据冗余很多。你们觉得那种设计更好?
2. pptwo: You got great flexibility by not hard-coding all the parameters
in that singleton class. 这句话怎么理解?我想把所有数据一次性读入到
该singleton class,这样失去flexibility?
3. 大量进程读(一次)一个小文件(比如singleton class存储的内容)开销不大,
但是读那些很大的数据文件开销可能很大。比如我在该singleton class里面指定
某个数据文件,该文件可能是很大的hdf5格式的文件,根进程读入该文件之后可以
将该文件的不同部分发往不同进程,这是比较通行的做法。如果我想让根进程读入
小文件到singleton class,能否将这个singleton也broadcast到其他进程呢?
Thanks.

要传
动作
后面
该是
是作

【在 g*****g 的大作中提到】
: 通常的做法是写成key/value pair,所谓的properties文件。
: 初始化的时候全部导入到一个hashmap里,用一个singleton维护
: 这个hashmap,需要的时候直接调。不需要把参数传来传去的。
: 既然参数是只读的,也不需要什么broadcast,不同进程读同一个
: 文件也是一样的。读一次文件的开销可以忽略不计。如果你有多个
: 结点,同样可以把这个文件拷到每个节点上。
:
: 来读
: 他所

avatar
c*p
19
展开说说决定当菜农不是花农的心历路程
avatar
g*g
20

整个JDK就是这么实现的。代码里很多地方都有System.getProperty,我相信
JDK比大多数C++系统在设计模式层面上做得更好。从技术层面上,配置属于
immutable的数据,local和global访问并无本质区别。
不是,他的意思是说你可以后面再加新的数据而不需要对singlton改动。
immutable的东西怎么传都行。

【在 y**b 的大作中提到】
: 多谢pptwo and goodbug! 按这个思路做了,感觉不错,有几个问题再请教一下:
: 1. 这个singleton维护的hashmap类似于一个全局变量,无需传递函数参数,
: 任何对象和函数都可以取用,很方便,可是总觉得有点特别。想问一下这样做
: 很普遍吗?有个实验室开发的一个大型面向对象程序包,读入数据之后进行了
: 无数的分离和传递,直到每个用到(不同数据部分)的对象都完全用local的数据
: 结构来维护所需数据,好处是各个对象显得high cohesion, 缺点是非常繁琐、
: 数据冗余很多。你们觉得那种设计更好?
: 2. pptwo: You got great flexibility by not hard-coding all the parameters
: in that singleton class. 这句话怎么理解?我想把所有数据一次性读入到
: 该singleton class,这样失去flexibility?

avatar
K*t
21
哈哈 aglee~~~~

【在 P******5 的大作中提到】
: 葱 is the best and easiest for starters.
avatar
p*o
22

I believe those C++ systems are mostly too old (or derived from C)
to have this flexible approach like JDK. On the other hand, it is
also possible to achieve such "high cohesion" by using something like
XPath that organizes key/value pairs into a hierarchy (I don't know
if JDK already does so in System.getProperty).
parameters

【在 g*****g 的大作中提到】
:
: 整个JDK就是这么实现的。代码里很多地方都有System.getProperty,我相信
: JDK比大多数C++系统在设计模式层面上做得更好。从技术层面上,配置属于
: immutable的数据,local和global访问并无本质区别。
: 不是,他的意思是说你可以后面再加新的数据而不需要对singlton改动。
: immutable的东西怎么传都行。

avatar
y*b
23
搞定,再次表示感谢!

【在 g*****g 的大作中提到】
:
: 整个JDK就是这么实现的。代码里很多地方都有System.getProperty,我相信
: JDK比大多数C++系统在设计模式层面上做得更好。从技术层面上,配置属于
: immutable的数据,local和global访问并无本质区别。
: 不是,他的意思是说你可以后面再加新的数据而不需要对singlton改动。
: immutable的东西怎么传都行。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。