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
|
|
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.
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.
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 :
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.