Question

Je lis à propos de DBC ( http://en.wikipedia.org/wiki/Design_by_contract ) Quelqu'un peut-il s'il vous plaît me donner un exemple simple d'utilisation invariants de classe par rapport à l'héritage?

Était-ce utile?

La solution

Conception par des concepts de contrat se complique un peu quand ils sont adaptés aux langages orientés objet.

Un invariant de classe est une propriété que chaque instance de la classe est garanti d'avoir lorsqu'une méthode est appelée (comme une condition préalable commune pour toutes les méthodes), et que, en retour chaque méthode et le constructeur doit veiller à ce reste vrai quand ils fin (comme un post-condition commune).

Ils sont bons pour exprimer des conditions de cohérence. Une classe de Wallet qui modélise un porte-monnaie réelle pourrait avoir la classe invariant que la quantité contenue est toujours positif.

invariants de classe, comme le reste du contrat, sont hérités. De nouvelles implémentations de méthodes doivent fournir les mêmes garanties que les méthodes qu'ils remplacent.

Autres conseils

Dans la classe héritée, les invariants doivent être au moins aussi stricte , mais peuvent être plus strictes . Si un invariant est omis dans une classe dérivée, les invariants de la classe de base appliquent bien sûr.

par exemple:

// Class invariant : sum should be > -1000
Account { public int sum; }

// Class invariant : sum should be >= 0
AccountForKids : inheritsFrom Account { public int sum; }

Le compte pour les enfants ne doit pas aller au-dessous de zéro, mais bien sûr, est plus grand que -1000.

En général:. Le contrat d'une classe dérivée est toujours hounoured lorsque les invariants de classe deviennent plus strictes

Un invariant de classe dérivée doit:

  • Vérifiez les invariants de toutes les variables membres introduites dans la classe dervied
  • Vérifier l'invariant de la classe de base
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top