Question

Y at-il une raison particulière je déclarer une classe ou une finale de méthode dans la programmation au jour le jour (Web ou autre)? S'il vous plaît donner un exemple dans le monde réel où il doit être utilisé.

BTW, je demande parce que je suis en train de choisir un mot-clé 'obscure' et maîtriser .

Était-ce utile?

La solution

Il empêche les autres programmeurs de faire des choses avec vos classes que vous ne comptez pas pour eux de le faire. Ainsi, plutôt que de faire un commentaire disant « ne pas utiliser cette classe pour faire XXX », vous pouvez le concevoir de telle sorte qu'ils ne seront pas tentés de passer outre et abuser de cette manière.

Modifier : Comme un exemple est demandé, je vais vous décrire un cas où vous pourriez trouver ce mot-clé à portée de main ... que vous avez une classe qui définit la façon dont deux objets peuvent communiquer entre eux, dire, un écouteur et notificateur. La classe auditeur doit évidemment permettre à l'héritage, mais vous voudrez peut-être la finale de la classe de notification afin qu'il doit être utilisé dans un « a-une » relation. De cette façon, vous pouvez faire quelques hypothèses à partir des objets de votre auditeur sur la nature des messages qu'ils reçoivent.

Dans le cas contraire, il serait possible d'hériter de cette classe, faire toutes sortes de choses folles comme les messages et étendre ainsi de suite. Si vous ne voulez pas d'autres programmeurs de le faire, alors vous pourriez faire la classe finale. En outre, cela pourrait faire beaucoup plus de sens dans une API publique largement utilisée, car elle permet également d'autres programmeurs de comprendre facilement quelles sont les classes à la sous-classe ok.

Un autre exemple - que vous avez un processeur de flux à base de tampon, et à l'intérieur de votre méthode de lecture () / write (), vous conservez des données sur l'état actuel de votre objet (par exemple, l'octet courant ou autre) . Il n'y a aucun moyen de garantir que toute personne cette classe sous-classement appellerait au cours du traitement des méthodes de la super - et étant donné qu'une telle classe ne contient probablement quelques méthodes, il est préférable de simplement faire la chose finale au lieu de chaque méthode. Cela force à nouveau les personnes qui utilisent la classe « a-un » non « est-un », et donc, peut contrôler la façon dont vous attendez le code sera exécuté.

Je suis d'accord avec vous que faire un ensemble class finale est probablement quelque chose que vous auriez besoin de faire une fois dans une lune bleue, mais il est bien que PHP a cette capacité si vous choisissez de exercer.

Autres conseils

"Faire respecter la composition sur l'héritage" met plutôt succinctement . Vous garantissez un certain comportement d'autre classe que rien ne peut interférer avec, qui, comme la section suivante explique, peut avoir des avantages de sécurité aussi bien.

Certaines personnes prétendent que vous devez déclarer tous classes finales à moins que vous avez l'intention spécifiquement pour permettre, et ont examiné les implications de, l'extension polymorphes de celui-ci. J'ai tendance à se sentir cela implique beaucoup de méfiance à l'égard de quiconque d'autre travaille avec votre code, mais malheureusement, c'est parfois justifiée.

Dans de nombreuses langues, déclarant une classe finale offre également des avantages d'optimisation, car il n'a pas besoin de regarder la table de virt pour les méthodes.

Si vous voulez faire respecter l'intention de la classe, et l'intention est telle qu'elle n'a pas de sens de la sous-classe, puis utilisez finale; sinon, il n'y a aucun avantage significatif.

En général, il est juste un mécanisme pour l'application de l'intention.

Une classe finale est une classe qui ne peut pas être sous-classé, donc tout ce que vous ne voulez pas avoir des dérivés créés de. Par exemple, en Java, la classe Math est définitive puisque Java ne veut pas que vous soyez en mesure de redéfinir ce que signifie la valeur absolue.

final (et scellé dans c #) pourrait être utilisé (par les concepteurs de bibliothèques de classe) pour appliquer un comportement de base d'une classe.
Par exemple appliquer que la chaîne a un comportement immuable
La classe de chaîne en java est marqué finale et en c # est marqué scellé.
Toutes les chaînes sont immuables et que le comportement ne peuvent pas être modifiés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top