Está en la página 1de 12

Apuntes de ALGORÍTMICA

UNIDAD 1 – Introducción a la metodología de la programación.


ALGORÍTMICA Introducción a la metodología de la programación UNIDAD 1

Contenido
1. Introducción .......................................................................................................................... 3
2. Definición de programa, algoritmo y programación............................................................. 4
3. Tipos de lenguajes de programación. ................................................................................... 6
1. Clasificación según la técnica de traducción..................................................................... 6
2. Clasificación según el nivel de abstracción ....................................................................... 7
3. Clasificación según el paradigma de programación.......................................................... 7
4. Fases de la programación...................................................................................................... 9
1. Análisis de requisitos. Definición y especificación del programa. .................................... 9
2. Diseño del programa o algoritmo. .................................................................................... 9
3. Codificación/implementación del programa o algoritmo............................................... 10
4. Pruebas y detección de errores. ..................................................................................... 10
5. Mejoras y mantenimiento............................................................................................... 10
5. Características de los lenguajes de programación.............................................................. 12

2
ALGORÍTMICA Introducción a la metodología de la programación UNIDAD 1

1. Introducción

La construcción de programas requiere que el profesional domine esta actividad de forma


sólida. En numerosas ocasiones, a lo largo de la carrera profesional, será absolutamente
necesario desarrollar algún tipo de programa, o bien, dirigir equipos de gente que se dediquen
a ello.

El software es una parte muy importante de cualquier tipo de sistema informático y es


necesario disponer de una cierta solidez y dominio de los principios de la programación, pues
es uno de los pilares básicos y más importantes dentro del ámbito de esta profesión.

Posiblemente, muchos de los lectores ya disponen de cierto nivel de conocimiento en el


campo de la programación e, incluso, pueden llegar a pensar que la labor de desarrollar
programas y aplicaciones no es una tarea difícil… y, efectivamente, no lo es.

Entonces, ¿porqué realizar esta asignatura?¿No resultaría más sencillo realizar un cursillo
de programación?... Para nosotros, NO. Realizar programas para consumo propio es sencillo
pero, ¿y los programas comerciales?¿cómo se realizan?... Windows, Word, Excel,…, gestores
de cajeros automáticos, de control de venta de billetes,… Todas son aplicaciones robustas,
fiables. Para conseguirlo es necesario conocer las bases, los fundamentos de la programación;
dominarlos y tenerlos correctamente asimilados y asentados desde el primer momento. Este
es nuestro objetivo. Este es el objetivo de la asignatura de algorítmica.

Para empezar, es necesario asentar y definir algunos conceptos previos. A medida que
vayamos avanzando, apoyados en la práctica, se entenderán con mayor profundidad parte de
estas definiciones que, de forma inicial, pueden resultar un poco confusas.

Así pues, e intentando que sean lo más sencillas posibles, partiremos de cero y
avanzaremos despacio para que todos, legos y entendidos, lleguemos a buen puerto.

La programación solo tiene sentido como algo progresivo, acumulativo, empezando por
realizar cosas simples, con escasas herramientas y, una vez asimiladas, ir aumentando la
complejidad a la vez que vamos aprendiendo y explorando herramientas más avanzadas.

Es necesario, por tanto, consolidar todo lo aprendido con anterioridad y, sólo así, se
logrará avanzar con éxito en el aprendizaje.

3
ALGORÍTMICA Introducción a la metodología de la programación UNIDAD 1

2. Definición de programa, algoritmo y programación

“Un programa es un conjunto de instrucciones para un computador.” – Wikipedia.

“Un algoritmo es 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, mediante pasos
sucesivos y bien definidos, se llega a un estado final, obteniendo la solución” – Wikipedia.

También podemos definir un algoritmo como: “un guión o receta para seguir para resolver
un determinado problema, partiendo generalmente de una información inicial que puede
variar”.

LA LÁMPARA NO
FUNCIONA

NO
¿ENCHUFADA? ENCHUFAR


¿BOMBILLA CAMBIAR BOMBILLA
QUEMADA?

NO

COMPRAR NUEVA
LÁMPARA

Fig. 1 - Algoritmo realizado utilizando la técnica de los diagramas de flujo.

Definición de LENGUAJE:

“Conjunto de símbolos y normas de uso de estos que sirve para comunicarnos.”

Como características más importantes a destacar tenemos los dos conceptos siguientes:

• Sintaxis: que hace referencia a COMO se deben decir las cosas.


• Semántica: que hace referencia a QUE COSAS se dicen.

4
ALGORÍTMICA Introducción a la metodología de la programación UNIDAD 1

Definición de LENGUAJE ALGORÍTMICO:

“Es un lenguaje formal que nos ayuda a expresar ideas con la mayor claridad posible y evitando
ambigüedades. Es un lenguaje creado de forma expresa para esta función.”

Definición de LENGUAJE FORMAL:

“Es un lenguaje alternativo no complejo que tiene como objetivo la claridad, la simplicidad y la
precisión”

Definición de PROGRAMA:

“Es la codificación de un algoritmo determinado usando un lenguaje concreto que entiende una
computadora (ordenador)”

Definición de COMPUTADORA (ORDENADOR):

“Es un autómata de cálculo gobernado por un programa.”

Es la más flexible de todas las máquinas, ya que es capaz de realizar tantas tareas como
programas diferentes pueda procesar.

Definición de AUTÓMATA:

“Cualquier mecanismo capaz de llevar a cabo una tarea de forma automática”

El ordenador es un mecanismo que permite ejecutar algoritmos para resolver los


correspondientes problemas.

El lenguaje que suele entender un ordenador es el lenguaje máquina, que es un


lenguaje pesado y lento y que, además, requiere un conocimiento profundo de la
computadora y del microprocesador que se está utilizando en cada momento. Es por esto que
se suele utilizar lenguajes llamados de “alto nivel” para programar. Estos lenguajes de alto
nivel son más cercanos al lenguaje natural, es decir, a nuestro lenguaje hablado, a pesar que
siguen siendo lenguajes formales.

Fig. 2 – Esquema de pasos a seguir para realizar la codificación de un algoritmo.

5
ALGORÍTMICA Introducción a la metodología de la programación UNIDAD 1

3. Tipos de lenguajes de programación.


1. Clasificación según la técnica de traducción
Si tenemos en cuenta las técnicas de traducción utilizadas por el lenguaje o lenguajes
de programación a analizar, podemos considerar que existen dos tipos de lenguajes de
programación:

• Lenguajes interpretados.
• Lenguajes compilados.

Lenguajes interpretados:

Son aquellos lenguajes de programación en los cuales se obtiene cada una de las
instrucciones en lenguaje de alto nivel, se decide que acciones en lenguaje máquina se deben
ecutar y, a continuación, se ejecutan dichas acciones. Esta dinámica se realiza de forma
sucesiva con todas las instrucciones del programa.

Si existe algún tipo de error, el programa se ejecuta hasta “tropezar” con él, momento
en el que se detiene totalmente.

Lenguajes compilados:

Son aquellos en los que el programa escrito en lenguaje de alto nivel se traduce
completamente a un programa similar/equivalente al lenguaje máquina antes de ejecutarse.

En este caso, si existe algún tipo de error, el programa no llegaría a ejecutarse.

Por norma general, los lenguajes compilados suelen ser más eficientes que los
interpretados, aunque estos últimos suelen ser más flexibles.

INTÉRPRETE COMPILADOR

INSTRUCCIONES INSTRUCCIONES
LENGUAJE ALTO LENGUAJE ALTO
NIVEL NIVEL

REALIZAR EJECUTAR REALIZAR COMPILAR Y


CAMBIOS PROGRAMA CAMBIOS LINKAR


NO ¿FUNCIONA ¿ERRORES? ACABAR
OK?
NO SÍ


EJECUTAR ¿FUNCIONA
ACABAR PROGRAMA OK?
NO

6
ALGORÍTMICA Introducción a la metodología de la programación UNIDAD 1

Fig. 3 – Esquema comparativo de las fases de las dos técnicas de traducción

La ventaja más destacable del uso de lenguajes de alto nivel es el hecho que los
programas realizados mediante el uso de los mismos podrán ejecutarse en un gran número de
máquinas y plataformas, aunque a nivel interno puedan ser muy distintas entre sí.

2. Clasificación según el nivel de abstracción


Si realizamos una clasificación de los lenguajes de programación en base a su cercanía
o lejanía al lenguaje natural es decir, según su nivel de abstracción, obtenemos los dos grupos
siguientes:

 Lenguajes de alto nivel: son aquellos lenguajes de programación que están más
cercanos al lenguaje natural.
o Ventajas:
 Tiempo de formación más corto
 Estructura basada en reglas sintácticas similares al
lenguaje humano.
 Modificaciones y mejoras realizables más rápidamente.
 Coste más reducido de los programas.
 Altamente portables.
o Inconvenientes:
 No se aprovechan los recursos internos de la máquina.
 Aumenta la ocupación de memoria.
 Tiempo de ejecución necesario mucho mayor.

 Lenguajes de bajo nivel: son aquellos lenguajes de programación que están


más cercanos al código/lenguaje máquina. (P.ej.: lenguaje ensamblador)
o Ventajas:
 Mayor adaptación al equipo.
 Posibilidad de obtener la máxima velocidad con mínimo
uso de memoria.
o Inconvenientes:
 Imposibilidad de escribir código independiente de la
máquina.
 Mayor dificultad en la programación y en la comprensión
de los programas.
 El programador debe conocer más de un centenar de
instrucciones.
 Es necesario conocer en detalle la arquitectura de la
máquina.

3. Clasificación según el paradigma de programación


En esta clasificación, encontramos la siguiente tipología:

 Lenguajes imperativos.
 Lenguajes funcionales.
 Lenguajes lógicos.

7
ALGORÍTMICA Introducción a la metodología de la programación UNIDAD 1

 Lenguajes orientados a objetos.

Lenguajes imperativos (por procedimientos):

Son aquellos que se comunican con el ordenador mediante la transmisión de órdenes


o instrucciones. (C, Basic, Pascal, Cobol,…).

Lenguajes funcionales:

Son los que utilizan la aplicación de funciones matemáticas y la composición entre


ellas.

Están constituidos solo por definiciones de funciones puramente matemáticas. No se


utiliza la asignación de variables ni existe ningún tipo de construcciones estructuradas.

El lenguaje LISP entraría dentro de este tipo de lenguajes de programación.

Lenguajes lógicos:

Son los que están basados en el razonamiento formal.

Lenguajes orientados a objetos:

Son los que utilizan las interacciones entre objetos para el diseño de aplicaciones.
Están basados en las siguientes características:

 Herencia.
 Modularidad.
 Polimorfismo.
 Encapsulamiento.

Utilizan las CLASES como plantillas/prototipos para la creación de los objetos.

Lenguajes como JAVA, C++, C# y Visual Basic .Net pertenecen a este grupo de lenguajes
de programación.

8
ALGORÍTMICA Introducción a la metodología de la programación UNIDAD 1

4. Fases de la programación.

En el ámbito profesional, las empresas exigen cada vez más, por motivos de eficiencia, que
se siga de forma estricta el desarrollo de cada una de las etapas o fases de la programación o
del desarrollo de un programa. Estas fases deben ejecutarse de forma secuencial en el tiempo
y ninguna de ellas debe obligar a retroceder hacia la etapa anterior (salvo la etapa 5,
encargada de la gestión del mantenimiento y mejoras).

Actualmente se dispone de los conocimientos necesarios y suficientes para llevar a cabo


dichas exigencias sin mayor problema.

A continuación describimos detalladamente cada una de las fases.

Nota: La fase relativa a la captura/toma de requisitos no queda dentro del marco de las fases
de la programación que aquí se comentan. A pesar de que esta labor suele ser responsabilidad
del analista, consideramos que no forma parte del desarrollo propio de la aplicación, programa
o algoritmo, ya que lo que obtenemos durante esta captura de requisitos es el enunciado del
que partimos en la primera de las fases, es decir, en la fase del análisis de dichos requisitos.

1. Análisis de requisitos. Definición y especificación del programa.


Una vez planteado el problema o la necesidad por parte del cliente, el cual comporta la
elaboración de una solución a través de un programa o aplicación informática, es necesario
realizar un análisis de dicho problema.

Muchas veces, este análisis comportará una tarea ardua y laboriosa, ya que se puede
haber comprendido el problema de forma inexacta o errónea. Una vez clarificados estos
errores o dudas, debe realizarse un estudio minucioso de los requisitos, ya que nos será de
gran ayuda en el momento de realizar la definición y la especificación del programa a
desarrollar. El resultado de esta etapa será la obtención de un enunciado preciso y claro del
problema que se debe resolver.

En este curso no se profundiza en esta etapa, ya que los enunciados se entregarán como
punto de partida para los ejercicios y actividades a realizar. Por tanto, esta etapa quedará al
margen del contenido del curso, aunque se hará referencia a ella siempre que se considere
necesario o así lo exija el ejercicio, practica o actividad pertinente.

2. Diseño del programa o algoritmo.


Obtenido ya el enunciado, se debe realizar un diseño que nos conduzca a la solución
deseada por el cliente. De forma progresiva a lo largo de la asignatura, iremos trabajando con
distintas técnicas, herramientas y metodologías para solventar esta etapa de forma eficiente y
eficaz.

La representación del diseño la realizaremos utilizando el lenguaje algorítmico y el


pseudocódigo. Empezaremos con algoritmos sencillos, pequeños y cortos y, una vez adquirido

9
ALGORÍTMICA Introducción a la metodología de la programación UNIDAD 1

cierto dominio, llegaremos a la técnica básica de diseño más utilizada: el diseño descendente.
Esta técnica nos muestra cómo resolver los problemas más complejos, realizando una división
de los mismos en problemas más pequeños y sencillos, más fáciles de solventar. De esta
forma, al resolver estos problemas más sencillos logramos resolver el problema global de
forma más sencilla y eficaz.

3. Codificación/implementación del programa o algoritmo.


El resultado del diseño ya está impreso en el papel y para convertirlo en realidad es
necesario traducir este diseño a un lenguaje de programación que el ordenador entienda.

Esta es la etapa más sencilla. Se trata únicamente de realizar una traducción altamente
mecánica del diseño ya realizado en pseudocódigo o lenguaje algorítmico sobre el lenguaje de
programación a utilizar para realizar la codificación (el lenguaje C en nuestro caso).

Mediante unas sencillas reglas de traducción/equivalencia es, como ya se ha comentado,


una tarea relativamente sencilla y se puede realizar sobre cualquier tipo de lenguaje de
programación.

4. Pruebas y detección de errores.


El éxito de las pruebas está muy vinculado a la calidad del diseño realizado con
anterioridad.

La prueba experimental de programas únicamente demuestra el funcionamiento de


forma correcta del programa o aplicación en los casos en los que ha funcionado de una
determinada forma. De esto no es posible deducir que en cualquier otro marco o situación
pueda o no comportarse de forma idónea o correcta.

Dicho de otra forma, lo único que se puede demostrar durante el periodo de pruebas de
una aplicación, programa o algoritmo es la existencia de aquellos errores que se haya
detectado durante esta etapa, pero no garantiza la ausencia de otros posibles errores.

La clave para dotar de cierta seguridad al programa, aplicación o algoritmo es tener el


convencimiento de haber realizado una correcta etapa de diseño.

Como punto importante a tener en cuenta en esta etapa, es el uso de pruebas de ámbito
y situación extremas, en las que se “fuerza” a la aplicación o programa a responder en
situaciones límite, comprobando así la robustez y fiabilidad del mismo.

5. Mejoras y mantenimiento.
De la misma forma que se siguen diseñando coches nuevos de modelos ya existentes, por
ejemplo, los programas y aplicaciones también cambian para mejorar. Por este motivo es por
lo que se vuelve a reproducir todo el proceso desde el inicio.

Si la mejora, o mejoras, obliga a una modificación profunda de parte, o partes, del


programa o aplicación o si, por cuestiones de mantenimiento, se debe corregir alguna de las
partes del programa, la única forma eficiente de realizarlo es haciendo que el primer diseño
del programa sea elaborado de forma inteligible.

10
ALGORÍTMICA Introducción a la metodología de la programación UNIDAD 1

Debemos recordar y tener muy presente que, aunque un programa solo se escribe una
única vez, la lectura de ese código puede efectuarse multitud de veces más. Por esto es muy
conveniente realizar diseños claros, compresibles i sencillos para que llevar a cabo esta etapa
sea lo más eficiente y eficaz posible.

Como consecuencia, es necesario y de vital importancia que el diseño esté muy bien
documentado, apartado que deberemos aprender a lo largo de esta asignatura. Esto nos
deberá llevar al hecho de poder distinguir entre una buena documentación y una
documentación que no aporta nada.

11
ALGORÍTMICA Introducción a la metodología de la programación UNIDAD 1

5. Características de los lenguajes de programación.


Como características o propiedades a tener en cuenta en la elección y uso de un
lenguaje de programación, destacamos las siguientes:

 UTILIDAD: es necesario que un lenguaje de programación sea fácil de aprender


y fácil de utilizar por un programador experimentado.
 RENDIMIENTO: un lenguaje de programación debe tener una buena velocidad
de ejecución de las aplicaciones desarrolladas y, a su vez, debe disponer de
una velocidad de compilación suficientemente alta. Por otro lado, debe ser un
lenguaje estable y con ausencia de defectos.
 PORTABILIDAD: un lenguaje de programación debe proveer el máximo de
compatibilidad entre sistemas y plataformas, de manera que sea posible la
ejecución de las aplicaciones desarrolladas con él independientemente del tipo
de máquina o plataforma que estemos utilizando.
 FLEXIBILIDAD: un lenguaje de programación debe dar la posibilidad de que este
se desarrolle, al igual que la implementación del mismo. Esto se consigue,
entre otras vías, mediante la existencia y disponibilidad de una extensa
colección de librerías y bibliotecas de funciones, clases,…
 CONTINUIDAD: es necesario que el fabricante, o fabricantes, de un lenguaje de
programación disponga de continuidad. También debe existir una continuidad
del lenguaje y de la implementación y uso del mismo.

Debe existir una normativa que defina el lenguaje y la implementación


de dicho lenguaje debe realizarse conforme a dicha normativa.

 DOCUMENTACIÓN: es obvio que, es totalmente necesario disponer de una


buena documentación para poder obtener el máximo rendimiento de un
lenguaje de programación.

12