2017-10-18 16 views
1

Je me demande si elle est Modelica se conformer à étendre un modèle à partir d'un modèle remplaçable imbriqué, par exemple dans l'exemple particulier:étendez une classe d'une classe remplaçable nichée dans Modelica

package ReplaceableBaseClass 
    model ExampleUseReplaceable 
    ModelWithReplaceableExtend replaceableExtend1(
     redeclare model LocalModelBase = Extend1, 
     input1 = time) 
     "Instance with one input and one output"; 
    ModelWithReplaceableExtend replaceableExtend2(
     redeclare model LocalModelBase = Extend2, 
     input1 = Modelica.Math.sin(4*time + 0.3)) 
     "Instance with one input and two output"; 
    end ExampleUseReplaceable; 

    model ModelWithReplaceableExtend 
    "Model which extends from its nested replaceable class" 
    extends LocalModelBase; 
    replaceable model LocalModelBase = Extend1 
     constrainedby PartialToBeExtended; 
    end ModelWithReplaceableExtend; 

    partial model PartialToBeExtended 
    input Real input1; 
    output Real output1; 
    end PartialToBeExtended; 

    model Extend1 
    extends PartialToBeExtended; 
    equation 
    output1 = 3*input1; 
    end Extend1; 

    model Extend2 
    extends PartialToBeExtended; 
    output Real output2; 
    equation 
    output1 = input1 + 0.2; 
    output2 = input1 * input1; 
    end Extend2; 
end ReplaceableBaseClass; 

Cela fait fonctionne Dymola mais je avoir un sentiment étrange à ce sujet et je ne sais pas si c'est vraiment une bonne idée de l'utiliser.

Répondre

1

Ce n'est pas légal Modelica (depuis Modelica 3.0), et Dymola généreront un diagnostic (mais juste un avertissement) depuis 2017. Dymola

La restriction Modelica est qu'une classe de base doit être transitive non remplaçable (sections 7.1.4 et 6.2.1).