jueves, 3 de mayo de 2012

RECURSIÓN VS REUTILIZACIÓN

LA RECURSIÓN
Es una alternativa diferente para implementar estructuras de repetición (ciclos). Los módulos se hacen llamadas recursivas. Entonces, decimos que un objeto es recursivo si en su definición se nombra a sí mismo.
Las funciones recursivas se componen de:
Caso base: una solución simple para un caso particular
Caso recursivo: una solución que involucra volver a utilizar la función original, con parámetros que se acercan más al caso base. Los pasos que sigue el caso recursivo son los siguientes:

·         El procedimiento se llama a sí mismo
·         El problema se resuelve, resolviendo el mismo problema pero de tamaño menor
·         La manera en la cual el tamaño del problema disminuye asegura que el caso base eventualmente se alcanzará

Beneficios
·         Son más cercanos a la descripción matemática.
· Generalmente más fáciles de analizar
·  Se adaptan mejor a las estructuras de datos recursivas.
· Los algoritmos recursivos ofrecen soluciones estructuradas, modulares y elegantemente simples.
Algunos Ejemplos
Una manera de definir el factorial de un número n>1 es:
Sin embargo una solución más elegante es usar la definición recursiva, y esta es:
!n= n*! (n-1)

Esto se puede resolver fácilmente con una función iterativa, esto es, una función con un ciclo que itere suficientes veces, incrementando un valor y entonces ir almacenando en una variable el resultado de esas multiplicaciones.
Una implementación de esta definición iterativa es:
(1) int i,n;
(2) long double valorAc; 
(4) valorAc=1.0;
(5) std::cout << "Numero entero:";
(6) std::cin>> n;
(7) for(i=1; i<=n; i++)  valorAc = valorAc*i;
(8) std::cout<<"El factorial de "<<n<<" es:"<<valorAc;

Un ejemplo clásico donde se presenta la recursividad es en la definición de un factorial: El factorial de N es la multiplicación de N por el Factorial de N-1.

REUTILIZACIÓN
Cuando se habla de reutilización de código se busca el ahorro de tiempo y esfuerzo y la Ingeniería del Software evoluciona para brindar nuevas y mejores estrategias para la industria del software.
Para reutilizar el código creamos nuevas clases pero, en lugar de partir de cero, partimos de clases, relacionadas con nuestra clase, que han sido ya creadas y depuradas. El truco está en usar las clases sin ensuciar el código existente.
En programación, es el uso de software existente para desarrollar un nuevo software. La reutilización de código ha sido empleada desde los primeros días de la programación. Los programadores siempre han reusado partes de un código, planillas, funciones o procedimientos.
La idea es que parte o todo el código de un programa de computadora escrito una vez, sea o pueda ser usado en otros programas. La reutilización de códigos programados es una técnica común que intenta ahorrar tiempo y energía, reduciendo el trabajo redundante.
Las bibliotecas o librerías de software son un buen ejemplo. Al utilizarlas se está reutilizando código.

El software más fácilmente reutilizable tiene ciertas características: modularidad, bajo acoplamiento, alta cohesión, ocultación de información, etc.
Por ejemplo.
Se está desarrollando un proyecto en el cual se tiene que actualizar las actividades realizadas a un servidor de tu empresa usando Internet. Para hacer esto, vas a escribir o usar mucho código sobre como conectarte a tu servidor, autentificarte como usuario, enviar información y recibir confirmación de recibido, o de mensajes de error, y cerrar la conexión una vez que terminaste.

Una vez que se crearon estos objetos y rutinas, se pueden usar dentro de varios lugares del programa (no se tienen que hacer una y otra vez), o se pueden usar con otros proyectos que requieren funcionalidad similar.
Aunque escribir código para que sea reutilizable puede llevar un esfuerzo de planeación mayor que simplemente sentarse y codificar, a la larga acorta los tiempos de desarrollo y hace más fácil desarrollar aplicaciones confiables.

TABLA COMPARATIVA DE PROGRAMACIÓN ESTRUCTURADA Y PROGRAMACIÓN ORIENTADA A OBJETOS

PROGRAMACIÓN ESTRUCTURADA
PROGRAMACIÓN ORIENTADA A OBJETOS
Es una forma de escribir programación de computadora de forma clara, para ello utiliza únicamente tres estructuras: secuencial, selectiva e iterativa.
La programación orientada a objetos se basa en la idea de un objeto que es una combinación de variables locales y procedimientos llamados métodos que juntos conforman una entidad de programación.
El programa se puede tener listo para producción normal en un tiempo menor del tradicional; por otro lado, el seguimiento de las fallas o depuración se facilita debido a la lógica más visible, de tal forma que los errores se pueden detectar y corregir más fácilmente.
En el desarrollo de sistemas se desea evitar la definición múltiple de datos y funciones común. En la programación orientada a objetos esto se logra mediante la herencia (Evita la definición múltiple de propiedades comunes a muchos objetos).
La programación estructurada carece de polimorfismo.
El polimorfismo (permite la modificación de métodos heredados)