• Aucun résultat trouvé

Cours Java

N/A
N/A
Protected

Academic year: 2022

Partager "Cours Java"

Copied!
8
0
0

Texte intégral

(1)

Cours Java

1 Ph. CHOCHOIS

Notion d’objet et de classe

Types primitifs

Java propose 9 types primitifs, leur nom est entièrement en minuscule :

int, boolean, char, byte, float, double, long, short, void

Remarque: les chaînes (String) n’en font pas partie.

2

Types primitifs

3

Objets

Java est un langage Objet.

Il permet de manipuler les types simples…

… et les types complexes: Les objets

Définition: Un objet est une entité du monde réel (une table, une voiture, un employé, un produit…) ou virtuel (une facture, une location, une idée, un conteneur, un écouteur, une exception …) qui se caractérise par un ensemble de propriétés, des états significatifs et un comportement.

L’état d’un objet correspond aux valeurs de tous ses attributs à un instant donné.

Le comportement d’un objet est caractérisé par l’ensemble des opérations qu’il peut exécuter en réaction aux messages provenant des autres objets.

4

Objets

Exemple: L’employé Durand n°12345 embauché en tant qu’ ingénieur travaillant sur le site de Bordeaux.

Quels sont ses propriétés, son état, son comportement ? Propriétés: nom, numéro, poste occupé, lieu de travail

Etat: Il s’appelle Durand, a le numéro 12345 , est ingénieur et travaille à Bordeaux

Comportement: Il peut être muté, quitter l’organisme, changer de qualification…

.

Concept de Classe

Une classe est l’abstraction d’un ensemble d’objets qui possèdent une structure identique (attributs) et un même comportement (opérations, méthodes).

Un objet est une instance d’une et d’une seule classe.

Les concepts d’objet et de classe sont interdépendants.

(2)

Concept de Classe

Exemple:

Nom de classe: Employe Attributs:

numero

nom qualification site de travail Opérations:

Modifier un employé Départ d’un employé Consulter un employé

7

Encapsulation et interface

L’approche Objet se caractérise par le regroupement dans une même classe de:

La description de la structure des attributs La description des opérations

Ce regroupement porte le nom d’encapsulation données-traitements.

Le principe d’encapsulation renforce l’autonomie et l’indépendance de chaque classe et augmente la potentialité de classe réutilisable.

L’ensemble des opérations rendues visibles aux autres classes porte le nom d’interface.

Les opérations non visibles sont des opérations privées (private) Sauf cas exceptionnel, les attributs sont privés. On y accède grâce à

des méthodes publiques.

8

Encapsulation et Interface

9

Classe N

Opérations accessibles -Opération 1 -Opération 2 - Opération 3 -…/…

Opérations non accessibles -Opération A -Opération B -…/…

Données:

-Attribut 1 -Attribut 2 -Attribut 3 -…/…

Interface

Accès aux données via l’interface (Partie visible de la classe)

Exercices d’application

Nous allons créer des classes et des objets à l’aide du langage Java.

Pour faciliter notre travail, nous allons utiliser un IDE (« Integrated Development Environment » ou « Environnement de développement intégré ») : Eclipse.

1.Sous Linux, lancer Eclipse en saisissant « Eclipse » dans un terminal 2.Créer un nouveau projet

3.Créer une nouvelle classe nommée « UtiliseVoiture » en cochant la case

« public static void main (String [ ] args) »

Question subsidiaire: Pourquoi cet IDE se nomme Eclipse ?

10

Exercices d’application

Complétez votre programme Java « UtiliseVoiture .java » permettant de déclarer une variable de type entier « int ».

•Exécutez votre programme grâce à :

• Run

• Run as …… Java Application

Eclipse doit indiquer « terminated », c’est à dire que le programme s’est terminé correctement mais il n’a rien fait

public class UtiliseVoiture {

public static void main(String args[]){

int unEntier;

} }

Exercices d’application

Complétez le programme précédent pour déclarer une variable de type

« Voiture ». Que se passe t-il et pourquoi ?

public class UtiliseVoiture{

public static void main(String args[]){

int unEntier;

Voiture uneVoiture ; }

}

(3)

Complétez le programme précédent pour déclarer une variable de type

« Voiture ». Que se passe t-il et pourquoi ?

13 public class UtiliseVoiture{

public static void main(String args[]){

int unEntier;

Voiture uneVoiture ; }

}

La compilation échoue car le type « Voiture » est inconnu. On ne peut pas créer d’objet « Voiture ».

Pour pouvoir créer un objet « Voiture », il faut décrire ce qu’est une voiture.

Exercices d’application

Créer une nouvelle classe Voiture avec les propriétés privées marque, couleur, année et NumeroSerie.

Ne cochez pas cette fois-ci « public static void main (String [ ] args) »

14 public class Voiture{

private int numSerie;

private String marque;

private String couleur;

private int annee;

}

Ce code source java ne peut pas être exécuté. Un voiture n’est pas exécutable en tant que telle. La classe Voiture n’a été créée que pour définir des objets de type « Voiture ».

Tous les objets qui seront créés en ayant le type « Voiture » posséderont toutes les caractéristiques que nous avons écrites dans la classe « Voiture ».

Le programme « UtiliseVoiture » peut maintenant être exécuté.

Exercices d’application

En utilisant la classe « Voiture », créer 2 voitures dans votre programme

« UtiliseVoiture ».

15 public class UtiliseVoiture{

public static void main(String args[]){

int unEntier;

Voiture uneVoiture;

uneVoiture = new Voiture();

Voiture uneAutreVoiture =new Voiture();

} }

Question : Est-il possible d’afficher de quelle couleur sont nos 2 voitures ?

Exercices d’application

Fournir le code permettant de créer la classe Produit avec les propriétés privées nomProduit et prix.

16 public class Produit {

private String libelle;

private double prix;

}

Exercices d’application

Créer un produit dans un programme « UtiliseProduit » qui crée un produit.

public class UtiliseProduit { public static void main(String args[]){

Produit p;

p = new Produit();

} }

Exercices d’application

Dans ce cas, nous avons créé un produit « p ». Il n’a pas de nom, ni de prix.

Créer maintenant un produit qui porte le nom « Chocolat » et qui a un prix de 1,50 euro.

Exercices d’application

Afin de pouvoir affecter des valeurs aux propriétés privées des produits, il faut créer des méthodes publiques qui vont accéder elles-mêmes aux propriétés privées du produit.

Ces méthodes sont à écrire dans la classe « Produit ».

Ces méthodes particulières qui permettent d’affecter une valeur à une propriété s’appellent des « setteurs » ou « modificateurs ». On les nomme généralement de la façon suivante

« setNomPropriété ».

Exemple : Le setteur qui valorise le libellé s’appellera

« setLibelle »

(4)

Créer maintenant un produit qui porte le nom « Chocolat » et qui a un prix de 1,50 euro.

19

Exercices d’application

Les setteurs permettent de mettre à jour une propriété d’un objet à partir d’une information qu’ils reçoivent. Le nom et le type de paramètre reçu doit être indiqué comme paramètre en entrée du setteur.

Exemple : Pour le setteur « setLibelle » qui permet de mettre à jour le libellé d’un produit, il faut déclarer un paramètre nommé

« unLibellé » qui est de type « String », c'est-à-dire une chaîne de caractères

setLibelle(String unLibelle)

Créer maintenant un produit qui porte le nom « Chocolat » et qui a un prix de 1,50 euro.

20

Exercices d’application

Les setteurs reçoivent un paramètre mais ne retournent aucune information à celui qui leur envoie ce paramètre. Le type particulier qui indique « Rien » se nomme « void ».

Toutes les méthodes doivent indiquer le type d’information retournée.

Dans notre exemple, on écrira : void setLibelle(String unLibelle)

Créer maintenant un produit qui porte le nom « Chocolat » et qui a un prix de 1,50 euro.

21

Exercices d’application

Afin de pouvoir être appelé, le setteur doit être déclaré « public » Dans notre exemple, on écrira donc : public void

setLibelle(String unLibelle)

Créer maintenant un produit qui porte le nom « Chocolat » et qui a un prix de 1,50 euro.

22

Exercices d’application

Le contenu des actions à exécuter lors de l’appel d’une méthode est délimité par des accolades.

Dans notre exemple, on écrira donc : public void setLibelle(String unLibelle){

}

Créer maintenant un produit qui porte le nom « Chocolat » et qui a un prix de 1,50 euro.

Exercices d’application

Le setteur doit récupérer la valeur du paramètre reçu en entrée (unLibelle) et l’affecter à la propriété adéquate (Libelle). Afin de bien préciser qu’on affecte la valeur reçue à la propriété du produit et à pas à une variable quelconque, on peut faire précéder le nom de la propriété par le mot clé « this »

Dans notre exemple, on écrira donc : public void setLibelle(String unLibelle){

this.libelle = unLibelle ; }

Remarque : toutes les instructions se terminent par un point virgule.

Créer maintenant un produit qui porte le nom « Chocolat » et qui a un prix de 1,50 euro.

public class Produit{

private String libelle;

private double prix;

public void setLibelle(String unLibelle){

this.libelle = unLibelle;

}

public void setPrix(double unPrix){

this.prix = unPrix;

} }

Exercices d’application

(5)

Eclipse est capable de générer des setteurs standards automatiquement.

Choisissez:

•Source

•Generate getters and setters…

25 public class Produit{

private String libelle;

private double prix;

public void setLibelle(String unLibelle){

this.libelle = unLibelle;

}

public void setPrix(double unPrix){

this.prix = unPrix;

} }

Exercices d’application

Créer maintenant votre produit « Chocolat » à 1,50 euro.

Nous utilisons la notation pointée pour appeler les méthodes publiques du produit

« p ». Il est obligatoire de transmettre les valeurs attendues par les méthodes.

Ici, la méthode « setLibelle » attend une chaîne de caractères en entrée ; on lui fournit donc la chaîne « Chocolat ».

La méthode « setPrix » attend un réel en entrée ; on lui fournit donc le nombre

« 1.50 ».

Remarque : Contrairement aux chaînes de caractères, les nombres ne sont pas encadrées par des guillemets.

26 public class UtiliseProduit{

public static void main(String args[]){

Produit p;

p = new Produit();

p.setLibelle("Chocolat");

p.setPrix(1.50);

} }

Exercices d’application

Nous avons donc maintenant créé un produit qui a pour libellé

« Chocolat » et pour prix « 1.50 ».

Maintenant, essayons d’afficher notre produit.

Puisque nous ne pouvons pas accéder aux propriétés privées, il va falloir créer des méthodes publiques qui vont accéder à ces propriétés.

Contrairement aux setteurs, ces méthodes ne reçoivent aucune information mais en retournent. On appelle ces méthodes des « getteurs » ou des « accesseurs ».

Modifions donc notre classe Produit pour lui créer 2 getteurs

27 public class Produit{

private String libelle;

private double prix;

public void setLibelle(String unLibelle){

this.libelle = unLibelle;

}

public void setPrix(String unPrix){

this.prix = unPrix;

}

public String getLibelle(){

return this.libelle;

}

public String getPrix(){

return this.prix;

} }

Exercices d’application

Affichons maintenant notre produit.

28 public class UtiliseProduit{

public static void main(String args[]){

Produit p;

p = new Produit();

p.setLibelle("Chocolat");

p.setPrix(1.50);

System.out.println("Notre

produit "+p.getLibelle()+" coute "+p.getPrix());

} }

Exercices d’application

Affichons maintenant notre produit dans une boîte de dialogue.

public class UtiliseProduit{

public static void main(String args[]){

Produit p;

p = new Produit();

p.setLibelle("Chocolat");

p.setPrix(1.50);

javax.swing.JOptionPane.showMessageDialog(null,"Notre produit "+p.getLibelle()+" coute "+p.getPrix());

} }

Exercices d’application

Modifiez votre classe « Produit » afin que le programme ci-dessous fonctionne. Le produit doit être capable d’afficher ses propriétés lorsqu’on lui demande de s’afficher. Il doit donc être doté de la méthode affiche.

public class UtiliseProduit{

public static void main(String args[]){

Produit p;

p = new Produit();

p.setLibelle("Chocolat");

p.setPrix(1.50);

p.affiche();

} }

Exercices d’application

(6)

Modifiez votre classe « Produit » afin que le programme ci-dessous fonctionne. Le produit doit être capable d’afficher ses propriétés lorsqu’on lui demande de s’afficher. Il doit donc être doté de la méthode affiche.

.

31 public class UtiliseProduit{

public static void main(String args[]){

Produit p;

p = new Produit();

p.setLibelle("Chocolat");

p.setPrix(1.50);

p.affiche();

} }

_______________________________________________________________

public class Produit{

private String libelle;

private double prix;

…/…

public void affiche(){

System.out.println("Notre produit "+this.libelle+"

coute "+this.prix);

} }

Exercices d’application

Modifiez votre classe « Produit » afin que le programme ci-dessous fonctionne. Le produit doit être capable de retourner une chaîne de caractères contenant les informations le concernant. Il doit donc être doté de la méthode « toString ».

Cette façon de faire est la meilleure des 3 car la classe métier (classe produit) est dissociée de la classe applicative (UtiliseProduit). De cette manière, la classe Produit peut être ré-utilisée quelque soit le traitement (mode console, mode graphique, traitement batch, wap…)

.

32

public classUtiliseProduit {

public static voidmain(String args[]) { Produit p;

p = newProduit();

p.setLibelle("Chocolat");

p.setPrix(1.50) ;

System.out.println(p.toString());

}}

Exercices d’application

Modifiez votre classe « Produit » afin que le programme ci-dessous fonctionne. Le produit doit être capable de retourner une chaîne de caractères contenant les informations le concernant. Il doit donc être doté de la méthode « toString ».

Cette façon de faire est la meilleure des 3 car la classe métier (classe produit) est dissociée de la classe applicative (UtiliseProduit). De cette manière, la classe Produit peut être ré-utilisée quelque soit le traitement (mode console, mode graphique, traitement batch, wap…)

.

33

public classProduit { privateString libelle;

private doubleprix;

…/…

publicString toString(){

return"Notre produit "+this.libelle+" coute "+this.prix ; }

}

Exercices d’application

Exemple d’utilisation de propriété publique :

Ajouter une propriété publique « alimentaire » de type booléen. La propriété « alimentaire » ne pourra prendre que les valeurs « true » ou

« false ».

34

classProduit { privateString libelle;

private doubleprix;

public booleanalimentaire;

public voidsetLibelle(String unLibelle){

this.libelle = unLibelle ; }

public voidsetPrix(doubleunPrix){

this.prix = unPrix ; }

publicString toString(){

return"Notre produit "+this.libelle+" coute "+this.prix ; }

}

Exercices d’application

Exemple d’utilisation de propriété publique :

Modifiez le programme « UtiliseProduit » pour permettre de dire que le chocolat est un produit alimentaire et d’afficher un message indiquant si le produit est alimentaire après avoir lu cette propriété.

public classTest {

public static voidmain(String args[]){

Produit p;

p = newProduit();

p.setLibelle("Chocolat");

p.setPrix(1.50);

p.alimentaire=true;

System.out.println(p.toString());

if(p.alimentaire)

System.out.println("Notre produit est un produit alimentaire");

else

System.out.println("Notre produit n’est pas un produit alimentaire");

} }

Exercices d’application

Exemple d’utilisation d’une méthode privée :

Créer une méthode privée dans la classe Produit permettant de convertir le montant en euros en montant en francs. Cette méthode n’affichera rien ; elle retourne un montant en francs à partir du prix du produit.

. classProduit {

privateString libelle;

private doubleprix;

public booleanalimentaire;

…/…

private doubleconversionEnFrancs(){

doublemontantFrancs=this.prix*6.55957;

returnmontantFrancs;

}

publicString toString(){

return"Notre produit "+this.libelle+" coute "+this.prix ; }

}

Exercices d’application

(7)

Exemple d’utilisation d’une méthode privée :

Essayez d’appeler cette méthode pour notre produit Chocolat. Que se passe t-il et pourquoi ?

.

37 public classTest {

public static voidmain(String args[]){

…/…

doubleprixFrancs=p.conversionEnFrancs();

} }

Exercices d’application

Exemple d’utilisation d’une méthode privée :

Une méthode privée peut être appelée à l’intérieur de la classe. Affichez le prix en francs grâce à la méthode « toString » en utilisant la méthode de conversion.

38 public class Produit {

private String libelle;

private double prix;

public boolean alimentaire;

…/…

private double conversionEnFrancs(){

double montantFrancs=this.prix*6.55957;

return montantFrancs;

}

public String toString(){

String chaine="Notre produit "+this.libelle+" coute "+this.prix ; chaine +=" euros, soit "+conversionEnFrancs()+" francs.";

return chaine;

} }

Exercices d’application

39

Les constructeurs…

Un constructeur est une méthode particulière qui est appelée automatiquement à la création d'un objet et qui permet d'initialiser correctement cet objet.

Le constructeur est appelé lors de l'allocation de l'objet par new (et non lors de la déclaration de la référence).

Un constructeur se reconnaît facilement en Java:

- il porte le même nom que la classe - il n'a pas de type de retour (même pas void)

On peut définir plusieurs constructeurs pour une même classe, s'ils ont une signature différente.

40

Les constructeurs: rôle et définition

Pour créer un compte, on a deux manières

Compte cpte1 = new Compte(135, "Dupont"); //instanciation avec appel du premier constructeur

Compte cpte2 = new Compte(159, "Martin", 1500); //instanciation avec appel du 2°constructeur

Mais on ne peut pas écrire:

public class Compte{

private int numero;

private String nom;

private double solde;

public Compte(int UnNumero, String UnNom){ //1erconstructeur this.numero = UnNumero;

this.nom = unNom;

this.solde = 0;

}

public Compte (int UnNumero, String UnNom, double SoldeInitial){

//deuxième constructeur this.numero = UnNumero;

this.nom = unNom;

this.solde = SoldeInitial;

} }

Les constructeurs: Exemple

Si aucun constructeur n'est défini explicitement, le compilateur en créé un quand même.

Ce constructeur défini par défaut ne comporte pas de paramètres et initialise tous les attributs à leur valeur par défaut (0 pour les variables numériques, NULL pour les références, "" pour les chaînes de caractères, …).

Mais dès lors qu'un constructeur est défini explicitement, le compilateur n'en créé pas d'autre.

L'utilisateur est obligé, à l'instanciation, de passer les paramètres requis par l'un des constructeurs explicite. Mais le concepteur de la classe peut créer son propre constructeur par défaut (c'est-à-dire sans paramètres).

Même lorsque l'instanciation ne comporte aucun paramètre (appel du constructeur par défaut s'il existe), il faut mettre les parenthèses.

Exemple:

Compte cpte = new Compte();

Les constructeurs

(8)

On peut alors instancier un objet de type Compte de la façon suivante:

43 public Compte() // constructeur sans paramètre

{

this.numero = 0;

this.nom = "inconnu";

this.solde = 0;

}

Les constructeurs

Ajoutons un constructeur sans paramètre à notre classe Compte.

Compte unCompte = new Compte( );

Instanciation d'un objet = déclaration de la référence + allocation en mémoire + construction (appel d'un constructeur)

Références

Documents relatifs

plus pauvres. Stimuler l’application des technologies dans une optique de réduction des coûts. Accroître les services dans les zones rurales, reculées et peu peuplées. Renforcer

Alors que dans les années 1990, le gouvernement fédéral participait au financement de la santé à la hauteur d’environ 25% des dépenses totales, le gouvernement fédéral

On

Il est question à travers cette étude de faire un diaporama de la gouvernance de la forêt Boucher dans la ville de Gatineau, en s’intéressant particulièrement

Résultats : vitesse au dernier palier complété Tests Triangulaires.. ➢ Il existe deux protocoles

Ton document doit être enregistré dans le fichier réservé à ta classe sous la forme suivante : nom_prénom (ex. Lessard_Evelyne).. Le titre doit

Pour Plessner, il est clair que cette question ne peut trouver une réponse affirmative, car «l'expérience coûteuse de la révolution [lui] a toujours apporté une réponse

1) a) Commencer par télécharger et installer Algobox. Algobox est gratuit, tapez « Algobox » dans n'importe quel moteur de recherche pour le trouver ou allez