## Merci Ces diapos sont inspirés de ceux de - Anne Etien - Nicolas Anquetil
## Plan - Pharo - Visualisation (Mondrian) - Famix (Moose) - Exemple - Qualité Logicielle - Interface Graphique
## Pharo ?
### Messages - Unary - Sans argument - Binary - Avec un seul argument - Keywords - Avec un ou plusieurs arguments
### From Java to Pharo ```java String function(int param1, int param2){ this.otherFunction(param1, param2); return "Hello World"; } ```
### From Java to Pharo ```st String function int param1 int param2 this otherFunction param1 param2 return "Hello World" } ``` > Enlever parenthèses, point, virgule, point-virgule
### From Java to Pharo ```st function param1 param2 this otherFunction param1 param2 return "Hello World" ``` > Enlever les indicateurs de types
### From Java to Pharo ```st function param1 param2 self otherFunction param1 param2 ^ 'Hello World' ``` > Remplacer par la nouvelle syntaxe this → self return → ^ "" → ‘’
### From Java to Pharo ```st function: param1 with:param2 self otherFunction: param1 with: param2. ^ ‘Hello World’ ``` > Ajouter mot-clefs pour les fonctions et les points en fin de lignes
### Résultat ```java String function(int param1, int param2){ this.otherFunction(param1, param2); return "Hello World"; } ``` ```st function: param1 with:param2 self otherFunction: param1 with: param2. ^ ‘Hello World’ ```
### Résumé - Enlever parenthèses, points, virgule, point-virgule - Enlever les indicateurs des types - Remplacer par la nouvelle syntaxe - Ajouter mot-clefs pour les fonctions et les points en fin de lignes
## Visualisation ---- #### L'outil Mondrian
### Créer une view ```st view := RTMondrian new ^ view ```

Disposer les éléments

Forme des liens

```st view := RTMondrian new. view nodes: { 1. 2. 3. 4. 5. }. view shape line arrowedLine shape head baseSize: 5.0; size: 8. view edges useAssociations: { 1->2. 3->2. 4->3. 5->3 }. view layout tree. ^ view ```

Forme des noeuds

```st view := RTMondrian new. view shape circle color: Color red. view nodes: { 1. 2. 3. 4. 5. }. view shape line arrowedLine shape head baseSize: 5.0; size: 8. view edges useAssociations: { 1->2. 3->2. 4->3. 5->3 }. view layout tree. ^ view ```
## Famix Model ---- #### Java
## Qualité Logicielle ---- #### RCA

Que pouvons nous etudier ?

- Nb de packages - Nb de classes - Nb de méthodes - Nb d'attributs - Code Mort - Tests - Méthodes dépréciées - Complexité cyclomatique
- Hierarchie de package - Diagramme de classes - Cycles entre packages - Répartition classes/package - God classes (LOC et nb de méthode) - Lazy classes (LOC et nb de méthode)
## Import ```st mooseModel := FamixJavaModel importFromMSEStream: msePath asFileReference readStream. mooseModel rootFolder: rootFolderPath. mooseModel name: 'rca'. mooseModel install. ```
## Paquetages/Classes/Méthodes ```st mooseModel allModelNamespaces. mooseModel allModelClasses. mooseModel allModelMethods. mooseModel allX ```
## Compter le nombre d’éléments ```st "Nombre de classes" mooseModel allModelClasses size. "180" "Nombre de lignes de code" mooseModel allModelClasses sum: #numberOfLinesOfCode. "11613" "Nombre de lignes de code - aussi" mooseModel allModelClasses sum: [ :class | class numberOfLinesOfCode]. "11613" ```
## Chercher des annotations ```st "Sélectionner les classes avec une annotation" mooseModel allModelClasses select: [:class | class annotationInstances isNotEmpty ]. "Sélectionner les classes dépréciées" (mooseModel allModelClasses select: [:class | class annotationInstances isNotEmpty and: [ class annotationTypes anySatisfy: [:type | type name = 'Deprecated' ]]). ```
## Relations classes/paquetages ```st | b | b := RTMondrian new. b shape rectangle. b nodes: model allModelNamespaces forEach: [ :p | b nodes: p classes. b edges connectFrom: #superclass. b layout tree ]. b edgesFrom: #parentScope. b layout tree. b build. ^ b view ```
## GUI Example ---- #### oui oui, c'est mon travail
### Visualiser une UI ```st | b | b := RTMondrian new. b shape circle color: [ :cl | cl color ]. b nodes: (aBLModel allBLWidget , aBLModel allBLService) asSet asOrderedCollection. (b shape line arrowedLine headOffset: 1.0;) shape head baseSize: 5.0; size: 8. b edges useAssociations: (aBLModel allBLWidget collect: #allAssociations) flatten. b layout force strength: 0.4. b view pushBackEdges. ^ b ```