Que signifie “contrat” d'une classe moyenne
Je suis en train de lire le livre Le Langage De Programmation Java. Dans le chapitre qui explique primordial méthode, il dit:
Faire un remplacement de la méthode (sous-classe) de moins en moins accessible qu'il ne l'était en super classe serait violer le contrat de la super-classe ...
L'ensemble du texte est compréhensible. Ma seule question est qu'est-ce que contrat de la super-classe? Ce qui ne l' contrat moyenne pour un Java classe?
- Voir design by contract Wikipédia et sur c2.com.
Vous devez vous connecter pour publier un commentaire.
Un contrat dans une classe Java est similaire à un contrat dans le monde réel, En termes non techniques:
C'est un accord que la classe d'exposer certaines méthodes, certaines propriétés et certains comportements.
Plus technique, à partir de ici: (caractères gras ajoutés par moi)
Contrat de type (classe, interface, enum) est l', bien, le contrat ce type de promesses de respecter. Il déclare:
addData(float)
deMathAverage
classe qui calcule la moyenne, c'est la saisie de l'état que chaque fois que votre appel àadd(float)
est de retour, vous attends appel àMathAverage.getAverage()
pour revenir moyenne correcte de l'entrée de courant.Contrat est spécifié sous forme libre dans la javadoc de type. Il y a quelques outils/pratiques à appliquer à l'exécution de contrats, mais elles sont limitées, précisément parce que le contrat peut être arbitraire, ou, même, l'auto-contradictoire, en cas d'erreur du programmeur.
Depuis le sous-typage(sous-classement) peut s'étendre/modifier le comportement de supertype méthodes d'arbitraire, il peut, ainsi, d'enfreindre certaines parties de supertype du contrat. Exemple de ceci serait l'extension de
HashMap
, qui acceptenull
valeurs et les touches, avec certains de la mise en œuvre, qui interditnull
valeurs dans les appels de méthodes.Autre aspect important sur le type de contrat est que le sous-type peut avoir plus contrat (couvrant le sous-ensemble de contraintes du type de contrat), mais ne peut pas avoir plus faible contrat (couvrant sur-ensemble de contraintes du type de contrat).
Par exemple, si votre type de méthode 'doX(n)' promet de prendre
O(n)
(linéaire) de temps", doX(n)' dans le sous-type peut prendreO(1)
(constante) de temps, mais ne peut pas prendreO(n^2)
temps.Une classe de "Contrat" est-il de l'interface publique ou, au moins, l'interface présente à des catégories autres que lui-même.
Cela signifie qu'il inclut tous les éléments (méthodes, champs, constructeurs, etc.) que autres classes pouvez utiliser.
Cela signifie que la méthode de remplacement d'une méthode sur un parent de la classe ou de l'interface doit se comporter de la façon dont le contrat définit.
Sinon, le résultat est indéfini.
Il y a beaucoup de principes que vous devez vous conformer à la programmation en java, ou dans tous les langages de programmation. Les principes dépendent du langage de programmation que vous utilisez. Vous pouvez en savoir plus sur le contrat de La conception par contrat page wikipedia
en termes simples, cela signifie que vous briserait les conditions de la superclasse si u s'code de déblocage moins accessible
C'est une expression qui vient de l'idée de contrats dans le "monde réel".
En gros, si vous rompez votre contrat avec une classe, alors il n'est pas nécessaire de se comporter de la façon dont vous pourriez vous attendre. De l'autre direction, c'est une promesse de la classe que si vous suivez les règles qu'il énonce, il va se comporter de la façon dont son API dit.
Un exemple commun d'un contrat en Java est primordial
equals()
quandhashCode()
est remplacée. Deux objets qui sont considérés comme égaux doivent, par contrat, ont le même code de hachage. Il est possible d'écrire du code qui est syntaxiquement correct qui ne respecte pas cela, mais il pourrait ne pas fonctionner correctement, et c'est la faute du programmeur qui a rompu le contrat.Le contrat d'une classe ou d'une interface en Java ou tout autre langage OO, fait généralement référence à l'exposé publiquement les méthodes (ou fonctions) et les propriétés (ou champs ou attributs) de l'interface de classe de avec des commentaires ou des documents qui s'appliquent à ces publics des méthodes et des propriétés.
Dans le cas de la relation entre une classe et sous-classe, tout protégé des méthodes ou des propriétés doit être considéré comme "exposés publiquement," dans le sens où ils sont exposés à la sous-classe.