首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为类的每个成员创建新的实例值

为类的每个成员创建新的实例值
EN

Stack Overflow用户
提问于 2019-09-18 17:26:54
回答 1查看 39关注 0票数 0

下面是我想做的,但做不到的事情:

我正在实例化属于各种类别(模型)的设备。假设它是汽车。实例化的汽车应该根据模型继承“默认”属性,但每个都应该有自己的属性。类层次结构示例:

代码语言:javascript
复制
Car
  Tesla
  Honda
Property

"Property“可以是一个属性对,例如,<"top_speed", "100"><"seats", 5>。例如,我可以为创建实例的Tesla定义默认属性:

代码语言:javascript
复制
teslaPropertySpeed = <"top_speed", 100>
teslaPropertySeats = <"seats", 5>

然后让所有的特斯拉都有这样的属性:

代码语言:javascript
复制
Tesla SubClassOf ((hasProperty value teslaPropertySpeed) and (hasProperty value teslaPropertySeats))

...however,如果我买了一辆特斯拉,我可能会“黑”它,让它开得更快或更慢,或者移走座椅。因为我说过所有的特斯拉都有这个特性,它就不再是特斯拉了。

一种更好的方式是说,所有特斯拉都有自己的速度和座位属性,我想将其设置为默认值,可修改的值。

简而言之,我想为每个实例化的Tesla创建新的属性。我能以声明的方式做到这一点吗?至于默认值,我可以在特斯拉的子类(比如FactoryTesla)中定义默认值,这样修改后的特斯拉就会从该子类中去掉,但会保留上面的“特斯拉”类。

EN

回答 1

Stack Overflow用户

发布于 2019-09-18 23:55:46

你将不能做你想做的事情。也就是说,能够推断出类型为Tesla的汽车不再属于Tesla类型,因为它已被修改。正如AKSW指出的那样,由于推断是单调的,这不可能发生。这大致意味着,在添加进一步的公理之前已经推断出的任何东西,在添加了进一步的公理之后仍然会被推断出来。“松散”推理的唯一方法是修改或删除本体中的现有公理。

能做的就是定义你的Tesla类的属性,并允许推理器推断出一个人是Tesla类型。下面的本体就可以做到这一点。

代码语言:javascript
复制
DataProperty: hasSeats
    Range: xsd:integer


DataProperty: hasTopSpeed
    Range: xsd:integer


Class: Car
    EquivalentTo: 
        (hasSeats exactly 1 xsd:integer)
         and (hasTopSpeed exactly 1 xsd:integer)


Class: Tesla
    EquivalentTo: 
        (hasSeats value 5)
         and (hasTopSpeed value 100)
    SubClassOf: 
        Car


Individual: aTesla
    Facts:  
     hasSeats  5,
     hasTopSpeed  100

Individual: notATesla
    Facts:  
     hasSeats  2,
     hasTopSpeed  80

这将推断aTesla个体的类型为Tesla,而不会对个体notATesla做出这样的推断。但是,如果你像下面这样创建一个单独的modifiedTesla,这将导致推理器给出不一致的结果。

代码语言:javascript
复制
Individual: modifiedTesla
    Type: Tesla
    Facts: hasTopSpeed  200 

不一致的原因(对于上面的本体)是因为modifiedTesla通过hasTopSpeed属性关联了两次:一次用于hasTopSpeed 100,一次用于hasTopSpeed 200。这是因为hasTopSpeed 200 不会覆盖 Tesla类中的属性。

从你的问题看,你似乎是从面向对象的角度来处理这个问题的。它们之间有一些相似之处,但在很大程度上,面向对象和本体是完全不同的。在这方面,我已经写了一些关于here的陷阱。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57989427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档