Plan du cours Java
Introduction
Ce document n'est pas un cours de Java mais simplement la trame de mon cours.
Un petit cours de Java en Français et au
format PDF (visible grâce à Adobe
Acrobat Reader) a été écrit par Sylvain Ferey. L'une
des bibles de référence en matière de langage Java demeure
le cours intitulé Thinking in Java
(attention 1000 pages au format PDF !). En dehors de cela de nombreuses ressources Java existent sur Internet, par exemple le cours Java du Club des développeurs.
Pour ma part et après pas mal de recherches j'ai choisit cette année d'adosser en partie mon cours au cours intitulé "Programmation Java pour les enfants, les parents et les grands-parents" écrit par Yakov Fain, Vincent Lataye et Maxime Daniel. J'ai installé ce cours sur un serveur local à l'Université par commodité mais vous pouvez également le trouver en ligne sur le site du Club des développeurs. Bien entendu, ce cours ne sera que la trame de l'enseignement Java et sera complété par grosse quantité de Travaux Pratiques.
Les meilleurs cours/tutorials sur Java
Programmation Objet : principes de base
Evolution des langages
- Langage binaire ou hexadécimal
- Assembleur
- Langages structurés (appels de sous programmes)
- programmation dirigée par les traitements à effectuer sur les données
- problème de réutilisabilité du code
- problème de maintenance de code de plus en plus complexe
- Encapsulation : intégration au sein d'une même entité des données et des procédures
manipulant ces données
- entité = objet
- langage = langage orienté par les objets
- programme = ensemble d'objets qui coopèrent
- un objet est défini par son comportement et non sa structure ==> grande
abstraction
Les quatre bases des langages objet
- Encapsulation
- Polymorphisme
- Héritage
- Liaison dynamique
Généralités sur le langage Java
Bref historique
- Naissance en 1990 (avant le Web) dans les bureaux de Sun Microsystems sous le
nom de Oak
- Destiné à de petites machines grand public (téléphone portable, domotique, ...)
- En 1994 redéfinition des bases pour une utilisation axée vers Internet : Java
(café en argot américain)
Principales caractéristiques
- Simplicité
- Véritable langage objet
- Robustesse
- Importante collection de classes standards (y compris graphiques)
- Indépendance de la machine ==> Java Virtual Machine
- Mini parralélisme des tâches ==> Multi-thread
- Sécurité
- Distribué ==> Applet Java accessible depuis un navigateur
Avatanges par rapport aux autres langages objet
- Dernier en date des langages objet
- Trés fortement typé
- Gestion automatique de la mémoire ==> Garbage Collecting
- Librairies standards
- Aucune gestion des pointeurs tant pour les appels de méthodes que pour l'allocation
dynamique
Et Javascript alors ?
Javascript n'est pas Java !!! Javascript ne reprend quasiment aucune des puissantes
cactéristiques des langages objet en général et de Java en particulier. Nous
en reparlerons un peu plus tard...
Environnements de développement
Le Java Devlopment kit (JDK)
- La référence standard dans le monde Java
- Completement "Open Source Access"
- Versions de référence
- JDK 1.0 en 1994 avec 8 packages
- JDK 1.1 en 1995 avec 12 packages
- JDK 1.1.7 début 1998 avec 22 packages
- JDK 1.2 fin 1998/début 1999 avec 59 packages
- JDK 1.2.1 courant 1999
- JDK 1.3 courant 2000
- Outils principaux du JDK
- javac le compilateur
- java l'interprete de commandes
- jdb un débogueur en mode ligne
- appletviewer un visualisateur d'applets
- javadoc le générateur de documentation
Les logiciels du commerce
- Kawa (utilise le JDK)
- Symantec Visual Café
- Borland JBuilder
- IBM Visual Age pour Java
- Microsoft Visual J++
- Eclipse (environnement de développement multi-langages libre)
Microsoft Visual J++
- Machine virtuelle propre
- Premières versions trés contestées par la communauté Java
- Environnement puissant mais complexe à maîtriser
- Attention aux outils et classes "Microsoft propriétaires"
Eclipse
- Basé sur le Java Dev Kit (qui doit être installé !)
- Plateforme de développement identique pour plusieurs langages
- travail communautaire
- Trés gourmand en ressources machine
Langage Java : les bases
Syntaxe exacte du C
Hello world !
Compilation et exécution
- Génération de p-code depuis le code source *.java ==> fichiers *.class
- Autant de *.class que de classes dans le fichier source *.java
- Le fichier contenant la méthode main doit porter le nom de la classe déclarée public
- Compilation et exécution depuis l'environnement J++ ou à l'aide des outils du JDK
Particularités de Java par rapport à C
- Noms de variables
- Stockage par valeur (types simples) ou par adresse (classes)
- Aucun opérateur de manipulation des adresses
- Initialisation obligatoire des variables
- true et false existent !
- Création de variables par déclaration simple ou par l'opérateur new()
- Levée d'exceptions
- Tableaux : déclaration et réservation de place mémoire exercices
simples sur les tableaux
- Les classes String et StringBuffer
- Méthode main et arguments de ligne de commande
Définition d'une classe
- Les règles d'obtention d'une bonne classe
- avoir une interface utilisateur claire et complète
- représenter un concept clair
- être aussi complete que possible
- être robuste
- Une classe n'est pas un objet ! : le concept d'instance la classe Article (prixHT, referenceArticle)
- Les attributs et les méthodes d'une classe
- L'accès aux attributs et méthodes : le mot clé this ajout d'une méthode afficheArticle à la classe Article
- Les attributs et méthodes de classe : le mot clé static ajout tauxTVA et changeTauxTVA à la classe ArticleAlimentaire
- Constructeurs de classe : par défaut, définis, surcharges
- Destructeurs de classe : méthode finalize() et Garbage Collector
écriture d'une classe ListeEntier
Héritage
- Principes de l'héritage : le mot clef extends, les attributs et méthodes de
la classe mere les classes ArticleAlimentaire et ArticleLuxe
- Une sous-classe est implicitement une instance de sa classe mère
- L'héritage est dynamique : toute modiffication de la classe mère est répercutée sur
la fille
- Pas de véritable héritage multiple en Java, mis à part le mécanisme d'interface (cf
ci-aprés)
- Toute classe hérite d'une autre classe : la classe générique Object
- Puissance de l'héritage par rapport à la programmation fonctionnelle écrire une procedure fonctionnelle d'affichage
Polymorphisme et surcharge
- Redéfinir des attributs et méthodes de la classe mère : polymorphisme d'héritage
tauxTVA ou afficheArticle de ArticleAlimentaire
- La méthode invoquée est fonction du type de la variable au moment de l'appel
- Accès aux méthodes de la classe mère : le mot clef super
- Accès implicite au constructeur de la classe mère
- Surchage de méthodes : les paramètres doivent être différents
- Interdire la redéfinition d'une méthode ou la modification d'un attribut : le mot clef
final
- Simuler des variables globales en Java : une classe final avec des attributs static
final public final class Globales {public static final int
CONSTANTE = 10}
écriture d'une classe ListeEntierTriee
Classes abstraites et interfaces
- Classe sans existence réelle : le mot clef abstract la classe abstraite oiseaux
- Réelle utilité des classes abstraites
- Définition d'une spécification de classe : le mot clef interface (classe
abstraite dont toutes les méthodes sont abstraites et tous les attributs finaux)
- Hériter d'une interface : le mot clef implements
- Problème de l'héritage multiple : l'héritage en diamant
- Interfaces et héritages multiples : une classe peut hériter de plusieurs interfaces
Encapsulation
- Parties publiques (accessibles depuis les autres classes) c'est l'interface
de la classe
- Parties privées (accessible seulement depuis les méthodes de la classe) c'est
l'implémentation des services de la classe
- Accessible les autres membres de la classe : le mot clef private
- Accessible depuis toutes les méthodes de la classe et de ses sous-classes : le mot clef
protected
- Accessible aux autres membres du même package : par défaut (friendly)
- Accessible à toutes les méthodes de tous les packages : le mot clef public
- Il est plus facile de déprotéger que le contraire !
Packages Java
- Définition
- Importation de tout ou partie d'un package : la clause import
- Utilisation des noms longs
- Création de packages
- Lien entre package et système de fichiers
- Packages standards au format pkZip
- Principaux packages Java
- java.lang
- java.io
- java.util
- java.net
- java.awt
- java.applet
- La variable CLASSPATH
Les exceptions en Java
- Définition et principes
- Déclencher une exception : les mots clefs throws et throw la classe NombreComplexe
- Obligation de remonter les exceptions dans les méthodes appelantes
- Capturer une exception : le bloc try ... catch dans
main de la classe NombreComplexe
- Avantages : simplification des programmes, rigueur, obligation de traitement
Transformation des String en Integer dans la
classe ListeEntier
Les applets
- Différences entre Applet et applications : HTML, chargement dynamique via le réseau,
sécurité, déport du traitement vers le client (vs CGI scripts)
- Bivalence Applet et application
- Chargement d'une applet Applet HelloWorld
- Cycle de vie d'une applet : init(), start(), stop(), destroy(),
paint()
-
Le package AWT : Abstract Windowing Toolkit
- Pour quoi faire ?
- La classe mere de la plupart des classes graphiques : la classe Component
- Le regroupement de composants : la classe Container
- Conception d'une applet graphique
- création des fenêtres principales
- initialisation des ressources (couleurs, polices, ...)
- création des menus, boîtes de dialogue, ...
- implémentation des fonctionnalités du programme
- Les gestionnaires d'emplacements de la classe Container : BorderLayout,
FlowLayout, GridLayout, GridBagLayout, CardLayout
- Gestion des évenements dans une applet