Accueil
Accueil
Le
Club
Delphi
Kylix
C
C++
Java
J2EE
DotNET
& C#
Visual
Basic
Access
Pascal
Dev
Web
PHP
ASP
XML
UML
SQL
SGBD
Win
Linux
Autres



Qu'est-ce que l'héritage ?
auteur : Ioan Calapodescu
L'héritage est un des principaux concepts de la programmation orientée objet. L'héritage permet de définir une relation de "filiation" entre classes. Ainsi une classe fille (ou sous-classe) étends une classe mère (ou super-classe). L'héritage permet en général de spécialiser une classe.

Pour indiquer qu'une classe hérite d'une autre, il faut utiliser le mot-clé extends :

public class Fille extends Mere{ //ici le code spécifique de la classe fille }
L'héritage implique plusieurs choses :

La fille hérite du type de la mère :

public class Couleur(){ String nom; public Couleur(String nom){ this.nom = nom; } } public class Rouge extends Couleur{ public Rouge(){ super("rouge"); } } public class AutreClasse(){ public void setCouleur(Couleur uneCouleur){ //etc. } public static void main(String[] args){ AutreClasse ac = new AutreClasse(); ac.setCouleur(new Couleur("vert")); ac.setCouleur(new Rouge()); } }
La fille hérite de plusieurs attributs, méthodes et constructeurs de la mère

L'accès à ces attributs ou méthodes se fait avec le mot clef super. Pour plus d'informations, voir Que signifient les mots-clés this et super ?

Voici comment est définie l'accessibilité aux composantes de la super-classe, en fonction des modificateurs :

Mot-clé Accès
public Oui
"rien" Oui, seulement si la classe fille se trouve dans le même package que la super-classe.
protected Oui, quel que soit le package de définition de la classe fille.
private Non.
Regardez les liens ci dessous qui pourrons vous éclairer un peu plus sur cette notion.

lien : Que signifient les mots-clés this et super ?
lien : Comment faire pour hériter de plusieurs classes ?
lien : Qu'est ce qu'une interface ?

Qu'est ce qu'une classe abstraite ?
auteurs : Sébastien Meric, Clément Cunin
Qu'est ce qu'une classe abstraite
Une classe abstraite est une classe incomplète. Elle regroupe un ensemble de variables et de méthodes mais certaines de ses méthodes ne contiennent pas d'instructions, elles devront être définies dans une classe héritant de cette classe abstraite.

A quoi ça sert ?
En général à définir les grandes lignes du comportement d'une classe d'objets sans forcer l'implémentation des détails de l'algorithme. Prenons l'exemple d'une chaîne de montage automobile, laquelle sort un modèle de voiture particulier. On peut choisir de faire une nouvelle chaîne de montage pour le modèle à pare-choc métalisé, une pour le modèle à pare-choc en plastique, etc. Ou on peut décider de faire une chaîne de montage générique, de laquelle sortiront des véhicules non finis, que l'on terminera sur d'autres petites chaînes.

Comment ça marche ?
Premièrement comme indiqué ci dessus, une "abstract class" est incomplète, elle donc non instanciable et doit être héritée. Certaines classes abstraites disposeront de méthodes abstraites (que les classes enfants devront implémenter). Voici un exemple de déclaration :

/** La classe abstraite employée : */ public abstract class Employe { // bla bla bla /** définition d'une méthode abstraite * on notera qu'il n'y a pas d'instruction et un point-virgule à la fin */ public abstract void licencier(); } // Class Ouvrier public class Ouvrier extends Employe { // définition du code de licencier public void licencier() { // on defini le code System.out.println("Dehors !"); } } // Class Patron public class Patron extends Employe { // définition du code de licencier public void licencier() { System.out.println("Veuillez comprendre que dans la conjoncture actuelle ... !"); } }
Toutes les personnes trouvant ce code ridicule sont priées de joindre un autre exemple avec leur mail de protestation :-)

lien : Qu'est ce qu'une interface ?

Qu'est ce qu'une interface ?
auteur : Sébastien Meric
Définiton :
Une interface représente un contrat passé entre plusieurs classes (polymorphisme). En général, l'interface porte un nom de type adjectif, ce qui permet de préciser les aptitudes complémentaires d'une classe. Par exemple :
Runnable = capable d'être exécuté
Drawable = capable de s'afficher

Utilisation / but :
En général, l'interface, spécifie dans son contrat un ensemble de méthodes qui devront être implémentées par les classes qui s'engagent à respecter le contrat. Néanmoins, ceci n'est pas nécessaire et certaines interfaces servent uniquement de marqueur comme par exemple l'interface Serialisable qui permet simplement de préparer une classe à la sérialisation.
La notion d'interface permet ainsi
-> de découper de manière à la fois élégante et très puissante l'aptitude (contrat) de l'implémentation.
Par exemple l'interface Enumeration permet de parcourir une "liste" d'objets d'un bout à l'autre sans se préoccuper l'implémentation sous-jacente (un tableau, une hashtable, Collection, etc.). En effet il suffit de faire un

while (Enumeration e = ...; e.hasNextElement(); ) { MonObjet o = (MonObjet)e.next(); // Faire qqc avec o }
-> De bien séparer les activités, et d'améliorer ainsi la lecture du code. En effet, la seule lecture de la déclaration de la classe nous permet de prendre connaissance de l'intégralité des activités de celle-ci. Par exemple une classe, disons "Ensemble" qui implémente l'interface Sortable nous renseigne dès sa déclaration sur la notion d'aptitude au tri qui lui a été attribuée.

En savoir plus :
Pour en savoir plus sur la notion d'interface, outre les tutoriels java, il est conseillé de chercher de l'information autour des design patterns.
Pour mieux comprendre la notion de séparation des activités, il peut être intéressant de lire les documentations concernant jakarta-avalon.

lien : Qu'est ce qu'une classe abstraite ?

Qu'est ce qu'une méthode 'deprecated' ?
auteur : Clément Cunin
Définition :
Deprecated signifie que la méthode existe toujours pour des soucis de compatibilité ascendante, mais qu'elle n'est plus supportée et est amenée à disparaître dans l'avenir.

Pourquoi :
    Il existe plusieurs raisons pour qu'une méthode soit marquée deprecated.
  • Le plus généralement il s'agit d'un renommage de la méthode. Certaines méthodes sont héritées des toutes premières versions de JAVA, les conventions de nommage n'étant pas toujours respectées, certaines méthodes ont été renommées par la suite... (Les exemples sont très fréquents dans SWING)
  • Quelques méthodes sont devenues obsolètes suite à une évolution de l'architecture de l'Api. (La gestion des dates par exemple)
  • Enfin, certaines méthodes se sont révélées dangereuses et ne doivent plus être utilisées. Les méthodes de la classe java.lang.Thread peuvent conduire a un état incohérant des objets ou un arrêt de l'application (plus d'info)

Marquer ses propres méthodes deprecated :
Si vous créez une librairie ou du code destiné a être utilisé par quelqu'un d'autre, vous pourriez être amené à déconseiller l'emploi d'une méthode. Dans ce cas, un simple tag javadoc suffit.

public class MaClass { /** Une méthode dépréciée * @deprecated */ public void maMethodeDepreciee() { } }
lien : Pourquoi toutes les méthodes de la classe Thread sont marquées "deprecated" ?

Qu'est-ce que la sérialisation ?
auteur : Clément Cunin
Java, permet de sauvegarder l'état d'un objet à un instant donné dans un flux d'octets. On dirigera généralement ce flux dans un fichier pour effectuer une sauvegarde. Le principal avantage de la sérialisation, c'est d'être complètement intégré à l'api Java et donc de ne nécessiter presque aucun code supplémentaire.

Créer une classe sérialisable :
Il suffit simplement que la classe implémente l'interface java.io.Serializable".

public class Writeable implements java.io.Serializable
Note : toutes les variables de la classe doivent également être des objets sérialisables (ou des types primitifs).

Sérialisation d'un object.

try { ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("monFichier.sav")); out.writeObject(monObject1); out.writeObject(monObject2); out.close(); } catch( IOException e ) { }
Désérialisation d'un object.

try { ObjectInputStream in = new ObjectInputStream(new FileInputStream("monFichier.sav")); MonObject1 monObject1 = (MonObject1)in.readObject(); MonObject2 monObject2 = (MonObject2)in.readObject(); in.close(); } catch( ClassNotFoundException e1 ) { } catch( IOException e2 ) { }
Note : Il est possible de ne pas sauvegarder certains attributs de la classe en utilisant le mot clé "transient". Plus d'info ici.

lien : Que signifie le mot-clé transient ?


Consultez les autres F.A.Q's

Les codes sources présentés sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protégée par les droits d'auteurs.

Ce document issu de http://www.developpez.com est soumis à deux licences, en fonction des contributeurs :

- Les contributions de Clément Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies des contributions de Clément Cunin et Johann Heymes tant que cette note apparaît clairement :
"Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement".

- Pour ce qui est des autres contributions : Copyright © 2004 Developpez LLC : Tous droits réservés Developpez LLC. Aucune reproduction, ne peux en être faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright 2000..2004 www.developpez.com