社区
研发管理
帖子详情
如何对工程中的数值和单位建模?(另外奉送100分)
fengfeng2003
2003-07-02 07:13:11
一个最简单的例子:
理想气体状态方程PV=RT
已知PVT中的两个可求其余一个参数。若PVT可允许任何合法单位,则在设计过程中应
设计一个单位类将参数的数值部分和单位部分分开(根据:《UML和模式应用》)
具体如何设计呢?
请各位大侠帮忙!多谢!
如给出满意解释或源码说明,另外奉送100分。
...全文
82
12
打赏
收藏
如何对工程中的数值和单位建模?(另外奉送100分)
一个最简单的例子: 理想气体状态方程PV=RT 已知PVT中的两个可求其余一个参数。若PVT可允许任何合法单位,则在设计过程中应 设计一个单位类将参数的数值部分和单位部分分开(根据:《UML和模式应用》) 具体如何设计呢? 请各位大侠帮忙!多谢! 如给出满意解释或源码说明,另外奉送100分。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
digital1
2003-07-06
打赏
举报
回复
有两种方法
1 都在operand中实现,使用方便但是扩展性不好,每次有新操作的时候需要在operand中加函数
2 在operand中实现getstandard(),然后:
int main()
{
Operand V=new Operand(ConcreteUnit1());
Operand T=new Operand(ConcreteUnit2());
const double R=123.4;
Operand P=T*cos(R.getStandard())/sin(V.getStandard());
}
我觉得第二种方式好些
所有程序都是伪代码,没有上机测试,可能存在问题
fengfeng2003
2003-07-06
打赏
举报
回复
To digital1(d_jt)
问题又来了,
如果是一个角度量,定义Operand时不仅有+,-,×,/还要有sin,cos...操作
这些函数要是都定义的话,就会有很多成员函数,这应该怎么办啊。
digital1
2003-07-05
打赏
举报
回复
to stonespace(stonespace)
不建议在客户端
SimpleUnit mmHg("mmHg",10130);
客户端尽量少的知道内容
to fengfeng2003()
traits是stl中实现不一致性的。
如一般的加法都一样,但long double的就不一样,可以用traits
另外,我觉得象单位这种永远不变的东西,无所谓你用多少类来实现,一个原则,客户端使用方便才是最重要的,
unit类我给出的是最简单的实现,如果你要考虑效率和资源占用问题,可以使用singleton模式来实现
如果不想麻烦,我觉得我前面给出的实现方式对本问题是最优考虑
stonespace
2003-07-05
打赏
举报
回复
很简单,就象你说的定义一个Unit基类,也不一定要用template,直接定义为类就行。原来template的参数作为构造函数的参数就行。然后还是原来的思路,用实例定义一个单位:
class SimpleUnit :public Unit
{
public:
virtual double ConvertToStandardUnit(double dbValue);
virtual string Print(double dbValue);
public:
SimpleUnit(string UnitName,double ConversionFactor);
};
SimpleUnit MPa("MPa",1e6);
SimpleUnit mmHg("mmHg",10130);
如果某各单位比如SUnit1不能用比例换算的,可以专门定义一个派生类:
class SUnit1 :public Unit
{
public:
virtual double ConvertToStandardUnit(double dbValue);
virtual string Print(double dbValue);
public:
SUnit1();
};
SUnit1 unit;
overwrite单位换算函数,但是还是用实例表示单位。
其实我认为单位只影响到I/O,所以Unit类只需要有一个把当前单位换算为标准单位的方法就行,然后再有格式化输入输出的方法。
如果要做得很灵活,这些表示单位的实例可以放在一个表中,比如vector<Unit *> vtAllUnit中,然后界面输入输出数据的时候,先在vtAllUnit选择一个单位,用选中单位实例把数据转换之后,再进一步处理。
做的好的话,Unit还应该有一个方法,取得单位适用的物理量的类别,比如是V还是P等等。
digital1
2003-07-04
打赏
举报
回复
另外
PressureUnit<"mmHg",10130> mmHg;
还需要客户知道10130等具体内容,这很不好啊
digital1
2003-07-04
打赏
举报
回复
这种方法挺好的,我也考虑过,不过,单位换算不是只有简单的比例啊,比如温度,华氏,绝对温度之间等等,你是不是还要用traits?
其实类多一点也无所谓啊,
呵呵,其实对大量的相同的简单换算可以gp,其他的就不要用gp了
stonespace
2003-07-04
打赏
举报
回复
>我初步考虑这样:为压力,温度等每一个物理量单位建立类,不知你的想法怎样?
我认为这样处理最好。在设计阶段考虑的类,应该从实现角度去考虑,设计阶段的类应该可以处于不同的状态,并且用数据成员保存状态。“单位”对人来说是一个概念,但是很明显,一个特定的单位本身是没有任何可变化的属性,如果强行设计为一个类,会发现这个类不需要有数据成员,而只有方法。通常如果方法不是很多的话,这种情况不应该设计为类,而应该当作一个“值”,即用一个实例表示,就像你设计的PressureUnit<"MPa",1e6> MPa一样。MPa这个实例表示一个单位。
fengfeng2003
2003-07-04
打赏
举报
回复
To stonespace
这只是我的初步设想,但是具体的实现应该怎样呢,能麻烦你解释一下吗?
我想应该设计一个纯虚构的Unit基类,PressureUnit,TemperatureUnit从Unit派生
得到,而后再生成PressureUnit等的各个具体单位。
还有就是,不是比例换算应如何处理呢?
fengfeng2003
2003-07-04
打赏
举报
回复
To digital1:
对啊,如果不是简单的比例怎么办啊?
你说的traits是什么意思,能给我解释一下吗?
多谢!
digital1
2003-07-03
打赏
举报
回复
说明
Operand(IUnit unit)构造函数少了一个参数,就是operand的数值
在operator*/中调用unit的getstandart方法,或者在operand类中增加getstandart方法,
fengfeng2003
2003-07-03
打赏
举报
回复
压力,温度,比容三个物理量常用的单位加起来有十多个,每一个都派生一个类的话
岂不是要有十多个类,如果在实际应用中变量再多的话,是不是造成了类的爆炸。
我初步考虑这样:为压力,温度等每一个物理量单位建立类,不知你的想法怎样?
template<string UnitName,double ConversionFactor>
class PressureUnit
{
.......
};
PressureUnit<"MPa",1e6> MPa;
PressureUnit<"mmHg",10130> mmHg;
.......
digital1
2003-07-02
打赏
举报
回复
interface IUnit
{
public double getStandard(double in);//根据输入数值计算标准单位数值
}
class ConcreteUnit:public IUnit //某个具体的单位,实现interface中的方法
class Operand//操作数
{
Operand(IUnit unit);
operator*
operator/
}
int main()
{
Operand V=new Operand(ConcreteUnit1());
Operand T=new Operand(ConcreteUnit2());
const double R=123.4;
Operand P=T*R/V;
}
软件
工程
建模
软件
工程
建模
Outline 数学
建模
计算机
建模
软件
工程
建模
软件开发生命周期模型 软件
工程
建模
案例 Introduction 所有的软件
工程
师都在思考着why what and how to develop的问题, 其
中
思维的演化过程遵循着这样的规律 — 数学 -> 计算机 -> 软件
工程
. 本文为刘钦老师软工I 学习笔记. 一 数学
建模
第0步: 明确自己的武器 数学框架 整数 加减乘除 第1步: 审题 提炼数学问题 results = 1 + 2 + 3 + …+ 99 +
3D
建模
需要什么电脑配置?什么样的电脑可以用作游戏
建模
?
3D
建模
需要什么电脑配置?什么样的电脑可以
建模
?很多刚入门3D
建模
的小伙伴都会烦恼这些问题,接下来将给大家介绍一下电脑配置方面的问题,希望对大家有所帮助。 学习3D
建模
对电脑的要求配置还是比较高的,如果大家想做
建模
或者设计,个人建议用台式机,因为台式机的性能只要你的配置到位,性价比会比笔记本高很多。笔记本价格贵,但是在真正用的时候,还不如比它便宜一半的台式机,当然啦很多人希望笔记本的便携式方便,那就搞个大苹果!! 开玩笑的,资金有限的小伙伴还是乖乖用台式机,因为
建模
对显卡内存,都有很高的要求,还有渲染,所
什么是模型?开发软件为什么要
建模
?
模型是现实的简化 我们
建模
是为了更好的理解我们正在开发的系统。 人们对复杂系统的理解力是有限的。而模型是对现实的简化,通过
建模
,缩小所研究问题的范围,一次只研究它的一个方面。这就是“各个击破”的策略。 这里说的“我们”,指的是所有于软件开发有关的人员,软件开发人员当然是其
中
的主要成员,不过还包括像客户,软件项目管理人员等等,所有这些希望了解正在开发的系统的人员。软件开发人员建立的模型,除了让自己更...
架构师之路(五)如何做好业务
建模
?
“我深怕自己本非美玉,故而不敢加以刻苦琢磨,却又半信自己是块美玉,故又不肯庸庸碌碌,与瓦砾为伍。” 现实生活
中
的我们不都是这样吗?明明庸庸碌碌,却又不甘庸碌一生。 -
中
岛敦(日)《山月记》 目录 一、业务
分
析的方法 1. 流程图 2. 时序图 3. 产品原型图 4. 业务模型图 5. 数据模型图 6. 其他 二、
建模
工具 三、总结 最近随着项目的推进,一些相对原...
【软件
工程
】软件
建模
基本概念和常用UML模型图
若要创建一座大厦,首先要做的肯定不是先去买所需要的材料,而是需要对建筑物的大小,形状和样式做一个规划,做出相应的图纸和模型。软件开发过程
中
,不同的阶段需要用到不同的UML图,选择使用那些图,需要深刻理解改图的主要用途,以及它表达的优势。软件
建模
体现了软件设计思想,需求和实现之间架起了一座桥梁,通过模型指导软件系统的具体实现。在不同的领域和场景下有不同的软件
建模
方法,其各自的
建模
思想和采用的
建模
工具也不尽相同。模型并不是软件系统的一个完备表示,而是所研究的系统的一种抽象。顺序图,活动图和状态图的对比。
研发管理
1,268
社区成员
28,284
社区内容
发帖
与我相关
我的任务
研发管理
软件工程/管理 管理版
复制链接
扫一扫
分享
社区描述
软件工程/管理 管理版
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章