IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)



Qu'est ce qu'une classe abstraite ?
auteur : Sébastien Meric
auteur : 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 :

<comment>La classe abstraite employée :</comment>public abstract class Employer<comment> bla bla bla </comment><comment>définition d'une méthode abstraiteon noterra qu'il n'y a pas d'instruction et un point-virgule à la fin</comment>public abstract void licencier();<comment>Class Ouvrier</comment>public class Ouvrier extends Employe<comment> définition du code de licencier</comment>public void licencier()<comment>on defini le code ;</comment>System.out.println("Dehors !");<comment>Class Patron</comment>public class Patron extends Employer<comment> définition du code de licencier</comment>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 :
Runable = 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();<comment>Faire qqc avec o </comment>
-> 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équant 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 <javaClass class="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 <comment_javadoc>Une méthode dépréciée @deprecated</comment_javadoc>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 <javaInterface classe="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.

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

tryObjectInputStream 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 ?


Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduit en français ici.
Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.