Introducción: programación por módulos. Estrategia de divide y vencerás (resolución de problemas) (CU00203A)

Resumen: Entrega nº2 del Curso Bases de la programación Nivel II
Codificación aprenderaprogramar.com: CU00203A

 

 

ORIENTACIÓN PARA LAS PERSONAS QUE SIGAN ESTE CURSO

Este curso está pensado para personas que tengan unos conocimientos previos de algoritmia básicos. Se recomienda seguirlo después de haber cursado el curso “Bases de la programación nivel I” (Fundamentos de programación nivel I. Algoritmia y pseudocódigo) de aprenderaprogramar.com. También es útil para cualquier persona que tenga ya las nociones básicas de programación y quiera continuar progresando en el conocimiento de cómo desarrollar programas eficientes.

 

Aprender programación requiere tiempo y esfuerzo. Para hacer ese recorrido más llevadero, te recomendamos que utilices los foros de aprenderaprogramar.com, herramienta a disposición de todos los usuarios de la web (http://www.aprenderaprogramar.com/foros), y que te servirá para consultar dudas y recabar orientación sobre cómo enfrentarte a los contenidos. Entre los miembros del portal web y otros usuarios, trataremos de ayudarte para que el estudio te sea más llevadero y seas capaz de adquirir los conocimientos necesarios y avanzar como programador.

 

 

INTRODUCCIÓN

Programar, usando un símil, podemos verlo como realizar un viaje por carretera. Cuando realizamos un viaje, aparte de la necesidad de definir el objetivo y estudiar la ruta del viaje (estructura del programa) podemos decir que: “En general, pero sobre todo para viajes complicados, conviene dividir el problema en subapartados”.

La estrategia del “divide y vencerás”... Es una de las estrategias más usadas en programación de ordenadores y, una vez más, abordaremos aquí el uso de esta filosofía compañera de viaje del programador. El concepto de módulo aplicado a la programación es muy similar al aplicable a distintas facetas de la vida: un escritor divide su curso en capítulos y apéndices. Un profesor divide el contenido de la asignatura en temas. Un ingeniero divide el proyecto en partes como Memoria, Anejos, Pliego de Condiciones, Presupuesto y Planos. En una fábrica, organizan el trabajo dividiendo las áreas funcionales en recepción de materias primas, área de pre-proceso, área de proceso, área de post-proceso y área de carga y despacho de producto terminado. En una residencia escolar el edificio se ha dividido en módulos: módulo de cocina, módulo de lavandería, módulo de docencia, módulo de actividades extraescolares, módulo de oficinas y módulo de dormitorios.

De cara a la programación, usaremos la división del programa en módulos por ser una estrategia efectiva para resolver problemas complejos. Bajo “el paraguas” del programa principal, distintos subprogramas serán llamados para realizar su función en un orden establecido. Analicemos las características que podemos esperar de una organización modular: 

 

1.    Existe una estructura superior que engloba a todos los módulos. Cada módulo contribuye a un fin más amplio mediante el cumplimiento de una tarea concreta.

2.    Existe independencia de funcionamiento entre módulos, lo cual no significa que no haya comunicación entre ellos o entre ellos y la estructura superior. En la residencia escolar, la lavandería funciona de forma independiente a la cocina. Pero puede haber comunicación y trasvase de materiales o información. Por ejemplo, la cocina envía a la lavandería una partida de manteles sucios para que sean procesados y devueltos limpios. A su vez lavandería y cocina se comunican con la dirección del centro para recibir instrucciones, comunicar situaciones, etc.

3.    El hecho de que exista independencia de funcionamiento unido a que un módulo cumpla una tarea concreta, permiten su traslado o copia de organización en otra estructura con otro fin global, pero necesitada del proceso concreto que realiza el módulo. Supongamos que la residencia escolar cierra por falta de alumnos y que al mismo tiempo se va a abrir un pequeño hospital en otro punto de la ciudad. Tras el análisis del caso, podría decidirse trasladar la lavandería de la residencia al hospital: sus mismas máquinas, personal, organización, etc. Estaríamos cambiando de lavar ropa escolar, de cama, manteles, etc. por uniformes sanitarios, toallas... pero en definitiva telas, que es para lo que está preparada la lavandería. El traslado o copia de un módulo requerirán normalmente una pequeña adaptación para encajar adecuadamente en la nueva estructura.

4.    La complejidad del módulo es siempre inferior a la del conjunto de módulos. Esto es importante en relación a la estructura mental de los humanos y está relacionado con el “trabajo por objetivos”. Dividir un gran problema en pequeños problemas se comprueba que lleva a:

· Aumentar la probabilidad de éxito al concentrar la atención del programador y evitar su dispersión.  

· Aumentar la tranquilidad y confianza del programador, que ante problemas de magnitud excesiva tenderá a sentirse abrumado.

La complejidad intrínseca de un problema será la misma independientemente de cómo se aborde. En cambio, la probabilidad de éxito para un humano varía sustancialmente según sea la estrategia de resolución empleada.

5.    La división por módulos facilita la organización y comprensión desde el punto de vista humano. Es nuevamente el factor humano el que nos anima a programar por módulos. Con esta organización nos resulta más fácil detectar errores, corregirlos y tener una visión de conjunto de la estructura y funcionamiento de los programas.

 

 

La posibilidad de traslado o copia de módulos es de gran importancia para los programadores. Consideremos que si resolvemos un proceso genérico ya no será necesario volverlo a programar: bastará con coger el módulo correspondiente, copiarlo e insertarlo en el nuevo programa. Por supuesto habrá que realizar las adaptaciones necesarias (nombres de variables, forma de presentar los resultados, etc.) y verificar su buen funcionamiento dentro de la nueva estructura.

Los módulos independientes de que podemos disponer pueden tener como fin buscar un archivo dentro de un directorio, ordenar por orden alfabético una serie de palabras, calcular el determinante de una matriz, resolver una ecuación cuadrática o una ecuación cúbica, hallar la ecuación de una recta y prácticamente cualquier proceso de tipo lógico-matemático que se nos pueda ocurrir. Cuando tratamos el apartado de “Conocer el problema” ya nos habíamos referido a la existencia de estos “programas hechos” que pueden ser insertados dentro de nuestros programas y que circulan entre programadores, en revistas especializadas o en internet. Vamos a profundizar ahora un poco en las ventajas y en las desventajas de recurrir al uso de este tipo de módulos.

En primer lugar, cabe considerarlos como potentes herramientas al servicio del programador. Permiten resolver problemas de cierta complejidad con poco esfuerzo. Si vamos a realizar un programa donde son necesarias operaciones con matrices como calcular determinantes, inversas, traspuestas, sumas, restas, multiplicaciones, etc. ¿Para qué desarrollar algoritmos que ya están inventados y que podemos copiar y pegar? Efectivamente puede ser poco interesante y hasta aburrido para un programador repetir desarrollos de códigos muy similares. Ahora bien, pensemos en cómo se enfrenta el programador a solucionar un problema.

  

Supuesto 1:

a)   Domina la intención y métodos del proceso. En el ejemplo de las operaciones con matrices significaría que conoce bien qué es una matriz desde el punto de vista matemático y las reglas y pasos a seguir para operar con ellas.

b)   Tiene experiencia en el desarrollo de módulos y en su adaptación y verificación en estructuras más complejas.

 

Supuesto 2:

a)   No domina la intención y métodos del proceso.

b)   No tiene experiencia en el desarrollo, adaptación y verificación de módulos.

 

Existirán a su vez posibilidades intermedias. La situación del programador en función de las combinaciones posibles la resumiremos en el siguiente cuadro:

 

Caso 1

Caso 2

Caso 3

Caso 4

Domina intención y métodos

No

No

Tiene experiencia con módulos

No

No

Valoración de la situación

Deseable

Aceptable, con riesgos

Aceptable, con riesgos

Peligrosa

 

 

La situación ideal es la del programador que domina la materia y está acostumbrado a adaptar módulos en programas. Si sólo domina la materia pero no la adaptación de módulos, o tiene experiencia en adaptar módulos pero no domina la materia, es probable que logre salvar el obstáculo de incorporar el módulo a su programa, con algunas dificultades. Y si no domina la materia ni está acostumbrado a adaptar módulos es probable que no sea capaz de adaptar el módulo con éxito a su programa o que, si lo hace, existan vicios ocultos. Llamamos vicio oculto a un defecto del programa que no es fácil de detectar y que suele esconderse tras un aparente buen funcionamiento.

Otro de los problemas que se pueden presentar es el uso de módulos poco eficientes. Porque si hemos dicho que los módulos son subprogramas, gozan de los mismos atributos que un programa y podemos hablar de control de flujos en el módulo, estructuras de control en el módulo, economía y eficiencia en el módulo y, condensarlo en una palabra, calidad del módulo.
 
La inserción de módulos de poca calidad en un programa supondrá disminuir la calidad global del mismo en la proporción dada por la extensión e importancia del módulo respecto al total.
 
En definitiva, cuando copiamos y pegamos algo tenemos que saber lo que hacemos, porque si no de tan rápido que vamos nos podemos “estallar”.
 

Como conclusión respecto al aprovechamiento de módulos preexistentes señalaremos como ventajas y peligros:

Ventajas

Peligros

Ahorro de tiempo

Adaptaciones defectuosas

Ahorro de esfuerzo

Disminución de la calidad de los programas

  

 

 

 

 

 

Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link:  Ver curso completo.

Para  hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.

¿Puedo yo aprender?

Seas o no del área informática, si quieres aprender a programar te ofrecemos una solución guiada y personalizada: realizar un curso tutorizado on-line. Con este tipo de curso, podrás aprender a programar de forma ágil y amena.

Acceder a detalles y precios de los cursos tutorizados on-line

Política sobre cookies

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, de acuerdo a tus hábitos de navegación.

Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra Política de Cookies.

En Facebook!

Ahora puedes seguirnos en Facebook. Noticias, novedades y mucho más ¡Te esperamos!

RANKING APR2+

Ranking de lenguajes y entornos de programación aprenderaprogramar.com
 

MARZO - ABRIL 2017

1. Java / J2EE
2. Entornos Oracle
3. JavaScript, jQuery
4. .NET, C#
5. Entornos SQL Server
6. HTML, CSS
7. Php, MySql
8. Android, iOS


Acceder a detalles sobre el ranking de programación aprenderaprogramar.com

FOROS APR2+

Pregunta, responde, consulta, lee, intercambia...

Participa!!! Entra en los foros aprenderaprogramar.com.

             Copyright 2006-2017 aprenderaprogramar.com                La web abierta a cualquier persona interesada en la programación