L'héritage entre classes - La classe Vecteur
Objectif:
- Créer une classe dérivée.
- Ajouter des méthodes à une classe dérivée.
- Redéfinir des méthodes dans une classe dérivée.
Énonce:
Définir une classe Vecteurs2D caractérisée par l’abscisse X et l’ordonné Y, ainsi qu’un attribut qui renseigne sur le nombre de vecteurs créés lors de l’exécution du programme.
Définir les constructeurs (par défaut, d’initialisation et de recopie), et les accesseurs aux différents attributs.
Définir les méthodes ToString et Equals, la première retourne une chaine de caractères représentant l’abscisse et l’ordonné du vecteur comme suit : X = 1.5 - Y=2, la deuxième retourne True lorsque l’abscisse et l’ordonné des deux vecteurs sont égaux.
Définir une méthode Norme qui retourne la norme d’un vecteur, cette méthode peut être redéfinie dans les classes dérivées.
Définir une classe Vecteurs3D dérivée de la classe Vecteur2D qui contient, en plus des propriétés de la classe de base, la propriété Z symbolisant la troisième dimension.
Définir les constructeurs (par défaut, d’initialisation et de recopie) de cette classe, ainsi que les accesseurs des propriétés.
Redéfinir les méthodes ToString et Equals pour intégrer la troisième propriété.
Redéfinir la méthode Norme pour qu’elle retourne la norme d’un vecteur dans l’espace.
Définir un programme de test permettant de créer deux objets de type Vecteurs2D et deux autres de type Vecteurs3D. Afficher les informations de tous les objets, et tester les méthodes Equals et Norme. Afficher le nombre d’objet créés.
****Vecteur 2D****
Vecteur 1:
Donner X: 1
Donner Y: 2
X=1 Y=2
La norme est: 2,23606797749979
Vecteur 2:
Donner X: 1
Donner Y: 2
X=1 Y=2
La norme est: 2,23606797749979
Les deux vecteurs sont identiques
****Vecteur 3D****
Vecteur 1:
Donner X: 1
Donner Y: 1
Donner Z: 1
X=1 Y=1 Z=1
La norme est: 1,73
Vecteur 2:
Donner X: 1
Donner Y: 2
Donner Z: 1
X=1 Y=2 Z=1
La norme est: 2,44
Non identiques
Le nombre de vecteurs crées est: 4
La classe Vecteur 2D:
//Auteur : CHAOULID //Copyright : Exelib.net
class Vecteur2D { private double x; private double y; private static int nb_vecteurs = 0; public double X { get { return x; } set { x = value; } } public double Y { get { return y; } set { y = value; } } public static int Nb_vecteurs { get { return nb_vecteurs; } } public Vecteur2D() { nb_vecteurs++; } public Vecteur2D(double x, double y) { this.x = x; this.y = y; nb_vecteurs++; } public Vecteur2D(Vecteur2D v) { x = v.x; y = v.y; nb_vecteurs++; } public override string ToString() { return "X="+x+" Y="+y; } public virtual double Norme() { return Math.Sqrt(x * x + y * y); } public override bool Equals(object obj) { if (obj == null) //Comparer à null return false; else if (obj == this) //Comparer à lui même return true; else if (obj.GetType() != this.GetType()) //Deux types incomparables return false; else { Vecteur2D v = (Vecteur2D)obj; //Convertir l'objet en vecteur if (this.x == v.x && this.y == v.y) //Comparer le contenu return true; else return false; } } }
La classe Vecteur 3D:
class Vecteur3D : Vecteur2D { private double z; public double Z { get { return z; } set { z = value; } } public Vecteur3D() : base() { } public Vecteur3D(double x, double y, double z) : base(x, y) { this.z = z; } public Vecteur3D(Vecteur3D v) : base(v.X, v.Y) { z = v.z; } public override string ToString() { return base.ToString()+" Z="+z; } public override bool Equals(object obj) { if (obj == null) //Comparer à null return false; else if (obj == this) //Comparer à lui même return true; else if (obj.GetType() != this.GetType()) //Deux types incomparables return false; else { Vecteur3D v = (Vecteur3D)obj; //Convertir l'objet en vecteur if (this.X == v.X && this.Y == v.Y && this.z==v.z) //Comparer le contenu return true; else return false; } } public override double Norme() { return Math.Sqrt(X * X + Y * Y + z * z); } }
Le programme de test (un exemple):
class Program { static void Main(string[] args) { double x, y,z; Console.Out.WriteLine("****Vecteur 2D****"); Console.Out.WriteLine("Vecteur 1:"); Console.Out.Write("Donner X: "); x = double.Parse(Console.In.ReadLine()); Console.Out.Write("Donner Y: "); y = double.Parse(Console.In.ReadLine()); Vecteur2D V1 = new Vecteur2D(x, y); Console.Out.WriteLine(V1); Console.Out.WriteLine("La norme est: " + V1.Norme()); Console.Out.WriteLine("Vecteur 2:"); Console.Out.Write("Donner X: "); x = double.Parse(Console.In.ReadLine()); Console.Out.Write("Donner Y: "); y = double.Parse(Console.In.ReadLine()); Vecteur2D V2 = new Vecteur2D(x, y); Console.Out.WriteLine(V2); Console.Out.WriteLine("La norme est: " + V2.Norme()); if (V1.Equals(V2)) Console.Out.WriteLine("Les deux vecteurs sont identiques"); else Console.Out.WriteLine("Non identiques"); Console.Out.WriteLine("****Vecteur 3D****");
Console.Out.WriteLine("Vecteur 1:"); Console.Out.Write("Donner X: "); x = double.Parse(Console.In.ReadLine()); Console.Out.Write("Donner Y: "); y = double.Parse(Console.In.ReadLine()); Console.Out.Write("Donner Z: "); z = double.Parse(Console.In.ReadLine()); Vecteur2D V3 = new Vecteur3D(x, y,z); Console.Out.WriteLine(V3); Console.Out.WriteLine("La norme est: " + V3.Norme()); Console.Out.WriteLine("Vecteur 2:"); Console.Out.Write("Donner X: "); x = double.Parse(Console.In.ReadLine()); Console.Out.Write("Donner Y: "); y = double.Parse(Console.In.ReadLine()); Console.Out.Write("Donner Z: "); z = double.Parse(Console.In.ReadLine()); Vecteur2D V4 = new Vecteur3D(x, y,z); Console.Out.WriteLine(V4); Console.Out.WriteLine("La norme est: " + V4.Norme()); if (V3.Equals(V4)) Console.Out.WriteLine("Les deux vecteurs sont identiques"); else Console.Out.WriteLine("Non identiques"); Console.Out.WriteLine("Le nombre de vecteurs crées est: " + Vecteur2D.Nb_vecteurs); Console.ReadKey(); } }