lunes, 5 de diciembre de 2016

PROGRAMACIÓN ESTRUCTURADA

La programación estructurada es una teoría de programación que consiste en construir programas de fácil comprensión, es especialmente útil, cuando se necesitan realizar correcciones o modificaciones después de haber concluido un programa o aplicación. Al utilizar la programación estructurada, es mucho más sencillo entender la codificación del programa, que se habrá hecho en diferentes secciones.

Se basa en una metodología de desarrollo de programas llamada refinamiento sucesivo: Se plantea una operación como un todo y se divide en segmentos más sencillos o de menor complejidad, una vez terminado todos los segmentos del programa, se procede a unificar las aplicaciones realizadas por el grupo de programadores. Si se ha utilizado adecuadamente la programación estructurada, esta integración debe ser sencilla y no presentar problemas al integrar la misma, y de presentar algún problema, será rápidamente detectable para su corrección.

La representación gráfica de la programación estructurada se realiza a través de diagramas de flujo, el cual representa el programa con sus entradas, procesos y salidas.
La programación estructurada es un método disciplinado de escribir programas que sean claros, que se demuestre que sean correctos y fáciles de modificar.
La modificación de los módulos es más fácil y se pueden referenciar cuantas veces se requiera, con lo que se ahorra tiempo en la programación, un programa tiene un diseño estructurado si cumple las dos siguientes condiciones:
  • El teorema de Estructura.
  • Está debidamente documentado
El teorema de Estructura dice que “un programa cumple el teorema de estructura si y sólo (ó) si es propio y contiene únicamente las tres estructuras básicas de control” que son la secuencial, la alternativa y la repetitiva, un programa es propio si y sólo si cumple: que tenga un solo punto de entrada y un solo punto de salida y que entre dos puntos de control del programa exista al menos un camino.


v  VENTAJAS DE LA PROGRAMACIÓN ESTRUCTURADA

Con la programación estructurada, elaborar programas de computadora sigue siendo una labor que demanda esfuerzo, creatividad, habilidad y cuidado. Sin embargo, con este nuevo estilo podemos obtener las siguientes ventajas:

·         Los programas son más fáciles de entender, un programa estructurado puede ser leído en secuencia, de arriba hacia abajo, sin necesidad de estar saltando de un sitio a otro en la lógica, lo cual es típico de otros estilos de programación.

·         . Se logra una reducción del esfuerzo en las pruebas, el seguimiento de las fallas o depuración (debugging) 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.

·         Se crean programas más sencillos y más rápidos.

v  CARACTERÍSTICAS DE LA PROGRAMACIÓN ESTRUCTURADA

Los programas escritos con estos principios tienen no solo una estructura fácil de leer, sino que además tienen una excelente presentación, que permite comprender el código con mayor facilidad. La estructuración del contenido facilita la revisión de la codificación y reduce el tiempo de prueba y depuración de programas.




v  PROGRAMACIÓN MODULAR

Uno de los métodos más conocidos para resolver un problema es dividirlo en problemas más pequeños, llamados subproblemas. De esta manera, en lugar de resolver una tarea compleja y tediosa, resolvemos otras más sencillas y a partir de ellas llegamos a la solución. Esta técnica se usa mucho en programación ya que programar no es más que resolver problemas, y se le suele llamar diseño descendente, metodología del divide y vencerás o programación top-down.
Es evidente que si esta metodología nos lleva a tratar con subproblemas, entonces también tengamos la necesidad de poder crear y trabajar con subprogramas para resolverlos. A estos subprogramas se les suele llamar módulos, de ahí viene el nombre de programación modular. En Pascal disponemos de dos tipos de módulos: los procedimientos y las funciones.

Veamos un ejemplo de cómo emplear el diseño descendente para resolver un problema. Supongamos que un profesor quiere crear un programa para gestionar las notas de sus alumnos. Quiere que dicho programa le permita realizar tareas tales como asignar notas, cambiar notas, ver las notas según distintas calificaciones, etc. A continuación tines un esquema que representa una de las posibles divisiones del problema en módulos.





v  CONCEPTO  

Módulo es aquel que está constituido por una o varias instrucciones físicamente contiguas y lógicamente encadenadas, las cuales se pueden referenciar mediante un nombre y pueden ser llamadas desde diferentes puntos de un programa.
Un módulo puede ser:


Un programa

Una función
Una subrutina (o procedimiento)



v  CARACTERISTICAS

·         Los módulos deben tener la máxima cohesión y el mínimo acoplamiento. Es decir, deben tener la máxima independencia entre ellos.

·         La salida del módulo debe ser función de la entrada, pero no de ningún estado interno. En la creación de los módulos deben cumplirse tres aspectos básicos: descripción, rendimiento y diseño.

·         En la descripción se definen las funciones y objetivos del programa. Para obtener el máximo rendimiento se ha de comprobar que el programa realice el proceso aprovechando al máximo todos los recursos de los que dispone. En cuanto al diseño, se debe comprobar la estructura que sigue el módulo, así como la estructura de los datos y la forma de comunicaciones entre los diversos y diferentes módulos.

·         Conforme se extiende el tamaño de los algoritmos, se hace más difícil su revisión, actualización y/o corrección.

·         Una política común para solventar este problema consiste en la modularización. Esto significa que el algoritmo se fragmenta en partes llamadas módulos. En realidad, es un método de diseño que tiende a dividir el problema, de forma lógica, en partes perfectamente diferenciadas que pueden ser analizadas, programadas y puestas a punto independiente.

·         Realmente la programación modular es un intento para diseñar programas, de forma tal que cualquier función lógica pueda ser intercambiada sin afectar a otras partes del programa.

ü  VENTAJAS

·         Al aplicar la programación modular, un problema complejo debe ser dividido en varios subproblemas más simples, y estos a su vez en otros subproblemas más simples.

·         En caso de que un módulo necesite de otro, puede comunicarse con éste mediante una interfaz de comunicación que también debe estar bien definida.

·         Es fácil de mantener y modificar

·         Es más fácil de escribir y depurar

ü  DESVENTAJAS 

·         No se dispone de algoritmos formales de modularidad, por lo que aveces los programadores no tienen claras las ideas de los módulos

·         La programación modular requiere más memoria y tiempo de ejecución  

 

¿QUÉ ES UN MÓDULO?

El cuarto elemento fundamental de nuestro viaje por la programación está representado por la programación modular. En realidad, esta técnica no es estrictamente necesaria ya que con lo que hemos visto hasta ahora podés crear programas interesantes y útiles. Sin embargo, cuando los programas se vuelven más complejos y más extensos, se hace más difícil rastrear los errores y analizar su funcionalidad. Con este fin necesitamos disponer de una técnica que nos permita concentrarnos realmente en los problemas que debemos resolver con nuestro programa y abstraernos de los detalles particulares y de la parafernalia técnica que hace funcionar a la computadora. De algún modo esta tarea la cumplen Python, BASIC, etc. ya que con sus funciones incorporadas y predeterminadas evitan que nosotros debamos tratar directamente con el hardware de la computadora para realizar diversas tareas típicas como leer un archivo, comprobar que una tecla se ha presionado, etc.

El objetivo de la programación modular es extender las capacidades predeterminadas de un lenguaje mediante porciones de código empacadas en diferentes módulos, los cuales pueden ser fácilmente insertados en nuestros programas. La primera forma de programación modular fue la subrutina que era un bloque de código al cual se podía saltar (similar a la instrucción GOTO que hemos mencionado antes) y una vez ejecutado el bloque, el programa devolvía el control a la instrucción siguiente a la que había producido la llamada. 
Esta técnica modular se conoce con el nombre de procedimiento o función. En Python y en otros lenguajes, el término módulo tiene un significado especial que explicaremos más adelante; mientras tanto veamos más en detalle las funciones.







v  FUNCIONES INTERNAS

Las operaciones que se requieren en los programas exigen en numerosas ocasiones, además de las operaciones aritméticas básicas ya tratadas, un número  determinado de operaciones especiales que se denominan funciones internas, incorporadas o estándar. Por ejemplo, la función  ln(LN) se puede usar para determinar el logaritmo neperiano de un número y la función sqrt calcula la raiz cuadrada de un numero positivo. Existen otras funciones que se utilizan para determinar las funciones trigonométricas.

Función
Descripción
Tipo de argumento
Resultado
abs(x)
Valor absoluto de x
Entero o real
igual al argumento
arctan(x)
Arco tangente de x
Entero o real
real
cos(x)
Coseno de x
Entero o real
real
exp(x)
exponencial de x
Entero o real
real
ln(x)
Logaritmo Neperiano de x
Entero o real
real
log10(x)
Logaritmo decimal de x
Entero o real
real
redondeo(x) 
ó round(x)*
redondeo de x
real
entero
seno(x)
ó sin(x)*
seno de x
Entero o real
real
cuadrado(x)
ó sqr(x)
cuadrado de x
Entero o real
igual al argumento


FUNCIONES DEFINIDAS POR EL USUARIO


Al igual que las funciones de los lenguajes de programación, las funciones definidas por el usuario de SQL Server son rutinas que aceptan parámetros, realizan una acción, como un cálculo complejo, y devuelven el resultado de esa acción como un valor. El valor devuelto puede ser un valor escalar único o un conjunto de resultados.



v  VENTAJAS DE LAS FUNCIONES DEFINIDAS POR EL USUARIO


Las ventajas de utilizar las funciones definidas por el usuario en SQL Server son:

·         Permiten una programación modular.
Puede crear la función una vez, almacenarla en la base de datos y llamarla desde el programa tantas veces como desee. Las funciones definidas por el usuario se pueden modificar, independientemente del código de origen del programa.

·         Permiten una ejecución más rápida.
Al igual que los procedimientos almacenados, las funciones definidas por el usuario Transact-SQL reducen el costo de compilación del código Transact-SQL almacenando los planes en la caché y reutilizándolos para ejecuciones repetidas. Esto significa que no es necesario volver a analizar y optimizar la función definida por el usuario con cada uso, lo que permite obtener tiempos de ejecución mucho más rápidos.
Las funciones CLR ofrecen una ventaja de rendimiento importante sobre las funciones Transact-SQL para tareas de cálculo, manipulación de cadenas y lógica empresarial. Transact-SQL se adecuan mejor a la lógica intensiva del acceso a datos.

·         Pueden reducir el tráfico de red.
Una operación que filtra datos basándose en restricciones complejas que no se puede expresar en una sola expresión escalar se puede expresar como una función. La función se puede invocar en la cláusula WHERE para reducir el número de filas que se envían al cliente.



ARGUMENTOS Y PARÁMETROS DE LAS FUNCIONES

Supongamos que en un determinado programa debemos calcular repetidamente el valor medio de dos variables, una solución razonable sería crear una función que realice dicho cálculo, y llamarla cada vez que se necesite. Para ello será necesario, en cada llamada, pasarle los valores de las variables para que calcule su valor medio. Esto se define en la declaración de la función especificando, no solo su valor de retorno sino también el tipo de argumentos que recibe:

double valor_medio(double x, double y) ;
De esta declaración vemos que la función valor_medio recibe dos argumentos ( x e y ) del tipo double y devuelve un resultado de ese mismo tipo .
Cuando definamos a la función en sí, deberemos incluir parámetros para que alberguen los valores recibidos, así escribiremos:
double valor_medio(double x, double y )
{
return ( (x + y) / 2.0 )
}



No es necesario que los NOMBRES de los párametros coincidan con los declarados previamente, es decir que hubiera sido equivalente escribir: double valor_medio(double a, double b) etc, sin embargo es una buena costumbre mantenerlos igual. En realidad en la declaración de la función, no es necesario incluir el nombre de los parámetros, bastaría con poner solo el tipo, sin embargo es práctica generalizada, explicitarlos a fin de hacer más legible al programa .
Aquí estamos utilizando la síntaxis moderna del lenguaje C, pudiendose encontrar en versiones arcaicas, definiciones equivalentes como :
double valor_medio()      ó     double valor_medio(double, double)
double x;                      double x ;
double y;                      double y ;
{                               {




PROGRAMACION CON PSEINT.

¿QUÉ ES PSEINT?
  • PSeInt es una herramienta para asistir a un estudiante en sus primeros pasos en programación. Mediante un simple e intuitivo pseudolenguaje en español (complementado con un editor de diagramas de flujo), le permite centrar su atención en los conceptos fundamentales de la algoritmia computacional, minimizando las dificultades propias de un lenguaje y proporcionando un entorno de trabajo con numerosas ayudas y recursos didácticos.

DEFINICIÓN DE PSEINT

PSeInt es un software libre educativo multiplataforma dirigido a personas que se inician en la programación.
PSeInt está pensado para asistir a los estudiantes que se inician en la construcción de programas o algoritmos computacionales. El pseudocódigo se suele utilizar como primer contacto para introducir conceptos básicos como el uso de estructuras de control, expresiones, variables, etc, sin tener que lidiar con las particularidades de la sintaxis de un lenguaje real. Este software pretende facilitarle al principiante la tarea de escribir algoritmos en este pseudolenguaje presentando un conjunto de ayudas y asistencias, y brindarle además algunas herramientas adicionales que le ayuden a encontrar errores y comprender la lógica de los algoritmos.