¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. C# 10 y Visual Studio Code
  3. Programación orientada a objetos
Extrait - C# 10 y Visual Studio Code Fundamentos del lenguaje
Extractos del libro
C# 10 y Visual Studio Code Fundamentos del lenguaje
1 opinión
Volver a la página de compra del libro

Programación orientada a objetos

Principios de la programación orientada a objetos

La programación orientada a objetos (POO) es un paradigma muy extendido en desarrollo de software. Viene a completar un panorama que ya es muy rico del paradigma de procedimientos, así como del funcional.

La POO es una forma de diseño de código que aspira a representar los datos y las acciones como si formaran parte de clases; ellas mismas se convierten en objetos durante su creación en memoria. Este concepto se ha presentado rápidamente en el capítulo anterior: ahora es el momento de comprender su funcionamiento de manera más detallada.

1. ¿Qué es una clase?

Una clase es un elemento del sistema que forma la aplicación. Una clase contiene dos tipos de elementos de código: datos y métodos (acciones). Hay que ver la clase como una caja donde se pueden ordenar estos dos tipos de elementos. Para hacer un paralelismo con la vida real, se puede comprender fácilmente que la definición de una clase se aplica a un objeto como un ordenador, por ejemplo. Este último dispone de métodos (encender, apagar, etc.), así como de propiedades (número de pantallas, cantidad de RAM, etc.).

De manera conceptual, una clase solo es una definición. Una vez que haya decidido lo que debe contener, así como sus métodos, es conveniente crearla. Esta acción se llama instanciación. Tras esta operación, se obtiene una instancia en memoria de un objeto.

Vamos a intentar hacer una comparación. Tomemos el ejemplo de una fábrica de producción de objetos de madera. Para poder crear un objeto, se necesita un plan (la clase). Gracias a este último, la máquina puede cortar y juntar los diversos elementos (datos y métodos) para crear una instancia nueva (instanciación).

En C#, la declaración de una clase se hace con la palabra clave class. Hay algunas posibles particularidades, especialmente el ámbito, que se estudiará justo después, en la sección ¿Qué se puede declarar dentro de una clase? - Métodos, así como el concepto de static y el de partial. La sintaxis completa de la declaración de una clase es la siguiente:

AMBITO [static] [partial] class NOMBRE_CLASE 

El nombre de la clase es libre, pero debe cumplir dos normas:

  • Solo puede contener...

Conceptos avanzados

Después de haber visto los conceptos básicos de la POO, es el momento de descubrir algunos conceptos avanzados.

1. Herencia avanzada

Cuando hemos abordado la cuestión de la herencia, lo hemos hecho a través del prisma de una clase Y que hereda de otra clase X; estas dos clases se pueden crear.

a. Métodos virtuales

Cuando una clase hereda de otra, esta disfruta de manera natural de los métodos y de los datos presentes en la clase madre. Sin embargo, para algunas necesidades puede suceder que la clase hija tenga que redefinir algunos métodos. Para que eso sea posible, la clase madre debe declarar estos métodos como virtuales, lo que significa que definen un funcionamiento concreto, pero sigue siendo posible sobrecargar este funcionamiento. En este funcionamiento intervienen dos palabras clave:

  • A nivel de la clase madre, es necesario añadir la palabra clave virtual antes del nombre del método.

  • A nivel de la clase hija, es necesario añadir la palabra clave override antes del nombre del método que se quiere sustituir.

En concreto, imaginemos que nuestra clase Ordenador dispone de un método Encender, que muestra «Encendido en proceso...», pero se quiere mostrar «Su Mac se inicia...» dentro del caso de la clase Mac. Hay varias maneras de responder a esta necesidad; una posible solución es sustituir el contenido del método Encender:

public class Ordenador 
{ 
    public virtual void Encender() 
    { 
        Console.WriteLine("Encendido en proceso..."); 
    } 
} 
 
public class Mac : Ordenador 
{ 
    public override void Encender() 
    { 
        Console.WriteLine("Su Mac se inicia..."); 
    } 
} 

Cuando se llama al método Encender de un objeto que resulta ser un Mac, la consola muestra «Su Mac se inicia...», y lo mismo en el caso donde se ha usado el concepto de polimorfismo:

Ordenador mac = new Mac(); 
mac.Encender(); 

Esto se debe sencillamente al hecho de que la variable es de tipo Ordenador, pero se ha colocado una instancia de Mac dentro. Durante...

Ejercicio

Ahora que ha adquirido las nociones del desarrollo orientado a objetos, es el momento de pasar a la práctica a través de un ejercicio.

1. Enunciado

El objetivo de este ejercicio es poder gestionar un garaje. El garaje realiza varias operaciones en los coches:

  • Repintar un coche para cambiar el color.

  • Reparar el coche.

  • Hacer el mantenimiento del coche y actualizar la fecha del último mantenimiento.

El garaje también se ocupa de los camiones, pero solo para repararlos.

 A excepción de asignar o de leer posibles propiedades, las acciones no harán más que mostrar en la consola, gracias al método WriteLine, la acción en cuestión.

Un coche tiene marca, color, fecha de revisión y un indicador de buen funcionamiento.

El pequeño escenario para implementar es el siguiente:

  • Crear un garaje.

  • Crear dos coches (un Peugeot azul y un Ferrari rojo) y un camión.

  • Reparar el Peugeot y el camión, y hacer mantenimiento en el Ferrari.

  • Repintar el Peugeot de color verde.

2. Solución

Tras una simple lectura del enunciado existen, como suele suceder, muchas maneras de resolver este ejercicio correctamente. En este caso, el planteamiento es poner en práctica lo que hemos visto en este capítulo.

Al principio, hay que empezar por crear la jerarquía que permite gestionar los tipos Coche y Camion. Estos últimos se pueden reparar; de ahí la conveniencia...