Notions de base de programmation et Objets Semaine
Notions de base de programmation et Objets 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 compatibles double balance = 13. 75; int dollars = balance; // Error int dollars = (int) balance; // OK long rounded = Math. round(balance); // 13. 75 ->14
Comprendre comment ça fonctionne int a; int: a 0 int: a a = 10; int b = a; a++; 10 int: a int: b 10 int: a 10 int: b 11 10
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 {…} public class Rectangle {…} Circle soleil; //déclaration de la var. Rectangle box; • soleil = new Circle(); //créer une instance • box = soleil; // Erreur: types incompatibles • box = new Circle(); //Erreur
Contrôle du programme • if condition then statement else statement ; condition non oui • 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; }
boolean et test • Combinaison de conditions (test booléens) – && ET – || OU – ! NON e. g. if (0 < amount && amount < 1000). . . • Tester la condition la plus exigeante d’abord, ne pas faire des tests redondants – if (amount > 100000 || amount < 5000) … – if ((0 < amount && amount < 1000) && amount > 100) …
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]; éléments: board[0] board[2] [3]
String comme une classe spéciale String s; s = “Hello world!”; référence s … corps null He l l o wo r l d ! • Méthodes – – Length(), substring(début, longueur) substring(début, fin+1), compare. To(t) < 0 , equals. Ignore. Case("Y") …
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)
Array • double[] data = new double[10]; 0 0 0 0 0
Array • data[2] = 29. 95;
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; }
Copier un Array • double[] data = new double[10]; // fill array. . . double[] prices = data; // Copier la référence
Copier un Array • double[] prices = (double[]) data. clone();
Copier les éléments de Array • System. arraycopy (from, from. Start, to. Start, count);
Ajouter un élément dans Array • System. arraycopy(data, i, data, i + 1, data. length - i - 1); data[i] = x;
Enlever un élément de Array • System. arraycopy(data, i + 1, data, i, data. length - i - 1);
Agrandir un Array Si un Array (data) n’est pas asez grand: • Créer un nouveau Array plus grand: double[] new. Data = new double[2 * data. length]; • Copier les éléments dans le nouveau Array: System. arraycopy(data, 0, new. Data, 0, data. length); • Réaffecter la référence (data) au nouveau Array: data = new. Data;
Array. List – une structure de données plus flexible • The Array. List class manages a sequence of objects • Can grow and shrink as needed • Array. List class supplies methods for many common tasks, such as inserting and removing elements • The Array. List class is a generic class: Array. List<T> collects objects of type T: Array. List<Bank. Account> accounts = new Array. List<Bank. Account>(); accounts. add(new Bank. Account(1001)); accounts. add(new Bank. Account(1015)); accounts. add(new Bank. Account(1022)); • size method yields number of elements
Obtenir un élément de Array. List • Use get method • Index starts at 0 • Bank. Account an. Account = 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(); an. Account = accounts. get(i); // Error // legal index values are 0. . . i-1
Ajouter un élément • Remplacer un élément existant: Bank. Account an. Account = new Bank. Account(1729); accounts. set(2, an. Account); • Ajouter (insérer) un nouvel élément à l’indexe i: accounts. add(i, a)
Enlever un élément • accounts. remove(i)
Traverser un Array. List • Similare à Array: Array. List<Bank. Account> accounts =. . . ; double sum = 0; for (Bank. Account a : accounts) { sum = sum + a. get. Balance(); } • Equivalent à: double sum = 0; for (int i = 0; i < accounts. size(); i++) { Bank. Account a = accounts. get(i); sum = sum + a. get. Balance(); }
Différences sur la taille • Array: • Array. List: • String: length size() length() (attribut) (méthode)
Attention • length = nombre maximal d’éléments que Array peut contenir, même si ces places ne sont pas remplies.
Attention • Éviter de créer deux Array séparés pour la même série de données (mise à jour difficile)
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. Nom de classe public class Rectangle constructeur { public Rectangle(int x, int y, int width, int height) { this. x=x; this. y=y; this. width=width; this. height=height; } attributs int x, y, width, height; méthodes public int get. Width() {return width; } } Note: this. x = x
Créer des objets d’une classe Rectangle box, box 1, box 2; box = new Rectangle(5, 10, 20, 30); box 1 = new Rectangle(35, 30, 20); box 2 = new Rectangle(45, 0, 30, 20);
Manipulations des objets • Référer à un attribut (accessible) d’objet box. x box. y box. width box. height e. g. box. x = box. x + 1
Manipulations • Différentes références peuvent référer au même objet: box 2 = box; box 2. y ++; box. y =?
Rectangle box = new Rectangle(5, 10, 20, 30); Rectangle box 2 = box; box 2. 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.
Comparaison d’objet • Comparer les références box == box 2: les 2 références réfèrent au même objet? box != box 2: elles réfèrent aux objets différents? • Comparer le contenu des objets – définir equals dans la classe 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 get. Width() {return width; } public boolean equals(Rectabgle r) {return this. x==r. x && this. y==r. y && this. width==r. width && this. height==r. height; } } – box. equals(box 2)
Comparaison d’objet • Des méthodes de comparaisons prédéfinies dans String input; … if (input. equals(“You are right")) … if (input. equals. Ignore. Case("You are right")) …
Plus sur classe • Forme générale d’une déclaration de classe: access. Specifier class Class. Name { constructors methods fields } • E. g. public class Bank. Account { public Bank. Account(double initial. Balance) {. . . } public void deposit(double amount) {. . . }. . . }
Constructeurs • Constructeur implicite – – – public Nom. Classe (); 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 Bank. Account { } implicitement: public Bank. Account(); • 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 Bank. Account(String name) {…} public Bank. Account(float amount) {…}; – Un constructeur peut utiliser un autre: public Bank. Account(String name) {this(); this. owner = name; …}
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)?
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: access. Specifier class Class. Name { . . . access. Specifier field. Type field. Name; . . . }
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: access. Specifier return. Type method. Name (parameter. Type parameter. Name, . . . ) { method body } e. g. public void deposit(double amount) {. . . }
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 Bank. Account { … public void withdraw(double amount) this. balance { double new. Balance = balance - amount; balance = new. Balance; } … public double balance; } Bank. Account more. Savings = new Bank. Account (1000); int balance; more. Savings. withdraw(500);
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 get. Width() {return width; } }
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?
Conversion automatique de types • Widening byte short int long float double char • Narrowing (casting) double float long int char short byte
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)?
- Slides: 45