Tema 25 – Programación estructurada. Estructuras básicas. Funciones y Procedimientos.

1. Introducción. 1

1.1. Relación con los ciclos impartidos en FP. 1

1.2. Introducción a la Programación. 1

2. Programación Estructurada. 1

2.1. Definición. 1

2.2. Ventajas. 1

2.3. Metodologías de diseño. 2

3. Estructuras básicas. 2

3.1. Asignación. 2

3.2. Estructura secuencial 2

3.3. Estructuras condicionales o alternativas. 2

3.4. Estructuras repetitivas o iterativas. 3

3.5. Teorema de estructura. 3

4. Procedimientos y Funciones. 3

4.1. Procedimientos. 3

4.2. Funciones. 4

5. La programación en la actualidad y algunos lenguajes de programación. 4

5.1. Programación modular y orientada a objetos. 4

5.2. C, C++ y C#. 4

5.3. JAVA. 5

6. Bibliografía. 5

1. Introducción

1.1. Relación con los ciclos impartidos en FP

Este tema está directamente relacionado con los siguientes módulos y ciclos formativos de la rama de informática:

· CFGS Administración de Sistemas Informáticos:

o Fundamentos de programación (Informática).

· CFGS Desarrollo de Aplicaciones Informáticas:

o Programación en lenguajes estructurados (Informática).

1.2. Introducción a la Programación

· Instrucción: Es una cadena de símbolos de un alfabeto, formada de acuerdo con ciertas reglas sintácticas que el procesador (o el compilador) entiende, y que finalmente serán interpretadas y ejecutadas por el procesador.

· Programa: Conjunto de instrucciones en algún lenguaje de programación suministradas al ordenador, ordenadas de una forma determinada, para que éste ejecute las operaciones para resolver un problema.

· Lenguaje de programación: Técnica estándar de comunicación que permite expresar las instrucciones que han de ser ejecutadas en una computadora. Consiste en un conjunto de reglas sintácticas y semánticas que definen un programa informático.

Un lenguaje de programación permite a un programador especificar de manera precisa: sobre qué datos una computadora debe operar, cómo deben ser estos almacenados y transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural, tal como sucede con el lenguaje Léxico.

· Algoritmo: Una lista bien definida, ordenada y finita de operaciones que permite hallar la solución a un problema. Dado un estado inicial y una entrada, a través de pasos sucesivos y bien definidos se llega a un estado final obteniendo una solución. Debe de ser eficiente, definido, finito y preciso:

2. Programación Estructurada

2.1. Definición

· Inicialmente el objetivo de la programación era que el programa funcionara, sin preocuparse de su posterior mantenimiento, de forma que los programas consistían en un conjunto de instrucciones sin estructura ninguna, difícilmente comprensible para cualquier persona que no fuera la que lo desarrolló. Además, dificultaba enormemente la localización de errores, su actualización y documentación.

· La programación estructurada surge es una forma de escribir programas organizándolos en bloques, utilizando tres estructuras básicas: secuencial, selectiva e iterativa, siendo innecesario y no recomendable el uso de instrucciones de salto incondicional (GOTO). Dijkstra demostró en los años 60 que todo programa puede escribirse utilizando únicamente estas tres estructuras básicas, y sin necesidad de usar el salto incondicional, como se hacía por aquél entonces. No obstante, los lenguajes de programación estructurados suelen tener un repertorio de estructuras de control mayor, amén de funciones y procedimientos.

2.2. 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. La estructura del programa es más clara puesto que las instrucciones están más ligadas o relacionadas entre sí, por lo que es más fácil comprender lo que hace cada función.

· Reducción del esfuerzo en las pruebas: El programa se puede tener listo para producción normal en un tiempo menor del tradicional; por otro lado, el seguimiento de los fallos (“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.

· Reducción de costes de mantenimiento y aumento de la productividad del programador.

· Programas más sencillos y más rápidos

· Los programas quedan mejor documentados internamente.

2.3. Metodologías de diseño

· Top-down: Es la más aconsejada para la programación estructurada. Se define el sistema como desde un punto de vista global como si de una caja negra se tratara, y en la que lo importante es el funcionamiento global, sus entradas y salidas, y no como se realizan las operaciones. Después, se va descomponiendo el sistema por medio de refinamientos sucesivos hasta que el sistema queda totalmente especificado mediante las instrucciones en algún lenguaje de programación.

· Bottom-up: En contraste, en el diseño Bottom-up las partes individuales se diseñan con detalle y luego se enlazan para formar componentes más grandes, que a su vez se enlazan hasta que se forma el sistema completo.

· El desarrollo de software moderno usualmente combina tanto Top-down como Bottom-up. Aunque un conocimiento completo del sistema se considera usualmente necesario para un buen diseño, la mayoría de proyectos de desarrollo de software tratan de reutilizar componentes software desarrollados y probados previamente.

3. Estructuras básicas

· Todas las estructuras de control tienen un único punto de entrada y un único punto de salida.

· Muchos de los lenguajes de programación modernos tienen estructuras de control similares, lo que varía entre unos y otros es su sintaxis para expresar la estructura, amén de otras características.

3.1. Asignación

· Consiste en asociar un valor a una variable. El valor puede obtenerse a partir de una expresión válida, que se evaluará antes de asignar al valor a la variable, y que deberá ser del mismo tipo que la variable.

En pseudocódigo

En C

a:=4+b

a=4+b

3.2. Estructura secuencial

· Permite descomponer un problema en una secuencia de acciones que se ejecutarán una detrás de otra de forma incondicional.

En pseudocódigo

En C

…Leer RADIO

LONGCIR:=3,14*radio^2

ESCRIBIR “La longitud es ”,LongCir…

…scanf(“%f”,&radio);

LongCir=radio*3,14;

Printf(“La longitud es %.2f”,LongCir);…

3.3. Estructuras condicionales o alternativas

· Permiten la ejecución o no de un grupo de instrucciones dependiendo de si se cumple o no una determinada condición. Existen tres tipos de instrucciones alternativas:

Simple en pseudocódigo

Simple en C

Si <<Condición>> Entonces

Instrucciones…

Fin Si

if (<<condición>>){

//Instrucciones…

}…

Doble en pseudocódigo

Doble en C

Si <<Condición>> Entonces

Instrucciones…

Sino

Instrucciones…

Fin Si

if (<<condición>>){

//Instrucciones…

}

Else{

//Instrucciones…

}…

Múltiple en pseudocódigo

Múltiple en C

Seleccionar VARIABLE

Caso valor1: …

Caso valor2: …

En otro caso: …

Fin Seleccionar

switch (VARIABLE){

case1: … break;

case2: … break;

default: …

}

3.4. Estructuras repetitivas o iterativas

· Permiten la ejecución repetida de un grupo de instrucciones un número determinado de veces o hasta que se cumpla o deje de cumplirse una determinada condición. Existen cuatro tipos de instrucciones repetitivas: MIENTRAS, PARA y REPETIR

“Mientras” en pseudocódigo

“Mientras” en C

Mientras <<Condición>> Hacer

Instrucciones…

Fin Hacer

While(<<condición>>){

//Instrucciones…

}…

“Para” en pseudocódigo

“Para” en C

Para N=0 Hasta 1 Incrementar 1 Hacer

Instrucciones…

Fin Hacer

for (i=0;i<NVeces;i++){

//Instrucciones…

}

“Repetir hasta” en pseudocódigo

“Repetir mientras” en C

Hacer

Instrucciones…

Hasta (<<condición>>)

do{

//instrucciones…

}while (<<condición>>);

3.5. Teorema de estructura

· Establece que cualquier programa con una sola entrada y una sola salida, y con caminos que recorren todo el programa, puede describirse utilizando solamente las estructuras de control: secuencial, alternativa y repetitiva.

4. Procedimientos y Funciones

· Son estructuras que contienen un conjunto de instrucciones, y que permiten reutilizarlas tantas veces como sea necesario. Pueden recibir o no valores de entrada y devolver o no valores de salida. Se trata de sustituir todo un conjunto de instrucciones por un identificador que puede incorporar la declaración de valores. Posteriormente en cualquier lugar del programa se podrá invocar al conjunto de instrucciones utilizando el identificador. Pudiéndose obtener resultados devueltos. Existen dos tipos, funciones y procedimientos, que realmente se diferencian en poco.

· Ámbito de un identificador: El ámbito de un identificador (nombres de variables, constantes, funciones, procedimientos, etc.), es la parte del programa donde ese identificador puede ser utilizado, porque se conoce su existencia. Así, las variables pueden clasificarse en:

o Variables locales: Son las que se definen dentro de un subprograma, por lo tanto su ámbito coincide con el del subprograma y no pueden utilizarse fuera de él. Incluso se podrá definir una variable con el mismo nombre fuera de éste.

o Variables globales: Son las que se definen en el programa principal, o incluso fuera de éste como en el caso del lenguaje C, y que son visibles para todo el programa y los subprogramas que dependen de él. Sin embargo, si dentro de un subprograma se define una variable con el mismo nombre, dentro de éste subprograma se accede a la local, y no a la global.

4.1. Procedimientos

· Sirven para definir partes de un programa mediante la asociación de un identificador.

· En tiempo de ejecución, las instrucciones que siguen a la llamada al procedimiento contarán ya con los resultados del mismo.

· La llamada a un procedimiento se realiza escribiendo su nombre seguido de los parámetros sobre las que deseemos que trabaje, estas van encerrados entre paréntesis y en el orden en que han sido especificadas en el procedimiento llamado. En algunos lenguajes es necesario predecir una palabra de llamada como CALL delante del identificador del procedimiento que se desea ejecutar.

· Parámetros: Tanto las variables usadas en la definición del procedimiento como los valores utilizados en la llamada se denominan parámetros (los primeros formales y los segundos reales). Hay de tres tipos:

o De entrada: Son aquellos que se utilizan para aportar datos al procedimiento. Si dentro del procedimiento se actualiza el valor del parámetro formal, el parámetro real no se verá afectado.

o De salida: Son aquellos que se utilizan para exportar datos desde el procedimiento. No aportan un valor inicial, el procedimiento les asignará valores.

o De Entrada/Salida: Aportan datos al procedimiento, y si son modificados dentro de éste, se modificarán los parámetros reales, por lo que también pueden exportar datos.

4.2. Funciones

· Es un procedimiento cuyos parámetros son todos de entrada a excepción de uno que será de salida. No obstante, algunos lenguajes permiten dos formas de pasar parámetros: por valor, en la que si los parámetros formales se modifican dentro de la función, no se actualiza el valor de los reales, y por referencia en la que si los parámetros formales se modifican, sí se actualiza el valor de los reales.

· El parámetro de salida sirve para albergar el valor devuelto por la función. Éste, no debe aparecer en la lista de parámetros y permite realizar llamadas a la función dentro de una expresión de la misma forma que iría el dato que proporciona como resultado.

· Esta estructura facilita la escritura de las aplicaciones y las hace más inteligibles.

· Por ejemplo en el lenguaje C se utilizan funciones y todos los parámetros son de entrada a excepción del valor devuelto que será de salida. No obstante, se puede simular utilizar parámetros de entrada/salida utilizando como parámetros de la función las direcciones de memoria de las variables en vez del valor de éstas (paso por referencia). Así en la llamada a la función se le pasarán como parámetros las direcciones de las variables, de esta forma, la función no podrá cambiar el valor de dichas direcciones, pero sí actualizar los datos que contienen esas direcciones utilizando punteros.

5. La programación en la actualidad y algunos lenguajes de programación

5.1. Programación modular y orientada a objetos

· El principal inconveniente de la programación estructurada es que se obtiene un único bloque de programa, que cuando se hace demasiado grande puede resultar problemático su manejo, esto se resuelve empleando la programación modular, definiendo módulos interdependientes, programados y compilados por separado. Por ejemplo en el lenguaje C cada archivo se considera un módulo, se puede compilar por separado produciendo programas objeto y posteriormente enlazarlos. Otros lenguajes utilizan paquetes (JAVA) o librerías DLL (Windows y Visual Studio principalmente).

· La evolución de la programación en cuanto a la capacidad de abstracción y reutilización de código se ve reflejada en la programación orientada a objetos. Ésta, se basa en la idea de encapsular estado y operaciones en objetos, definiendo previamente las “Clases” de objetos. En general, la programación se resuelve comunicando dichos objetos a través de mensajes. Suelen permitir herencia y polimorfismo, y se siguen utilizando estructuras de control. Su principal ventaja es la reutilización de códigos y su facilidad para pensar soluciones a determinados problemas dado su alto nivel de abstracción. Ej.: Smalltalk, C++, Java, Visual Basic .NET, etc.

· En la actualidad en un contexto que incluye la generalización de las GUI, de los ordenadores personales y de Internet, los lenguajes de programación vienen integrados en completos entornos de desarrollo (IDE), que incluyen herramientas RAD (Rapid Assistant Development), herramientas CASE, completas librerías y asistentes de apoyo al programador, etc. La mayoría de los lenguajes permiten la programación orientada a objetos, alcanzando cada vez un nivel mayor de abstracción, y muchos de ellos se ejecutan sobre una máquina virtual para soportar múltiples plataformas, algo idóneo para las aplicaciones de Internet, tal como lo hacen JAVA o los lenguajes de Visual Studio .NET. Por otro lado, para el tratamiento de datos es común el uso de lenguajes de cuarta generación (4G) no procedimentales como SQL.

5.2. C, C++ y C#

· C: Es un lenguaje de programación estructurado creado en 1969 por Ken Thompson y Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje B, a su vez basado en BCPL. Es un lenguaje orientado a la implementación de Sistemas Operativos, concretamente Unix. C es apreciado por la eficiencia del código que produce y es el lenguaje de programación más popular para crear software de sistemas, aunque también se utiliza para crear aplicaciones.

Se trata de un lenguaje de medio nivel pero con muchas características de bajo nivel como el acceso a memoria mediante punteros. A pesar de su madurez, aún se sigue usando para la creación de múltiples programas.

· C++: Lenguaje de programación diseñado a mediados de los ochenta, como extensión del lenguaje de programación C y que permite la programación orientada a objetos. Algunas de las características soportadas: abstracción (encapsulación), polimorfismo, herencia múltiple, plantillas, sobrecarga de operadores, manejo de excepciones, etc.

· La evolución de C++ ha dado lugar a C#, un lenguaje creado por Microsoft dentro de su plataforma Visual Studio .NET. Tiene una sintaxis similar a C++ pero es más sencillo (por ejemplo se huye del uso de punteros) y parecido a java, el código fuente se traduce a un código intermedio (MSIL, Microsoft Intermediate Lenguaje) que posteriormente se ejecuta sobre una máquina virtual denominada .NET Framework, consiguiendo así la independencia de plataforma hardware. .NET permite además la programación en muchos más lenguajes como Visual Basic, C++, J#, PERL o COBOL.

5.3. JAVA

· Lenguaje desarrollado por Sun Microsystems a principios de los 90. Es ideal para programar en Internet debido a que se ejecuta sobre una “máquina virtual” (MVJ) y por tanto es portable e independiente de la plataforma de ejecución. Por el contrario, y debido precisamente a que su lenguaje intermedio BYTECODE debe ser interpretado sus prestaciones son menores que otros lenguajes compilados.

· Es más simple que C++, permite la ejecución multitarea y los hijos (threads), es robusto y más seguro que C++ (por ejemplo ha eliminado el uso de punteros), incorpora recolección automática de memoria (garbage collection), dispone de una librería de clases estándar y admite un cierto grado de herencia múltiple mediante interfaces.

6. Bibliografía

· Pressman, R.S.: Ingeniería del sofware. Un enfoque práctico. McGraw-Hill

· Alcalde, E y García, M.: Metodología de la programación. McGraw-Hill

· http://es.tldp.org Documentación libre en español de Linux/Unix

· http://www.tutorialparaprofesores.com Documentación de Microsoft para profesores.

· http://technet.microsoft.com Documentación tecnológica de Microsoft

· https://msdn.microsoft.com Centro de desarrollo de Microsoft

· http://algoritmia.com Web sobre el diseño de algoritmos

Publicado: marzo 17, 2019 por Laura Gonzalez

Etiquetas: tema 25 informatica