Plus en avant dans les classes Introduction aux tableaux - PowerPoint PPT Presentation

1 / 28
About This Presentation
Title:

Plus en avant dans les classes Introduction aux tableaux

Description:

Le nombre de voisins (vivants) est fourni (sinon il faudrait que les cellules connaissent ... ne pas sortir des bornes. de la matrice... ArrayOutOfBound Exception ... – PowerPoint PPT presentation

Number of Views:34
Avg rating:3.0/5.0
Slides: 29
Provided by: mugn4
Category:

less

Transcript and Presenter's Notes

Title: Plus en avant dans les classes Introduction aux tableaux


1
Plus en avant dans les classesIntroduction aux
tableauxà partir de l'exemple du jeu de la vie
2
Le jeu de la vie
John Conway 1970 But modéliser l'évolution
d'organismes vivants
Exemple de programme
http//www.bitstorm.org/gameoflife/
3
Règles de vie et mort des organismes
n nombre de cellules voisines hébergeantun
organisme vivant
cellule vide
cellule occupée
Automateà 2 états
4
Cellule - l int- c int- occupee boolean-
age int constructeurs estOccupee()
boolean naitre() nouvelEtat(in nbVoisins
int) toString() afficher() String
5
Rappels constructeurs
Constructeur méthode spéciale, appelée
automatiquement après la créationd'une instance
de cette classe
Syntaxe même nom que la classe pas de type de
retour (même pas void)
6
A la création d'un objet, le compilateur décide
duconstructeur à appeler au vu de la liste des
paramètres effectifs
Cellule cc new Cellule(1,1) //?
constr. 2
c new Cellule(2,2,true) //?
constr. 1
c new Cellule(1,1,4) // ?
??
À la création d'un objet, il faut qu'un
constructeur puisse être appelé
  • Et si la classe ne définissait aucun
    constructeur?
  • Constructeur par défaut (sans paramètre,
    corps vide)

7
Mais
Si la classe définit (au moins) un
constructeur,le constructeur par défaut est
inhibé
Cellule c new Cellule ()
Erreur!
Si le programmeur gère les constructeurs, il les
gère tous ! Sauf cas très spécial TOUJOURS
écrire un constructeur par défaut
8
Le 1er constructeur aurait pu s'écrire ainsi
public Cellule(int lig, int col, boolean oc) l
lig c col occupee oc if (oc) age 0
else age -1
9
this
  • Dans une méthode, this référence lobjet receveur

public boolean estOccupee() return occupee
Ici, this serait superflumais on en a parfois
besoin.
Exemple en cas de conflit entre un nom de
paramètre et un nom d'attribut ou pour manipuler
lobjet lui-même
10
Règles de priorité paramètre/attribut
  • public boolean estOccupee()
  • return occupee

paramètre
variable locale
attribut
Paramètres et variables locales ont même
prioritéIls sont prioritaires sur les attributs
11
Paramètre prioritaire sur lattribut. Donc l, c
et occupee désignent les paramètres
D'où l'utilisation de this pour désigner les
attributs
Convention dans les constructeurs, on nomme
chaque paramètre comme lattribut quil
initialise
12
Evolution d'une cellule
public void nouvelEtat(int nbV)
vide
4 ? nbV ou nbV ? 1
nbV 3
occupée
2 ? nbV ? 3
13
Evolution d'une cellule
public void nouvelEtat(int nbVoisins)
if (occupee) if ((nbVoisins 2)
(nbVoisins 3)) age else occupee
false age -1 else if
(nbVoisins 3) occupee true age 0
14
L'opérateur
A B
  • Si A et B sont des expressions de type
    numérique, addition
  • (char est vu comme un type numérique)
  • Si A ou B est une chaîne (instance de String),
    concaténation
  • L'autre argument, s'il n'est pas une chaîne est
    converti en une String

Comment?
15
  • valeur de type primitif
  • 'a' --gt "a"
  • 123 --gt "123"
  • true --gt "true"
  • objet appel de sa méthode toString()

"état cellule " cel
"état cellule " cel.toString()
"état cellule " "1 1 true"
? "état cellule 1 1 true"
16
construction de gauche à droite(en prenant par
ex, l 2c 4occupee true)
l " " c " " occupee
"2 " c " " occupee
"2 4" " " occupee
"2 4 " occupee
"2 4 true"
En déduire une technique toute simplepour
traduire un entier en une String
Si l'on écrivait l ' ' c ' ' occupee
qu'obtiendrait-on ?
17
Passons à la classe Monde
  • Seule est donnée son interface publique
  • Ecrire la partie implémentation
  • attributs privés
  • corps des méthodes publiques
  • ajout de méthodes privées éventuelles

Comment créer et initialiser la matrice de
cellules ?
18
Tableau
19
int T null T new int 50 T new int
10
L'espace mémoire réservé au tableau qui n'est
plus référencé sera libéré par le ramasse-miettes
20
Rappels
  • Le premier indice d'un tableau est 0
  • T0
  • Attribut length
  • T.length

T.length ? 50
21
Raccourci syntaxique"initialiseur"
int T 4,10,2002
int T new int 3 T0 4 T1 10 T2
2002
Ce n'est qu'un raccourci
22
Et les tableaux d'objets?
int T new int 3 Crée un tableau de 3
entiers Date T new Date3 Crée un tableau
de quoi?
De références
Aucun objet Date nest créé
23
T0 new Date(...)T1 new Date(...)T2
new Date(...)
24
Tableau à plusieurs dimensions
'a'
3 lignes6 colonnes
char T new char 36
char T
Tableau de tableaux de caractères
T01 'a'
25
char T new char 36
Décomposons
(1) char T new char 3
(2) for (int c 0 c lt 3 c) Tc new
char 6
T.length ?
3
T0.length ?
6
26
On peut ainsi créer des tableaux qui ne sont pas
"rectangulaires"
(1) char T new char 3
(2) for (int c 0 c lt 3 c) Tc new
char 6-c
T
27
Revenons à la classe Monde
Attribut matrice
private Cellule matrice
Construction effective de la matrice
public Monde() // initialise le monde avec des
cellules inoccupées
matrice new Cellule nbLignbCol
for(int i 0 i lt nbLig i) for (int j
0 j lt nbCol j) matrice ij new
Cellule(i,j)
28
public void creerVie(int l, int c)

matricelc.naitre()
Exercice - Exercice - Exercice public void
nouvelleGeneration() // fait passer le monde à
une nouvelle // génération
  • Problème ne pas modifier la matrice alors que
    tous les voisinages n'ont pas été calculés
  • Attention à ne pas sortir des bornes de la
    matrice... ArrayOutOfBound Exception
Write a Comment
User Comments (0)
About PowerShow.com