在护照中有一个字段: Name,该字段有一个值John。
我断言,将这种关系描述如下是正确的:
字段名
Passport是一组对(字段:字段值),因此:
这里的要点是,不正确的说:
“名值为约翰”;
正确的方法(概念上/学术上)是这样说的:
护照的“名”值为'John‘。
实际上,它的意思是(伪C#):
struct Passport {
Map<Field, object> fieldValues;
}
struct Field {
string Name;
string Description;
bool IsValidValue(object value);
}问:,这有意义吗?有什么想法吗?
发布于 2009-04-27 20:38:09
这是相当主观和完全上下文敏感,似乎是一个愚蠢的事情挑剔。
不管是否正确,如果我和同事讨论“护照”时,如果他们每次说"firstName是'john'“并告诉我说”护照的名字字段是'john'",我就会向他们扔东西。你会觉得很烦人。
发布于 2009-05-06 18:27:08
如果您要建模这样的东西,那么您可以看看java或c#的反射API。这和你描述的非常相似。类有一组字段,字段有名称、类型和其他属性,而不是值。对象是类的实例,您可以向对象请求指定字段的值。同一类的不同对象具有相同字段的值,因此可以说它们共享字段。因此,如果您试图建模基于类的OOP,那么您可能是正确的。
然而,这并不是执行OOP的唯一方法。基于原型的OOP看起来不同,因为没有类,只有对象,所以对象包含有值的字段,所以如果您说对象包含字段和字段有值,那么没有太大的区别。
所以答案是“这有意义吗?”我认为是“是”,因为类似的东西正在反思,并被广泛使用。它是对还是错-取决于你的需要。
UPD:关于"value = PassportField“和"value = Passport.Field.Value”,我想再介绍一本护照,以表明这一点
firstNameField = PassportClass.Fields["FirstName"]
myName = myPassport[firstNameField]
yourName = yourPassport[firstNameField]假设两本护照都有相同的字段,这是有意义的。有不同的护照,不同的领域可能有一种感觉,只是一个不同的。
发布于 2009-05-06 18:50:12
Well..not真的在c#见Scott Bellware's answer to my question about C# not being Object Oriented (kinda)。
在C#中,护照是一个类,所以说它是完全合理的
这里,第一个子句描述类,下一个子句描述对象。在一种更面向对象的语言中,比如ruby,我想说“护照有'John‘值的字段’Name'”是等价的,你只是描述两个对象-- Passport原型,以及在同一个句子中的实例。
不过,我自己也很困惑。这个问题的措辞很奇怪,因为一本护照无疑会有更多的东西,而不仅仅是它的领域,例如,一个长期而持久的身份。
https://stackoverflow.com/questions/795146
复制相似问题