J'ai recherché le sujet sur Google, mais à part Wikipédia, je n'ai pas trouvé de documentation ou d'articles utiles.
Quelqu'un peut-il m'expliquer en termes simples ce que cela signifie ou me référer à une documentation agréable et facile à comprendre?
java
terminology
invariants
Saurabh Kumar
la source
la source
Réponses:
Cela ne veut rien dire en particulier en référence à java.
Un invariant de classe est simplement une propriété qui s'applique à toutes les instances d'une classe, toujours, peu importe ce que fait un autre code.
Par exemple,
X a l'invariant de classe qu'il y a une
y
propriété et ce n'est jamaisnull
et il a une valeur de typeY
.ne parvient pas à maintenir deux invariants importants
count
ne renvoie jamais une valeur négative en raison d'un éventuel dépassement inférieur.count
sont en augmentation strictement monotone.La classe modifiée préserve ces deux invariants.
mais ne parvient pas à conserver l'invariant qui appelle à
count
toujours réussir normalement (absence de violations TCB † ) car ilcount
peut lever une exception ou bloquer si un thread bloqué possède le moniteur du compteur.Chaque langage avec des classes facilite la gestion de certains invariants de classe mais pas d'autres. Java ne fait pas exception:
private
champs, les invariants qui reposent sur des données privées sont donc faciles à gérer.null
valeurs de se faufiler de plusieurs façons, il est donc difficile de maintenir des invariants «a une valeur réelle».† - Une externalité ou une violation TCB est un événement dont un concepteur de systèmes suppose avec optimisme qu'il ne se produira pas.
En règle générale, nous sommes convaincus que le matériel de base fonctionne comme annoncé lorsque nous parlons des propriétés des langages de haut niveau construits sur eux, et nos arguments que les invariants tiennent ne prennent pas en compte la possibilité de:
setAccessible
pour modifierprivate
les tables de recherche.Pour certains systèmes, notre TCB peut n'inclure que des parties du système, nous ne pouvons donc pas supposer que
mais nous pourrions supposer que
Plus un système est de niveau supérieur, plus son TCB est généralement grand, mais plus les choses que vous pouvez retirer de votre TCB sont peu fiables, plus vos invariants sont susceptibles de tenir et plus votre système sera fiable à long terme.
la source
count
ne renvoie jamais deux fois la même valeur" est vraiment considéré comme un invariant de classe?Invariant signifie quelque chose qui devrait respecter ses conditions, quels que soient les changements ou quiconque l'utilise / le transforme. C'est-à-dire qu'une propriété d'une classe remplit ou satisfait toujours une condition même après avoir subi des transformations à l'aide de méthodes publiques. Ainsi, le client ou l'utilisateur de cette classe est assuré de la classe et de sa propriété.
Par exemple,
la source
Ce sont des faits qui doivent être vrais sur une classe d'instances. Par exemple, si une classe a une propriété X et que l'invariant peut être X doit être supérieur à 0. À ma connaissance, il n'y a pas de méthode intégrée pour maintenir les invariants, vous devez rendre les propriétés privées et vous assurer que vos getters et setters appliquent la propriété d'invariance.
Il existe des annotations disponibles qui peuvent vérifier les propriétés à l'aide de la réflexion et des intercepteurs. http://docs.oracle.com/javaee/7/api/javax/validation/constraints/package-summary.html
la source