Subido por David Wilches

Herencia C# y C++

Anuncio
Comparación lenguajes orientados a POO
Ejemplo Herencia C# y C++
David Francisco Wilches Grimaldos, cod.20231005019
Introducción
En este documento se busca dar un ejemplo de uno de los conceptos básicos de la
programación orientada a objetos como es la herencia en el lenguaje C#, también buscando
una comparación con el lenguaje aprendido en el curso anterior (POO), siendo este C++;
buscando diferencias entre estos y para demostrar el entendimiento de este concepto
independientemente del lenguaje.
Diagrama de clases UML
El siguiente diagrama representa el funcionamiento de los códigos a exponer por medio de
sus clases, este diagrama incluyendo las clases ya mencionadas, atributos y métodos de las
clases a exponer y la relación entre estas.
Código C#
Se explicará el funcionamiento del código en C# clase por clase.
1. Clase padre
private class Padre
{
public string Piel { get; set; } = "Tostada";
public string Ojos { get; set; } = "azules";
public string Cabello { get; set; } = "castaño";
public string Estatura { get; set; } = "alta";
public string Plata { get; set; } = "suficiente";
public string Hobby { get; set; } = "Carros";
public void ImprimirPropiedades()
{
Console.WriteLine($"Piel: {Piel}");
Console.WriteLine($"Ojos: {Ojos}");
Console.WriteLine($"Cabello: {Cabello}");
Console.WriteLine($"Estatura: {Estatura}");
Console.WriteLine($"Plata: {Plata}");
Console.WriteLine($"Hobby: {Hobby}");
}
}
La clase Padre representa un padre, de tal forma que este cuenta con determinados atributos
(categorizados en este caso como strings), en este ejemplo de herencia estos son obtenibles
por el hijo, de tal forma que no se tengan que volver a declarar en la siguiente clase a
excepción que querramos asignar atributos únicos para este, los atributos son los siguientes:






Piel: Representa el color de la piel.
Ojos: Representa el color de los ojos.
Cabello: Representa el color del cabello.
Estatura: Representa la altura.
Plata: Representa la situación financiera.
Hobby: Representa el pasatiempo.
La clase también tiene un método ImprimirPropiedades(), este también se hereda a la clase
hijo, pero con la diferente finalidad de mostrar los atributos declarados anteriormente de las dos
clases, con ($"Estatura: , siendo simple texto y {Estatura} , la forma de “llamar” el
atributo para que se muestre en pantalla.
2. Clase Hijo
class Hijo : Padre
{
public Hijo()
{
Piel = "Morena";
Hobby = "Juegos de azar";
Cabello = "Negro";
Estatura = "Promedio";
}
}
Esta clase como demuestran los dos puntos (:), hereda los atributos de la clase padre y el método
antes descrito, de esta forma todo lo dado en la clase Padre si no queremos asignar diferentes
atributos será tal cual a la clase padre, sin cambio alguno, como en este caso ocurre con los atributos
“ public string Ojos { get; set; } = "azules"; “ y
“Console.WriteLine($"Plata: {Plata}");” , que serán las mismas que las del
padre, pero en el código se muestra como se le brindaron atributos propios a esta clase, ya que un
hijo nunca suele ser un clon exacto a su padre, aunque este si mantiene ciertos atributos en su
herencia.
En este caso el hijo tiene los atributos propios “Piel = "Morena";”, “Hobby =
"Juegos de azar";”, “Cabello = "Negro";”, “Estatura =
"Promedio";”, de tal forma que estos serán diferentes al padre, propios del hijo.
3. Clase Program
class Program
{
static void Main()
{
var papa = new Padre();
var miHijo = new Hijo();
Console.WriteLine("Padre:");
papa.ImprimirPropiedades();
Console.WriteLine("\nHijo:");
miHijo.ImprimirPropiedades();
}
}
La clase Program contiene el método Main(), que es el punto de entrada del programa. En este
método, se crean instancias de las clases Padre y Hijo, por medio de la declaración var() y luego
se imprimen las propiedades de ambas instancias usando el método ImprimirPropiedades();
,presente en ambas clases gracias a la herencia
4. Resultado en pantalla
Código C++
Se explicará el funcionamiento del código en C++ clase por clase, centrándose mas en las
diferencias respecto a C#.
1. Clase padre
#include <iostream>
#include <string>
using namespace std;
class Padre {
public:
string Piel = "Tostada";
string Ojos = "azules";
string Cabello = "castaño";
string Estatura = "alta";
string Plata = "suficiente";
string Hobby = "Carros";
void ImprimirPropiedades() {
cout << "Piel: " << Piel << endl;
cout << "Ojos: " << Ojos << endl;
cout << "Cabello: " << Cabello << endl;
cout << "Estatura: " << Estatura << endl;
cout << "Plata: " << Plata << endl;
cout << "Hobby: " << Hobby << endl;
}
};
A diferencia de C#, se necesitan declarar mas bibliotecas en este lenguaje, además de
“using namespace std;” necesario para la salida a consola, aunque en su lugar mas
para no repetir constantemente lo mismo en cada salida para esta, las clases no se puede
declarar con “{ get; set; }” a diferencia de C# además de la salida de consola
diferentes, siendo lo mas notable kla diferencia de los “signos de puntuación” entre los dos
y por ultimo el punto y coma al terminar el contenido de la clase.
2. Clase Hijo
class Hijo : public Padre {
public:Hijo() {
Piel = "Morena";
Hobby = "Juegos de azar";
Cabello = "Negro";
Estatura = "Promedio";
}
};
Esta clase es muy similar entre los dos lenguajes, destacando la manera igual de declarar los
atributos que son propios de la clase, aunque resalta la diferencia que al heredar la clase también se
tiene que indicar junto con su “grado”, en este caso public Padre, siendo que en C# solo se tiene que
poner el nombre de la clase
3. Clase int main()
int main() {
Padre papa;
Hijo miHijo;
cout << "Padre:" << endl;
papa.ImprimirPropiedades();
cout << "\nHijo:" << endl;
miHijo.ImprimirPropiedades();
return 0;
}
Destaca que el int main() ya no esta dentro de una clase declarada de esta forma, es simplemente la
entrada int main() ,también la diferencia de los constructores de las clases, donde ya no es necesaria
la instrucción propia para esto, siendo en C# “var”, junto con su diferente sintaxis de constructor
de la clase, aunque el constructor del método es igual “
miHijo.ImprimirPropiedades()” al de C# y la inclusión de return 0; para indicar el
retorno sin errores.
4. Resultado en pantalla
El resultado exactamente igual al de C#, sin diferencias apreciables.
Descargar