Fig. 1.2 Encapsulation des données
1.3 L’héritage
Le concept permet de définir une nouvelle classe (sous classe, classe dérivée) à partir d’une classe existante (super classe, classe de base) qu’on réutilise en bloc. Dans la classe dérivée on ajoute de nouvelles données et de nouvelles méthodes. La nouvelle classe hérite des propriétés et des aptitudes de l’ancienne. Elle peut ainsi s’appuyer sur des réalisations antérieures et les spécialiser à volonté.
Il faut noter que la classe dérivée a toutes les propriétés et le même comportement que la classe de base et elle peut la remplacer dans les programmes. Très souvent on parle d’héritage comme une relation de type "is a". Ça veut dire que si dans le programme on a besoin d’un objet de classe de base, on peut toujours le remplacer par un objet d’une de ces classes dérivées.
Le contraire n’est pas vrai – si on a besoin d’un objet d’une classe dérivée, on ne peut pas utiliser un objet d’une classe de base. La dernière ne possède pas toutes les propriétés et le comportement de sa classe dérivée.
L'héritage facilite largement la
réutilisation des produits existants, d’autant plus
qu’il peut être réitéré autant de fois
que nécessaire (la classe C peut hériter de B, qui
elle-même hérite de A). Une classe peut avoir plusieurs
classes dérivées. Par contre en Java une classe ne peut
avoir qu’une seule classe de base. En réitérant
plusieurs fois la technique d’héritage on peut arriver
à la création des arbres d’héritage.
Fig.
1.3 Arbre d’héritage
1.4
Le polymorphisme
Une classe peut "redéfinir" (c’est-à-dire modifier) certaines des méthodes héritées de sa classe de base. Cette possibilité est la clé de ce que l’on nomme le "polymorphisme", c’est-à-dire la possibilité de traiter de la même manière des objets de types différents. Cette possibilité est réservée aux objets issus de classes dérivées d’une même classe de base. Plus précisément, on utilise chaque objet comme s’il était de cette classe de base, mais son comportement effectif dépend de sa classe effective (dérivée de cette classe de base). Ce comportement dépend en particulier de la manière dont ses propres méthodes ont été redéfinies. Le polymorphisme permet d’ajouter de nouveaux objets dans un scénario préétabli et, éventuellement, écrit avant d’avoir connaissance du type exact de ces objets
1.5.1 Généralités
Le langage reprend en grande partie la syntaxe des langages C et C++. Java a supprimé des concepts les plus subtils et à la fois les plus déroutants du C et C++:
• L’arithmétique des pointeurs n’existe pas.Fig. 1.4 Portabilité Java
Les fichiers .class ont un format bien défini, dans lequel on conserve aussi les noms des méthodes et des attributs. Certains outils existent sur le marché pour décompiler les classes. C’est efficace, mais pas très légal.
On voit sur la Fig. 1.5 que pendant l’étape de l’exécution le pseudo code est converti vers le code interne de la machine. Il y a deux possibilités – interpréter le pseudo code ou bien optimiser l'exécution en compilant à la volée le pseudo-code en code machine – compilation JIT ("Just In Time").
Fig. 1.5. Compilation est exécution des programmes Java
Dans ce cours nous allons utiliser souvent le concept "Plateforme Java". La plupart des plateformes sont combinaison entre le système d'exploitation et le hardware. La plateforme Java est software plateforme qui travaille sur différents hardware plateformes.
La plateforme Java a deux composants:
·
Java Virtual Machine
·
Java
Application Programming Interface (API)
API - c'est une large collection de
software
composants groupés en bibliothèques appelées
packages
Fig. 1.6 Plateforme Java
public class Bienvenue{
public
static void main (String [] args){
System.out.println("bienvenue
a la programmation Java");
}
}
abstract |
assert |
boolean |
break |
byte |
case |
catch |
char |
class |
const |
continue |
default |
do |
double |
else |
extends |
final |
finally |
float |
for |
goto |
if |
implements |
import |
instanceof |
int |
interface |
long |
native |
new |
null |
package |
private |
protected |
public |
return |
short |
static |
super |
switch |
synchronized |
this |
throw |
throws |
transient |
try |
void |
volatile |
while |
public class Bienvenue{
public
static void main (String [] args){ /* La ligne déclare
le
point d’entré du
programme */
System.out.println("bienvenue
a la programmation Java");
}
}
public class Bienvenue{
public static void main (String [] args){ //
Déclaration du point d’entré
System.out.println("bienvenue a
la programmation Java");
}
}
public class Bienvenue{
/*
public static void main (String [] args){ //
Déclaration du point d’entré
System.out.println("bienvenue a
la programmation Java");
}
*/