Conceptos básicos de programación[IaP] – Parte I

diciembre 6, 2016 /

I – Conceptos básicos de programación

Este capítulo es una breve introducción al mundo de los computadores y a los conceptos básicos de la programación. Comenzaremos dando al lector unas nociones de la organización de un computador y, a continuación, definiremos algunos términos básicos relacionados con la programación. Finalizaremos el capítulo explicando las distintas etapas de la elaboración de un programa, y su proceso de codificación y prueba.


1- Organización de un computador

Según el diccionario un computador es: Máquina electrónica capaz de almacenar información y tratarla automáticamente mediante operaciones matemáticas y lógicas controladas por programas informáticos.
En ciencias de la computación se distinguen distintos modelos de computadores. Hoy en día casi todos siguen el modelo basado en la estructura Von Neumann. Los computadores que siguen este modelo, son conformados por tres elementos básicos: la unidad central de proceso (CPU), la memoria y el subsistema de entrada y salida (periféricos tales como teclado, monitor…).
Esquema del modelo Von Neumann

La memoria

Como bien dice la definición, un computador es una máquina electrónica capaz de almacenar información […]. Entonces necesitaremos un espacio donde almacenar dicha información, el dispositivo encargado de almacenar los programas y los datos que manipulan los programas es la memoria.

Las memorias están organizados, podría decirse, como una matriz de dimensiones NxM. La unidad básica de información usada en los computadores es un bit (binary digit) y solamente puede tomar dos valores : cero o uno. Para crear programas más complejos, es necesaria una unidad que pueda contener más información que cero o uno, es así que aparece el byte, un conjunto de 8 bits. En este caso las combinaciones posibles ya no son dos 1 ó 0; sino que al estar combinando 8 bits (estos pueden tomar dos valores distintos solamente) tenemos  28 es decir 256 combinaciones distintas posibles. Estos bytes o más específicamente bits, harán una combinación de longitud M (el número de columnas de la memoria) para conformar lo que se denominan palabras. Generalmente una palabra tiene una longitud de un byte.
Estructura de una memoria

Dijimos que los computadores, mediante operaciones matemáticas y lógicas tratan la información que almacenan controlados por programas informáticos.

Un programa informático es una secuencia de esas operaciones,o mejor dicho de esas instrucciones básicas (tales como sumar, restar, devolver un resultado…). Instrucciones básicas que también ocuparán un lugar en la memoria (uno o varios bytes). También hay que añadir que no siempre manipulas el mismo tipo de información, no es lo mismo trabajar con números enteros que con caracteres, es por ello que al guardar un dato en memoria se deberá especificar que tipo de dato se está almacenando.

El tipo de memoria más usado por los ordenadores de hoy en día es la RAM.

La unidad central de proceso

La CPU es el dispositivo encargado de procesar la información mediante la ejecución de programas, o dicho de otra forma, la CPU haces los cálculos (instrucciones de los programas) en el orden indicado (flujo del programa).

La CPU solo es capaz de ejecutar operaciones básicas: sumar, restar, multiplicar, comparar valores, almacenar/recuperar un dato de la memoria, etc…

Si no conocías anteriormente lo que es una CPU, es bastante posible que te sea más familiar el término procesador.

Subsistema de entrada/salida

El subsistema de entrada/salida E/S (o I/O en inglés) son los dispositivos conectados al computador encargados de comunicarlo con el exterior y de almacenar la información permanentemente. Nos encontramos con tres tipos de dispositivos: dispositivos de entrada (teclado, ratón, sensor biométrico, lector de tarjetas…), dispositivos de salida (pantalla, impresora, altavoces…) y dispositivos de almacenamiento permanente (HDD, SSD, DVD, CD….)

El bus

El bus son los circuitos encargados de enlazar los tres subsistemas, permitiendo transmitir la información entre ellos.

 

2 – Términos básicos en programación

La programación informática o programación algorítmica, acortada como programación, es el proceso de diseñar, codificar, depurar y mantener el código fuente de programas computacionales.

El ordenador no resuelve problemas por si solo, este solo es capaz de realizar con gran potencia los calculos necesarios para obtener la solución. Como bien dice la definición de programación, es el proceso de diseñar, es decir que el programador indica al computador los cálculos a realizar para resolver un problema. Para resolver dicho problema el programador debe:

  • Pensar un método para resolver el problema. Determinar el orden de las operaciones necesarias para ello. (Diseñar algoritmo)
  • Escribir dicho algoritmo en un lenguaje de programación. (Codificar programa)
  • Probar y depurar el programa, para arreglar posibles fallos o mejorar el diseño de este. (Depuración y mantenimiento de código fuente)

Algoritmo

Un algoritmo (del griego y latín, dixit algorithmus) es un conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite llevar a cabo una actividad mediante pasos sucesivos que no generen dudas a quien deba hacer dicha actividad. De dicha definición podemos sustraer las tres principales caracteristicas de los algoritmos:

  • Es preciso. Un algoritmo indica exactamente el orden en que deben realizarse las operaciones.
  • Ha de estar bien definido (no ha de ser ambiguo). Si se sigue el algoritmo dos veces con los mismos datos de entrada, se obtiene el mismo resultado.
  • Es finito. El algoritmo tiene que terminar en algún momento.

Ejemplo de algoritmo para dibujar un cuadrado:

  1.  Inicializar la posición del lápiz
  2.  Inicializar la dirección del lápiz.
  3.  Trazar 50 puntos
  4.  Girar 90º
  5. Trazar 50 puntos
  6. Girar 90º
  7. Trazar 50 puntos
  8. Girar 90º
  9. Trazar 50 puntos

Fin Algoritmo

A continuación mostraremos una versión más compacta del algoritmo presentado anteriormente:

  • Inicializar la posición del lápiz
  • Inicializar la dirección del lápiz

Repetir

  • Trazar 50 puntos
  • Girar 90º

hasta 4 veces

Fin Algoritmo

 

Programa

Siguiendo la definición de programación después de diseñar (el algoritmo) toca pasar el algoritmo a un lenguaje de programación determinado, a esta fase se le llama fase de codificación y el resultado de esta es un programa.
Procesos a seguir en la programación

El proceso de diseño de un algoritmo que da solución a un problema es un proceso creativo, no existe un método fijo para crear el algoritmo.

En cambio, la fase de codificación es mecánica y automática. Para codificar se utilizará un lenguaje de programación, y este tendrá ciertas reglas sintácticas a seguir (como cualquier lenguaje). Los programas deben funcionar correctamente y solucionar el problema planteado, también deben ser fáciles de leer, entender y modificar, por ultimo los programas deben llegar a la solución en el menor tiempo posible.

Lenguajes de programación

Un lenguaje de programación es, como su nombre lo indica, un lenguaje dedicado a la codificación de programas. Esto se traduce como un conjunto de caracteres que se combinan entre sí siguiendo una serie de reglas sintácticas.

Existen distintas formas de clasificar un lenguaje de programación, ya sea por el propósito de este, el paradigma de la programación, la evolución histórica, etc… Nosotros nos interesaremos en la clasificación según el nivel de abstracción.

  • Lenguajes de alto nivel: Estos lenguajes de programación son los mas parecido al lenguaje humano. Estos lenguajes suelen ser portables o independientes de la arquitectura (no es lo mismo programar para Windows que para Linux), permitiendo así que se puedan ejecutar en distintos computadores sin necesidad de modificar el código. Estos lenguajes pueden ser clasificados en función del estilo de programación empleado (paradigma de programación):
    • Lenguajes de programación procedurales: Se divide el problema inicial en partes más pequeñas. Los subproblemas son resueltos por “subprogramas” (subrutinas, funciones, procedimientos), que se llaman entre sí para llegar a la solución completa del problema. Ejemplos de lenguajes procedurales: C, Pascal.
    • Lenguajes de programación orientados a objetos: La programación consiste en crear clases y objetos, y especificar la interacción entre ellos. Ejemplos de lenguajes orientados a objetos: C++ , Java.
  • Lenguajes de bajo nivel: Los lenguajes de bajo nivel son específicos de la arquitectura (es decir, algunas funciones cambiarán dependiendo del sistema operativo que uses y la marca del procesador que tengas), entonces dejan de ser portables (solo se pueden ejecutar en el computador para el cual fueron diseñados). En este grupo se incluyen el lenguaje máquina y el lenguaje ensamblador. El lenguaje máquina se caracteriza por ser el único que el computador puede interpretar directamente y se basa en la combinación de solo dos símbolos (el 0 y el 1). El lenguaje ensamblador es una representación simbólica del lenguaje máquina para facilitar a los humanos la programación de bajo nivel.

A continuación os mostramos un programa que calcula el área de un cuadrado de 9 cm de lado, escrito en tres lenguajes de programación diferentes.
Calculo del area de un cuadrado en C,Ensamblador y Máquina

3 – Etapas de elaboración de un programa

A la hora de elaborar un programa, es recomendable seguir una metodología.

Análisis

Lo primero que debemos hacer es definir bien el problema, dejando bien claro cual es la entrada (datos que proporcionamos al programa para que trabaje con ellos) y cual ha de ser la salida del programa (solución al problema). También se puede especificar a grandes rasgos, las estructuras de datos a utilizar y las líneas generales para resolver el problema.

Diseño

Una vez planteado el problema, debemos desarrollar los algoritmos para resolverlo. En programación procedural se suele utilizar la técnica de diseño descendente, es decir resolver el problema mediante la resolución de problemas más sencillos. Los subproblemas se van dividiendo en más subproblemas hasta llegar a subproblemas triviales y fáciles de codificar. La siguiente imagen es un ejemplo de diseño descendente.
Ejemplo de diseño descendente

Codificación

Esta fase consiste en escribir en el lenguaje de programación elegido, cada uno de los algoritmos diseñados en la fase anterior. Por regla general, cada uno de los algoritmos ha de ser codificado y probado independientemente.

Prueba

Aquí ejecutaremos los programas en el entorno definido. Se debe probar con diferentes datos de entrada, sin olvidarse de los casos especiales o menos frecuentes.

Mantenimiento

En la fase anterior solo se detecta la presencia de errores, pero no se puede confirmar la ausencia total de estos. Es por ello por lo que la última etapa en la elaboración de un programa siempre es el mantenimiento. En esta etapa, se corrigen los errores hallados posteriormente y se añaden nuevas funcionalidades al programa.

4 – Proceso de codificación y prueba de un programa

El siguiente diagrama de flujo muestra perfectamente el proceso de codificación y prueba de cada uno de los algoritmos diseñados en la fase de diseño.
Proceso de codificación y prueba de un programa

Edición

En primer lugar, hay que codificar el algoritmo en el lenguaje escogido. Para ello se puede utilizar cualquier editor de texto plano (programas de ofimática como Word o LibreOffice no nos servirán, se deben usar editores de texto plano como el bloc de notas de Windows u otros editores como gedit o vi) o entorno de desarrollo (IDE). El resultado de esta etapa es un fichero de texto que contiene el código del programa (a esto le denominamos fichero fuente). La extensión de dicho fichero indica el lenguaje de programación utilizado (.c para códigos en C, .f para Fortran, .cpp para C++, etc)

Compilación

El compilador es una herramienta que detecta los errores sintácticos de los programas, e indica el tipo de error y la línea donde se encuentra. Una vez tengamos el fichero fuente, hay que “compilar” el programa, es decir, determinar si hay errores sintácticos en el código y corregirlos. Una vez compilado el programa, el compilador genera un fichero con un código objeto. Este fichero está traducido a lenguaje máquina y es necesario para poder generar posteriormente un fichero ejecutable, este fichero tiene la extensión .o u .obj.

Enlace

Cuando un programa consta de varios ficheros fuente o utiliza funciones propias del lenguaje de programación, es necesario enlazar todos los ficheros objeto correspondient4es y generar un único fichero ejecutable. El enlazador es el encargado de verficiar que solamente haya un programa principal, que todas las funciones estén definidas, que las llamadas a las funciones correspondan con sus definiciones, etc. El enlazador genera un fichero ejecutable con extensión .out,.exe o no tiene extensión.

Ejecución

En esta etapa ejecutamos el programa para determinar si funciona correctamente o no. Se debe ejecutar varias veces con diferentes entradas de datos y probar todos los posibles casos del programa. Un error muy habitual en los programadores noveles es ejecutar el programa con una sola entrada de datos, la entrada en que pensaban a la hora de diseñar el algoritmo. Es muy importante probar exhaustivamente los programas con diferentes datos de entrada, sin olvidar las entradas especiales o menos frecuentes.

Depuración

En ejecución se puede detectar si el programa es incorrecto, pero no da ninguna pista sobre qué parte del código ha causado el problema. En este caso pasamos a la etapa de depuración. El depurador es una herramienta que permite observar el comportamiento de un programa paso a paso, facilitando así la detección de errores en ejecución. Una vez depurado, se puede dar por finalizado el proceso de codificación y prueba, ahora solo queda el mantenimiento del programa.

Mañana serán colgados los ejercicios correspondientes a este capítulo. También explicaremos como montar tu entorno de desarrollo en C tanto en Linux como en Windows.

Si te ha surgido cualquier duda durante la lectura o haciendo los ejercicios, por favor contáctanos vía web o a través de las redes sociales.


Anexo

Bibliografía recomendada:

Bibliografía utilizada:

Deja un comentario