FMIN110- GMIN327. Tableaux (suite) et ArrayList 2014



Documents pareils
Utilisation d objets : String et ArrayList

Java Licence Professionnelle CISII,

Package Java.util Classe générique

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Corrigé des exercices sur les références

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Programmation Par Objets

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Chapitre V. Les classes : Object, Vector, etc.

Plan du cours. Historique du langage Nouveautés de Java 7

TD3: tableaux avancées, première classe et chaînes

Projet de programmation (IK3) : TP n 1 Correction

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Tp 1 correction. Structures de données (IF2)

Chapitre 10. Les interfaces Comparable et Comparator 1

Programmer en JAVA. par Tama

as Architecture des Systèmes d Information

Corrigés des premiers exercices sur les classes

Cours 1: Java et les objets

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Une introduction à Java

Programmation par les Objets en Java

Programmation Objet I

TD/TP PAC - Programmation n 3

Programmation avec des objets : Cours 7. Menu du jour

Généralités sur le Langage Java et éléments syntaxiques.

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

TD/TP PAC - Programmation n 3

Programme Compte bancaire (code)

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Exercices sur les interfaces

Premiers Pas en Programmation Objet : les Classes et les Objets

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Java 1.5 : principales nouveautés

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Objets et Programmation. origine des langages orientés-objet

4. Groupement d objets

Threads. Threads. USTL routier 1

TP1 : Initiation à Java et Eclipse

Langage Java. Classe de première SI

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TP, première séquence d exercices.

Recherche dans un tableau

Classe Interne, Anonyme & Enumération

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Développement Logiciel

2. Comprendre les définitions de classes

Programmation en Java IUT GEII (MC-II1) 1

Un ordonnanceur stupide

PROGRAMMATION PAR OBJETS

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Flux de données Lecture/Ecriture Fichiers

INF 321 : mémento de la syntaxe de Java

Programmation Orientée Objet Java

Remote Method Invocation Les classes implémentant Serializable

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Solutions du chapitre 4

ACTIVITÉ DE PROGRAMMATION

Auto-évaluation Programmation en Java

OpenPaaS Le réseau social d'entreprise

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Apprendre Java en 154 minutes

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Programmation Objet II

Synchro et Threads Java TM

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Cours d initiation à la programmation en C++ Johann Cuenin

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Gestion distribuée (par sockets) de banque en Java

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Java Licence Professionnelle CISII,

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Bases Java - Eclipse / Netbeans

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

TD2 Programmation concurrentielle

Introduction au langage Java

STAGE IREM 0- Premiers pas en Python

Algorithmique et Programmation, IMA

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Introduction. Les méthodes. Les méthodes. Identité et égalité. Identité et égalité. La copie d'objets. Identité et égalité.

Java c est quoi? Java pourquoi?

Introduction au langage C

Java DataBaseConnectivity

Introduction à JDBC. Accès aux bases de données en Java

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Algorithmique I. Algorithmique I p.1/??

Génie Logiciel avec Ada. 4 février 2013


Serveur d'archivage 2007 Installation et utilisation de la BD exist

Perl Orienté Objet BioPerl There is more than one way to do it

Dis papa, c est quoi un bus logiciel réparti?

Transcription:

FMIN110- GMIN327 Tableaux (suite) et ArrayList 2014

Rappels Tableau : colleccon de valeurs d un même type ordonnées et indexées Type : primicf (int, char,..) ou Classe (String, Appt,..) DéclaraCon d un tableau <type> [] ident; Exemples : int t[]; Appt t[];

CréaCon d un tableau new int [4]; new Appt [5]; Rappels La longueur du tableau ne peut plus être modifiée Les cases du tableau sont indexées de 0 à longueur- 1 La longueur du tableau est donnée par la pseudo- variable length Appt tab [] = new Appt [6]; System.out.println(«longueur tableau =» + tab.length); Affichera à l écran longueur du tableau = 6

Polymorphisme et tableaux

La classe AgenceImmobiliere public class AgenceImmo { private String nomagence; /* les appartements gérés sont stockés dans un tableau de taille max fixe qui sera donné lors de la construccon */ private Appartement[] appartgeres; /* le nombre d appartements gérés limité par un max nbapparts < taille de appartgeres */ private int nbappts;

Un constructeur Le constructeur assure que le tableau est alloué en mémoire public AgenceImmo(String nomagence, int nbmax) { this.nomagence = nomagence; this.nbappts = 0; this.appartgeres = new Appartement[nbMax]; nbappts = 0 appartgeres.lenght - 1 = nbmax - 1

L ajout d un appartement public void add(appartement a){ if (this.nbappts < this.appartgeres.length) { // ajout à la fin du tableau appartgeres[nbappts]=a; nbappts+=1; else System.out.println( "nb max d'apparts aneint"); 0 nbappts appartgeres.lenght - 1 = nbmax - 1 0 nbappts appartgeres.lenght - 1 = nbmax - 1

Rappels / répéccves Parcours complet avec compteur public void afficheadresses() { for (int i = 0 ; i < appartgeres.nbappts ; i++) System.out.println( appartement + i + adresse + appartgeres[i].getadresse()); Parcours par un itérateur public void afficheadresses() { for (Appt a : appartgeres) If (a!= null) System.out.println( adresse + a.getadresse());

Rappels / répéccves Parcours contrôlé par une condicon public void afficheadresse()){ int i = 0; while (i < appartgeres.nbappts) { System.out.println( appartement + i + adresse + i+ appartgeres[i].getadresse()); i++; Parcours contrôlé par une condicon (si tableau non vide) public void afficheadresse() { int i = 0; do { System.out.println( appartement + i + adresse + appartgeres[i].getadresse()); i++; while (i< appartgeres.nbappts) ;

La somme des loyers de l agence public double sommeloyers() { double s=0; for(int i = 0; I < nbappts; i++) s+= this.appartgeres[i].loyer(); return s;

La classe ProgAppartement public class ProgAppartement { public stacc void main(string[] args) { AgenceImmo agence = new AgenceImmo("La belle maison",10); Appartement a1 = new AppartementLuxe("rue Nestor", 150, 1870, 6, "Arceaux"); Appartement a2 = new AppartementNormal("rue des vignes", 50, 1970, 3, 2); agence.add(a1); agence.add(a2); System.out.println(agence.sommeLoyers());

agence la belle maison 10 0 nbappts appartgeres.lenght - 1 = nbmax - 1 "rue Nestor" 150 1870 6 "Arceaux" adresse superficie annéeconstruccon nbrepièces quarcer "rue des vignes" 50 1970 3 2 adresse superficie annéeconstruccon nbrepièces nbrnuisances APPTLUXE APPTSTANDARD a1 a2

Analyse de la situacon Le type stacque des appartements gérés dans le tableau : Appartement Les objets stockés dans le tableau sont des instances d AppartementDeLuxe ou d AppartementStandard. La méthode sommeloyers : Chaque élément du tableau reçoit le message loyer() dans : s+= this.appartgeres[i].loyer();

Polymorphisme et tableaux public double loyer() {return valeurlocahvebase()*coeff(); public double valeurlocahvebase() {return superficie* 5*(1+nbPieces/10.0); public double coeff() { return 1.1; public double coeff() {return 1-0.1*nbNuisances;

Polymorphisme A la compilacon (phase stacque) : le compilateur vérifie que les méthodes loyer, valeurlocacve et coeff existent pour le type stacque Appartement A l exécucon (phase dynamique) l interprète choisit les méthodes suivant les types dynamiques (new) (en cas de redéfinicon)

s+= this.appartgeres[0].loyer(); this.appartgeres[0] est un appartement de luxe public double loyer() {return valeurlocahvebase()*coeff(); public double valeurlocahvebase() {return superficie* 5*(1+nbPieces/10.0); public double coeff() { return 1.1; public double coeff() {return 1-0.1*nbNuisances;

s+= this.appartgeres[1].loyer(); this.appartgeres[1] est un appartement normal public double loyer() {return valeurlocahvebase()*coeff(); public double valeurlocahvebase() {return superficie* 5*(1+nbPieces/10.0); public double coeff() { return 1.1; public double coeff() {return 1-0.1*nbNuisances;

La belle maison Adresse rue Nestor année construccon = 1870 superficie = 150.0 nb pieces = 6 valeur locacve = 1200.0 coefficient moderateur = 1.1 loyer = 1320.0 quarcer Arceaux L exécucon Adresse rue des vignes année construccon = 1970 superficie = 50.0 nb pieces = 3 valeur locacve = 325.0 coefficient moderateur = 0.8 loyer = 260.0 Nombre de nuisances 2.0 Somme des loyers = 1580.0

La classe Arrays Des uclitaires pour trier, copier une parce d un tableau, comparer, etc. Des méthodes de classe (stacc) import java.uhl.arrays; public class ProgArrays{ public stahc void main(string[] args) { int t [] = new int[] {12,4,17,5,3,6; System.out.println(Arrays.toString(t)); Arrays.sort(t); System.out.println(Arrays.toString(t)); int e []= Arrays.copyOf(t,3); System.out.println(Arrays.toString(e)); int f []= Arrays.copyOfRange(t,1,4); System.out.println(Arrays.toString(f)); Arrays.fill(t,4); System.out.println(Arrays.toString(t));

L exécucon public stahc void main(string[] args) { int t [] = new int[] {12,4,17,5,3,6; System.out.println(Arrays.toString(t)); [12, 4, 17, 5, 3, 6] Arrays.sort(t); System.out.println(Arrays.toString(t)); [3, 4, 5, 6, 12, 17] int e []= Arrays.copyOf(t,3); System.out.println(Arrays.toString(e)); [3, 4, 5] int f []= Arrays.copyOfRange(t,1,4); System.out.println(Arrays.toString(f)); [4, 5, 6] Arrays.fill(t,4); System.out.println(Arrays.toString(t)); [4, 4, 4, 4, 4, 4]

La classe ArrayList ArrayList <type> où type spécifie le type d objets stockés dans le tableau Le tableau est dynamique Constructeur le plus simple public ArrayList <type>() AnenCon : ne pas oublier import java.uhl.arraylist; Besoin de synchronisacon, ucliser Vector

La classe ArrayList : quelques méthodes public int size() : retourne le nombre d éléments de la liste public boolean add(<type> e) ajoute e à la fin de la liste (retourne true ) public void add(int index, <type> element) : insère element à la posicon précisée de la liste public <type> get(int index) retourne l élement à la posicon spécifiée public <type> set(int index, <type> e) remplace l élément à la posicon index par l élément e.

La classe ArrayList <type> public boolean remove(<type> e) recre la première occurrence de l élément e. Si la liste ne concent pas e, le tableau est inchangé. Retourne true si le tableau a été modifié. public <type> remove(int index) recre l élément à la posicon spécifiée. Déplace les élements suivants vers la gauche. public boolean removeall( CollecCon <type> c) recre tous les éléments de la colleccon c du tableau. public void clear() recre tous les éléments du tableau public boolean contains(<type> e) retourne true si le tableau concent l élément e.

La classe agence immobilière import java.uhl.arraylist; public class AgenceImmo { private String nomagence; private ArrayList <Appartement> appartgeres; On remarque qu il n est plus ucle : de maintenir un nombre d appartement gérés (size()) ni un nombre max (la structure s adapte dynamiquement).

Un constructeur public AgenceImmo(String nomagence) { this.nomagence = nomagence; this.appartgeres = new ArrayList <Appartement> (); Remarques : pas de ArrayList passée en paramètre (gérée en interne) variante à parcr de JAVA 1.7 new ArrayList <> () le type est déduit mais éviter new ArrayList () car les types ne seront pas vérifiés

Ajout d un appartement public void add(appartement a) { if (! appartgeres.contains(a)) appartgeres.add(a); Remarques : pas de test de taille (dynamique) pas de manipulacon d indice (géré en interne)

La méthode tostring() pour une ArrayList La méthode tostring() d une ArrayList retourne [ puis les résultats de la méthode tostring() sur chaque élément du tableau (séparés par des, ) puis ] Dans AgenceImmo : public String tostring(){ String st = this.nomagence+"\n "+this.appartgeres.tostring(); return st;

La méthode tostring() pour une ArrayList Si tostring() d Appartement retourne seulement : l adresse pour tous les appartements puis le quarcer pour les appartements de luxe le nombre de nuisances pour les normaux System.out.prinltn(agence) [rue Nestor Arceaux, rue des vignes - 2]

La somme des loyers de l agence immobiliere public double sommeloyers() { double s=0; for (Appartement a: this.appartgeres) s+= a.loyer(); return s;

La classe ProgAppartement import java.uhl.arraylist; public class ProgAppartement { public stahc void main(string[] args) { AgenceImmo agence = new AgenceImmo("La belle maison",5); Appartement a1 = new AppartementLuxe ("rue Nestor", 150, 1870, 6, "Arceaux"); Appartement a2 = new AppartementNormal ("rue des vignes", 50, 1970, 3, 2); agence.add(a1); agence.add(a2); System.out.println("Somme des loyers = "+ agence.sommeloyers()); System.out.println(agence);

Comparaison tableau ArrayList <type> DéclaraCon Appartement[] t; ArrayList <Appartement> t ; CréaCon t = new Appartement[nbMax] t = new ArrayList <Appartement> () ou new ArrayList <> () Java 1.7 taille Figée une fois fixée extensible longueur t.length t.size() Accès à un élément Parcours du tableau de 0 à t.length- 1 t[i] ajout t[i] = a pour i < t.length t.add(a) retrait On écrase la valeur t[i] t.remove(a) t.get(i), t.set(i,e), t.contains(e) i compris entre 0 et size()- 1

Exercice d applicacon Ecrire une méthode de recherche d un appartement dont l adresse est connue, pour la classe AgenceImmo : implémentée avec un tableau interne implémentée avec une ArrayList