concept Entity > NamedConcept { } abstract concept AbstractJavaObjectEntity > Entity { abstract A object(); toString { S s = super.toString(); O o = object(); if (o != null) s += " " + str_pcall(o); ret s; } } concept TransientJavaObjectEntity > AbstractJavaObjectEntity { gettable transient A object; } concept PersistentJavaObjectEntity > AbstractJavaObjectEntity { gettable A object; } concept ConceptEntity extends AbstractJavaObjectEntity { new Ref concept; *(A concept) { this.concept.set(concept); } A object() { ret concept!; } }