--- title: "Génie logiciel, Séance 1 et 2" author: [SCHINDLER Hugo] date: \today titlepage: true ... \newpage # Introduction ## Génie logiciel **Génie**: ensemble d'activités de conception et de mise en oueuvre des produits et des procedures tndant à rationaliser la production du logiciel de son suivi **Projet final**: logiciel **Procedure**: pour rationaliser dvp Schéma 1 ## Java Pas de J2E, ni d'application rézo, ni multisclalait, ni de graphisme. ## Compétances - Analyse système - Modélisation sous objet - Communication standart - Apprendre à se servir d'un IDE : Eclipse - Design Patern : solution standart à des problèmes récurrents ## Java impératif TD1 sur machine pour séance 1 et 2 Notation UML ### Language compilé Code source compilé, traduit en language machine : compilateur qui optimise en fonction de la machine cible Languages compilés : C, C++, Pascal Le code source est traduit en language machine Avantages : - protection des sources - performances (traduction optimisation par rapport à la cible Incovénients : - Pas portable : recompiler pour chaque cible - modif du code source $\rightarrow$ recomplier ### Language interprétés Python Traduction d'une ligne du language source au moment de l'exécution Avantages : - modif de code : pas besion de recompiler - protable Incovénient : - lent : que le lg (language) compilé - code source fournit au client ### java "semi-compilé" Code source (prog.java) $\Rightarrow$ compilo $\Rightarrow$ byte code (prog.class) $\Rightarrow$ JVM (interpréteur) $\Rightarrow$ exécution Exemple : progCour1.java indentation non obligatoire Compilateur : javac progCour1 Execution : java progCour1 println print("\n") Erreur de compilation : manque de point virgule ## Environement de développment intégré IDE : masque ces étapes, il le fait pour nous Eclipse Work space à surveiller Code source dans un répertoire java Nouveau fichier : new class CTRL espace complétion automatique Pliage du code, auto génération (on écrit que la moitié) ## Syntaxe JAVA ### 1-Déclaration des variables type nom; - debut lettre - a-z, A-Z, 0-9, pas de caratères spéciaux Convention: nombreEleve : notation Chamau Kamel case Sauf si constante initialisation à zéros par défaut #### Type - Primitifs - boolean - char - entier - byte (1 octet) - short(2 octets) - int (3 octets) - long (4 octets) - flottant - float (4 octets) - double (8 octets) -Non primitifs - N upplet des primitifs - structure - string type Point Cercle int nombreEleve Point p1 cercle c Schéma 2 Tableau ensenble fini d'éléments du même type : déclaration type[] nom ### 2-Création pour les non primitifs int[] notes; // déclaration notes = **new** int[4]; //création **Commentaire** // ou /* notes */ Schéma 3 Point p; // déclaration /* ci dessus création du point */ p=new Point(4, 3); // ou 1 seule ligne Point p1=new Point(4, 3); Schéma 4 ### 3-Affectation/Accès Attention aux Classe Structure avec majuscule Schéma 5 int age; age=20; int[] notes= new int[4]; notes[1]=18; Point p1=new Point(4, 3); p1.abs=5 // nom de l'objet puis de l'attribut Cercle c=new Cercle(); c.centre=p1; p1.ord=6; c.centre.ord//ordonnée du centre du cercle c class Exo1{//Schéma mémoire 6 public static void main(String[] toto){ int[] tabA = new int[] {2, 4, 8}; // c'est la même chose que tabA=new int[3]; tabA[0]=2; tabA[1]=4; tabA[2]=8; int[] tabB=tabA; System.out.print(tabB[2])//affiche "8"; tabB[2]=7; System.out.print(tabA[2])//affiche "7"; tabB[3]=9;//$\rightarrow$ indexof Array out of bound exception int taille = tabA.length; //capacité du tableau pas le nombre d'éléments déjà rangé dedans int[][] g=new int[2][3]; g[0][1]=24; g[1][2]=13; } } ### 4 Typage int i; i=3.5; //"type mismatch" cannot convert from double to int transtypage convertir un type à un autre - sans perte d'information int i=3; transtypage implicite double d=i - avec perte d'information double d=3.5 "cast" int i= (int) d ### 5 Booléens et conditions double moy; boolean estBon = moy>=15; boolean rattrage = moy<8; boolean top = moy==20; * affectation = * test d'égalité == pour les types primitifs int[] tabA= new int[] {3, 4}; int[] tabB= new int[] {3, 4}; boolean b= tabA==tabB;//false zone d'@ différentes boolean b2=tabA[0]==tabB[0];//true if (moy>=15){ System.out.print("bon travail") }else if ((!estbon)&&(!rattrapage)){ System.out.print("peut mieux faire") } && Et paresseux par rapport à & || Ou #### Structures conditionnnelles if (cond){ } if (cond){ action si vrai }else{ action si faux } if (cond1){ action si cond1 vrai }else if (cond2){ action si cond 1 faux et cond 2 vrai }else{ action cond 1 faux et cond 2 faux } switch case fait les suivant si pas de break String categorie = new String(); switch(age){ case 6: categorie="petit poussin"; case 8: categorie="pupille"; case 10: categorie="poussin"; break; default://si aucune case n'est validé categorie="véréran" } ### 6 Boucles while(cond){ action } for(index; conditon de poursuite; incrément) do { action }while(cond); int [] notes = new int[] {10, 17, 15}; int somme=0; for (int i=0; i<3; i++){ somme= somme+notes[i] //somme+=notes[i] } ### 7 méthodes fonction Possède une signature ou un contrat **Signature** : type de retour, nom de la méthode(nom, type et ordre des paramètres) double moyenne(int a, int b, double c) Point[] nuage(); int ajoute(int a, int b){ return (a+b) } int produit(int a, int b){ return a*b //ou alors int p=0; for(int i=0; i10){ return 20; }else{ return 0; } ### 9-Passage de ref Type primitif : on passe la valeur Type non primitif : on passe l'adresse int[] notes=new int[] {13, 15, 17} calcul(notes) Systeme.out.println(notes[0]) void calcul(int[] tab){//on peut déclarer dans l'ordre que l'on veux. tab[0]=20 } int i=100 reduire(i) S.o.p(i)//100 void reduire(int x){ x=5 }