403 lines
6.8 KiB
Markdown
403 lines
6.8 KiB
Markdown
![]() |
---
|
||
|
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
|
||
|
}
|
||
|
|