Você está na página 1de 21

Fundamentos de Programación

__________________________________________________________________________________________________________

FUNDAMENTOS DE PROGRAMACIÓN

Tema 1

Conceptos previos

1º Administración de Sistemas Informáticos

__________________________________________________________________________________________________________
Conceptos previos 1
Fundamentos de Programación
__________________________________________________________________________________________________________

1. INTRODUCCIÓN.

• Definición de Informática.

La Informática trata de la adquisición, representación, tratamiento y transmisión


de la información, realizando estas operaciones automáticamente al utilizar
computadoras. Gracias a estas máquinas de carácter electrónico se puede efectuar un
tratamiento automático de la información.

La informática es el conjunto de conocimientos científicos y técnicos que


hacen posible el tratamiento automático de la información por medio de
computadoras.

• La computadora.

Computadora u ordenador es una máquina capaz de aceptar unos datos de


entrada, efectuar con ellos operaciones lógicas y/o aritméticas y proporcionar, bajo
el control de un programa previamente almacenado en la propia computadora,
datos de salida sin intervención de un operador humano.

Una computadora u ordenador, aunque es capaz de realizar tareas increíblemente


complejas, sólo es capaz de hacer físicamente tres clases de operaciones básicas:

- Operaciones aritméticas : Sumar, restar, multiplicar y dividir dos números.


- Operaciones lógicas: Comparar dos valores.
- Almacenar y recuperar datos.

Con estas pocas operaciones, utilizadas y combinadas de forma adecuada


mediante un programa, se pueden llegar a realizar tareas increíblemente complejas que
aporten la solución a un determinado problema, ya sea de gestión, técnico o de
cualquier otro tipo.
La potencia de cálculo de una computadora se debe a su gran rapidez, precisión
y memoria. Tales cualidades provienen a su vez de las características inherentes a los
componentes electrónicos que conforman una computadora: velocidad de conmutación
de circuitos electrónicos, rapidez de transmisión de señales eléctricas, fiabilidad de los
circuitos, manejo de señales digitales y gran capacidad de almacenamiento de
información.

• El proceso de la información.

El proceso de la información o, visto de otra forma, la resolución de todo


problema (matemático, científico, económico, ...) con medios informáticos se
caracteriza generalmente por la existencia de los siguientes componentes comunes a
todos ellos:

- Información de entrada : Conjunto de información de partida que permitirá


la resolución del problema.

__________________________________________________________________________________________________________
Conceptos previos 2
Fundamentos de Programación
__________________________________________________________________________________________________________

- Algoritmo de resolución: Secuencia de instrucciones ordenadas a seguir para


obtener, a partir de los datos de entrada, los datos
de salida.
- Información de salida: Información que se desea obtener tras procesar,
siguiendo un algoritmo, la información de entrada.

Programa

Datos de entrada Datos de salida

Retroalimentación (Feedback)

Al hablar de información hay que distinguir entre instrucciones y datos.

- Instrucciones: Constituyen la información que le indica a la máquina qué es lo


que tiene que hacer. Las instrucciones se agrupan en programas, o dicho de otra forma,
un programa es un conjunto de instrucciones debidamente ordenadas y encadenadas.

- Datos: Son las informaciones sobre las que actúan las instrucciones o las que
genera el programa.

Por otra parte, a veces ocurre que los datos de salida sirven como datos de
entrada a otro o al mismo programa (feedback).

La computadora puede obtener la información de dos formas...


- ...directamente (la información almacenada en un disco -magnético u
óptico-, una temperatura, una banda magnética, un código de barras, un sonido o
fonema, etc. pueden ser captados por periféricos especializados del computador),

- ...o bien, le puede ser dada en forma de caracteres o grafismos utilizando


para ello el teclado. Los caracteres pueden ser de tres tipos: alfabéticos (de la A a la Z
-mayúsculas y minúsculas-), numéricos (dígitos del 0 al 9) o especiales (símbolos
ortográficos, aritméticos y otros).
Tal información que entra en la computadora habrá de ser codificada para que
sus circuitos puedan manejarla.

__________________________________________________________________________________________________________
Conceptos previos 3
Fundamentos de Programación
__________________________________________________________________________________________________________

• Los algoritmos y los programas.

Luego, hemos visto que si para la resolución de problemas utilizamos un


ordenador, será éste el que tenga que realizar las operaciones con los datos para obtener
los resultados, por lo que habrá que proporcionar al ordenador el algoritmo de
resolución, es decir, tendremos que indicar todos los pasos y operaciones que debe
realizar previendo todas las alternativas posibles.
Un algoritmo es un conjunto de reglas que definen con precisión una
secuencia de operaciones a realizar, en orden, para resolver un determinado
problema.

Este algoritmo o descripción de operaciones y manipulaciones que debe realizar


el ordenador, expresado en un lenguaje de programación adecuado, constituye un
programa.

Un programa es un conjunto de instrucciones que indican al ordenador las


operaciones que debe realizar para resolver un problema expresadas en un
lenguaje de programación.

En esta asignatura, nuestro objetivo será aprender a analizar los problemas y a


diseñar en cada caso una solución que pueda ser realizada por una computadora. Para
ello necesitaremos, en primer lugar, un lenguaje o notación para expresar la solución
obtenida. Tal solución debe estar adaptada a las particularidades de la computadora, si
bien...
- ... en una primera fase de diseño podremos utilizar una notación
intermedia entre el lenguaje natural y el de la computadora (ordinogramas,
pseudocódigos, etc.)
- ... posteriormente será preciso escribirla en un lenguaje de programación
(codificación) como, por ejemplo, en lenguaje C o en Pascal, y
- ... finalmente para su ejecución, la máquina precisará realizar una
traducción a su lenguaje nativo, el denominado lenguaje máquina.

Ejemplo 1: Hallar la longitud de un vector situado en el plano cartesiano.


Tratamiento: Raíz cuadrada de la suma de los cuadrados de las
proyecciones sobre los ejes X e Y.
(Si el problema fuera de gestión, sería necesario conocer
todas las reglas administrativas que lo regulan.)

y2 (x2,y2)

Py

(x1,y1)
y1

x1 Px x2

__________________________________________________________________________________________________________
Conceptos previos 4
Fundamentos de Programación
__________________________________________________________________________________________________________

- Datos de Entrada: Coordenadas del origen (x1, y1) y del extremo (x2, y2)
- Algoritmo de Resolución:
Leer x1, y1, x2, y2
Calcular Px = x2-x1 (la proyección sobre el eje X)
Calcular Py = y2-y1 (la proyección sobre el eje Y)
Calcular R = raíz cuadrada (Px · Px + Py · Py)
Imprimir R
- Datos de Salida: R

2. ESTRUCTURA BÁSICA DE UN ORDENADOR.

Un ordenador es un sistema complejo (conjunto de elementos interrelacionados)


compuesto fundamentalmente por dos subsistemas íntimamente vinculados: el
hardware y el software.

• El soporte físico, equipo físico o hardware de una computadora, es la máquina


en sí: el conjunto de circuitos electrónicos, cables, armarios, dispositivos
electromecánicos y otros elementos físicos que forman la computadora. Así,
forman parte del equipo: la unidad central -incluye el microprocesador, la
memoria central, los canales, etc.-, el monitor, la impresora, el teclado, el ratón,
la tarjeta de sonido, la unidad de disquete, el disco duro, etc.
• El soporte lógico, software o lógical de una computadora, es el conjunto de
programas (del sistema operativo, de utilidades -procesadores de texto, editores,
compiladores, hojas de cálculo, bases de datos- y de los usuarios) ejecutables
por la misma y que controlan y permiten su funcionamiento.

Bus deDirecciones
Bus de Datos
Memoria secundaria

Entrada Salida

Memoria Principal
Memoria Principal
(Instrucciones y datos)
(Instrucciones y datos)

Unidad Aritmético-Lógica
Unidad de Control Unidad Aritmético-Lógica
Unidad de Control (A.L.U.)
(U.C.) (A.L.U.)
(U.C.)

Unidad Central de Proceso (C.P.U.)

__________________________________________________________________________________________________________
Conceptos previos 5
Fundamentos de Programación
__________________________________________________________________________________________________________

Para que una computadora funcione es necesario utilizar programas; es decir,


una computadora con sólo soporte físico no funciona: tan imprescindible es el hardware
como el software.
La palabra hardware también se utiliza para designar otras disciplinas
directamente relacionadas con ella como son, por ejemplo, la Teoría de la Conmutación,
Electrónica, etc.. Análogamente, también se considera software todas las materias
relacionadas con la construcción de los programas: organización y estructuración de los
datos, construcción de algoritmos, análisis de aplicaciones, metodología usada para
redactar programas, etc.

3. HARDWARE.

Una computadora se compone de las siguientes unidades funcionales:

• Unidad de Entrada.

Es el dispositivo por donde se introducen en la computadora los datos e


instrucciones. En estas unidades se transforman las informaciones de entrada en señales
binarias de naturaleza eléctrica. Una misma computadora puede tener distintas unidades
de entrada.
Son unidades de entrada: un teclado, un escaner, un ratón, una lectora de bandas
magnéticas, un lector de código de barras, una unidad de reconocimiento de la voz, una
palanca manual de control (joystick), un lápiz óptico, una pantalla sensible al tacto (es
también una unidad de salida, por lo que se dice que es una unidad mixta), etc..

• Unidad de Salida.

Es un dispositivo por donde se obtienen los resultados de los programas


ejecutados en la computadora. La mayor parte de estas unidades (una computadora
puede tener varias de ellas) transforman las señales eléctricas binarias en caracteres
escritos o visualizados.
Son dispositivos de salida unidades tales como un monitor, una impresora, un
registrador gráfico (plotter), una unidad sintetizadora de la voz, etc..

Existen dos tipos básicos de memoria, diferenciados principalmente por su


velocidad: la memoria principal -también llamada memoria central o memoria
interna- que es la que actúa con mayor velocidad y está ligada directamente a las
unidades más rápidas de la computadora (UC y UAL) y, por otro lado, la memoria
secundaria -también llamada memoria externa o de masa- más lenta pero de mucha
más capacidad.

• Memoria Principal.

En las computadoras actuales la memoria principal está formada por circuitos


electrónicos integrados y, tal como acabamos de decir, se caracteriza por ser muy
__________________________________________________________________________________________________________
Conceptos previos 6
Fundamentos de Programación
__________________________________________________________________________________________________________

rápida, con un tiempo de acceso del orden de nanosegundos, siendo el modo de acceso
directo (se puede llegar a cualquiera de sus posiciones sin pasar por las anteriores); su
mayor inconveniente es su alto coste lo que provoca que no se use en abundancia
aunque, por otra parte, el tamaño máximo de la memoria central instalable en un
sistema lo marca su arquitectura.
Antes de que un programa -conjunto de instrucciones- pueda ser ejecutado debe
estar almacenado (cargado) en la memoria principal. Posteriormente se introducirán en
ella los datos con los que se va a operar. Por último, los resultados obtenidos se
depositarán ahí mismo.
Las instrucciones que forman un programa se ejecutan en el mismo orden en
que están escritas, una tras otra, a menos que de alguna forma se imponga una ruptura
de esta secuencia natural.
Físicamente, podemos considerar que la memoria interna está constituida por
unidades elementales llamados biestables, que son circuitos capaces de mantener dos
estados de tensión -alto y bajo- de forma fiable y diferenciándolos claramente; es decir,
un biestable podrá mantener a su salida un nivel alto de tensión, o bien, un nivel bajo.
Se dice por tanto que cada biestable almacena un bit (mínima cantidad de información
representable), o sea, un 1, o bien, un 0.
Sin embargo, desde un punto de vista funcional, contemplaremos la memoria
central como una gran caja dividida en compartimentos, todos ellos del mismo tamaño y
cada uno de los cuales formado por un número determinado de biestables, siendo capaz
por tanto de albergar un determinado número de bits. Cada compartimento se conoce
como posición de memoria y será identificado por un número llamado dirección de
memoria.
En resumen, la memoria está dividida en posiciones, cada una de las cuales tiene
una dirección de memoria distinta y, para un determinado equipo, todas están formadas
por el mismo número de bits el cual depende de la arquitectura del ordenador. Los
tamaños más habituales -expresados en bits- son 8, 16, 32 y 64.
Para leer o escribir una información es necesario dar previamente la dirección de
la posición a la que se quiere acceder.

Un byte es el número de bits necesarios para almacenar un carácter. Este


número depende del código utilizado por la computadora, siendo generalmente 8,
por lo que habitualmente byte se utiliza como sinónimo de 8 bits u octeto.

La capacidad de almacenamiento de una computadora o de un soporte de


información (disco o cinta magnética) se puede medir en bytes. Algunos múltiplos son:

1 KiloByte (KB) = 2 ^ 10 bytes = 1024 bytes


1 MegaByte (MB) = 2 ^ 10 Kb = 2 ^ 20 bytes = 1048576 bytes
1 Gigabyte (Gb) = 2 ^ 10 Mb = 1024 Mb

Una unidad de información ligada a la estructura interna de la computadora es la


palabra. Una palabra está formada por un número entero de bytes (generalmente 1, 2, 4
u 8) y su longitud se mide en bits. La longitud de palabra indica el número de bits que
se pueden leer/escribir de/en la memoria simultáneamente; este número suele coincidir
con el número de bits -integrantes de datos o instrucciones- que se transmiten
simultáneamente entre las unidades de la computadora central en un instante dado (por
ejemplo, al pasar un dato de la memoria central a la ALU).

__________________________________________________________________________________________________________
Conceptos previos 7
Fundamentos de Programación
__________________________________________________________________________________________________________

No hay que confundir los conceptos posición de memoria con el de palabra. La


memoria central suele ser direccionable por octeto o byte; en este caso cada posición de
memoria contendría 8 bits.

Normalmente hay una zona de la memoria en la que sólo se puede leer (memoria
ROM) y que es permanente o no volátil (al desconectar la computadora su información
no se pierde), y otra en la que se puede leer y escribir (memoria RAM) y que es volátil.
La memoria ROM se utiliza generalmente para guardar programas y datos
básicos y específicos del ordenador en el que se la ubica. La memoria RAM se utiliza
generalmente para almacenar los programas y datos del usuario y el sistema operativo.

• Memoria Masiva Auxiliar, Secundaria o Externa.

La memoria principal, aunque es muy rápida, no tiene gran capacidad para


almacenar información. Para guardar masivamente información se utilizan otros tipos
de memoria, tales como discos magnéticos, cintas magnéticas, discos ópticos o
magneto-ópticos, etc. que son más lentos (su tiempo de acceso es del orden de algunos
milisegundos) pero suelen tener mucha más capacidad que la memoria principal. El
conjunto de estas unidades se denomina memoria masiva auxiliar, o memoria externa, o
memoria secundaria.
Frecuentemente los datos y programas se graban (introduciéndolos por las
unidades de entrada) en la memoria masiva, como paso previo a su ubicación final en la
memoria principal. De esta forma, cuando se ejecute varias veces un programa o se
utilicen repetidamente unos datos, no es necesario darlos de nuevo a través del
dispositivo de entrada. La información guardada en un disco o cinta permanece
indefinidamente hasta que el usuario expresamente la borre. A estas unidades se las
puede considerar de Entrada/Salida porque pueden contener tanto los datos de entrada al
sistema como los datos de salida o resultados obtenidos.

• Microprocesador o CPU.

La unidad central de proceso se identifica como el cerebro del ordenador y


consta de millones de dispositivos de conmutación en un solo chip o pastilla integrada.
Dentro del microprocesador se encuentran las siguientes unidades funcionales:

- Unidad Aritmético-Lógica (ALU). Esta unidad contiene los circuitos


electrónicos con los que se hacen las operaciones de tipo aritmético
(sumas, restas, etc.) y de tipo lógico (comparar números, caracteres, etc.).

- Unidad de Control (UC). Cumple, principalmente, dos misiones:


Detecta señales eléctricas de estado procedentes de las distintas
unidades, indicando su situación o condición de funcionamiento. Por
ejemplo: detecta que la impresora no está preparada para imprimir, o que
se ha producido un error en el programa en ejecución al intentar realizar
una operación de división por cero,...
Capta de la memoria una a una las instrucciones del programa y
genera, de acuerdo con el código de operación de la instrucción y con las
señales de estado, señales de control dirigidas a todas las unidades,
monitorizando las operaciones que implican la ejecución de la
instrucción.
__________________________________________________________________________________________________________
Conceptos previos 8
Fundamentos de Programación
__________________________________________________________________________________________________________

• Coprocesador Matemático.

Esta unidad está especializada en realizar operaciones con números reales (en
formato de punto o coma flotante), liberando de este trabajo a la ALU y, en
consecuencia, mejorando el rendimiento de la CPU.

4. SOFTWARE.

Lo forman todos los programas que dirigen al microprocesador en las tareas que
son necesarias realizar. Se pueden clasificar en:

• BIOS (Basic Input Output System; Sistema Básico de Entrada y Salida).

Son un conjunto de programas básicos y específicos de cada uno de los dispositivos de


entrada y salida que controlan su funcionamiento. Habitualmente se encuentran en
ROM por que se les conoce con el sobrenombre de firmware (son inamovibles).

• Sistema Operativo.

Implementa la filosofía de funcionamiento del ordenador (monopuesto, multipuesto,


multitarea, ...) y gestiona los recursos hardware disponibles. Son el soporte básico para
el funcionamiento de las aplicaciones de usuario al tiempo que proporciona un conjunto
de programas para la gestión del sistema (copias de ficheros, mantenimiento de
directorios, gestión de memoria, ...).

• Software de aplicación.

Son todos aquellos programas que permiten al usuario resolver sus problemas de
computación por lo que implementan los algoritmos propios de una aplicación
específica (programas de gestión, de gráficos, procesadores de texto, gestores de bases
de datos, traductores de lenguajes de alto nivel,....).

Usuario
Software de Aplicación

Sistema Operativo

BIOS

Hardware

__________________________________________________________________________________________________________
Conceptos previos 9
Fundamentos de Programación
__________________________________________________________________________________________________________

Estos grupos de programas se distribuyen en una estructura de capas alrededor


del hardware de forma que cada una cubre totalmente a la anterior formando un sistema
autónomo en el que cada capa accede sólo y exclusivamente a la capa inmediatamente
inferior y superior.

Esta regla, como todas, tiene sus excepciones pues con técnicas de programación
avanzada es posible romper esta barrera aunque a expensas de una menor
compatibilidad del software sobre ordenadores diferentes.

5. LOS ALGORITMOS.

Nuestro objetivo es diseñar programas que nos permita resolver cualquier


problema usando medios computacionales. En la mayoría de los programas podemos
distinguir tres funciones básicas:

- Entrada de información.

Transferencia de información a través de un periférico de entrada a


memoria. Toda la información a procesar, y también los programas,
deben estar almacenados en memoria. A esta operación se le llama
entrada o lectura.

- Proceso.

Conjunto de operaciones que hay que realizar con la información de


entrada para obtener los resultados.

- Salida de información.

Una vez que hemos obtenido la información deseada, ésta debe ser
mostrada al usuario o almacenada en memoria auxiliar. A esta operación
se le llama salida o escritura y, dependiendo del periférico que la realice
se denominará de alguno de los siguientes modos: impresión,
visualización, grabación, etc.

Todas estas funciones habrán de estar dispuestas en un orden determinado por el


algoritmo. Para solucionar un problema real es necesario encontrar un método de
resolución del problema, y posteriormente descomponerlo en acciones sencillas que la
computadora sea capaz de realizar. No todos los métodos de solución de un problema
son susceptibles de ser utilizados por una computadora. Para que un procedimiento
pueda ser implantado en una computadora de modo que resuelva verdaderamente el
problema, deberá cumplir unos requisitos que son:

- Debe ser preciso: Debe estar formado por una secuencia finita de
operaciones y debe quedar perfectamente definido el orden en que se van a realizar las
instrucciones.

- Debe estar compuesto de acciones bien de definidas, esto es, no


ambiguas. El significado de cada acción debe ser único, en el contexto en que aparece.
__________________________________________________________________________________________________________
Conceptos previos 10
Fundamentos de Programación
__________________________________________________________________________________________________________

Si se sigue un algoritmo dos veces con los mismos datos debe dar el mismo resultado.
El algoritmo debe contemplar todas las posibilidades que se puedan presentar.

- Debe ser finito, es decir, debe acabar en un tiempo finito. Un


procedimiento que no acaba nunca no es útil para resolver un problema.

Se puede dar la siguiente definición de algoritmo:

Un algoritmo es un procedimiento no ambiguo que resuelve un problema.


Un procedimiento es una secuencia de operaciones bien definidas, cada una de las
cuales requiere una cantidad finita de memoria y se realiza en un tiempo finito.

Ejemplo 2:
Supóngase que se quiere explicar a alguien lo que debe hacer para
determinar si un número, entero positivo, es par. Se le puede decir: Si el número
se puede obtener sumando doses, es par. Si sumando doses se sobrepasa el valor
del número en 1, es impar.
Se entiende perfectamente lo que se quiere decir. No obstante, este
enunciado no es un algoritmo, pues no constituye una secuencia de operaciones.
Además, presenta ambigüedad. Este mismo enunciado se podría expresar en una
forma más precisa del siguiente modo:

Leer N
Repetir
Si N > 2 entonces N = N - 2
Si N = 2 escribe “PAR”
Si N = 1 escribe “IMPAR”
hasta N = 1 ó N = 2
Fin.

Ahora se ha definido una secuencia de operaciones que constituyen un


algoritmo puesto que tales operaciones no son ambiguas y, para cualquier dato,
el proceso debe acabar en un tiempo finito: Es suficiente una breve inspección
del procedimiento para comprobar que éste acaba después de (N/2) iteraciones.

Para resolver un mismo problema se pueden definir infinidad de algoritmos. Es


posible realizar comparaciones entre algoritmos que resuelvan el mismo problema.
Normalmente interesa no sólo encontrar un algoritmo, sino que éste sea suficientemente
bueno. La bondad de un algoritmo puede medirse por dos factores:

- El tiempo que se necesita para ejecutarlo. Para comparar dos algoritmos


no es necesario conocer el tiempo real que invertirá la computadora, basta con saber el
número de instrucciones de cada tipo necesarias para resolver el problema.

- Los recursos que se necesitan para implantar el algoritmo.


Concretamente, en el caso de que el algoritmo lo deba ejecutar una computadora, se
__________________________________________________________________________________________________________
Conceptos previos 11
Fundamentos de Programación
__________________________________________________________________________________________________________

usan fundamentalmente los siguientes recursos: memoria principal -para almacenar los
datos y las instrucciones- y memoria masiva -para almacenar datos auxiliares-.

Es importante también conseguir que el algoritmo sea sencillo y claro, de forma


que se facilite su depuración y las posibles modificaciones posteriores.
No hay ningún procedimiento riguroso que permita construir un algoritmo que
resuelva un problema dado. El diseño de algoritmos, como toda tarea creativa, es una
tarea compleja en la que se pueden seguir pocas normas, teniendo por tanto gran
importancia la imaginación y experiencia de la persona que lo realiza. Tan sólo se
pueden dar normas generales y herramientas que pueden ayudar a confeccionar el
algoritmo.

Ejemplo 3:
El algoritmo definido en el ejemplo anterior necesita (N + 1)/2
iteraciones para determinar si el número N es par. El tiempo que tarda el
algoritmo en resolver el problema aumentará linealmente con la magnitud del
número. Este comportamiento lineal puede ser aceptable (y deseable) en
problemas muy complejos. El problema planteado se puede resolver de forma
más simple usando el siguiente algoritmo:
Leer N
M = parte entera (N/2)
M= M*2
si M = N entonces escribe "PAR" sino escribe "IMPAR"

Por tanto, es necesario, una vez diseñado un primer algoritmo, realizar una
evaluación del mismo. Si se decide que éste no es eficiente, será necesario o bien
diseñar uno nuevo o bien optimizar el original. Optimizar un algoritmo consiste en
introducir modificaciones en él, tendentes a disminuir el tiempo que necesita para
resolver el problema o a reducir los recursos que utiliza. Así, en el ejemplo 2 se puede
disminuir el tiempo de ejecución si las dos instrucciones condicionales (Si....entonces...)
se sitúan después del bucle Repetir..hasta.
En muchos casos, una disminución del tiempo implica utilizar más variables, o
sea, ambos objetivos se contraponen. La importancia de cada uno de estos factores
dependerá de la naturaleza del problema y de los medios de que se disponga.
Una vez ideado el algoritmo será necesario crear un programa que sea
transcripción del algoritmo en algún lenguaje de programación. Las etapas a seguir en
este proceso se analizarán más adelante.
Hay diferentes métodos para representar los algoritmos. Hoy día es muy
frecuente utilizar un lenguaje específico de descripción de algoritmos o
«pseudocódigo». Existen otros procedimientos de representación que utilizan gráficos o
diagramas. Entre estos últimos caben destacar los ordinogramas y los diagramas de
Chapin o diagramas de Nassi-Schneiderman (diagramas N-S).

6. LENGUAJES DE PROGRAMACIÓN.

Un programa es un algoritmo expresado mediante un lenguaje de programación.


Existe gran diversidad de lenguajes de programación, cada uno de los cuales utiliza un
__________________________________________________________________________________________________________
Conceptos previos 12
Fundamentos de Programación
__________________________________________________________________________________________________________

conjunto de símbolos y unas reglas distintas. Vamos a ver las características generales
de estos lenguajes, comenzando por los de bajo nivel hasta llegar a los de alto nivel.

• Lenguaje máquina.

Hay que tener en cuenta que un ordenador sólo es capaz de reconocer las
instrucciones que se suministran al procesador en lenguaje binario o lenguaje máquina.
Sus inconvenientes son

- Las instrucciones de este tipo de lenguaje están formadas por cadenas de ceros
y unos, aunque se pueden escribir en un código intermedio (octal o hexadecimal).

- Cada microprocesador posee su propio y específico lenguaje máquina.


Evidentemente, resulta muy engorroso de utilizar, necesitando el programador conocer
la arquitectura física de la computadora con cierto detalle.

- La estructura del lenguaje máquina está totalmente adaptada a los circuitos de


la computadora y muy alejada de la forma o lenguaje tradicional en el que solemos
expresar y analizar hoy día los programas resolubles con computadora. Por ejemplo,
para hacer cálculos aritméticos disponemos de un lenguaje o simbología matemática
fácil de comprender y clara, que no se parece en nada al código máquina necesario para
hacer dichos cálculos.

- Las instrucciones realizan operaciones muy simples (por ejemplo, en muchas


computadoras no existen instrucciones específicas para multiplicar ni para dividir).

- Existe muy poca versatilidad para la redacción de las instrucciones: estas


tienen un formato rígido.

- Los datos se utilizan por medio de las direcciones de memoria donde se


encuentran; por tanto, en las instrucciones no aparecen nombres de variables sino que el
programador debe hacer una asignación de memoria para todas las variables y
constantes del programa.
- No se pueden incluir comentarios que faciliten la legibilidad del mismo.

Sus ventajas son:

- Un programa escrito en lenguaje máquina es directamente interpretable por la


CPU. Una vez introducido el programa en la computadora (en memoria principal), no se
necesitan transformaciones previas para ser ejecutado (como ocurre con programas
escritos en lenguajes de alto nivel).

- Los programas en código máquina se ejecutan muy eficientemente (con


rapidez), ya que el usuario los redacta específicamente para los circuitos que lo han de
interpretar y ejecutar, y desde el código máquina se pueden utilizar la totalidad de los
recursos de la máquina.

En resumen, el lenguaje máquina es difícil de aprender, arduo de utilizar y casi


imposible de depurar, aparte del hecho de que habría que aprender las notables

__________________________________________________________________________________________________________
Conceptos previos 13
Fundamentos de Programación
__________________________________________________________________________________________________________

diferencias entre el específico de cada procesador para poder realizar programas que
funcionen sobre ordenadores distintos.

• Lenguaje ensamblador.

Existe un estadio muy cercano al lenguaje máquina que es el lenguaje


ensamblador, el cual surge al sustituir las cadenas de 0 y 1 por nemotécnicos, es decir,
códigos constituidos por tres o cuatro letras que, en forma abreviada -abreviaturas en
inglés-, indican la operación a realizar (por ejemplo, ADD representa la suma). Este
lenguaje presenta las mismas características que el lenguaje máquina aunque ofrece una
mayor facilidad de codificación y depuración sin perder la rapidez propia del lenguaje
máquina.

Ofrece la facilidad de utilizar direcciones simbólicas de memoria, en lugar de


direcciones binarias absolutas. Así, por ejemplo, los datos pueden ser referenciados
como X, Y, Z, A, B, etc. Existen sentencias declarativas (también denominadas
pseudoinstrucciones) para indicar al traductor la correspondencia entre direcciones
simbólicas y direcciones de memoria. Con estas pseudoinstrucciones el traductor crea
una tabla con cuya ayuda, al generar las instrucciones máquina, sustituye las direcciones
simbólicas por las direcciones binarias correspondientes.

Otra de sus ventajas es que permite incluir líneas de comentarios entre las líneas
de instrucciones. El traductor las elimina automáticamente, no incluyéndolas en el
código máquina que genera.

Un programa en ensamblador no puede ejecutarse directamente por la


computadora, siendo necesario ser traducido (ensamblado) previamente. El traductor
de lenguaje ensamblador a lenguaje máquina se denomina ensamblador y hace
corresponder a cada instrucción en ensamblador una instrucción en código máquina.

Hay unos lenguajes, desarrollados a partir de los ensambladores, que se


denominan macroensambladores. Con ellos se solventa en cierta medida la limitación
de tener un repertorio de instrucciones muy reducido. Los lenguajes
macroensambladores disponen de macroinstrucciones, como por ejemplo transferir un
bloque de datos de memoria principal a disco, multiplicar, dividir, etc. La
macroinstrucción es una llamada a un módulo o rutina, llamada macro, que el traductor
inserta, por ejemplo antes de realizar el proceso de generación del código máquina
definitivo, en el lugar de la llamada correspondiente. Obviamente a cada
macroinstrucción, a diferencia de las instrucciones, le corresponden varias instrucciones
máquina y no sólo una.

La aplicación de los lenguajes de bajo nivel (lenguaje máquina y ensamblador)


se reduce a aplicaciones muy específicas: tiempo real, control de procesos,
programación gráfica (juegos) y de dispositivos electrónicos muy concretos.

• Lenguajes de alto nivel.

Para facilitar el uso de las computadoras se han desarrollado lenguajes de


programación de alto nivel que permiten utilizar una simbología y una terminología
próximas a las utilizadas tradicionalmente en la descripción de problemas; estos
__________________________________________________________________________________________________________
Conceptos previos 14
Fundamentos de Programación
__________________________________________________________________________________________________________

lenguajes genéricamente se denominan lenguajes simbólicos. Como la computadora


puede interpretar y ejecutar únicamente código máquina, existen programas
traductores que traducen o trasladan programas de lenguaje simbólico a lenguaje
máquina. El programa a traducir se denomina programa fuente, y el programa
obtenido, programa objeto.

Estos lenguajes son mucho más fáciles de aprender y sus instrucciones tienen
una cercanía evidente con el lenguaje humano aunque en su versión anglosajona
(Write : escribe, lf : Si -condicional, Repeat : repite , etc.) y son multiplataforma
(funcionan en distintos ordenadores).

Existen dos formas de hacer una traducción: traducción a posteriori, es decir,


cuando se conoce previamente todo lo que va a ser traducido, y traducción simultánea,
cuando al tiempo que se habla se traduce lo dicho. Pues bien, existen traductores de
lenguajes computacionales de alto nivel paralelos a estos modos:

- Un compilador es un programa traductor a posteriori, es decir, realiza la


traducción una sola vez creando un programa en lenguaje de bajo nivel completo.

- Un intérprete es un programa traductor de lenguaje interpretado, es


decir, realiza la traducción de una sentencia e informa al microprocesador de las
instrucciones que debe ejecutar correspondientes a ella para luego comenzar de nuevo
con la siguiente.

La tendencia es a que la mayoría de los programas traductores sean


compiladores puesto que realizan la traducción una vez y de corrido, mientras que un
intérprete deberá estar siempre presente, con el consiguiente gasto de memoria y de
tiempo de traducción, cada vez que queremos ejecutar nuestro programa en lenguaje de
alto nivel.

7. CICLO DE VIDA DE UNA APLICACIÓN INFORMÁTICA.


Una aplicación informática se compone de uno o varios programas
interrelacionados que tienen por objeto la realización de una determinada tarea de forma
automática mediante el uso de un sistema informático.

El proceso que se sigue desde el planteamiento de un problema o tarea hasta que


se tiene una solución instalada en la computadora, y en funcionamiento por los usuarios
finales mientras sea de utilidad, se denomina ciclo de vida de una aplicación
informática.

El citado proceso se compone de varias fases, agrupadas en tres bloques bien


diferenciados, según la siguiente figura, en la que se muestran las distintas fases y el
resultado obtenido de cada una de ellas.

__________________________________________________________________________________________________________
Conceptos previos 15
Fundamentos de Programación
__________________________________________________________________________________________________________

• Fase de ANÁLISIS

Este apartado incluye las fases correspondientes a la creación del programa.


Es de destacar el hecho de que para la realización de esta labor no se necesita
usar la computadora.
Consiste en el examen y descripción detallada de los siguientes aspectos
relativos al problema:

 Equipo a utilizar (computadora, periféricos, soportes, material


auxiliar, etc.).
 Personal informático.
 Estudio de los datos de entrada (INPUT).
 Estudio de los datos de salida o resultados (OUTPUT).
 Relación entre la salida y la entrada.
 Descomposición del problema en módulos.

El resultado de esta fase es lo que se denomina especificación del problema,


formada por el conjunto de documentos elaborados para los aspectos citados.

• Fase de PROGRAMACIÓN.

Consiste en el diseño de la solución al problema planteado en forma de


algoritmo. Al resultado se le denomina programa.
Se debe abordar de forma sistemática, esto es, aplicando explícitamente un
conjunto de técnicas, como programación estructurada y diseño descendente.
El resultado es un algoritmo o descripción del conjunto de acciones que deberán
ser realizadas por la computadora.
__________________________________________________________________________________________________________
Conceptos previos 16
Fundamentos de Programación
__________________________________________________________________________________________________________

Para su representación se utilizan diferentes notaciones, como ordinogramas,


pseudo-códigos, etc.

A) EDICIÓN:

Escritura del programa fuente en la memoria de la computadora, grabándolo


en algún soporte permanente. Se hace con la ayuda de un programa del
sistema denominado editor.

B) COMPILACIÓN:

Traducción del programa fuente a lenguaje máquina cuyo resultado es el


programa objeto. Para ello se dispone de programas compiladores o
intérpretes, que, además, comprueban la correcta sintaxis del programa.

C) MONTAJE:

En los programas compilados es necesario añadir al programa objeto algunas


rutinas del sistema o en algunos casos subprogramas externos que se hayan
compilado separadamente. De ello se encarga el programa montador (linker).

D) PRUEBAS DE EJECUCIÓN:

Consiste en ejecutar el programa sucesivas veces con diferentes datos de


prueba para asegurar su correcto funcionamiento.

• Fase de EXPLOTACIÓN DEL PROGRAMA.

Se engloban en este apartado las fases correspondientes a la instalación y puesta


a punto del programa en la computadora.
La explotación consiste en el uso continuo y habitual por parte de los usuarios de
la aplicación dentro de un entorno productivo determinado mientras tenga utilidad.
Paralelamente a la explotación de una aplicación se realiza el mantenimiento de
la misma, consistente en la comprobación periódica de su buen funcionamiento y en la
adaptación a cualquier nueva circunstancia que implique su actualización.

8. ERRORES.

Durante el desarrollo de un programa o aplicación se ha de ser especialmente


cuidadoso para evitar que el producto obtenido presente errores que lo hagan inservible.
En muchos casos, sobre todo en programadores principiantes, se dedica más tiempo a la
corrección de errores que al diseño del programa en sí.
Si se ha seguido un buen método de diseño, no ha de preocuparnos
excesivamente la presencia de errores; lo importante será utilizar una técnica adecuada
de depuración que nos permita eliminarlos con facilidad.
Según el momento o fase en que se detectan, los errores se clasifican de la
siguiente manera:

• Errores de Compilación.
__________________________________________________________________________________________________________
Conceptos previos 17
Fundamentos de Programación
__________________________________________________________________________________________________________

Los errores en tiempo de compilación, o errores sintácticos, corresponden al


incumplimiento de las reglas sintácticas del lenguaje, como, por ejemplo, una palabra
reservada del lenguaje mal escrita, una instrucción incompleta, etc.
Estos errores son los más fáciles de corregir, ya que son detectados por el
compilador, el cual dará información sobre el lugar donde está y la naturaleza de cada
uno de ellos mediante un mensaje de error.

• Errores de Ejecución.
Se deben generalmente a operaciones no permitidas, como dividir por cero, leer
un dato no numérico en una variable numérica, exceder un rango de valores permitidos,
etc.
Se detectan porque se produce una parada anormal del programa durante su
ejecución, y se dice entonces que el programa se ha «caído» o que ha sido «abortado»
por el sistema.
Son más difíciles de detectar y corregir que los errores sintácticos, ya que
ocurren o no, dependiendo de los datos de entrada que se utilicen.

• Errores de Lógica.
Corresponden a la obtención por el programa de resultados que no son correctos,
y la única manera de detectarlos es realizando un número suficiente de ejecuciones de
prueba con una gama lo más amplia posible de juegos de datos de ensayo, comparando
los resultados producidos por el programa con los obtenidos «a mano» para esos
mismos datos.
Son los más difíciles de corregir, no sólo por la dificultad para detectarlos, sino
porque se deben a la propia concepción y diseño del programa.

• Errores de Especificación.
Es posiblemente el peor tipo de error, y el más costoso de corregir. Se deben a la
realización de unas especificaciones incorrectas motivadas por una mala comunicación
entre el programador y quien plantea el problema (cliente, profesor, etc.).
Se detectan normalmente cuando ya ha concluido el diseño e instalación del
programa por lo que su corrección puede suponer la repetición de gran parte del trabajo
realizado.

9. CALIDAD DE LOS PROGRAMAS.

Para un determinado problema se pueden construir diferentes algoritmos de


resolución o programas. La elección del más adecuado se debe basar en una serie de
requisitos de calidad que adquieren gran importancia a la hora de evaluar el coste de su
diseño y mantenimiento.
Las características generales que debe reunir un programa son las siguientes:

- Legibilidad Ha de ser claro y sencillo, de tal forma que facilite su


lectura y comprensión.
- Fiabilidad Ha de ser «robusto», es decir, capaz de recuperarse frente
a errores o usos inadecuados.

__________________________________________________________________________________________________________
Conceptos previos 18
Fundamentos de Programación
__________________________________________________________________________________________________________

- Portabilidad Su diseño debe permitir la codificación en diferentes


lenguajes de programación, así como su instalación en
diferentes sistemas.
- Modificabilidad Ha de facilitar su mantenimiento, esto es, las
modificaciones y actualizaciones necesarias para adaptarlo
a una nueva situación.
- Eficiencia Se deben aprovechar al máximo los recursos de la
computadora, minimizando la memoria utilizada y el
tiempo de proceso o ejecución, siempre que no sea a costa
de los requisitos anteriores.

10. METODOLOGÍA DE LA PROGRAMACIÓN.

Es el conjunto de métodos y técnicas disciplinadas que ayudan al desarrollo


de unos programas que cumplen los requisitos anteriormente expuestos.

Los métodos propuestos utilizados en estos apuntes, tanto explícita como


implícitamente, son: programación modular y programación estructurada.

• Programación Modular.
El diseño modular, descendente o mediante refinamientos sucesivos (top-down)
se basa en la realización de una serie de descomposiciones sucesivas del algoritmo
inicial, que describen el refinamiento progresivo del repertorio de instrucciones que van
a constituir el programa.
Un programa quedará formado por una serie de módulos, cada uno de los cuales
realiza una parte concreta de la tarea total.

• Programación Estructurada.
Se basa en el uso exclusivo de las estructuras secuencial, alternativa y repetitiva
para el control del flujo de ejecución de las instrucciones. Los programas así diseñados
serán fáciles de verificar, depurar y mantener.
Lo más significativo de este estilo de programación es que cualquier estructura
de control de flujo que se utiliza en ella tiene tan sólo una Entrada y una Salida.

• Programación Orientada a Objetos.


La POO (OOP, Object Oriented Programming) unifica datos y código que actúa
sobre ellos.

• Programación Orientada a Eventos.


Permite que el código se adapte al usuario en lugar de estar guiado por acciones
preestablecidas.

• Programación Visual.
En la actualidad existen herramientas que nos permiten crear aplicaciones
Windows con un esfuerzo mínimo, sin apenas conocimiento del funcionamiento interno
de Windows e invirtiendo poco tiempo: los entornos de desarrollo visual.

__________________________________________________________________________________________________________
Conceptos previos 19
Fundamentos de Programación
__________________________________________________________________________________________________________

Usando técnicas sencillas, como “pinchar con el ratón” o “arrastrar y soltar”,


estos entornos permiten crear aplicaciones añadiendo iconos que representan objetos,
modificando propiedades, que son las características de estos objetos, y escribiendo algo
de código.

11. DOCUMENTACIÓN DE LOS PROGRAMAS.

Con el fin de facilitar la explotación y el mantenimiento de un programa es


fundamental que éste se acompañe de una documentación amplia, clara y precisa. En
ella deben figurar desde las especificaciones obtenidas de la fase de análisis del
problema hasta los detalles acerca de cómo sacar el máximo rendimiento del mismo.
Existen dos clases de documentación según su ubicación: interna y externa.

• Documentación Interna.
Constituida básicamente por el listado del programa fuente, su principal objetivo
es facilitar la lectura y comprensión del mismo. Se consideran parte de la
documentación interna los siguientes aspectos:

- Comentarios.
Son frases explicativas que se insertan en cualquier lugar del
programa fuente y que son ignoradas por el compilador (no son
traducidas a lenguaje objeto y, por tanto, no ocupan memoria adicional).
Se deben incluir tantos comentarios como sean necesarios para aclarar el
significado de las líneas de código que no sean obvias, especialmente
respecto a:
- Las variables y estructuras de datos declaradas.
- Las estructuras de control (bucles, alternativas).
- Los subprogramas y sus parámetros.
- Las secciones confusas.

- Código autodocumentado.
Las palabras reservadas que emplean los lenguajes de alto nivel
constituyen en sí mismas parte de la documentación, ya que
corresponden a términos (en inglés) que expresan su cometido. No
obstante se mejora la documentación interna de un programa si se siguen
los criterios enumerados a continuación:
- Uso de identificadores adecuados para nombrar las
variables, constantes, subprogramas, etc.
- Declaración de constantes para valores fijos. Por
ejemplo, declarar la constante IVA para el valor 0,16 .
- Sangrado, paginación e intercalación de líneas en blanco
para dar un aspecto agradable al programa.

• Documentación Externa.
Es el conjunto de documentos que se acompañan con el programa pero sin
formar parte de él. La documentación externa debe incluir al menos los siguientes
apartados:
- Especificaciones del análisis.
- Descripción del diseño del programa.
__________________________________________________________________________________________________________
Conceptos previos 20
Fundamentos de Programación
__________________________________________________________________________________________________________

- Descripción de las versiones si las hubiere.


- Descripción del programa principal y subprogramas.
- Manual de usuario.
- Manual de mantenimiento.

__________________________________________________________________________________________________________
Conceptos previos 21

Você também pode gostar