我有一个多个(~40)业务对象的列表,它们都共享一些属性,或者是整个集合,或者是子集。这可以用以下伪代码来描述:
Object Foo
property a
property b
Object Bar
property a
property c
Object Baz
property b
property c
在我的例子中,大约有20种不同的属性
如何创建最佳继承图,即产生最少(抽象)父类的继承图,假设行为没有差异,只有属性?我找到了一篇文章,为我的问题提出了正式的
这个问题可能有点让人困惑,所以我会尝试用一些例子来说明
我正在使用JPA2.0和Eclipselink 2.2
我有三门课,个人,学生和证书,它们之间有这种关系:
学生从Person继承(扩展)
学生有证书(@OneToOne)
我的类定义如下:
Person.java
@Entity
@Table(name = "person")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "typ
有没有办法重写子类中的opDispatch?
我实际上想做的是传递一个变量,将超类作为它的静态类型,但它会将对opDispatch的调用重定向到它的子类型(动态类型)
基本上,我希望这个代码打印“Sub”而不是“Super”
我目瞪口呆,因为我不能强迫编译器使用抽象方法寻找方法重写(D不允许抽象模板化方法)
PS:有人可以创建标签吗?(在我看来,这对D有好处?成员模板函数不能是虚拟的,因此不能被重写
opDispatch是模板化函数。这两个调用是相同的:
s.callingOpDispatch
大家好这是我第一次来这里:
我有下面的Prolog定义集,唯一不起作用的是子类。有谁能帮我弄清楚为什么这不是:
% definitions of classes in our system
class(object).
class(animal).
class(cat).
class(dog).
class(dachshund).
class(toy).
class(ball).
class(post).
% defin
我需要用1个基类和3个子类(4个类)
基类:用户
子类:客户、办公室用户、员工
在我的数据库中,我只有3个表:用户、客户和员工
我没有OfficeUsers表,因为我需要的所有数据都已在Users表中。
在未来,我希望能够创建报告,列出客户、员工和办公用户的数量
我不想使用TPH,因为我在Clients和Employees表中有很多不可为空的字段。
我是否应该只使用UserId创建OfficeUsers表以便实现TPT
这对我来说不是很好的设计-只有PK表,所以我可以正确地映射它-请纠正我,如果
我想使用eclipse链接历史将以下内容镜像到类
@Entity
@Table(name="EMPLOYEE")
@Inheritance(strategy= InheritanceType.JOINED)
@TableGenerator(name="Employee_Gen", table="ID_GEN", pkColumnName="GEN_NAME", valueColumnName="GEN_VAL", pkColumnValue="Employee_Gen")
@Customizer
假设我有一个名为“people”的数据库表
此表中70%的字段是由提交表单的用户创建的,其余30%是由其他数据填充的字段
为了描述这个表,我使用Gii创建了一个扩展CActiveRecord的模型(People.php)
然后我意识到,为了显示表单,我需要扩展CFormModel。此类只需向用户显示并收集70%数据库字段的数据。它的唯一用途是显示表单和收集数据
我的问题是,当我已经有了一个名为People的模型类时,如何才能做到这一点
多谢各位。希望这是有意义的,您还可以使用类创建一个表单,该类
我有一个OWL2本体,其中包含几个属于一个类的命名个体,这些个体需要具有相同值的相同对象属性
我希望以这样一种方式“在类上”进行此属性断言:推理者可以推断出所有成员都拥有的属性,因此不需要对每个成员进行显式断言。(获得类似于基于类的面向对象属性继承的内容)
一个简单的例子可以是一个本体,其中包含属于类Milk的个体milkBottle1,milkBottle2,milkBottle3。它们都应该具有包含营养素的属性,其值为蛋白质,但显然这是牛奶类的所有成员共享的属性,并且只能明确声明一次
我只发
标签: Inheritance
polymorphismabstractionsolid-principlesopen-closed-principle
我知道开闭原理是指为扩展而开,为修改而关。考虑下面的例子:
public class Vehicle{
public void service(){
//vehicle servicing code
}
}
public class Bike extends Vehicle{
public void service(){
// bike specific servicing
}
}
现在我了解到,Bike类扩展了Vehicl
我有一个奇怪的问题,instanceof对于TypeScript中的派生类似乎不能正常工作。我的班级结构如下:
interface Serializing
{
serialize(): string
}
class Storage implements Serializing
{
// constructor, methods, serialize, ...
}
class StorageContainer
{
// constructor, methods, v
我想在odoo 10中更改我的第三方应用程序中的主模块名称
我想将维护名称更改为资产名称。我该怎么做?我如何使用inherit更改该属性?我解决了我的问题
资产
该id是维护模块中父菜单项的xml id,您必须更改字段name
我是新手。
在swift中,您可以通过以下方式轻松继承其他类:
class Train: Vehicle {
override func makeNoise() {
print("Choo Choo")
}
}
我想从material小部件继承,比如说从GestureDetector继承:
class Button extends GestureDetector{
@override
get onTap => super.onTap;
}
我有
我正在学习UML,并希望创建一个小型餐厅应用程序,该应用程序具有菜单、菜单中包含的菜肴、菜肴中使用的产品。菜单分为不同类型,只能包含相应类型的菜单。
我认为课堂菜单和菜品应该是抽象的。
这是我的UML图
如何最好地显示抽象类之间的关系?第一次尝试
如果我们看一下需求,即订单是关于菜肴的,菜肴是由产品组成的,菜单就像某种菜肴的目录,我们会得出这样一个图表:
我们只展示抽象菜和抽象菜单之间的关系。专门的菜肴和菜单继承了这种联想。只是你必须用一个评论来表达使用与菜单兼容的菜肴的限制
进一步反思
问题是
COM对象可以继承吗
比方说,我想跳过一些方法。接口可以继承其他接口,但组件无法通过组合来重写另一个组件,即将其他方法转发给组合的组件,然后直接实现“重写”方法。接口可以继承其他接口,但是组件不能通过组合来覆盖另一个组件,即将其他方法转发给组合组件,然后直接实现“覆盖”方法。您可以通过聚合在COM中实现这一点
基本上,您创建一个实现一些接口的对象,并包装对内部对象的访问
通过调用并传递自己的对象IUnknown作为pUnkOuter参数来创建的内部对象
如果内部对象(正确地)支持它,它将延迟对外
假设我们有
class Base
{
public:
virtual void foo(){}
};
class Derived: public virtual Base
{};
class Derived_Left: public Derived
{};
class Derived_Right: public Derived
{};
class Bottom: public Derived_Left, public Derived_Right
{};
//让我们来讨论案例
/
我有三门dart课程:
class A{}
类B扩展了{}
类C扩展了{}
有一种方法可以从
编辑:
感谢Alexandre Ardhuin,您的解决方案非常有效
我在学飞镖
我编辑了您的代码并使用了递归解决方案,请看:
导入“dart:mirrors”;
A类{}
类B扩展了{}
类C扩展了{}
类D{}
类E扩展了C{}
bool isParent(字符串父级,类镜像clazz){
var objectParentName=MirrorSystem.getName(clazz.superc
我有一门课:
class CustomDictionary(dict):
def __init__(self, wrong_keys, *args, **kwargs):
super(CustomDictionary, self).__init__(*args, **kwargs)
self.__dict__ = self
self.wk = wrong_keys
print(self.wk)
##########
我试图访问RDF中父类继承的属性。我使用rdfs属性subClassOf定义子类的一个实例
使用海龟语法:
ex:myClass1 a owl:class;
rdfs:range xsd:integer.
ex:myClass2 rdfs:subClassOf ex:myClass1.
# defining instance of my class
ex:instance1 ex:myClass1 1 .
ex:instance2 ex:myClass2 2 .
我对Dart还很陌生,仍然在学习它带来的所有细微差别。有一件事我真的被当前任务耽搁了,那就是从父类继承(或代理)静态方法
void main(){
英语问候语;
}
课堂英语{
静态问候语(){
actGreeting();
说问候语();
}
静态sayGreeting(){
打印(“你好”);
}
静态actGreeting(){
打印(“”);
}
}
课堂英语课堂扩展英语{
静态sayGreeting(){
印刷品(“女士”);
}
静态actGreeting(){
打印(“”);
}
我在一个Java类中有多个构造函数
public class A{
public A(){...}
public A(String param){...}
public A(String param, Object value}
}
现在我想创建一个从该类继承的Scala类
class B extends A{
super("abc")
}
但是这种语法是无效的。Scala抱怨说,“.”应为“”,但找到了“(”。
执行此操作的有效方法是什么?必须将构造函数参数附加到类定义中,
“传统”实施:
interface IFoo{
fun getS():String
fun modifyS():Unit
}
class Foo : IFoo{
private var s = "bar"
override fun getS() = s.toUpperCase()
override fun modifyS(){ s = when(s){
"bar" -> "baz"
else -> "bar"
我是Java新手,我们正在学习继承和子类。在文本和在线文章中都说,子类不会从各自的超类继承构造函数;然而,在一个问答题中,我们被问及以下代码的输出:
class Food {
Food() { printFlavor(); }
void printFlavor() { System.out.println("bland"); }
}
class Pepper extends Food {
void printFlavor() { System.out.
我有两个类Foo和Bar映射到两个不同的表,我希望它们使用join继承策略,但使用两个非键列进行连接。这个模式很奇怪,但我还是坚持着。以下是我的设置:
@Entity
@Table(name="foo")
@Inheritance(strategy=InheritanceType.JOINED)
public class Foo {
@Id
private Integer uniqueFooId;
@Column(name="column1")
private
当重载时,我在理解方法的变化方面有点问题
由于返回类型中的协方差,这一点非常有效
class Bla
class Fasel extends Bla
trait Test[A] {
def tester(): Bla = new Bla
}
class FooTest[A](a: A) extends Test[A] {
override def tester(): Fasel = new Fasel
}
我在一个包含许多模块的项目中使用Maven。发布时,我们将模块部署到我们自己的Maven存储库中。项目模块继承自父项目,父项目定义了要使用的报告工具、SCM位置、存储库等公共属性
./pom.xml
<project>
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>1.0</version
是否可以将两个不同的鉴别器值映射到同一个具体的java类
大概是这样的:
@DiscriminatorValue("4")
@DiscriminatorValue("5")
public class CartaImpl extends RapportoImpl implements Carta, Cloneable {
另一个问题:当没有为不引发此异常的指示符字段值提供类时,是否可能有默认实现
Missing class for indicator field value
为什么使用两个不
我有数据和逻辑的课堂成果
现在我需要很多不同的水果,它们只在名称、位图和其他一些数据上有所不同
为每个水果创建一个新的子类有意义吗?他们都与水果有着“一种”的关系。但他们没有添加新的行为或领域
也许给fuit一个“type”字段,而不是子类化它更好?有什么问题吗?你想区分哪种水果?如果只是类型差异,我倾向于使用枚举值,从基类(在本例中为果)中定义的枚举列表,然后在继承类的构造函数上传递或初始化
乙二醇
您只需在构造函数中为name etc定义特定的值您想要区分哪种类型的水果?如果只是类型差异,我
我的模型-提问和回答,扩展了课堂帖子。Post有一个字段-字符串内容
让问题成为课堂问题的一个例子。我的HTML包含question.content,但引发异常,表示找不到该字段。为什么没有继承的“内容”字段
提前谢谢 您需要用@MappedSuperclass注释您的超类
如果您查看“play.db.jpa.Model”的源代码,我假设您的实体继承自该源代码,您将看到使用的这个特殊注释。这会将此类的内容带入持久化实体。您是否忘记发布模型?模型的其余部分有什么关系?我关心的是我在父类中定义的字段
我有一个带有以下注释的父类
@PersistenceCapable(table = "my_parent_table", objectIdClass = Myclass.PK.class, detachable = "true", identityType = IdentityType.APPLICATION)
@Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
@Discriminator(strategy = Discriminato
我有以下情况:
这些项目有一个通用配置文件和一个特定配置文件,我需要使用jaxb解组创建特定配置文件的实例
超级类ConfigA.java:
以及子类ConfigB.java:
相应的xml文件:
<config>
<attribute1>a</attribute1>
<attribute2>b</attribute2>
<attribute3>c</attribute3>
</co
我正在评估我是否想在接下来的项目中使用symfony2和twig,我对symfony2/twig世界非常陌生,主要是一个接一个地构建我们每个站点的框架。我的主要问题是,如果我使用的是一个基本的小树枝模板,我的所有页面都是从中继承的,那么这个基本页面有可能拥有自己的控制器吗?以及子页面是否有自己的控制器
例如,如果标题有一些动态内容,逻辑永远不会改变,我就不需要在每个页面的前端控制器中替换这些逻辑,但是内容块将在前端控制器中生成
我将有多个开发人员在这个项目上,老实说,如果我能让他们在我配置项目后
标签: Inheritance
class-designdowncastclass-hierarchyliskov-substitution-principle
我最近开始阅读关于Liskov替换原则()的内容,我正在努力完全理解“子类型中的先决条件无法加强”这一限制的含义。在我看来,这种限制似乎与设计原则相冲突,设计原则建议人们应该尽量减少或完全避免从基类向下转换为派生类的需要
也就是说,我从一个动物类开始,派生出动物狗,鸟,和人。LSP对先决条件的限制显然符合自然,因为狗、鸟或人都不应该比一般动物受到更大的限制。遵循LSP,派生类随后将添加一些特殊特性,例如Bird.fly()或Human.makeTool(),这些特性对于Animal来说并不常见
我正在创建几个NSView类,所有这些类都支持一个特殊的操作,我们称之为transmogrify。乍一看,这似乎是制定协议的最佳场所:
protocol TransmogrifiableView {
func transmogrify()
}
但是,该协议并不强制要求每个TransmogrifiableView都是NSView。这意味着我在TransmogrifiableView上调用的任何NSView方法都不会进行类型检查:
let myView: TransmogrifiableV
我们有以下代码:
我们有这样的指示:
mySub = (SubClass) mySuper;
对我来说,这看起来像一个合法的演员,但它给了一个ClassCastException。为什么会这样
从Oracle文档
抛出,指示代码试图将对象强制转换为它不是实例的子类。例如,以下代码生成ClassCastException:
Object x = new Integer(0);
System.out.println((String)x);
Eg: Object x = new Intege
我已经阅读了以下文档,这些文档使用AmpersandViews演示了这项技术:
这对我来说是一种模型和集合的工作,但是,我无法通过进一步扩展我的原生web应用中的基本模型/集合来定义任何新的派生属性。如果它们是通过fetch()创建的,则派生属性为“未定义”。但是,如果我在本地创建它们,它们将按预期工作。有关我的代码的详细信息,请参见下面的代码片段。有没有想过我做错了什么?或者,如果这是预期行为,是否有任何解决办法?(我在本文中包含了一个Backbone.js标记,因为Backbone和Amp
我知道钻石问题是当两个类B和C继承自A,而类D继承自B和C时产生的歧义。如果A中有一个方法B和C已经重写,而D没有重写,那么D继承的是哪个版本的方法:B的,还是C的
但是为什么我们需要这个长度解释,我们可以说B和C有一个相同的方法,D继承了B和C,在D中没有这样的方法,所以当我们创建D的实例并调用该方法时,编译器不知道D继承了哪个版本的方法。因此,我们可以避免提及A类问题,将菱形问题转化为“三角形问题”为什么将其标记为c?我不完全确定你的意思,但我想你是说你希望编译器拒绝d->foo(),因为B
我如何扩展扩展视图父方法以不重写、保留父方法语句并添加一些自定义代码,下面是示例
var SomeView = View.extend({
parentMethod: function() {
//some parent code
}
})
var MyView = SomeView.extend({
parentMethod: function() {
//keep parents statements and extend
}
})
JavaScrip
如何最好地实施以下场景:
版本1.0中的应用程序有一个标准化的用户界面,例如订单。此应用程序可定制以满足不同客户的需求。这可能是客户A的额外字段“期望交付时间”,客户B的省略字段“电话号码”,客户C的额外地图插件显示附近的仓库,客户D的组合
现在,开发人员发布了新版本的标准订单,版本2.0。最好的设计方法是什么,以尽可能少的努力(如果有的话)来确保为客户所做的所有定制都能保持活力
我可以想象以下解决方案:
配置:所有选项都是可配置的。这实际上不是一个解决方案,因为无法预见所有可能的客户需求
继
类是否可以从嵌套类继承,或在C#中实现嵌套接口
只要嵌套类型在您的作用域中可见且未密封,则选择“是”
编辑2:不要把这篇文章作为你是否应该这样做的评论,我只是说这是允许的。:)
编辑:不能从嵌套在其自身中的类型派生,但可以实现声明嵌套在基类型中的接口:
public class Base
{
public interface ISomething
{
}
}
public class Derived : Base, Base.ISomething
{
}
按照你写的方
9.1:MonetaryCoin设计并实现一个名为MonetaryCoin的类,该类源自第5章中介绍的Coin类。储存
MonetaryCoin中表示其值并添加方法的整数
返回其值。添加附加空格的toString方法
然后是硬币的价值,以硬币的字符串表示
司机。不要创建一个主驱动程序类,而是包含一个主驱动程序类
方法来执行该类的
行为。您的方法应该创建一个包含7个MonetaryCoin对象的数组
使用值1,5,10,25,50100100,然后遍历数组,
掷硬币。然后,该方法应该遍历
再次调用
我有一个模型。例如,假设是这样的:
class my_模型(models.model):
_name='my.model'
field1=fields.Char('name')的名称
它有树视图和窗体视图。两者都能正常工作
现在我创建了新模型,复制了旧模型:
class my_model_模板(models.model):
_name='my.model.template'
_inherit='my.model'
现在,直到这一部分,一切都很好。它复制了旧模型的所有内容。但是说到风景
因此,
在其他OOP语言中,以下是一种常见的抽象形式
class AbstractClass
myVar: null
@doSomething: ->
console.log myVar
class Child extends AbstractClass
myVar: 'I am a child'
调用Child.doSomething()时应打印“我是个孩子”。
我还应该能够将Child.doSomething作为回调传递,并将其打印出来。我尝试了with或w/o@的所
我已经为工资单安装了模块考勤摘要,我得到以下信息
错误:
请帮助我,谢谢你的帮助。该视图中不存在该按钮。编辑该视图并在数据标记后尝试此操作:
<field name="contracts_count" position="replace">
<button name="%(hr_contract.act_hr_employee_2_hr_contract)d" string="Contracts" type="action" groups="base.group_hr_
我正在制作一个todo列表,其中可以包含类型a或类型B的项目。因此,我制作了一个类型为Item,即a或B。该模型包含一个ItemModel列表和一个整数,我们使用该整数为每个待办事项分配一个id
module Feed where
import A
import B
-- MODEL
type Item = A | B
type ItemModel = A.Model | B.Model
type alias Id = Int
type alias Model =
{ tod
我试图在Kotlin中为父类和子类实现最简洁的组合
这就像我的课一样
sealed class Parent {
open val attribute : String = "initial value"
}
data class Child (
override val attribute: String
) : Parent ()
如果构造函数子()为空,我希望将属性值设置为“初始值”
如果希望子对象是其他对象(不等于“初始值”),我希望有机会通过构造函数设置它的属性值
在Kotl
我将使用Odoo中的inherit在res.users模型中添加一个性别字段,但是无论我做什么,都会得到一个内部服务器错误,请帮助我。提前谢谢
Python代码:
来自odoo导入模型、字段的
类UsersInherit(models.Model):
_继承=“res.users”
x_gender=fields.Selection(string=“gender”,required=True,Selection=[(“男”、“男”),(“女”、“女”)]))
XML代码:
erfan.use
同样,我有一个EclipseLink 2.3编组用例,它看起来很琐碎,但并没有按照预期工作:
我有一个抽象基类,它定义了一个属性getX()。我有几个从这个基类派生的子类继承了这个属性
在封送子类时,也会为每个子类封送此属性。但是,对于一个特定的子类,我希望阻止此属性的封送
我试过:
@Override在子类中重写此属性并将其设置为@xmltransive
在oxm.xml中为子类指定
这两种方法都是无效的,属性总是被编组-这应该如何工作?好的,我就是这样解决的:
使抽象基类@xmltransi
我有一个IDataControl接口:
public interface IDataControl
{
...
}
panel.Controls.Add(items[i]);
然后,我有一个具有列表变量的类。
IDE告诉我“最好的重载方法匹配……”,因为“IDataControl”不是从“Control”继承的。
我理解错误,现在我可以做一些铸造,如:
panel.Controls.Add( (Control)items[i] );
但是,我想知道是否有一种“更干净”的
我使用的是继承原则2.1:
Fiche是主实体
而艺术家是从菲希衍生出来的
所以:菲希->艺术家
然后我在另一个名为Abonnement的存储库中使用了这个方法:
public function getCountAbonnes(\MyApp\FicheBundle\Entity\Fiche $fiche){
$qb = $this->_em->createQueryBuilder();
$qb->add('select', $qb->expr()-&g
我有:
我得到以下输出:
A ()
B (<class '__main__.A'>,)
C (<class '__main__.B'>,)
A()
B(,)
C(,)
但我希望:
A ()
B (<class '__main__.A'>,)
C (<class '__main__.B'>, <class '__main__.A'>)
A()
B(,)
C(,)
哪里出错?base参数列出了类定义中列出的基类
看起来你想要:
谢谢
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 34 页