domingo, 16 de junio de 2013

Orientación a Objetos en C#

C# es un lenguaje de programación orientado a objetos (POO). Inherentemente posee características o principios de este enfoque de modelamiento de problemas del mundo en el momento de construir software. Entre los principios tenemos:
  • Encapsulamiento, 
  • Herencia, y
  • Polimorfismo
  • Abstracción
En teoría, estos principios facilitan la tarea de modelamiento y potencializan el proceso de desarrollo de software; haciéndolo modular, fácil de mantener, designación de responsabilidades por role, alto grado de abstracción de tipos del mundo del problema (abstracción), reutilización de código de proyectos previos (propios o de terceros), diseño de marco de trabajos gracias a la reutilización de código, entre otras importantes. C#, como muchos lenguajes orientados a objetos, posee tales principios, pero también características orientadas a objetos distintivas, por ejemplo:

Archivo C# IPagadero.cs [enlace alternativo]:
- Sistema unificado de tipos (unified type system):

«C# has a unified type system, where all types ultimately share a common base type.»[2] Lo que nos quiere decir esto es que independiente de la naturaleza de los tipos (referencia o tipo base), todos los objetos comparten una funcionalidad básica, por ejemplo, si tuviéramos un número entero, un valor lógico booleano, una referencia a un objeto de una clase, podríamos invocar el método ToString. Ejemplo en código:

Archivo C# SistemaTiposUnificado.cs [enlace alternativo]:

- Clases e interfaces


«[...] in a traditional object-oriented paradigm, the only kind of type is a class. In C#, there are several other kinds of types» [2] Entre esos tipos adicionales con los que cuenta C#, es la interfaz. Las interfaces resultan útiles en escenarios donde se requiere herencia múltiple. En cuanto a su definición, las interfaces incluyen sólo la descripción de sus miembros (datos y funciones/métodos). Al hacer un paralelo entre clase e interfaz, las interfaces resultan ser tipo de datos más abstractos debido a que, en particular en C#, sólo se especifica métodos (nada más que la firma o signatura) y constantes en el cuerpo de su definición.

Declaración de una interfaz en C#:


Modelo para la implementación de una interfaz.
Modelo para la implementación de una interfaz.
Entonces, para la declaración utilizamos la palabra clave interface y en frente el nombre de la interfaz (por convención se utiliza la letra I para referirse a una declaración de este tipo. En C# no es necesario especificar la palabra clave abstract para declarar un método abstracto, como el caso de pagar. En el diagrama de arriba la clase Factura y la clase abstracta Empleado implementan la interfaz Pagadero. En el primera caso, la clase Factura, es obligatorio implementar los métodos abstractos de la interfaz Pagadero, mientras que para Empleado es opcional que implemente a Pagar, dado que se trata de una clase abstracta.

Vale apuntar, que entre una clase y una interfaz, se encuentra otro tipo intermedio, al que podemos llamar clase abstracta: que posee características de ambas: métodos concretos   (con una signatura o firma definida) y métodos abstractos (poseen una firma pero su implementación queda pendiente por ser implementada por la clase que herede de la clase  base).


- Propiedades, métodos, y eventos

A diferencia de otros lenguajes de programación orientados a objetos, C# posee elementos programáticos para referirse al estado de un objeto, estas son las propiedades. En los componentes visuales, la apariencia de un control, por ejemplo un botón, es obtenido y alterado a través de las propiedades. A continuación un ejemplo de su uso:

Archivo C# Propietario.cs [enlace alternativo]:

El uso de métodos en C#, en esencia, es el mismo que en otros lenguajes de programación. A continuación un ejemplo de un método para validar una dirección de email:

Archivo C# Validaciones.cs [enlace alternativo]:

Para el caso de los eventos, que son métodos especiales para responder a acciones del exterior cuando un suceso o evento ocurren en el sistema. Ejemplo:

Archivo C# ClasePrincipal.cs [enlace alternativo]

Los delegados están asociados a los eventos, debido a que son los encargados de atender y disparar los eventos asociados a una referencia.

Estas son algunas de las características de la POO en C#. En particular resultan interesantes a la hora de explotar la expresividad del lenguaje y su simplicidad.

Referencias:

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.