viernes, 19 de abril de 2013

Principios de la programación orientada a objetos


Clases y Objetos

Se define una clase como un concepto que encapsula las abstracciones de datos y procedimientos que se requieren para describir el contenido y comportamiento de alguna entidad del mundo real. Además este encapsulamiento aísla la clase del resto del código de programa lo que permite ocultar la información que contiene y desacoplar la clase del resto del código del programa. Esto es muy beneficioso pues una vez una clase ha sido implementada y probada podemos desacoplarla del resto del programa haciendo este más sencillo, además de poder reutilizar dicha clase como un módulo en múltiples programas.
Una vez una clase está hecha y probada al programador le basta con saber cómo invocarla y lo que hace esta para poder utilizarla como un módulo separado del resto del programa. Este modo de trabajar permite montar programas como si trabajásemos con ladrillos o bloques de construcción, sin perder el tiempo de redefinir y probar cada ladrillo cada vez que lo necesitamos.
 No hay que olvidar que cada clase en realidad es un patrón o una plantilla que describe una colección de objetos similares y que el objeto concreto será lo que utilizaremos en el código fuente de nuestro programa.
Todos los objetos que genera la clase heredan sus propiedades o atributos y las operaciones o métodos disponibles para la manipulación de estos.
Las clases soportan la herencia por lo que una clase puede tener una o varias clases hijas que heredan las propiedades y métodos de la clase base.
 La mayoría de los objetos físicos tienen características tales como forma, peso, color y tipo de material. Las personas tienen características como fecha de nacimiento, padres, nombre y color de los ojos. Un atributo o propiedad puede verse como una relación binaria entre una clase y su dominio.
La «relación» binaria anteriormente señalada implica que un atributo puede tomar un valor definido por un dominio enumerado. En la mayoría de los casos, un dominio es simplemente un conjunto de valores específicos.
Por ejemplo, la clase Coche tiene una propiedad colorEl dominio de valores de color puede ser (blanco, negro, plata, gris, azul, rojo, amarillo, verde). Pero el dominio también puede ser un conjunto de clases por ejemplo su en vez de Color fuera TipoMotor, en este caso el dominio sería Inyección, Diesel, Gasolina que representa un conjunto de clases que a su vez tiene sus propiedades.

Métodos

Si un método no devuelve un valor como por ejemplo Acelerar, lo llamamosProcedimiento, si por el contrario tiene un valor de retorno por ejemplo CalculaArea lo llamamos Función.
Dentro de una clase nos referimos a ellos como Métodos.
Los métodos son algoritmos que operan con los datos contenidos en las propiedades y representan el comportamiento del objeto.
El disparo de un método en un objeto concreto se llama mensaje y puede ir de algo tan sencillo como devolver el color de una pieza de ajedrez en el objeto Torre de la clase Pieza a algo tan complejo como calcular la declaración de la renta del objeto declaracionClientexx de la clase Renta2013. Este último caso puede implicar la generación de otros mensajes a otros objetos en cascada.
Los mensajes son el medio a través del cual interactúan los objetos. Los métodos son los procedimientos invocados cuando un objeto recibe un mensaje.

Encapsulamiento, herencia y polimorfismo

Como ya se ha dicho anteriormente, la clase encapsula las propiedades y los métodos, quedando estos ocultos al programa principal, lo que reduce la propagación de errores si hay cambios, pues estos son mucho más sencillos de realizar y más localizados. Además si no se toca la clase y está suficientemente probada, se sabe que la clase no contiene los fallos.
La encapsulación facilita la reutilización de código, (componentes). Además las interacciones entre módulos están simplificadas, el objeto llamante sólo debe conocer los parámetros a enviar sin preocuparse de la estructura interna del objeto llamado.
Una Clase hereda todos los atributos de su clase padre, esto quiere decir que todo el código de la clase padre está disponible para la clase hija, no siendo necesario repetirlo de nuevo.
De este modo cualquier cambio en una clase padre se propaga inmediatamente a todas las clases hijas, una clase existente puede sobrescribirse e implementar nuevas versiones de propiedades o métodos para la nueva clase.
El polimorfismo permite utilizar toda la operativa común de una clase y al mismo tiempo dividir las partes que difieren, de tal forma que se reutiliza solamente el código necesario. Así si queremos calcular el área de diferentes formas geométricas podemos definir una clase padre Figura que contenga los atributos y operaciones comunes para todas las figuras y luego crear clases derivadas para cada figura, por ejemplo Cuadrado, Triangulo, Circulo. En la clase base definimos el método calcular área y lo dejamos vacío y luego en cada clase hija definimos el método concreto de cada figura de tal forma que en el código cliente bastará con llamar a
Circulo1.CalcularArea, Cuadrado3.CalcularArea o Triangulo57.CalcularArea sin preocuparnos más, pues cada objeto ya sabe cómo calcular el área correspondiente.
Si hay que añadir una nueva figura apenas hay que tocar código, basta con crear una nueva clase hija y redefinir en ella el método CalcularArea. Sólo tendremos que crear y probar la nueva clase, y si hay fallos sabemos que estarán localizados en la nueva clase y no afectarán a lo anteriormente hecho

No hay comentarios:

Publicar un comentario