gentoo linux, java, software libre y otras hierbas
nov, 20 2008 - 7:30 pm

Programación Orientada a Objetos en C Sharp

La POO es un paradigma de programación que intenta abstraer los módulos de cada programa en objetos. Los objetos son instancias de clases, en las que se declaran/especifican al menos dos cosas: los atributos, los métodos y opcionalmente los constructores.

Los atributos son las variables que posee el objeto, mientras que los métodos son las funciones o procedimientos que podemos invocar para realizar operaciones especí­ficas sobre los atributos.

Como en Java, en C Sharp utilizamos siempre clases y objetos, aún cuando no tengamos claro el concepto. Por ejemplo, el simple hola mundo:

using System;
class Hola{
   static void Main(string[] args){
      Console.WriteLine("Hola parce!");
   }
}

En cada lí­nea de código estamos usando la programación orientada a objetos: lí­nea 1, creamos una clase (llamada Hola); lí­nea 2, declaramos un método (función) para nuestra clase; lí­nea 3, usando la clase Console invocamos el método WriteLine. Todo, programación orientada a objetos.

Ejemplo de POO en C Sharp

En el siguiente ejemplo tomado del libro Cómo programar en C Sharp de Deitel, se utiliza una clase llamada tiempo. Dicha clase posee tres atributos (hora, minuto, segundo; todos variables enteras), y tres métodos. Vamos con el código, y mí¡s abajo una explicación:

using System;
public class Tiempo
{
  private int hora;    // 0 -23
  private int minuto;  // 0-59
  private int segundo;  // 0-59
  // Constructor de la clase Tiempo que inicialize
  //las variables a cero para poner la hora en media noche
  public Tiempo()
  {
     cambiarHora( 0, 0, 0 );
  }
  // este metodo asigna una nueva hora en formato 24-horas.
  public void cambiarHora(
     int valorHora, int valorMinuto, int valorSegundo )
  {
     hora = ( valorHora >= 0 && valorHora < 24 ) ?
        valorHora : 0;
     minuto = ( valorMinuto >= 0 && valorMinuto < 60 ) ?
        valorMinuto : 0;
     segundo = ( valorSegundo >= 0 && valorSegundo < 60 ) ?
        valorSegundo : 0;
  }
  // convertir a hora universal con el metodo format
  public string horaUniversal()
  {
     return String.Format(
        "{0:D2}:{1:D2}:{2:D2}", hora, minuto, segundo );
  }
  // convertir a tiempo estandar (12 horas) usando el metodo format
  public string horaEstandar()
  {
     return String.Format( "{0}:{1:D2}:{2:D2} {3}",
        ( ( hora == 12 || hora == 0 ) ? 12 : hora % 12 ),
        minuto, segundo, ( hora < 12 ? "AM" : "PM" ) );
  }
}
  • En la segunda lí­nea vemos la instrucción public class Tiempo; esto no es mí¡s que la declaración de nuestra clase. Las clases por lo general son de tipo public, aunque si usamos clases internas anónimas es recomendable que sean private, aunque eso es otro tema… sigamos.
  • En las lí­neas 4, 5 y 6 tenemos la declaración de los atributos de nuestra clase. Fí­jate como todos ellos son private; es un buen tip de programación que los atributos de nuestras clases sean privados, lo que significa que sólamente serí¡n accesibles desde los métodos de la clase.
  • En la lí­nea 9 tenemos la declaración de un constructor. Los constructores son los métodos invocados en el momento de crear objetos; su función es la darle valores a los atributos del objeto. Podemos tener cuantos constructores necesitemos, por supuesto con diferente tipo de argumentos. Ademí¡s, es necesario tener en cuenta que los constructores son métodos que NO tienen ningún valor de retorno, y que deben llevar el mismo nombre de la clase.
  • En las lí­neas 14, 25 y 31 estí¡n declarados los métodos o funciones, que permiten realizar operaciones sobre nuestro objeto. Por ejemplo, el método cambiarHora recibe tres argumentos, con los cuales modifica los atributos. Por lo general, los métodos de las clases son de tipo public, lo que permite invocarlos directamente a través de una instancia de la clase (es decir, un objeto).

Con el siguiente código, utilizamos la clase Tiempo:

using System;
class PruebaTiempo {
  static void Main( string[] args ) {
     Tiempo tiempo = new Tiempo();  // llamada al constructor de Tiempo
     string salida;
     // mostrar datos iniciales
     salida = "Hora universal inicial es: " +
        tiempo.horaUniversal() +
        "\nHora estandar inicial es: " +
        tiempo.horaEstandar();
     // cambiar hora (valida)
     tiempo.cambiarHora( 13, 27, 6 );
     // aniadir nueva hora a la salida
     salida += "\n\nHora universal despues de cambiada: " +
        tiempo.horaUniversal() +
        "\nHora estandar despues de cambiada: " +
        tiempo.horaEstandar();
     // cambiar hora (invalida)
     tiempo.cambiarHora( 99, 99, 99 );
     salida += "\n\nDespues de poner valores invalidos: " +
        "\nHora universal: " + tiempo.horaUniversal() +
        "\nHora estandar: " + tiempo.horaEstandar();
     Console.WriteLine( salida );
  }
}
  • En la lí­nea 3 creamos un objeto de tipo tiempo. Por lo general la sintaxis para crear objetos es la siguiente: Clase objeto = new Clase(). Es decir, el nombre de la clase, el nombre del objeto, y posteriormente se incia el objeto haciendo una invocación al constructor de la clase (anteponiendo la instrucción new).
  • En la lí­nea 8, invocamos uno de los métodos de la clase (horaUniversal). La sintaxis para la invocación de los métodos es: objeto.nombreMetodo(arg1, arg2, ...). Así­, en la lí­nea 12 podemos ver otro ejemplo de invocación, en la que pasamos algunos argumentos al método.

El resultado del programa es el siguiente:

Hora universal inicial es: 00:00:00
Hora estandar inicial es: 12:00:00 AM

Hora universal despues de cambiada: 13:27:06
Hora estandar despues de cambiada: 1:27:06 PM

Despues de poner valores invalidos:
Hora universal: 00:00:00
Hora estandar: 12:00:00 AM

Descargar código fuente

Acceso a los atributos de un objeto

Si al momento de declarar los atributos de una clase utilizamos el modificador de acceso public, es posible acceder a dichos atributos directamente de la siguiente manera: objeto.variable; ó objeto.variable = unValor;. Esto por supuesto NO es recomendable, es decir, los atributos de una clase deberí­an ser SIEMPRE privados.

De igual forma, si hemos declarado atributos con el modificador de acceso private, NO es posible acceder directamente a ellos. Así­ que para modificarlos, debemos crear métodos de acceso público, algo por supuesto mí¡s seguro. Si intentamos acceder directamente a atributos que se han declarado como privados, obtendremos errores de compilación.

Los ejercicios utilizados en este post están basados en ejemplos del libro C# How to Program de Deitel. Se pone a disposición la descargar del programa original, desarrollado para trabajar sobre Visual Studio de Microsoft en plataformas Windows, y se encuentra en inglés. La versión simplificada está basada en la original, pero sin código basura insertado por Visual Studio, se encuentra en español y ha sido probada sobre Gnu/Linux usando Mono.

19 Comentarios | deja el tuyo

3 enlaces entrantes

16 Comentarios en “Programación Orientada a Objetos en C Sharp”

  1. clara tolentino monter dice:

    ps esta muiii interezzant
    tu pagg
    lastima que no hagas tareazzz
    bababe

  2. andy dice:

    Hola, muy interesantes tus recursos, sólo una preguntilla, cuál es el editor que utilizas para lograr que el código se vea línea por línea (una gris y otra blanca), se ve nice eso, saludos ;)

  3. mariel dice:

    gracias por el aporte

  4. Joaquin Guzman dice:

    Por favor alquien me podria mandar ejemplo asi de simples para poder analizarlos..recien comienzo y ejemplos explicados de esta manera ayudan mucho..desde ya muchas gracias… mi correo es joaquinguzman282@hotmail.com

  5. mariel dice:

    es pero q me sigan enviando mas sobre java y c sharp

  6. $t£v££n dice:

    Gracias por el aporte me servira mucho.

    Diferentes razas cultura y sexos ,pero solo una pasion GNU/Linux.-

  7. Shirley dice:

    necesito algun manual o video, donde pueda programar en csharp pero con visual estudio

    Por fa..Gracias¡

  8. Edisanluck dice:

    Pues en los manuales o videos no se programa XD pero haber si esto te sirve http://casidiablo.net/c-crear-una-aplicacion-usando-visual-studio/

  9. licantropo dice:

    como harias el de palabras palindromas en Programacion orientada a objetos

  10. Waldir Yobany dice:

    gracias por compartir conocimiento. quiero afianzar y desarrollar con csharp. por favor envíenme ejemplos básicos y de nivel medio. aplicaciones windows y web.
    gracias y éxitos.

  11. asmm9 dice:

    existiran otros sistemas operativos pero no como WINDOWS

  12. userx dice:

    Muy buenos tutos, gracias.

  13. jessica dice:

    jjjjjjmmmmmmmmmm

  14. ESPERO Y ME MANDEN TUTORIALES DE ESTO Y CODIGOS ES MUY INTERESANTE

¡Déjanos tu comentario!