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
}