Tema I Introducción a la programación orientada a objetos. 1. Un ejemplo. La diferencia entre programación estructurada y programación orientada a objetos (POO) está relacionada con la manera como se piensa el diseño de los programas. Mientras que en programación estructurada la unidad básica son las funciones ... En la POO la unidad básica son los objetos, encargados de almacenar información y algoritmos. Por ejemplo, para diseñar el siguiente sistema "Se debe hacer una interfaz gráfica de usuario (GUI) que contiene un cuadrado, un círculo y un triángulo. Cuando el usuario presiona un botón del ratón sobre una figura, dicha figura debe rotar y ejecutar un sonido en formato WAF" En programación estructurada, suponiendo que la rutina principal (main) se queda esperando los eventos generados por el raton, al momento que el usuario presiona el boton sobre una figura, invoca las siguientes funciones rotar(numeroFigura) { /*aplicar algoritmo rotación*/ } ejecutarRola(numeroFigura){ /*aplicar algoritmo de ejecucion de sonido o musica*/ } En programación orientada a objetos se definen 3 clases para cada figura //Circulo class Circulo { rola; rotar() { /*algoritmo para rotar un circulo*/ } ejecutarRola(){ /*algoritmo de ejecucion de sonido en formato WAF*/ } } //Triangulo class Triangulo { rola; rotar() { /*algoritmo para rotar un triangulo*/ } ejecutarRola(){ /*algoritmo de ejecucion de sonido en formato WAF*/ } } //Triangulo class Cuadrado { rola; rotar() { /*algoritmo para rotar un triangulo*/ } ejecutarRola(){ /*algoritmo de ejecucion de sonido en formato WAF*/ } } Considerando que se introduce al sistema una nueva figura que NO utiliza los algoritmos de rotación de las demas figuras, en el programa estructurado se debe indicar un caso especial para la función rotar. rotar(numeroFigura) { if (numeroFigura == AMIBA) { /*aplicar algoritmo para figura amorfa*/ } else { /*aplicar algoritmo rotación de geometría analítica*/ } } en la programacion orientada a objetos se define una clase Amiba //Amiba class Amiba { rola; rotar() { /*algoritmo para rotar una figura amorfa*/ } ejecutarRola(){ /*algoritmo de ejecucion de sonido en formato WAF*/ } } Suponiendo que ahora, se quiere dar un efecto físico a la rotación de la amiba, se necesita saber cual es el punto de apoyo o de rotación de la amiba. Es decir, necesitamos conocer la coordenada x e y del punto de apoyo. rotar(numeroFigura, x0,y0) { if (numeroFigura == AMIBA) { /*aplicar algoritmo para figura amorfa*/ } else { /*aplicar algoritmo rotación de geometría analítica*/ } } en la programacion orientada a objetos se define una clase Amiba //Amiba class Amiba { x0; y0; rola; rotar() { /*algoritmo para rotar una figura amorfa*/ } ejecutarRola(){ /*algoritmo de ejecucion de sonido en formato WAF*/ } } El código orientado a objetos se puede simplificar o refactorizar- La simplificación se puede dar por el hecho de reducir código en módulos que tienen puntos en común. Esto se conoce como herencia. class Figura { rola; rotar() { /*algoritmo para rotar usando geometria analitica*/ } ejecutarRola(){ /*algoritmo de ejecucion de sonido en formato WAF*/ } } class Circulo extends Figura { } class Triangulo extends Figura { } class Cuadrado extends Figura { } class Amiba extends Figura { x0; y0; rotar() { /*algoritmo para rotar una figura amorfa*/ } } Refactorizar es simplificar la estructura del codigo fuente sin cambiar el comportamiento del sistema. Las técnica son Herencia - Tomar código hecho de una clase ya existente Anular o mejorar código - Consiste en redefinir uno o mas métodos o funciones de una clase