révision des notions oo et java semaine 1 jian-yun nie

44
Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Upload: leonce-dupont

Post on 04-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Révision des notionsOO et Java

Semaine 1

Jian-Yun Nie

Page 2: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Notions de base

• Chaque Variable, Constante (valeur) est typée• Types de bases:

– int, byte, float, boolean, etc.– String, …

• Casting entre types compatiblesdouble balance = 13.75;

int dollars = balance; // Error

int dollars = (int) balance; // OK

long rounded = Math.round(balance); // 13.75 ->14

Page 3: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Comprendre comment ça fonctionne

int a;

a = 10;

int b = a;

a++;

0

int:a

10

int:a

10

int:a

10

int:b

11

int:a

10

int:b

Page 4: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Classe comme type (plus de détails plus tard)

• Type objet défini par le programmeur– Définir une classe (type)– Référence de ce type– E.g. public class Circle {…}

Circle soleil;Rectangle box;

• soleil = new Circle(); //Correct• box = soleil; // Erreur• box = new Circle(); //Erreur

Page 5: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Contrôle du programme

• if condition then statement else statement ;

• while condition statement ;• do statement while (condition); //fait au moins une fois• for (Initialization; condition; update) statement ;e.g.

for (i=1; i<n; i++){

double interest = balance * rate / 100;balance = balance + interest;

}

condition

oui

non

Page 6: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

boolean et test

• Combinaison de conditions (test booléens)– && ET– ||  OU– !   NONe.g. if (0 < amount && amount < 1000) . . .

• Tester la condition la plus exigeante d’abord, ne pas faire des tests redondants– if (amount > 10000000000 || amount < 5000) …– if ((0 < amount && amount < 1000) && amount > 100)

Page 7: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Structure de données de base

• Tableau (Array)• E.g.

double [ ] a = new double[10];

for (i=0; i<10; i++) a[i] = i;

a

0 9

String [ ] [ ] board = new String [3] [4];

board[0] [0] board[2] [3]

Page 8: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

String comme une classe spécialeString s;s = “Hello world!”;

• Méthodes– Length(), – substring(début, longueur), substring(début, fin+1), – compareTo(t) < 0 , equalsIgnoreCase("Y")– …

H e l l o w o r l d !

s

null

référence corps

Page 9: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Classe• Classe = modèle (moule) à objet• Définition d’une nouvelle classe

– Identificateur (nom de classe)– Attributs (ou variables)– Méthodes (dont constructeur)

• E.g.public class Rectangle{

public Rectangle(int x, int y, int width, int height) {

this.x=x; this.y=y; this.width=width; this.height=height;

}int x, y, width, height;public int getWidth() {return width; }

}

Page 10: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Créer des objets d’une classeRectangle box, box1, box2;

box = new Rectangle(5, 10, 20, 30);

box1 = new Rectangle(35, 30, 20, 20); box2 = new Rectangle(45, 0, 30,

20);

Page 11: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Manipulations des objets

• Référer à un attribut (accessible) d’objetbox.x box.y box.width box.height

e.g. box.x = box.x + 1

Page 12: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Manipulations• Différentes références peuvent référer au

même objet:box2 = box;

box2.y ++; box.y =?

Page 13: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Rectangle box = new Rectangle(5, 10, 20, 30);Rectangle box2 = box;box2.translate(15, 25);

(Supposons que la méthode

translate(15, 25) change

X et y par +15 et +25.)

Changements faits sur l’objet

Et non sur la référence.

Page 14: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Comparaison d’objet

• Comparer les référencesbox == box2: les 2 références réfèrent au même objet?box != box2: elles réfèrent aux objets différents?

• Comparer le contenu des objets– définir equals dans la classe – box.equals(box2)

• Des méthodes de comparaisons prédéfinies dans StringString input; …if (input.equals(“You are wright")) …if (input.equalsIgnoreCase("You are wright")) …

Page 15: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Plus sur classe

• Forme générale d’une déclaration de classe:accessSpecifier class ClassName {

constructors methods fields

}• E.g.

public class BankAccount{

public BankAccount(double initialBalance) { . . . }public void deposit(double amount) { . . . }. . .

}

Page 16: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Constructeurs• Constructeur implicite

– public NomClasse ();– Retourne un objet (instance) du type de la classe– Aucun paramètre– Défini si aucun autre constructeur est défini par le programmeur– E.g. public class BankAccount { }

implicitement: public BankAccount();• D’autres constructeurs explicits

– Ne doit pas spécifier le type de retour– Différents constructeurs doivent prendre différents paramètres

(différents types ou différents nombres - signature)– Ne doivent pas avoir de conflit sur la signature (nom + suite des types

de paramètres)– E.g. public BankAccount(String name) {…}

public BankAccount(float amount) {…};– Un constructeur peut utiliser un autre:

public BankAccount(String name) {this(); this.owner = name; …}

Page 17: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Exemples

• public class A { int a; }– new A()?– new A(1)?

• public class A {

public A(int a) {this.a=a;}

int a;}– new A()?– new A(1)?

Page 18: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Attributs (variables)

• Les attributs composent la partie « physique » d’un objet• Il y a une place créée dans un objet pour stocker leur

valeur• Type d’attribut (int, String, … ou une classe)• Protection (public, private, …)

– Plus de détails plus tard

• Syntaxe: accessSpecifier class ClassName { . . .

accessSpecifier fieldType fieldName;. . .

}

Page 19: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Méthodes• Une méthode = une procédure, une action, … définie

dans la classe• Un objet (instance) a une référence vers cette

procédure, ce qui lui permet de l’appeler (exécuter)• Syntaxe:

accessSpecifier returnType methodName(parameterType parameterName, . . .){

method body }

e.g. public void deposit(double amount){

. . .}

Page 20: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

this• Cette référence spéciale permet de référer au même objet à partir

duquel la méthode est appelée (objet courant)• E.g.

public class BankAccount { …

public void withdraw(double amount){

double newBalance = balance - amount;balance = newBalance;

} …public double balance;

}BankAccount moreSavings = new BankAccount (1000);int balance;moreSavings.withdraw(500);

this.balance

Page 21: Révision des notions OO et Java Semaine 1 Jian-Yun Nie
Page 22: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

This: résoudre le conflit

public class Rectangle{

public Rectangle(int x, int y, int width, int height) {

this.x=x; this.y=y; this.width=width; this.height=height;

}int x, y, width, height;public int getWidth() {return width; }

}

Page 23: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Protection• public: permet un accès de n’importe qui• private: accessible seulement par une méthode de la

même classe• Sans spécification: accessible du même package (à

étudier plus tard)• protected (package, plus tard)• Conseils:

– Protéger le plus possible les attributs d’un objet– Créer des méthodes d’accès de l’extérieur

• Lire la valeur (accessor)• Modifier la valeur

– Accessibilité des méthodes• public: permet à l’utiliser de l’extérieur• private: ne peut être utilisée que par une méthode définie dans la

même classe

• Q: Peut-on créer un constructeur private?

Page 24: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Conversion automatique de types

• Wideningbyte shortintlongfloatdouble

char• Narrowing (casting)

doublefloatlongintcharshort

byte

Page 25: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Signature et matching de méthode

• int min(int a, int b) {…}• float min(int x, int y) {…} //même signature en

Java - conflit• float min(float x, float y) {…} //diff. signatures• Matching:

– min(1, 2): min(int a, int b) – min(1, 0.2): min(float x, float y)

• Ambiguité (erreur de compilation)– boolean inf(float x, int y) {return x<y}– boolean inf(int x, float y) {return x<y}– inf(1,2)?

Page 26: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Plus sur Array

• Array: Séquence de valeurs du même type • Construire un Array:

new double[10] • Stocker des valeurs

double[] data = new double[10]; • À la création, les valeurs d’éléments sont

initialisée:– nombre: 0 – Boolean: false – Référence à Object: null– (Attention: Array et String sont aussi des classes

d’objet)

Page 27: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Plus sur Array

• double[] data = new double[10];

0

0

0

0

0

0

0

0

0

0

Page 28: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Plus sur Array

• data[2] = 29.95;

Page 29: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Traverser un Array• Traverser tous les éléments:

for (Type variable : collection) statement • E.g.

double[] data = . . .;double sum = 0;for (double e : data)

{ sum = sum + e;}

• Équivalent à :double[] data = . . .;double sum = 0;for (int i = 0; i < data.length; i++){ double e = data[i]; sum = sum + e;}

Page 30: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Copier un Array• double[] data = new double[10];

// fill array . . .double[] prices = data; // Copier la référence

Page 31: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Copier un Array

• double[] prices = (double[]) data.clone();

Page 32: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Copier les éléments de Array• System.arraycopy (from, fromStart, to, toStart, count);

Page 33: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Ajouter un élément dans Array

• System.arraycopy(data, i, data, i + 1, data.length - i - 1);data[i] = x;

Page 34: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Enlever un élément de Array

• System.arraycopy(data, i + 1, data, i, data.length - i - 1);

Page 35: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Agrandir un Array

Si un Array (data) n’est pas asez grand:

• Créer un nouveau Array plus grand:

double[] newData = new double[2 * data.length];

• Copier les éléments dans le nouveau Array:System.arraycopy(data, 0, newData, 0, data.length);

• Réaffecter la référence (data) au nouveau Array:

data = newData;

Page 36: Révision des notions OO et Java Semaine 1 Jian-Yun Nie
Page 37: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

ArrayList – une structure de données plus flexible

• The ArrayList class manages a sequence of objects • Can grow and shrink as needed • ArrayList class supplies methods for many common tasks,

such as inserting and removing elements • The ArrayList class is a generic class: ArrayList<T>

collects objects of type T:

ArrayList<BankAccount> accounts = new ArrayList<BankAccount>();

accounts.add(new BankAccount(1001));accounts.add(new BankAccount(1015));accounts.add(new BankAccount(1022));

• size method yields number of elements

Page 38: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Obtenir un élément de ArrayList

• Use get method • Index starts at 0 • BankAccount anAccount = accounts.get(2); //

gets the third element of the array list • Bounds error if index is out of range • Most common bounds error:

int i = accounts.size();anAccount = accounts.get(i); // Error// legal index values are 0. . .i-1

Page 39: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Ajouter un élément• Remplacer un élément existant:

BankAccount anAccount = new BankAccount(1729);accounts.set(2, anAccount);

• Ajouter (insérer) un nouvel élément à l’indexe i: accounts.add(i, a)

Page 40: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Enlever un élément

• accounts.remove(i)

Page 41: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Traverser un ArrayList• Similare à Array:

ArrayList<BankAccount> accounts = . . . ;double sum = 0;for (BankAccount a : accounts){

sum = sum + a.getBalance();}

• Equivalent à: double sum = 0;for (int i = 0; i < accounts.size(); i++){

BankAccount a = accounts.get(i);sum = sum + a.getBalance();

}

Page 42: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Différences sur la taille

• Array: length (attribut)

• ArrayList: size() (méthode)

• String: length() (méthode)

Page 43: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Attention• length = nombre maximal d’éléments que Array peut

contenir, même si ces places ne sont pas remplies.

Page 44: Révision des notions OO et Java Semaine 1 Jian-Yun Nie

Attention• Éviter de créer deux Array séparés pour la même

série de données (mise à jour difficile)