IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Programmation orientée Aspect [Débutant(e)]


Sujet :

avec Java

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut Programmation orientée Aspect
    Bonjour,
    j'essaie de comprendre la programmation orienté aspect en java, mais est-ce que quelqu'un pourrait m 'expliquer en quoi ça consiste et si c'est souvent appliqué dans les applications n-tiers de nos jours?
    je vous remercie d'avance
    prugne.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Points : 89
    Points
    89
    Par défaut
    C'est un concept casse-gueule très puissant.

    ça permet d'instrumentaliser du code déjà compilé pour modifier son comportement.

    .java -[compilation]-> .class -[aspect]-> .class instrumentalisé

    L'utilisation la plus courante est de récupérer un ensemble de méthodes (en spécifiant une expression régulière sur leur signature) et ajouter un traitement avant chaque appel de ces méthodes, ajouter un traitement après chaque appel de ces méthodes et même.... remplacer l'exécution de la méthode par autre chose...

    Personnellement, je l'ai déjà utilisé pour faire des tests de perfs:
    - par expression régulière, je chope toutes les méthodes **.*(*) ou un truc du genre
    - avant chaque appel de méthode, je déclenche un chrono
    - après chaque appel de méthode, j'arrête le chrono et je logge le résultat

    ça peut aussi être utilisé pour sécuriser tes requêtes SQL (pour ouvrir automatiquement une transaction avant chaque requête et fermer la transaction après chaque requête). Dans ce cas d'utilisation, c'est complètement foireux une très mauvaise pratique.

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut ok merci
    Donc finalement c'est pas très fiable et faut donc éviter de l'employer?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Bonjour,

    C'est un concept assez complexe à comprendre.
    En expliquant simplement :
    En programmation normale, tu développes des modules techniques ou fonctionnels qui s'appel l'un l'autre pour réaliser une tâche bien précise :
    Par exemple tu vas construire une connection jdbc, puis exécuter un ordre SQL et traiter le résultat dans du code métier.

    En programmation aspect tu te concentres uniquement sur le code métier. La séquence technique pour faire le traitement est définie par configuration dans le framework que tu vas utiliser. Tu lui donnes uniquement les 'jointpoint' pour faire le lien entre ton code métier et l'aspect.

    Le gros point fort est la ré-utilisabilité du code, l'inconvénient est le debuggage des kilomètres de fichier xml de configuration.


    Bon courage,

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 383
    Points : 468
    Points
    468
    Par défaut
    Moi je dirais que la programmation par Aspect peut être très utile pour gérer les "problèmatiques transverses" à une application.
    Par exemple les logs (écrire dans un fichier le temps d'exécution de toutes les méthode qui ont pour nom service*), la sécurité (afficher une mire si l'utilisateur ne s'est pas authentifié pour toutes les méthodes qui s'appellent action*), la gestion des transactions (Spring s'appuie sur des aspects).
    chaque fois que tu vas te dire "j'aimerais exécuter ce bout de code avant ou après telle ou telle méthode", alors plutôt que de copier-coller du code partout, tu le mets à un seul endroit (donc facilement modifiable) et tu dis "exécute-toi avant tel type de méthode".

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Points : 89
    Points
    89
    Par défaut
    Je ne dis pas que c'est pas fiable, c'est même très puissant. C'est juste une question de cas d'utilisation.

    L'inconvénient majeur d'un aspect est qu'il est difficile d'en mesurer l'impact. Il se peut même que, à cause de l'aspect, le code Java ne corresponde pas du tout à ce qui sera effectivement exécuté (dans le cas d'un aspect qui vient remplacer un appel de méthode).

    => Il ne faut pas utiliser les aspects pour les processus critiques de l'application. Il est même préférable que l'aspect ne change pas du tout le comportement de ton appli mais serve uniquement à ajouter des points de mesure.

    Pour moi, le bon cas d'utilisation, c'est d'utiliser les aspects à des fins d'instrumentalisation temporaire, pour mener des analyses.

  7. #7
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par slevy Voir le message
    chaque fois que tu vas te dire "j'aimerais exécuter ce bout de code avant ou après telle ou telle méthode", alors plutôt que de copier-coller du code partout, tu le mets à un seul endroit (donc facilement modifiable) et tu dis "exécute-toi avant tel type de méthode".
    comme je n'ai pas le temps de me taper toute la doc d'AspectJ quelqu'un pourrait me donner un lien pour faire ça dynamiquement.
    J'ai des codes Java et quand ils se présentent pour être exécuté je glisse un code avant et un code après (c'est pour des tests).
    Donc: j'écris des code pour l'avant et l'après et je veux que ces codes soient "glissés" au moment de l'exécution pour des méthodes que je désigne.
    merci pour tout lien. (précision ces descriptions de choses à faire sont en Groovy)
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  8. #8
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    comme je n'ai pas le temps de me taper toute la doc d'AspectJ quelqu'un pourrait me donner un lien pour faire ça dynamiquement.
    J'ai des codes Java et quand ils se présentent pour être exécuté je glisse un code avant et un code après (c'est pour des tests).
    Donc: j'écris des code pour l'avant et l'après et je veux que ces codes soient "glissés" au moment de l'exécution pour des méthodes que je désigne.
    merci pour tout lien. (précision ces descriptions de choses à faire sont en Groovy)
    T'aurais pas mentionné Groovy, je t'aurais orienté vers ça : http://blog.xebia.fr/2008/05/02/java...z-vos-classes/
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  9. #9
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Jimmy_ Voir le message
    Bonjour,

    C'est un concept assez complexe à comprendre.
    En expliquant simplement :
    En programmation normale, tu développes des modules techniques ou fonctionnels qui s'appel l'un l'autre pour réaliser une tâche bien précise :
    Par exemple tu vas construire une connection jdbc, puis exécuter un ordre SQL et traiter le résultat dans du code métier.

    En programmation aspect tu te concentres uniquement sur le code métier. La séquence technique pour faire le traitement est définie par configuration dans le framework que tu vas utiliser. Tu lui donnes uniquement les 'jointpoint' pour faire le lien entre ton code métier et l'aspect.

    Le gros point fort est la ré-utilisabilité du code, l'inconvénient est le debuggage des kilomètres de fichier xml de configuration.


    Bon courage,
    Je reviens sur ton explication donc la programmation par aspect est utilisable par tout les frameworks?
    je comprends un peu le fonctionnement mais purement technique...je vois difficilement le concept..
    en gros c'est pas comme les annotions en java ou tu dis fais des traitements avant et des traitements après sur un objet donné?

  10. #10
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut question Framework
    pour faire du AOP, il faut soit utiliser spring AOP ou AspectJ, je suppose?

Discussions similaires

  1. [AOP] programmation orientée Aspect en PHP
    Par anaon dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/06/2012, 14h08
  2. Programmation Orientée Aspect - votre avis
    Par Alec6 dans le forum Débats sur le développement - Le Best Of
    Réponses: 70
    Dernier message: 09/07/2009, 11h19
  3. [POO] Programmation Orientée Aspect
    Par Ethylene dans le forum Langage
    Réponses: 13
    Dernier message: 23/03/2006, 10h56
  4. [AspectJ] programmation orientée aspect
    Par soeursourire dans le forum Autres
    Réponses: 6
    Dernier message: 11/02/2006, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo