domingo, 25 de septiembre de 2011

Algoritmos. Técnicas de diseño.

Ya sabemos que en la fase de Diseño de la creación de un programa, una de las cosas que hay que hacer es definir el o los algoritmos a emplear para resolver el problema. Y, ¿qué se entiende por "algoritmo"?

Se puede decir que un algoritmo es el conjunto de pasos a seguir para resolver un problema. Podemos encontrar algoritmos en la vida cotidiana, por ejemplo una receta de cocina, el manual de instrucciones de algún aparato doméstico, etc.

Un algoritmo debe ser:
  • Preciso: debe detallar el orden exacto de las operaciones a realizar.
  • Finito: debe acabar en algún momento, es decir, debe tener un número finito de pasos.
  • Definido: No ambiguo. Si se sigue dos veces, se ha de obtener el mismo resultado.
  • Efectivo: encuentra la solución en el menor tiempo posible, y con el menor número de recursos.
Además, los algoritmos siempre deben ser diseñados antes de implementar los programas que los ejecuten, y deberán ser independientes del lenguaje de programación en el que vayan a ser expresados.

Técnicas para el diseño de algoritmos

Aunque existen otras, las dos técnicas más utilizadas para diseñar algoritmos son el Diagrama de Flujo (u Ordinograma) y el Pseudocódigo.

Diagramas de flujo

Un diagrama de flujo sirve para representar visualmente el flujo de datos y la secuencia de ejecución de un programa. Los diagramas de flujo se dividen en:
  • Organigramas: son más generales. Representan el flujo de información entre los distintos soportes físicos del sistema informático.
Ejemplo de organigrama. www.iesjuandelacierva.com/
  •  Ordinogramas: representan con más detalle el flujo del programa. Muestran la secuencia lógica y detallada de las operaciones a realizar en el algoritmo.
Ejemplo de ordinograma. www.carlospes.com/curso_de_algoritmos/

Existe una colección de símbolos que representan cada uno de los elementos que intervienen en un diagrama de flujo. Cuando se usen estos símbolos, deberán contener en su interior un nombre relacionado con la función que realizan. Estos símbolos son:


Las reglas para la representación de ordinogramas son básicamente las siguientes:
  • Todos los elementos deberán estar conectados por medio de líneas de conexión, y éstas han de ser rectas.
  • No se pueden cruzar las líneas de conexión.
  • No deben quedar líneas de conexión sin conectar.
  • El flujo del programa deberá ir de arriba hacia abajo y de izquierda a derecha.
  • A un símbolo de proceso pueden llegarle varias líneas de conexión, pero solo puede salir una de él.
  • Al símbolo de INICIO no le puede llegar ninguna línea de conexión.
  • Al símbolo de FIN le pueden llegar varias líneas de conexión, no puede salirle ninguna.
Software para crear diagramas de flujo: smartdraw, yEd, DFD, Dia. Para Linux: Dia 0.97, SimpleDiagrams 1.0.19.

Visita el siguiente enlace para aprender más sobre los diagramas de flujo.

Pseudocódigo

Cuando los algoritmos se complican y crecen de tamaño, representarlos gráficamente daría lugar a ordinogramas tan grandes que habría que fragmentarlos y, además, serían muy difíciles de interpretar.

El pseudocódigo se utiliza para resolver problemas usando un lenguaje común, parecido al lenguaje humano pero simplificado, independiente de cualquier lenguaje de programación. Podríamos decir que el pseudocódigo es un lenguaje intermedio entre nuestro lenguaje y el de programación. Nos permitirá expresar de forma clara y sin ambigüedades el flujo de ejecución de las acciones de un algoritmo.

Ejemplos de algoritmos en pseudocódigo:



Aunque no se ha establecido una manera concreta de diseñar un pseudocódigo, se debe intentar seguir una serie de normas


Visita el siguiente enlace para aprender más sobre cómo diseñar un algoritmo en pseudocódigo.

miércoles, 21 de septiembre de 2011

Fases en la creación de un programa informático

La creación de software consta generalmente de una serie de pasos claramente diferenciados:

1. Análisis: se recopila documentación, se estudian los requisitos del usuario final (qué se va a implementar, cuáles son las necesidades del usuario). Se suele empezar con una descripción en lenguaje natural de lo que quiere el usuario. Al final de esta etapa tendremos una descripción clara y precisa de qué producto vamos a construir, qué funcionalidades aportará y qué comportamiento tendrá.

2. Diseño: una vez que sabemos qué debemos hacer, debemos determinar cómo lo haremos. Estudiaremos el problema y lo descompondremos en problemas más pequeños; definiremos la estructura de la solución, identificando los módulos que hay que implementar y sus relaciones; definiremos los algoritmos a emplear y el lenguaje de programación a utilizar, etc.

3. Implementación y codificación: se escribe el programa fuente en el lenguaje de programación establecido y se genera el código ejecutable.

4. Pruebas: se comprueba que el programa no tenga errores, y que se cumplen los criterios de calidad.

5. Mantenimiento: el programador se asegura de que el programa siga funcionando, y lo va adaptando también a nuevos requisitos que puedan ir surgiendo.

Imagen obtenida en http://wagonzalez2.wordpress.com/

domingo, 18 de septiembre de 2011

¿Qué es eso de "programar"?

Los ordenadores son máquinas que sirven para el tratamiento de la información. Su funcionamiento básico consta de 3 pasos:

 
  1. Obtención de la información (ENTRADA)
  2. Proceso de la información (PROCESO)
  3. Devolución de resultados (SALIDA)




Para llevar a cabo estas acciones, los ordenadores cuentan con elementos de dos tipos diferentes:
  • Elementos HARDWARE: son todos los componentes físicos del ordenador, los que se pueden tocar y ocupan un espacio físico. Ejemplos: CPU, RAM, disco duro, monitor, teclado, etc.
  • Elementos SOFTWARE: son los que forman la parte lógica del PC. Se podría decir que software es todo lo que no es hardware. Lo constituyen los programas y los datos.
Si nos centramos en el SOFTWARE, éste puede ser de varios tipos:
  • Software de Sistema: está diseñado para controlar y gestionar el hardware del equipo, y para permitir la ejecución de software de aplicaciones. Ejemplos: Sistemas Operativos, BIOS, gestores de arranque, etc.
  • Software de Aplicaciones: se trata de programas diseñados para ayudar al usuario a realizar tareas muy específicas. Ejemplos: software empresarial, software de contabilidad, suites de oficina (OpenOffice, Microsoft Office,...), software de gráficos, reproductores multimedia, software educativo, programas de simulación, etc. 
  • Software de Programación: es utilizado por los programadores para crear otros programas y aplicaciones, probarlos, modificarlos y mejorarlos. Las herramientas de este tipo pueden agruparse en varias categorías, entre las que se encuentran:
    • herramientas de construcción de aplicaciones,
    • herramientas de depuración y de verificación,
    • entornos de desarrollo integrado (IDE).
    • ...
Y ¿qué es un programa?

Según la Wikipedia, un programa informático es "un conjunto de instrucciones que, una vez ejecutadas, realizarán una o varias tareas en una computadora".

Es decir, que mediante los programas podemos indicar al ordenador qué queremos que haga, y cómo queremos que lo haga. Pero el ordenador sólo es capaz de ejecutar órdenes y operaciones muy básicas: almacenar y recuperar información, comparar valores (numéricos o alfanuméricos) y realizar operaciones aritméticas sencillas (sumas, restas, multiplicaciones, etc.). Será combinando estas operaciones básicas como podremos hacer que el ordenador lleve a cabo procesos que pueden llegar a ser extremadamente complejos.

Pero además, para poder dar órdenes a la máquina, debemos conocer cuál es su "lenguaje", es decir, debemos saber cómo representar la información para que el ordenador la sepa interpretar. Este lenguaje es el denominado lenguaje binario, que cuenta únicamente con dos símbolos: el '0' y el '1'.


codigo_binarioToda la información que maneja un ordenador está expresada con estos dos símbolos mediante bits. Un bit es la unidad de memoria más pequeña de un ordenador, y su valor será siempre un 0 o un 1. Es evidente que no se puede almacenar mucha información en un solo bit, pero la memoria de un ordenador es capaz de almacenar grandes cantidades de ellos. Para representar la información, se agrupan los bits de 8 en 8, formando los llamados bytes u octetos. El byte es una unidad de memoria más útil, ya que cada byte puede almacenar un carácter alfanumérico (una letra, un caracter especial o un número).
 
¿Y si no domino el "lenguaje máquina"...?
 
Cuando queramos escribir un programa para indicar al procesador lo que debe hacer, debemos hacerlo usando el lenguaje que éste es capaz de interpretar, el de los unos y los ceros, el llamado lenguaje máquina. Pero para el hombre es muy difícil programar utilizando este lenguaje, ya que está muy alejado del suyo, y por este motivo existen otros LENGUAJES DE PROGRAMACIÓN más cercanos al lenguaje humano. Usaremos estos otros lenguajes para crear nuestros programas, pero hay que tener en cuenta que todos los programas, independientemente del lenguaje en el que se escribieron, deberán traducirse al lenguaje máquina antes de ser ejecutados, ya que éste es el único lenguaje que entiende la computadora.

Entonces, ¿existen otros lenguajes para comunicarse con el ordenador?

Efectivamente, el hombre ha inventado numerosos lenguajes que nos facilitan la tarea de programar nuestros ordenadores. Estos lenguajes son de muy diversos tipos, y se pueden clasificar según varios criterios. Vamos a ver solo algunas de estas clasificaciones:
  1. Según su nivel de abstracción (si es un lenguaje cercano al lenguaje máquina o no), podemos clasificarlos en:
    • Lenguajes de bajo nivel: son los que, por sus características, se encuentran más cercanos a la arquitectura del ordenador. El lenguaje de bajo nivel por excelencia es el Ensamblador.
    • Lenguajes de alto nivel: son los que se parecen más al lenguaje humano, y por lo tanto son más fáciles de usar y de entender. Las instrucciones son palabras y signos reconocibles por nosotros. Además estos lenguajes son independientes de la máquina, y por lo tanto los programas escritos con ellos deberían poder ejecutarse en cualquier computadora. Ejemplos: C, Java, Python, php, etc.


    1. Según su propósito (para qué se utilizan), podemos clasificarlos en:
      • Lenguajes de propósito general: se usan para cualquier tipo de aplicaciones.
      • Lenguajes de propósito específico: se usan para realizar tareas muy concretas.
      • Lenguajes de programación de sistemas: se usan para crear sistemas operativos y drivers.
      • Lenguajes de script: se usan para operaciones de control y auxiliares.
      1. Según la manera de traducirse. Ya se ha comentado que los programas deben ser traducidos al lenguaje máquina para poder ser ejecutados. Existen unos programas que se encargan de esta tarea, a los que podemos llamar genéricamente traductores. Según el tipo de traductor que tenga, podemos clasificarlos en:
        • Lenguajes compilados: son aquellos en los que un programa traductor (compilador) traduce el código del programa (código fuente) en código máquina (código objeto). Otro programa, el enlazador, unirá los ficheros de código objeto del programa principal con los de las librerías para producir el programa ejecutable. Ejemplo: C.
        • Lenguajes interpretados: son aquellos en los que un programa traductor (intérprete), ejecuta las instrucciones del programa directamente del código fuente, sin que sea necesario crear otro archivo ejecutable.
        1. Según la técnica de programación, podemos clasificarlos en: 
            • Lenguajes de programación convencional: con estos lenguajes se crea un único "programa principal", formado por una serie de comandos o instrucciones escritos secuencialmente (uno detrás de otro).
            •  Lenguajes de programación estructurada: se basa en que "es más fácil resolver muchos problemas pequeños, que un gran problema". Consiste en la descomposición de un programa en trozos más pequeños denominados módulos o subprogramas. Cada módulo se encargará de llevar a cabo una tarea concreta y bien definida.
            • Programación orientada a objetos:  se basa en la creación de clases y objetos, que siguen el modelo del mundo real. Cada objeto tendrá un estado y dispondrá de sus propios módulos para realizar acciones y para comunicarse con otros objetos. Ejemplos: C++, Java.
            • Programación orientada a eventos: la estructura y ejecución del programa dependen de los sucesos que ocurran en el sistema o que ellos mismos provoquen. El programador debe definir los eventos a los cuales el programa reaccionará, y las acciones que seguirá al presentarse cada uno. Al ejecutarse el programa, esperará a que ocurra un evento. Cuando esto pase, se ejecutará el código correspondiente al evento que se realizó. Ejemplo: Visual Basic  
          1. Según permitan el desarrollo de software para entornos gráficos o no, podemos clasificarlos en:
            •  Lenguajes de programación visual: permiten crear aplicaciones con un entorno gráfico amigable, compuestas por ventanas, menús desplegables, botones, barras de desplazamiento, etc. Suelen ser también lenguajes orientados a objetos, ya que estos elementos que componen la interfaz de las aplicaciones son precisamente objetos con propiedades y métodos. Además, también están orientados a eventos.
            • Lenguajes de programación no visual: las aplicaciones que se crean con estos lenguajes no disponen de entorno gráfico amigable.