Question

Est-ce que System.out.println violent la loi de Déméter?

Si non, pourquoi?

Était-ce utile?

La solution

Selon le point de vue.

LOD: Oui, car il utilise la console. Sous LOD vous ne pouvez pas supposer l'accès.

LOD-F: Oui, car il utilise plus d'un point. La LOD-F indique que, dans toute l'utilisation de la méthode que l'objet peut connaître la structure interne de lui-même. IE

System.out.println() 

exige une connaissance de la structure du système (qu'il a .out) pour atteindre println (),

Pour le système de ne pas casser LOD-F, il devrait être

System.println()

Pour briser les règles formelles vers le bas avec par exemple, println () (la méthode) peut seule:

    système
  1. se
  2. println () 's paramètres
  3. aucun objet créé / instanciée à l'intérieur de println ()
  4. objets composants directs du système
  5. une variable globale, accessible par le système, dans le cadre de println ()

(je sais, il est une référence ici inversée que le code devrait être la méthode d'appel, mais il oscille en fait dans les deux sens.)

Autres conseils

System.out est en fait un « état global », et oui, techniquement, il viole la « loi de Déméter ». Mais:

  • vous devriez éviter d'utiliser System.out.println(..). Utilisez un enregistreur (log4j, logback, slf4j) à la place.
  • vous ne sont pas censés compter (et test) tout ce qui est dans le but de l'exploitation forestière à une console. (Cela ne les systèmes d'exploitation concernent complexes qui regroupent plus tard les informations enregistrées)

Je dirais pas vraiment, car il appelle Object.toString() et ne pas deux étroitement avec une classe de quelque façon; il dit simplement l'objet de se convertir en une chaîne.


Edit:

Si vous voulez dire l'appel lui-même, plutôt que ce qui se passe dans l'appel, alors je dirais que oui, il le fait, car il étroitement couples votre programme sur le terrain de System.out.

Il brise la loi, car il utilise « plus d'un point », et expose le fait qu'il utilise un autre objet pour l'appel println.

Non.

System.out est une variable globale.

  

Plus formellement, la loi de Déméter pour les fonctions exige qu'une méthode   m d'un objet O ne peut invoquer les méthodes des types de suivants   Objets: [2]

     
      
  1. O lui-même
  2.   
  3. paramètres m
  4.   
  5. Tous les objets créés / instancié dans les m
  6.   
  7. O objets composante directe
  8.   
  9. Une variable globale, accessible par O, dans le cadre de m <- Celui
  10.   

- Wikipedia

Par la règle 5, vous pouvez invoquer toute méthode de la System.out variable globale à partir de tout contexte.

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