Programación Estructurada
La programación estructurada es un procedimiento que
consiste en diseñar e implementar programas de forma
clara y sencilla para que puedan ser mantenidos con fa-
cilidad.
La idea de la programación estructurada fue expuesta por
E.W. Dijkstra en 1965 y su base teórica se apoyó en los
trabajos de Böhm y Jacopini.
El estudio concluyó que, con la combinación de tres tipos
de instrucciones, podemos crear un programa estructurado:
Busca en la Web: Edsger W. Dijkstra
Si quieres conocer más sobre
Edsger W. Dijkstra, visita esta
web sobre el científico:
https://dialnet.unirioja.es/
descarga/articulo/3402333.
pdf
Tipos de Instrucciones para Programas Estructurados
Secuencia de instrucciones
x
y
Selección de instrucciones
x
verdadero
condición
falso
y
Iteración o bucle de instrucciones
x
verdadero
falso
condición
iteración
Busca en la Web: Trabajos de Böhm y Jacopini
Para saber más sobre los
trabajos de Böhm y Jacopini,
puedes visitar esta web:
https://dl.acm.org/doi/
pdf/10.1145/355592.365646
R
Fundamentos de Programación
Los fundamentos de la programación se basan en un
conjunto de técnicas que persiguen desarrollar algo-
ritmos que sean sencillos de escribir, leer, modificar y
testear.
El orden en que se ejecutan las sentencias de un programa
es secuencial. Este flujo significa que las sentencias se eje-
cutan en secuencia, una después de otra, y en el orden en
que se encuentran dentro del programa.
Teorema de Böhm y Jacopini
Un programa debe de cumplir las siguientes características:
- Debe tener un único punto de entrada y uno de salida.
- Toda acción del algoritmo debe ser accesible. Tiene que
haber al menos un camino que va desde el inicio hasta el
fin del algoritmo.
- No deben existir, por tanto, bucles infinitos.
El programa se encarga de transformar la entrada en salida:
ENTRADA
PROGRAMA
SALIDA
Por lo tanto, la programación es un proceso de desarrollo
que nos ayuda a resolver un determinado problema.
Ponte a Prueba: Tipos de Instrucciones
Dijkstra concluyó que la combi-
nación de varios tipos de instruc-
ciones, podemos crear un programa
estructurado. ¿ Cuáles son?
- Secuencia de instrucciones.
- Selección de instrucciones.
- Iteración de instrucciones.
- Todas las opciones son correctas.
Ponte a Prueba: Características de un Programa
Según Böhm y Jacopini, ¿cuál de
las siguientes opciones sobre un
programa es cierta?
- Tiene un único punto de entrada y
uno de salida.
- Toda acción del algoritmo debe ser
accesible.
- No deben existir bucles infinitos.
- Todas las respuestas son correctas.
Introducción a la Algoritmia y Herramientas de Diseño
Un algoritmo es una secuencia de los pasos y las distintas
operaciones que debe realizar el programa para conseguir
resolver un problema planteado.
En cambio, la algoritmia es un conjunto ordenado y finito
de operaciones que permite encontrar la solución a un pro-
blema cualquiera.
La algoritmia utiliza un conjunto de herramientas lógicas,
matemáticas e informáticas con el objetivo de diseñar y
presentar un algoritmo. Anteriormente, ya hemos hablado
de dos herramientas para la construcción de algoritmos: el
pseudocódigo y los diagramas de flujo. Este conjunto de
herramientas es utilizado en las etapas de Ingeniería del
Software que veremos a continuación.
Ciclo de Vida de un Proyecto Software
La imagen representa el ciclo de vida de un programa
informático, de manera que las flechas indican el orden de
realización de cada etapa.
Análisis
Diseño
Implementación
Pruebas
Mantenimiento
Etapas del Ciclo de Vida del Software
- Análisis de requisitos: a partir de las necesidades del
usuario o del programa planteado, se decide qué es lo
que hay que hacer para llegar a conseguir una solución
óptima, y se genera un documento de requisitos. Se trata
de la etapa más importante del ciclo de vida.
Existen varias técnicas para obtener los requisitos del
usuario:
- Entrevistas
- Brainstrorming
- Prototipos
- Casos de uso
- JAD (entrevistas en grupos o talleres)
- Diseño de la arquitectura: se hace un estudio para ver
los distintos componentes que van a formar parte de
nuestro programa (módulos, subsistemas, etc.) y se ge-
nera un documento de diseño. Esta fase se va a revisar
todas las veces que sea necesario hasta que estemos se-
guros de cuál va a ser la mejor solución.
- Diseño estructurado: tenemos varias notaciones como
los diagramas de flujo o el pseudocódigo.
- Diseño orientado a objetos: trabajaremos con repre-
sentaciones en UML (diagramas de clases, diagramas
de secuencia, etc.).
- Etapa de implementación o codificación: en esta eta-
pa vamos a pasar a codificar las aplicaciones que hemos
elegido en la etapa anterior, empleando el lenguaje de
programación con el que estemos trabajando. El resulta-
do que vamos a obtener va a ser el código fuente.
- Pruebas de integración: hay que realizar ensayos del
funcionamiento, combinando todos los módulos de la
aplicación. Así, haciendo funcionar la aplicación comple-
ta, comprobamos que cumple lo establecido en el diseño.
- Pruebas de validación: el último paso de la integración
se basa en realizar nuevas pruebas de la aplicación en su
conjunto. El objetivo es cerciorarse de que se cumple lo
establecido en el documento de requisitos y que cubre las
necesidades de los usuarios que ya habíamos previsto.
- Fase de mantenimiento: revisar todo el proceso anterior
e ir actualizando o modificando los cambios oportunos
en las etapas anteriores.
Ponte a Prueba: Etapa de Diseño
En la etapa de diseño, tomamos los requi-
sitos de los clientes.
- Verdadero
- Falso
Ponte a Prueba: Fase Posterior a Pruebas
Después de la fase de pruebas, ¿qué etapa se
lleva a cabo?
- Análisis
- Implementación
- Mantenimiento
- Ninguna de las opciones es correcta
Prueba de Programas
Una vez implementado y compilado el código de nuestro
algoritmo, debemos ponerlo en marcha y comenzar la
etapa de testing, plan de prueba o prueba de programa.
En ella, se prueba un programa para demostrar la existencia
de defectos: algorítmicos, de sintaxis, de documentación,
de sobrecarga, de capacidad, de rendimiento, de sincro-
nización, de recuperación, de hardware y software y de
estándares.
Este proceso de prueba del programa se lleva a cabo de
manera automática o manual y persigue los siguientes
objetivos:
- Comprobar los requisitos funcionales y no funcionales del
programa.
- Probar todo tipo de casos para detectar alguna anomalía
en su ejecución.
Técnicas de Pruebas
Tenemos dos tipos de técnicas de pruebas:
- Pruebas de caja blanca: donde se valida la estructura
del sistema.
- Pruebas de caja negra: donde se analizan las entradas y
salidas del sistema sin tener en cuenta el funcionamiento
interno.
CAJA BLANCA
Entrada(s)
Salida(s)
CAJA NEGRA
Entrada(s)
Salida(s)
El plan de prueba consta de varias etapas, ya que, después
de implementar el código, si existiera algún tipo de fallo
en el programa, tendríamos que volver a empezar con el
nuevo código modificado.
Tipos de Datos: Simples y Compuestos
C# es un lenguaje de programación en el que cada variable,
constante, atributo o valor que devuelve una función se en-
cuentra establecido en un rango de elementos ya definidos.
Podemos diferenciar entre:
Tipos Simples
A la hora de seleccionar un determinado tipo, debemos
considerar el rango de valores que puede tomar, las ope-
raciones a realizar y el espacio necesario para almacenar
datos.
Debemos tener en cuenta que el tipo de datos simple no
está compuesto por otros tipos, y que contiene un valor
único.
- Tipos simples predefinidos: entre sus propiedades más
importantes podemos destacar que son indivisibles, tie-
nen existencia propia y permiten operadores relacionales.
Se utilizan sin necesidad de ser definidos previamente:
- Natural: números naturales (N): byte, uint, ushort,
ulong.
- Entero: números enteros (Z): sbyte, int, long, short.
- Real: números reales (R): decimal, float, double.
- Carácter: caracteres (C): char.
- Lógico: booleanos (B): bool.
- Tipos simples definidos por el usuario
- Tipos enumerados: es un tipo de valor definido por el
usuario, así como un conjunto de constantes. Para defi-
nir un tipo de enumeración, utilizamos la palabra clave
enum y especificamos los nombres de componentes de
la enumeración:
public class EnumTest
{
enum dias {Domingo, Lunes, Martes, Miercoles, Jueves, Viernes, Sabado } ;
static void Main ()
{
int x = (int) dias. Domingo;
int y = (int) dias. Viernes;
Console. WriteLine («Domingo = {0}», x) ;
Console. WriteLine («viernes = {0}», y) ;
}
}
/ *
Salida:
Domingo = 0
Viernes = 5
* /
Tipos Compuestos o Estructurados
Se crean mediante la unión de varios tipos (simples o com-
puestos).
- Vectores: estructura donde almacenamos varias varia-
bles del mismo tipo. Se puede declarar una matriz si se
especifica el tipo de sus elementos. También son llama-
dos array unidimensional, es decir, de una dimensión.
Con esto, nos damos cuenta de la cantidad de indica-
dores de posición que necesitamos para acceder a un
elemento de la tabla.
Sintaxis:
<tipo> [] <nombre> = new <tipo> [<tamaño>] ;
Por ejemplo:
int [] v = new int [10] ;
int [ ] array1 = new int [ ] { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 } ;
int [] array2 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Con el anterior código, estamos declarando 10 números
enteros en un vector al que hemos llamado v.
A continuación, veremos la manera de acceder a cada uno
de ellos. Cabe recordar que la primera posición de todo
v[0] > Primer número entero del vector.
v[1] > Segundo número entero del vector.
v[2] > Tercer número entero del vector.
v[3] > Cuarto número entero del vector.
…
v[9] -> Último número entero del vector
Veamos el siguiente ejemplo:
char [ ] miArray = { 'a' , 'b' , 'c' , 'd' , 'e' } ;
for (int x=0; x<5; x++) {
miArray [1]='z' ;
}
Console. WriteLine (miArray [1] ) ;
/ / Guardamos en la posición 1, el carácter z. Por lo que, por panta-
lla, mostrará ese carácter en esa posición. Ahora el vector estaría
formado por { 'a' , 'z' , 'c' , 'd' , 'e' }
- Matrices: unión de varios vectores de cualquier tipo
simple (enteros, reales, etcétera). También la podemos