Conceptos de programación orientada a objetos con C#. Veremos qué son las clases, los objetos, propiedades y métodos de las clases. Aprenderemos a crear constructores e instanciar objetos de una clase, con ejemplos.
C# es un lenguaje de programación orientado a objetos, por lo tanto, los programas y aplicaciones realizados con este lenguaje están compuestos por clases, a partir de las cuales se crean objetos, que colaboran entre sí para resolver los problemas o necesidades de las aplicaciones.
Dicho esto, en un programa con C#, incluso en el más básico, lo que nos vamos a encontrar son clases de programación orientada a objetos, en un número que dependerá de la complejidad de la aplicación. Unas clases más generales dependerán de otras más específicas mediante cualquier tipo de relación, como asociación, uso, composición y por supuesto herencia.
Aunque en este manual vamos a aportar bastantes nociones sobre la programación orientada a objetos no pretendemos dar un curso completo de este paradigma de la programación. Si te lías con los conceptos, eso es algo que se ha abordado con bastante detalle en el Manual de Teoría de la Programación Orientada a Objetos. Si ves que no tienes suficientes conocimientos y te fallan aspectos básicos como clases y objetos te recomendamos que leas ese manual.
Nuestra primera clase en C#
Realmente, incluso para los ejemplos más básicos de C# que hemos visto en el Manual de C#, hemos tenido que desarrollar clases, ya que este lenguaje está completamente orientado a objetos.
El aspecto básico de una clase en C# lo podemos ver a continuación:
using System;
public class Program
{
public static void Main()
{
Console.WriteLine("Hola Mundo!!");
}
}
Como puedes ver una clase se define con la palabra reservada "class
". Además, se antepone la palabra "public
" si queremos que esta clase se pueda acceder desde fuera de este programa.
Luego ponemos las llaves que engloban el código de la clase. Dentro de este código podemos indicar diversos miembros, como propiedades y métodos:
- Las propiedades son los datos que debe de manejar una clase
- Los métodos son las funcionalidades que podrá realizar la clase.
Método Main de las clases
El método Main en una clase de C# contiene código que se puede ejecutar al arrancar un programa. Dentro de todo lenguaje orientado a objetos existe una clase principal, que es la que se sitúa arriba en la jerarquía de clases del programa.
Esta clase principal es desde la que empieza la ejecución del programa y en ella tendremos un método Main. Al ejecutar la clase desde la consola, tal como explicamos en el artículo del Primer programa en C#.
Este método ya lo conocíamos, aunque todavía no hemos desvelado todos sus detalles, como que es un método estático. De todos modos, nos disculparás porque va a permanecer aparcado todavía un poco más, ya que para explicarlo necesitamos conocer nuevos detalles que no hemos contado todavía.
Así que vamos a ver ahora cómo podemos hacer otras cosas, como crear propiedades y métodos adicionales.
Propiedades en las clases
En C# podemos declarar propiedades de las clases simplemente indicando su nombre y su tipo. Haremos esto generalmente al principio del código de la clase.
public class Program
{
int numero;
string cadena;
}
En este código hemos definido dos propiedades en la clase Program. La primera se llama "numero
" y es de tipo entero (int
) y la segunda se llama "cadena
" y es de tipo string
.
Además a las propiedades les podemos asignar una visibilidad, indicando si son públicas, privadas, etc. Eso lo veremos también más adelante.
Métodos de las clases
Además de las propiedades vamos a aprender a definir métodos en las clases. Los métodos son como funciones que pertenecen a las clases y que tienen el código que implementa las funcionalidades que esta clase debe desempeñar.
Para definir métodos usamos un código como el siguiente:
public class Program
{
int numero;
string cadena;
void show() {
Console.WriteLine(this.numero);
Console.WriteLine(this.cadena);
}
}
En este caso hemos definido un método llamado "show
". Se antepone la palabra "void
" porque en C# debemos indicar el tipo de datos que devuelve todo método. En caso que no devuelva ningún dato entonces indicamos "void
" como tipo de devolución.
Luego colocamos los paréntesis y opcionalmente parámetros que el método necesite recibir en su invocación. En este caso nuestro método no recibe ningún parámetro, por lo que colocamos los paréntesis vacíos.
En el caso de los métodos también podemos indicar la visibilidad, como public o private. Lo explicaremos con detalle más adelante.
Variable this
Los métodos se ejecutan normalmente en el contexto del objeto sobre el que se ha invocado un método. Aún no hemos creado ningún objeto por lo que puede costar algo de ver. Enseguida lo haremos y quedará más claro, pero de momento tienes que saber:
- Las clases son definiciones, como un mapa o un libro que define las características de los objetos que está modelando.
- Los objetos son concreciones de un ejemplar de una clase.
Para invocar un método primero necesitamos crear un objeto de una clase. Por ejemplo tenemos la clase "Coche
". El coche tiene un método que se llama "arrancar
". Para poder ejecutar ese método necesitamos crear primero un objeto de la clase "Coche
".
Solo para que lo sepas y por si lo vamos usando más adelante en este manual, en la jerga de la programación orientada a objetos, invocar un método sobre un objeto se denomina "lanzar un mensaje".
Enseguida veremos cómo crear objetos. pero supongamos que hemos creado un coche llamado "TeslaNegro
". Si yo le pido "arrancar
" al "TeslaNegro
", entonces el objeto que arrancará será justamente aquel sobre el que he invocado el método "arrancar
".
Pues bien, dentro de los métodos tenemos la palabra "this
" para referirnos al objeto que recibió ese método. Por tanto, si le pedí arrancar al "Tesla negro
", entonces this
contendrá una referencia justamente a ese objeto Coche
.
Dicho esto, en el método que acabamos de ver, usábamos la variable this
para acceder a las propiedades del objeto que recibieron el método.
void show() {
Console.WriteLine(this.numero);
Console.WriteLine(this.cadena);
}
Métodos constructores
Ahora vamos a aprender a crear constructores de los objetos. Los constructores, a pesar de su nombre, no construyen nada. En realidad ellos se dedican a inicializar aquellas propiedades que deban ser inicializadas durante la construcción de los objetos.
En C# los constructores tienen el mismo nombre que se otorgó a la clase. Por ejemplo aquí podríamos tener un constructor de la clase Program
.
Program(int numero, string cadena) {
this.numero = numero;
this.cadena = cadena;
}
Los constructores son como otros métodos de la clase, pero como puedes apreciar son algo especiales, porque no se indica ningún valor de devolución en ellos.
En los constructores podemos recibir los parámetros que sean necesarios para inicializar los objetos. Estos parámetros pueden ser habitualmente los valores de las propiedades que deseamos inicializar, pero no tiene por qué ser siempre así.
En los constructores usamos this
para referirnos al objeto que se está inicializando en ese momento dado. En nuestro constructor simplemente asignamos los valores de los parámetros recibidos a las propiedades del objeto que se está inicializando.
Cómo instanciar objetos
En Programación Orientada a Objetos usamos el verbo "instanciar" para referirnos al proceso mediante el cual se crea un objeto a partir de una clase. También decimos que tal objeto es una "instancia" de tal clase.
En C# instanciamos objetos con la palabra reservada "new
", indicando a continuación el nombre de la clase del objeto que deseamos crear y luego los paréntesis, indicando en ellos los argumentos requeridos por el constructor de la clase.
Program objetoProgram = new Program(3, "hola");
En este caso hemos declarado una variable "objetoProgram
" que es de tipo "Program
" y se le ha asignado una nueva instancia de la clase "Program
". Al crearse este objeto se invocará al constructor para realizar las tareas de inicialización y se le pasarán los parámetros que ese constructor requiere, en nuestro caso era un entero y una cadena.
Una vez creado un objeto, podemos invocar a sus métodos.
objetoProgram.show()
Eso hará que se ejecute el método show
sobre el objeto objetoProgram
, que acabamos de crear.
Programa completo de una clase con atributos y métodos
Con lo que sabemos ya podemos ver el siguiente código completo de un programa en C# que contiene las propiedades y métodos que hemos visto antes.
using System;
public class Program
{
int numero;
string cadena;
public static void Main()
{
Program objetoProgram = new Program(3, "hola");
objetoProgram.show();
}
Program(int numero, string cadena) {
this.numero = numero;
this.cadena = cadena;
}
void show() {
Console.WriteLine(this.numero);
Console.WriteLine(this.cadena);
}
}
Como puedes ver, en nuestro programa, que es muy simple, las tareas de creación de los objetos se realizan dentro del método Main()
. Como habíamos dicho, Main
se usa para arrancar el programa y se encarga generalmente de instanciar un objeto de programa y pedirle que realice alguna acción que produzca la ejecución de la aplicación.
En este caso esa acción era crear un objeto y pedirle que muestre los valores de sus propiedades con el método show()
.
Hasta aquí hemos dado un primer paseo por las cosas más básicas sobre clases y objetos en C#. Esperamos que te hayan resultado sencillas de entender y puedas experimentar algo más modificando el código de esta clase. En futuros artículos realizaremos cosas más interesantes y aprenderemos otros conceptos de programación orientada a objetos y su aplicación en C#.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...