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.