2024-12-05
Source | |
Branch |
|
Java |
|
Docker |
|
Définition 1 (Objet) Représente une entité avec une identité, un état (attributs) et un comportement (méthodes).
Comportement (Méthodes) : Réagir aux messages selon son état interne, pouvant le modifier.
État Interne (Attributs) : Noms et valeurs décrivant l’état.
Encapsulation : Cache l’état interne et fournit des méthodes pour y accéder, améliorant la sécurité et l’évolutivité.
Avantages
Inconvénients
Voiture
:
marque
, modèle
, année
, couleur
.démarrer()
, arrêter()
, accélérer()
.Voiture
:
voiture1
: marque=“Toyota”, modèle=“Corolla”, année=2020, couleur=“Rouge”.voiture2
: marque=“Honda”, modèle=“Civic”, année=2018, couleur=“Bleue”.class
, basée sur des prototypes.Figure 1: Les Voiture en UML
public class Voiture {
private String marque;
private String modele;
private int annee;
private String couleur;
private static int nombreDeVoitures = 0;
public Voiture(String marque, String modele, int annee, String couleur) {
this.marque = marque;
this.modele = modele;
this.annee = annee;
this.couleur = couleur;
nombreDeVoitures++;
}
public void demarrer() {
System.out.println(marque + " " + modele + " démarre.");
}
public void arreter() {
System.out.println(marque + " " + modele + " s'arrête.");
}
public void accelerer(int vitesse) {
System.out.println(marque + " " + modele + " accélère à " + vitesse + " km/h.");
}
public static int getNombreDeVoitures() {
return nombreDeVoitures;
}
}
class Voiture:
nombre_de_voitures = 0
def __init__(self, marque, modele, annee, couleur):
self.marque = marque
self.modele = modele
self.annee = annee
self.couleur = couleur
Voiture.nombre_de_voitures += 1
def demarrer(self):
print(f"{self.marque} {self.modele} démarre.")
def arreter(self):
print(f"{self.marque} {self.modele} s'arrête.")
def accelerer(self, vitesse):
print(f"{self.marque} {self.modele} accélère à {vitesse} km/h.")
@classmethod
def get_nombre_de_voitures(cls):
return cls.nombre_de_voitures
class Voiture(
private val marque: String,
private val modele: String,
private val annee: Int,
private val couleur: String
) {
companion object {
var nombreDeVoitures: Int = 0
private set
}
init {
nombreDeVoitures++
}
fun demarrer() {
println("$marque $modele démarre.")
}
fun arreter() {
println("$marque $modele s'arrête.")
}
fun accelerer(vitesse: Int) {
println("$marque $modele accélère à $vitesse km/h.")
}
}
class Voiture {
private static nombreDeVoitures: number = 0;
constructor(
private marque: string,
private modele: string,
private annee: number,
private couleur: string
) {
Voiture.nombreDeVoitures++;
}
public demarrer(): void {
console.log(`${this.marque} ${this.modele} démarre.`);
}
public arreter(): void {
console.log(`${this.marque} ${this.modele} s'arrête.`);
}
public accelerer(vitesse: number): void {
console.log(`${this.marque} ${this.modele} accélère à ${vitesse} km/h.`);
}
public static getNombreDeVoitures(): number {
return Voiture.nombreDeVoitures;
}
}
// Constructeur Voiture
function Voiture(marque, modele, annee, couleur) {
this.marque = marque;
this.modele = modele;
this.annee = annee;
this.couleur = couleur;
Voiture.nombreDeVoitures++;
}
// Propriété statique pour compter le nombre de voitures
Voiture.nombreDeVoitures = 0;
// Méthodes de la classe Voiture
Voiture.prototype.demarrer = function() {
console.log(this.marque + " " + this.modele + " démarre.");
};
Voiture.prototype.arreter = function() {
console.log(this.marque + " " + this.modele + " s'arrête.");
};
Voiture.prototype.accelerer = function(vitesse) {
console.log(this.marque + " " + this.modele + " accélère à " + vitesse + " km/h.");
};
// Méthode statique pour obtenir le nombre de voitures
Voiture.getNombreDeVoitures = function() {
return Voiture.nombreDeVoitures;
};
Orienté objet : Encourage la modélisation des problèmes sous forme d’objets.
Portable : Grâce à la JVM, permet de “Compiler une fois, exécuter partout”.
Sécurité : Typage fort et mécanismes de vérification préventifs.
Multi-Tâche : Supporte la programmation multi-thread pour l’exécution concurrente.
Dynamique : Permet le chargement des classes pendant l’exécution.
Complet : Bibliothèque riche d’API pour le développement d’applications (IHM, réseau, bases de données, etc.).
Interprété mais compilé : Compilation en bytecode portable et interprétation par la JVM avec optimisations JIT. Intégration de l’AOT et optimisation JIT pour améliorer les performances.
La classe peut être compilée: javac BonjourATous.java
puis exécutée:java BonjourATous
Bonjour a tous !
il est aussi possible de consulter le bytecode: javap -c BonjourATous.class
Compiled from "BonjourATous.java"
class BonjourATous {
BonjourATous();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #7 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #13 // String Bonjour a tous !
5: invokevirtual #15 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}
Implantation de Référence : Fournie par Oracle, consultez la documentation Java SE.
Java Development Kit (JDK) : Utilisé pour le développement et l’exécution des programmes Java.
Java Runtime Environment (JRE) : Utilisé uniquement pour l’exécution des programmes Java.
Gestion des Versions :
E. Bruno