GenieLog2017/Cours1&2.md
2018-03-09 15:57:44 +01:00

6.8 KiB


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 <int abs, int ord> Cercle <Point centre, double rayon>

    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; i<b; i++){
      	      p+=a
      }
  }

Le code interne ne concerne pas le client : le encapsulation

  • { \leftarrow }
  • si homonyme l'interne masque l'externe

8- Portée

int ajoute(int a, int b){
	int somme;
somme+=a;
somme=somme+b;
return somme;
}
Si une seule ligne, pas besoin d'acolades

int calcul(){
	if(somme>10){
	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
}