UNIDAD 2

1.5.3 COMPARACION INTERPRETES Y COMPILADORES


Un compilador acepta programas escritos en un lenguaje de alto nivel y los traduce a otro lenguaje, generando un programa equivalente independiente, que puede ejecutarse tantas veces como se quiera.

En un compilador hay que distinguir tres lenguajes diferentes:


  • El de los programas de partida (LA).

  • El de los programas equivalentes traducidos (LB), normalmente el lenguaje de máquina.

  • El lenguaje en que está escrito el propio compilador (LC), que puede ser igual o diferente a uno de los otros dos.

Los programas interpretados suelen ser más lentos que los compilados, pero los intérpretes son más flexibles como entornos de programación y depuración. Comparando su actuación con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intérprete corresponde al intérprete humano,que traduce de viva voz las palabras que oye, sin dejar constancia por escrito.

¿Qué es un compilador?


Un traductor es cualquier programa que toma como entrada un texto escrito en un lenguaje, llamado fuente y da como salida otro texto en un lenguaje, denominado objeto.

COMPILADOR


En el caso de que el lenguaje fuente sea un lenguaje de programación de alto nivel y el objeto sea un lenguaje de bajo nivel (ensamblador o código de máquina), a dicho traductor se le denomina compilador. Un ensamblador es un compilador cuyo lenguaje fuente es el lenguaje ensamblador. Un intérprete no genera un programa equivalente, sino que toma una sentencia del programa fuente en un lenguaje de alto nivel y la traduce al código equivalente y al mismo tiempo lo ejecuta. Históricamente, con la escasez de memoria de los primeros ordenadores, se puso de moda el uso de intérpretes frente a los compiladores, pues el programa fuente sin traducir y el intérprete juntos daban una ocupación de memoria menor que la resultante de los compiladores. Por ello los primeros ordenadores personales iban siempre acompañados de un intérprete de BASIC (Spectrum, Commodore VIC-20, PC XT de IBM, etc.). La mejor información sobre los errores por parte del compilador así como una mayor velocidad de ejecución del código resultante hizo que poco a poco se impusieran los compiladores. Hoy en día, y con el problema de la memoria prácticamente resuelto, se puede hablar de un gran predominio de los compiladores frente a los intérpretes, aunque intérpretes como los incluidos en los navegadores de Internet para interpretar el código JVM de Java son la gran excepción.

VENTAJAS DE COMPILAR FRENTE A INTERPRETAR:


Se compila una vez, se ejecuta n veces.

En bucles, la compilación genera código equivalente al bucle, pero interpretándolo se traduce tantas veces una línea como veces se repite el bucle.

El compilador tiene una visión global del programa, por lo que la información de mensajes de error es mas detallada. Ventajas del intérprete frente al compilador:

Un intérprete necesita menos memoria que un compilador. En principio eran más abundantes dado que los ordenadores tenían poca memoria.

Permiten una mayor interactividad con el código en tiempo de desarrollo.

Un compilador no es un programa que funciona de manera aislada, sino que necesita de otros programas para conseguir su objetivo: obtener un programa ejecutable a partir de un programa fuente en un lenguaje de alto nivel. Algunos de esos programas son el preprocesador, el linker, el depurador y el ensamblador. El preprocesador se ocupa (dependiendo del lenguaje) de incluir ficheros, expandir macros, eliminar comentarios, y otras tareas similares. El linker se encarga de construir el fichero ejecutable añadiendo al fichero objeto generado por el compilador las cabeceras necesarias y las funciones de librería utilizadas por el programa fuente. El depurador permite, si el compilador ha generado adecuadamente el programa objeto, seguir paso a paso la ejecución de un programa. Finalmente, muchos compiladores, en vez de generar código objeto, generan un programa en lenguaje ensamblador que debe después convertirse en un ejecutable mediante un programa ensamblador.

Clasificación de Compiladores

El programa compilador traduce las instrucciones en un lenguaje de alto nivel a instrucciones que la computadora puede interpretar y ejecutar. Para cada lenguaje de programación se requiere un compilador separado. El compilador traduce todo el programa antes de ejecutarlo. Los compiladores son, pues, programas de traducción insertados en la memoria por el sistema operativo para convertir programas de cómputo en pulsaciones electrónicas ejecutables (lenguaje de máquina). Los compiladores pueden ser de:

• una sola pasada: examina el código fuente una vez, generando el código o programa objeto.

• pasadas múltiples: requieren pasos intermedios para producir un código en otro lenguaje, y una pasada final para producir y optimizar el código producido durante los pasos anteriores.

• Optimación: lee un código fuente, lo analiza y descubre errores potenciales sin ejecutar el programa.

• Compiladores incrementales: generan un código objeto instrucción por instrucción (en vez de hacerlo para todo el programa) cuando el usuario teclea cada orden individual. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente.

• Ensamblador: el lenguaje fuente es lenguaje ensamblador y posee una estructura sencilla.

• Compilador cruzado: se genera código en lenguaje objeto para una máquina diferente de la que se está utilizando para compilar. Es perfectamente normal construir un compilador de Pascal que genere código para MS-DOS y que el compilador funcione en Linux y se haya escrito en C++.

• Compilador con montador: compilador que compila distintos módulos de forma independiente y después es capaz de enlazarlos.

• Autocompilador: compilador que está escrito en el mismo lenguaje que va a compilar. Evidentemente, no se puede ejecutar la primera vez. Sirve para hacer ampliaciones al lenguaje, mejorar el código generado, etc.

• Metacompilador: es sinónimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones del lenguaje para el que se desea obtener un compilador y genera como salida el compilador para ese lenguaje. El desarrollo de los metacompiladores se encuentra con la dificultad de unir la generación de código con la parte de análisis. Lo que sí se han desarrollado son generadores de analizadores léxicos y sintácticos. Por ejemplo, los conocidos:

generador de analizadores léxicosLEX:

generador deYACC: analizadores sintácticos desarrollados para UNIX. Los inconvenientes que tienen son que los analizadores que generan no son muy eficientes.

• Descompilador: es un programa que acepta como entrada código máquina y lo traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilación.

Funciones de un compilador

A grandes rasgos un compilador es un programa que lee un programa escrito es un lenguaje, el lenguaje fuente, y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto. Como parte importante de este proceso de traducción, el compilador informa a su usuario de la presencia de errores en el programa fuente.

A primera vista, la diversidad de compiladores puede parecer abrumadora. Hay miles de lenguajes fuente, desde los lenguajes de programación tradicionales, como FORTRAN o Pascal, hasta los lenguajes especializados que han surgido virtualmente en todas las áreas de aplicación de la informática. Los lenguajes objeto son igualmente variados; un lenguaje objeto puede ser otro lenguaje de programación o el lenguaje de máquina de cualquier computador entre un microprocesador y un supercomputador. A pesar de existir una aparente complejidad por la clasificación de los compiladores, como se vio en el tema anterior, las tareas básicas que debe realizar cualquier compilador son esencialmente las mismas. Al comprender tales tareas, se pueden construir compiladores para una gran diversidad de lenguajes fuente y máquinas objeto utilizando las mismas técnicas básicas.

Nuestro conocimiento sobre cómo organizar y escribir compiladores ha aumentado mucho desde que comenzaron a aparecerlos primeros compiladores a principios de los años cincuenta. Es difícil dar una fecha exacta de la aparición del primer compilador, porque en un principio gran parte del trabajo de experimentación y aplicación se realizó de manera independiente por varios grupos. Gran parte de los primeros trabajos de compilación estaba relacionada con la traducción de fórmulas aritméticas a código de máquina.

En la década de 1950, se consideró a los compiladores como programas notablemente difíciles de escribir. EL primer compilador de FORTRAN, por ejemplo, necesitó para su implantación de 18 años de trabajo en grupo (Backus y otros [1975]). Desde entonces, se han descubierto técnicas sistemáticas para manejar muchas de las importantes tareas que surgen en la compilación. También se han desarrollado buenos lenguajes de implantación, entornos de programación y herramientas de software. Con estos avances, puede hacerse un compilador real incluso como proyecto de estudio en un curso de un semestre sobre diseño sobre de compiladores.

Una clasificación muy importante de los lenguajes es la de hacer dos grupos en base a su funcionamiento, esto es considerarlos como intérpretes y compiladores, según se describe seguidamente.

Un lenguaje se dice que es un intérprete, por ejemplo los BASIC, cuando para ejecutar un programa el lenguaje ha de leer y traducir al lenguaje de la máquina las instrucciones una por una. Como es lógico el proceso se enlentece, por ejemplo si una operación está dentro de la estructura conocida como ciclo y este se repite 100 veces, el lenguaje tiene que traducirlo 100 veces al código de la máquina. No todo son desventajas, pues la parte buena de este tipo de lenguajes es que los errores se pueden corregir al momento y seguir facilmente la ejecución del programa, por lo cual son idóneos para aprender a programar, proceso en el que da lo mismo la lentitud.

Por contra un lenguaje se dice que es compilado, cuando el programa entero se traduce mediante el compilador de dicho lenguaje al lenguaje máquina correspondiente y el resultado se almacena de manera permanente en un archivo. De esta forma el programa se ejecutará de forma mucho más rápida que con un intérprete, sobre todo si hay estructuras que se repiten, caso de los ciclos. La principal desventaja es cuando se produce un error, que muchas veces se detecta en el momento de la ejecución , y la corrección no se puede hacer de inmediato, sino que hay que realizar todo el proceso de compilado desde el principio. Un ejemplo típico de lenguaje de este tipo el C ++, ampliamente usado en el desarrollo de programas.

Hay un lenguaje difundido en el ámbito de la enseñanza, es el Turbo Pascal, cuya ventaja es que aunque se trata de un compilador tiene un entorno de trabajo como si fuera un intérprete y cualquier error se puede corregir al momento, reanudándose la ejecución del programa de inmediato.

Un ejemplo en la vida real que visualiza la diferencia entre un intérprete y un compilador es el siguiente, supongamos que tenemos un libro escrito en una lengua distinta al castellano, hay dos procesos de acceder a su contenido cuando se necesite su uso, una es traducir en el momento de su empleo la parte del libro que se necesite, pero sin transcribirla a papel, sino simplemente mediante lectura traduciendo, esto sería el proceso de interpretado, mientras que la otra opción sería traducir el libro entero al castellano y dejar dicha versión escrita sobre papel, esto sería equivalente al compilado.

El proceso de compilado no es tan inmediato como parece, se describe seguidamente de forma muy esquematizada: 1. Se escribe el programa (conocido como programa fuente) mediante un editor de textos y se almacena en un fichero.

2. Este programa fuente es invocado por la primera etapa del compilador, que efectúa un análisis léxico, se puede considerar como una interpretación del programa fuente preparándolo para un tratamiento posterior con detalle. En esta etapa se ejecutan los tres procesos indicados seguidamente:

Adaptar el código fuente a un formato independiente de la forma en que se haya introducido en el sistema Eliminación de información redundante como espacios y comentarios

Tratar las palabras clave y los símbolos para su paso a símbolos clave, conocido como “tokens”

3. Análisis sintáctico es el paso siguiente, el compilador determina la estructura, y de alguna forma el significado del programa fuente. El conjunto del programa se analiza en bloques, que se descomponen en instrucciones y se procede a identificar los elementos individuales. Como la sintaxis está expresada mediante un conjunto de reglas, cada una indica como se construye una estructura del programa a partir de otras estructuras de menor entidad. El proceso mediante el cual el compilador aplica estas reglas es conocido como “parsing”.

Durante la compilación se genera gran cantidad de información, que se almacena en una estructura de datos conocida como diccionario o tabla de símbolos, en algún momento del proceso se necesitará la información guardada previamente. La mayor parte es información sobre variables, por ejemplo para X en el programa anterior, se tendría en el diccionario,

4. El paso siguiente es la generación de código, conocido como objeto Para ello se recorre el código intermedio generado y se busca cada uno de los “tokens” en el diccionario, lo que permite insertar las direcciones en el código máquina que se está generando.

5. El proceso siguiente es la optimización de código objeto generado, con lo que se consigue un programa más eficiente. Generalmente donde se consiguen los mejores resultados es en los bucles, cuyo objetivo es reducir al máximo el número de operaciones que se ejecutan en él.

6. Normalmente hay una etapa posterior conocida como “linkado “ en la que el o los módulos objetos generados previamente se unen entre sí y/o con otros módulos disponibles en librerías, para formar un fichero que contiene un programa ejecutable directamente desde el sistema operativo, sin necesidad de disponer del compilador correspondiente. Incluso se pueden unir programas escritos en lenguajes distintos si los módulos objeto creado se han estructurado de forma adecuada. En cualquier fase del proceso pueden detectarse errores que se podrán de manifiesto, implicando el volver hasta el programa fuente, efectuar las correcciones pertinentes y repetir todo el proceso, lo cual suele ser algo laborioso.

En el contexto de los lenguajes de programación, un intérprete es un programa que toma un programa fuente escrito en un lenguaje de alto nivel, lo analiza y lo ejecuta instrucción a instrucción bajo su control. En este caso, no se genera un programa equivalente en otro lenguaje de menor nivel, como ocurre con un compilador por lo que, si se desea repetir la ejecución del programa es preciso volver a traducirlo.

Así, un intérprete realizaría el siguiente ciclo

repetir

leer instrucción

ejecutar instrucción

hasta el fin

En un intérprete sólo hay que distinguir dos lenguajes diferentes, el de los programas de partida (LA), y el lenguaje en que está escrito el intérprete (LC).

Comparando su actuación con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intérprete corresponde al intérprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito.

Así, mientras un intérprete toma las instrucciones del programa fuente y las traduce y ejecuta a lenguaje máquina una a una, un compilador realiza la traducción completa del programa fuente a codigo máquina, sin ejecutarlo, siendo posteriormente cuando se ejecute el programa una vez compilado.

Ventajas del intérprete frente al compilador:

• El programa se puede ejecutar de inmediato, sin esperar a ser compilado.

• Puede ser interrumpido con facilidad.

• puede ser rápidamente modificado y ejecutado nuevamente.

• Resultan muy apropiados durante la fase de desarrollo de un programa, ya que la compilación no permite la ejecución paso a paso del programa y con ello impide la edición seguimiento y depuración del programa.

Desventajas del intérprete frente al compilador:

• La ejecución es más lenta, pues cada intrucción debe ser traducida a código máquina tantas veces como sea ejecutada.

• No son adecuados en la fase de explotación del programa ya que el proceso de interpretación se ha de repetir cada vez que se ejecuta el programa, mientras que con la compilación, una vez obtenido el programa en leguaje máquina éste puede ser ejecutado sin necesidad de compilarlo de nuevo.

Un interprete es un traductor de lenguaje, igual que un compilador, pero difiere de éste en que ejecuta el programa fuente inmediatamente, en vez de generar un código objeto que se ejecuta después de que se completa la traducción. En principio, cualquier lenguaje de programación se puede interpretar o compilar, pero se puede preferir un interprete a un compilador dependiendo del lenguaje que se esté usando y de la situación en la cual se presenta la traducción.

Los interpretes se utilizan con frecuencia en situaciones relacionadas con la enseñanza o con el desarrollo de software, donde los programas son probablemente traducidos y vueltos a traducir muchas veces. Por otra parte, es preferible usar un compilador si lo que importa es la velocidad de ejecución, ya que el código de objeto compilado es siempre más rápido que el código fuente interpretado, en ocasiones hasta por un factor de 10 o más.

No obstante, los interpretes comparten muchas de sus operaciones con los compiladores, y ahí pueden incluso ser traductores híbridos, de manera que quedan en alguna parte entre los interpretes y los compiladores. Existen lenguajes cuyos traductores se idearon como interpretes y otros como compiladores. No obstante, para un lenguaje dado, pueden existir tanto compiladores como interpretes.

1.5.2 LENGUAJES DE PROGRAMACION TIPOS

Compilador:

Es un programa que traduce los programas escritos en lenguajes de alto nivel a lenguaje máquina.

Los programas escritos en lenguajes de alto nivel se llaman programas fuente y

El programa traducido se llama programa objeto.

El compilador traduce sentencia a sentencia el programa fuente.

Algunos lenguajes compiladores típicos son:

C

C++

Pascal

FORTRAN

COBOL

Un intérprete es un traductor que toma un programa fuente, lo traduce y a continuación lo ejecuta.

Los programas interpretes clásicos son:

BASIC

QBASIC

QUICKBASIC

VISUALBASIC

SMALLTALK

JAVA

1.5.1 NIVELES DE LENGUAJE DE PROGRAMACION

Lenguaje de alto nivel

La programación en un lenguaje de bajo nivel como el lenguaje de la máquina o el lenguaje simbólico tiene ciertas ventajas:

• Mayor adaptación al equipo.

• Posibilidad de obtener la máxima velocidad con mínimo uso de memoria.

Pero también tiene importantes 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.

Por esta razón, a finales de los años 1950 surgió un nuevo tipo de lenguaje que evitaba los inconvenientes, a costa de ceder un poco en las ventajas.

Estos lenguajes se llaman “de tercera generación” o “de alto nivel”, en contraposición a los “de bajo nivel” o “de nivel próximo a la máquina”.

Principales lenguajes de alto nivel

• Ada • ALGOL • Basic • C (en realidad es un lenguaje de medio nivel). • C++ • CT • Clipper • Cobol • Fortran • Java • Lexico • Logo • Object Pascal • Pascal • Perl • PHP • PL/SQL • Python • Modula-2 • Lenguajes funcionales o Haskell o Lisp

Lenguaje de medio nivel

Se dice del lenguajes de programación como C, que se encuentran entre los lenguajes de alto nivel y los lenguajes de bajo nivel. Estos lenguajes son clasificados muchas veces de alto nivel, pero permiten ciertos manejos de bajo nivel. Son precisos para ciertas aplicaciones como la creación de sistemas operativos, ya que permiten un manejo abstracto (independiente de la máquina, a diferencia del ensamblador), pero sin perder mucho del poder y eficiencia que tienen los lenguajes de bajo nivel.

Una característica distintiva, por ejemplo, que convierte a C en un lenguaje de medio nivel y al Pascal en un lenguaje de alto nivel es que en el primero es posible manejar las letras como si fueran números (en Pascal no), y por el contrario en Pascal es posible concatenar las cadenas de caracteres con el operador suma y copiarlas con la asignación (en C es el usuario el responsable de llamar a las funciones correspondientes).

Lenguaje de bajo nivel

Un lenguaje de programación de bajo nivel es el que proporciona poca o ninguna abstracción del microprocesador de un ordenador. Consecuentemente es fácilmente trasladado a lenguaje de máquina.

La palabra “bajo” no implica que el lenguaje sea inferior a un lenguaje de alto nivel; se refiere a la reducida abstracción entre el lenguaje y el hardware. Uso: ventajas e inconvenientes.

En general se utiliza este tipo de lenguaje para programar controladores (drivers).

La programación en un lenguaje de bajo nivel como el lenguaje de la máquina o el lenguaje simbólico tiene ciertas ventajas:

• Mayor adaptación al equipo.

• Posibilidad de obtener la máxima velocidad con mínimo uso de memoria.

Pero también tiene importantes 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.

Primera generación

El lenguaje de programación de primera generación (por sus siglas en inglés, 1GL), es el lenguaje de código máquina. Es el único lenguaje que un microprocesador entiende de forma nativa. El lenguaje máquina no puede ser escrito o leído usando un editor de texto, y por lo tanto es raro que una persona lo use directamente.

Segunda generación

El lenguaje de programación de segunda generación (por sus siglas en inglés, 2GL), es el lenguaje ensamblador. Se considera de segunda generación porque, aunque no es lenguaje nativo del microprocesador, un programador de lenguaje ensamblador debe entender la arquitectura del microprocesador (cosas como sus registros e instrucciones).

1.5 LENGUAJES DE PROGRAMACION

Java

El lenguaje de programación Java, fue diseñado por la compañía Sun Microsystems Inc, con el propósito de crear un lenguaje que pudiera funcionar en redes computacionales heterogéneas ( redes de computadoras formadas por más de un tipo de computadora, ya sean PC, MAC’s, estaciones de trabajo, etc.),y que fuera independiente de la plataforma en la que se vaya a ejecutar. Esto significa que un programa de Java puede ejecutarse en cualquier máquina o plataforma.

C

Edgar Ursulo Garcia C es un lenguaje de programación diseñado por Dennis Ritchie, de los Laboratorios Bell, yse instaló en un PDP-11 en 1972; se diseñó para ser el lenguaje de los Sistemas Operativos UNIX1. A su vez, UNIX es un Sistema Operativo desarrollado por Ken Thompson, quién utilizó el lenguaje ensamblador y un lenguaje llamado B para producir las versiones originales de UNIX, en 1970. C se inventó para superar las limitaciones de B.

Pascal

Pascal es un lenguaje de programación de alto nivel de propósito general; esto es, se puede utilizar para escribir programas para fines científicos y comerciales. El lenguaje de programación Pascal fue desarrollado por el profesor Niklaus (Nicolás) Wirth en Zurich, Zuiza, al final de los años 1960s y principios de los 70s. Wirth diseñó este lenguaje para que fuese un buen primer lenguaje de programación para personas comenzando a aprender a programar. Pascal tiene un número relativamente pequeño de conceptos para aprender y dominar. Su diseño facilita escribir programas usando un estilo que está generalmente aceptado como práctica estándar de programación buena. Otra de las metas del diseño de Wirth era la implementación fácil. Él diseñó un lenguaje para el cual fuese fácil escribir un compilador para un nuevo tipo de computadora.

Q Basic

Qbasic es un lenguaje de alto nivel, el cual consiste en instrucciones que los humanos pueden relacionar y entender. El compilador de Qbasic se encarga de traducir el mismo a lenguaje de máquina.

Un programa es una secuencia de instrucciones. El proceso de ejecutar esas instrucciones se llama correr el programa. Los programas contienen las funciones de entrada, procesamiento y salida. La persona que resuelve problemas mediante escribir programas en la computadora se conoce como programador. Después de analizar el problema y desarrollar un plan para solucionarlo, escribe y prueba el programa que instruye a la computadora como llevar a cabo el plan. El procedimiento que realiza el programador se define como “problem solving”. Pero es necesario especificar que un programador y un usuario no son lo mismo. Un usuario es cualquier persona que use el programa.

Linux

Linux es una implementación del sistema operativo UNIX (uno más de entre los numerosos clónicos del histórico Unix), pero con la originalidad de ser gratuito y a la vez muy potente, que sale muy bien parado (no pocas veces victorioso) al compararlo con las versiones comerciales para sistemas de mayor envergadura y por tanto teóricamente superiores. Comenzó como proyecto personal del –entonces estudiante- Linus Torvalds, quien tomó como punto de partida otro viejo conocido, el Minix de Andy. S. Tanenbaum (profesor de sistemas operativos que creó su propio sistema operativo Unix en PCs XT para usarlo en su docencia). Actualmente Linus lo sigue desarrollando, pero a estas alturas el principal autor es la red Internet, desde donde una gigantesca familia de programadores y usuarios aportan diariamente su tiempo aumentando sus prestaciones y dando información y soporte técnico mútuo. La versión original -y aun predominante- comenzó para PCs compatibles (Intel 386 y superiores), existiendo también en desarrollo versiones para prácticamente todo tipo de plataformas: Power PC , Sparc , Alpha , Mips , etc.

Ensamblador Cuando abstraemos los opcodes y los sustituimos por una palabra que sea una clave de su significado, a la cual comúnmente se le conoce como mnemónico , tenemos el concepto de Lenguaje Ensamblador . Así, podemos definir simplemente al Lenguaje Ensamblador de la siguiente forma: Lenguaje Ensamblador es la primera abstracción del Lenguaje de Máquina , consistente en asociar a los opcodes palabras clave que faciliten su uso por parte del programador Como se puede ver, el Lenguaje Ensamblador es directamente traducible al Lenguaje de Máquina, y viceversa; simplemente, es una abstracción que facilita su uso para los seres humanos. Por otro lado, la computadora no entiende directamente al Lenguaje Ensamblador; es necesario traducirle a Lenguaje de Máquina. Originalmente, este proceso se hacía a mano, usando para ello hojas donde se escribían tablas de programa similares al ejemplo de la calculadora que vimos arriba . Pero, al ser tan directa la traducción, pronto aparecieron los programas Ensambladores, que son traductores que convierten el código fuente (en Lenguaje Ensamblador) a código objeto (es decir, a Lenguaje de Máquina).

PHP ¿Qué es? PHP usa una mezcla entre interpretación y compilacion para intentar ofrecer a los programadores la mejor mezcla entre rendimiento y flexibilidad. PHP compila para tu codigo una serie de instrucciones (llamadas opcodes) siempre que estas son accedidas. Estas instrucciones son entonces ejecutadas una por una hasta que el script termina. Esto es diferente a la manera convencional de compilacion de lenguajes como C++ donde el código es compilado a código ejecutable que es despues ejecutado. Php es recompilado cada vez que se solicita un script.

C# ¿Qué es? C# es un lenguaje de propósito general orientado a objetos creado por Microsoft para su plataforma .NET. Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET el cual es similar al de Java aunque incluye mejoras derivadas de otros lenguajes. C# fue diseñado para combinar el control a bajo nivel de lenguajes como C y la velocidad de programación de lenguajes como Visual Basic.

AJAX ¿Qué es? AJAX no es un lenguaje exactamente su nombre viene dado por el acrónimo de Asynchronous Java Script And XML y es posiblemente la mayor novedad en cuanto a programación web en estos últimos años. El corazón de Ajax es el objeto XML Http Request? que nos permite realizar una conexión al servidor y al enviarle una petición y recibir la respuesta que procesaremos en nuestro código Javascript, estamos hablando del verdadero motor de Ajax, por ejemplo gracias a este objeto podemos desde una página HTML leer datos de una web o enviar datos de un formulario sin necesidad de recargar la página.

Java Script ¿Qué es? Se trata de un lenguaje de programación del lado del cliente, porque es el navegador el que soporta la carga de procesamiento. Gracias a su compatibilidad con la mayoría de los navegadores modernos, es el lenguaje de programación del lado del cliente más utilizado.

Ruby y Ruby on Rails ¿Qué es? Ruby on Rails, también conocido como RoR o Rails es un framework de aplicaciones web de código abierto escrito en el lenguaje de programación Ruby. Ruby apareció en el año 1995 y creo que su principal problema había sido la falta de documentación en otro idioma que no sea japonés. Eso se ha ido solucionando y crece la popularidad del lenguaje. Su aplicación insignia, por decirlo de algún modo parece ser RoR. Su mecanismo de gem se me parece al CPAN de Perl y al Pear de PHP.

ASP ¿Qué es? Active Server Pages (ASP) y ASP.NET es un intendo de Microsoft para introducirse en el mercado del desarrollo Web, y viene a ser como su estandar para su servidor Web, ISS. Asp ha sido atacado por la comunidad open source desde que este apareció, y dan numerosas razones para ello: El propietario, una única plataforma, la lentitud…

Edgar Ursulo Garcia ABAP (Advanced Business Application Programming) es un lenguaje de cuarta generación, propiedad de SAP, que se utiliza para programar dentro de R/3. Utiliza sentencias de Open SQL para conectarse con prácticamente cualquier base de datos. Cuenta con miles de funciones para el manejo de archivos, bases de datos, fechas, etc… Permite conexiones RFC (Remote Function Calls) para conectar a R/3 con cualquier otro sistema o lenguaje de programación. ABC es un lenguaje de programación de alto nivel desarrollado por Leo Geurts y Lambert Meertens a principios de los 80 en el CWI (Centrum voor Wiskunde en Informática). Inicialmente fue pensado como sustituto del lenguaje BASIC. Este lenguaje sirvió de inspiración a Guido van Rossum para desarrollar el lenguaje Python. Ada es un lenguaje de programación estructurado y fuertemente tipado de forma estática que fue diseñado por Jean Ichbiah de CII Honeywell Bull por encargo del Departamento de Defensa de los Estados Unidos. Es un lenguaje multipropósito, orientado a objetos y concurrente, pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad de C++. Fue diseñado con la seguridad en mente y con una filosofía orientada a la reducción de errores comunes y difíciles de descubrir. Para ello se basa en un tipado muy fuerte y en chequeos en tiempo de ejecución (desactivables en beneficio del rendimiento). La sincronización de tareas se realiza mediante la primitiva rendezvous. Action Script es un lenguaje de programación orientado a objetos (OOP), utilizado en especial en aplicaciones web animadas realizadas en el entorno Macromedia Flash, la tecnología de Macromedia para añadir dinamismo al panorama web. Fue lanzado con la versión 4 de Flash, y desde entonces hasta ahora, ha ido ampliándose poco a poco, hasta llegar a niveles de dinamismo y versatilidad muy altos en la versión 8 de Flash. Action Script es un lenguaje de script, esto es, no requiere la creación de un programa completo para que la aplicación alcance los objetivos. El lenguaje está basado en especificaciones de estándar de industria ECMA-262, un estándar para Javascript, de ahí que Action Script se parezca tanto a Javascript. Afnix (llamado Aleph hasta el 2003) es un lenguaje de programación funcional mutihilos con alcance dinámico de variables y soporte para el paradigma de programación orientada a objetos. El interpretador de Afnix está escrito en C++ y provee integración en tiempo de ejecución que incluye la posibilidad de instanciar clases de C++, utilizar métodos virtuales, lanzar y atrapar excepciones. Se dispone también de una interfase para facilitar la integración de librerías externas. Se denomina ALGOL (o Algol) a un lenguaje de programación. La voz es un acrónimo de las palabras inglesas Algorithmic Language (lenguaje algorítmico). Fue muy popular en las universidades durante los años 60, pero no llegó a cuajar como lenguaje de utilización comercial. Sin embargo, Algol influyó profundamente en varios lenguajes posteriores que sí alcanzaron gran difusión, como Pascal, C y Ada. Hacia 1965 dos corrientes se distinguieron sobre el tema de un sucesor para Algol. Como resultado se definieron los lenguajes Algol W que es un lenguaje minimalista, rápidamente implementado y distribuido y, por otra parte, Algol 68 que para la época está en la frontera entre un lenguaje para programar en él y un lenguaje para investigar sobre él. APL. A Programing Language, es un lenguaje de programación interpretado desarrollado por Kenneth Iverson, de IBM, a finales de los años 60. Desde hace algunos años también se le conoce como Array Processing Language. Es un lenguaje muy conciso, con una sintaxis muy sencilla. Está orientado a trabajos con matrices, con la que se pueden hacer todo tipo de operaciones lógicas o matemáticas. Incluso se pueden definir nuevas operaciones matriciales. Es de una potencia tremenda. Una sola sentencia puede traducirse en miles de ellas en otros lenguajes, como por ejemplo Fortran. Como ejemplo, el lenguaje de simulación de circuitos, SIAL, ocupaba cerca de 25 000 sentencias en Fortran-Assembler y, al ser reescrito en APL, todo el programa se podía imprimir en dos folios [1]. Por otra parte, a pesar de ser un lenguaje de tan alto nivel, también es capaz de manipular a escala de bits y tiene interfaces con lenguajes de programación de bajo nivel (C, ensamblador…) mediante los llamados procesadores auxiliares.

AWK es un lenguaje de programación diseñado para procesar datos basados en texto, ya sean ficheros o flujos de datos. El nombre AWK deriva de los apellidos de los autores: Alfred Aho, Peter Weinberger, y Brian Kernighan. awk, cuando está escrito todo en minúsculas, hace referencia al programa de Unix o Plan 9 que interpreta programas escritos en el lenguaje de programación AWK. AWK es ejemplo de un lenguaje de computación que usa ampliamente el tipo de datos de listas asociadas (es decir, listas indexados por cadenas clave), y expresiones regulares. El poder, brevedad y limitaciones de los programas de AWK y los guiones de sed inspiraron a Larry Wall a escribir Perl. Debido a su densa notación, todos estos lenguajes son frecuentemente usados para escribir programas de una línea.

B B fue el nombre de un lenguaje de programación desarrollado en los Bell Labs, predecesor del lenguaje de programación C. Fue mayoritariamente un trabajo de Ken Thompson con contribuciones de Dennis Ritchie. Apareció primero sobre el año 1969.

BASIC es una familia de lenguajes de programación. Fue originalmente ideado como una herramienta de enseñanza, se diseminó entre las microcomputadores caseras en la década de 1980, y sigue siendo popular hoy en día en muchos dialectos bastante distintos del original. BASIC es el acrónimo de Beginners All-purpose Symbolic Instruction Code[1] (en español ‘código de instrucciones simbólicas de propósito general para principantes’) y está ligado al nombre de un trabajo sin publicar del coinventor del lenguaje, Thomas Kurtz (el nombre no está relacionado con la serie de C. K. Ogden, Basic English).

BCPL es un acrónimo inglés de Basic Combined Programming Language (Lenguaje de Programación Básico Combinado). Fue diseñado por Martin Richards de la Universidad de Cambridge en 1966 debido a las dificultades experimentadas con el lenguaje de programación CPL durante los años 60. El primer compilador implementado fue escrito en 1967 mientras Richards visitaba el MIT. El lenguaje fue descrito por primera vez en un proyecto presentado en una conferencia informática en 1969. Años después, Dennis Ritchie lo utilizó como base para desarrollar B (que a su vez, más tarde daría lugar al popular lenguaje de programación C). Befunge es un lenguaje de programación esotérico, funge-oide, reflexivo y basado en pila. Difiere de los lenguajes convencionales en que los programas están dispuestos en una parrilla bidimensional. Las instrucciones “flecha” dirigen el control de flujo hacia arriba, abajo, izquierda o derecha, y los bucles se construyen dirigiendo el control de flujo en círculo.

Delphi es un entorno de desarrollo de software diseñado para la programación de propósito general con énfasis en la programación visual. En Delphi se utiliza como lenguaje de programación una versión moderna de Pascal llamada Object Pascal. Es producido comercialmente por la empresa estadounidense Code Gear?. En sus diferentes variantes, permite producir archivos ejecutables para Windows, Linux y la plataforma .NET.

Visual Basic es un lenguaje de programación desarrollado por Alan Cooper para Microsoft. El lenguaje de programación es un dialecto de BASIC, con importantes añadidos. Su primera versión fue presentada en 1991 con la intención de simplificar la programación utilizando un ambiente de desarrollo completamente gráfico que facilitara la creación de interfaces gráficas y en cierta medida también la programación misma.

Visual Fox Pro es un lenguaje de programación orientado a objetos y procedural, un Sistema Gestor de Bases de datos o Database Management System (DBMS), y desde la versión 7.0, un Sistema administrador de bases de datos relacionales, producido por Microsoft.

Lua es un lenguaje de extensión, suficientemente compacto para usarse en diferentes plataformas. En lua las variables no tienen tipo, sólo los datos y pueden ser lógicos, enteros, números con punto flotante o cadenas. Estructuras de datos como matrices, conjuntos, tablas hash, listas y registros pueden ser representadas utlizando la única estructura de datos de Lua: la tabla. La semántica de Lua puede ser extendida y modificada redefiniendo funciones de las estructuras de datos utilizando metatablas. Lua ofrece soporte para funciones de orden superior, colector de basura. Combinando todo lo anterior, es posible utilizar Lua en programación orientada a objetos.

1.4.3 EDITORES DE PANTALLA

El editor más frecuente en Unix es vi. Es un editor que trabaja línea a línea y que muestra una pantalla de texto a la vez.

Para inciar una sesión de edición, se ejecuta el programa vi seguido del nombre del archivo a editar, y dado el caso también la trayectoria. Por ejemplo, para editar el arvhivo /tmp/borrame, basta con dar vi /tmp/borrame, o para editar un archivo en el directorio actual: vi borrame.

Si el archivo no existe vi lo crea. De igual manera, podemos simplemente invocar a vi, comenzar a escribir y despúes nombrar el archivo al momento de salvarlo.

Al ser ejecutado vi, presenta una pantalla con el texto del archivo, y las líneas después del final del archivo aparecen con el carácter ~ para indicar que a partir de ahí el archivo está vacio. Obviamente, si comenzamos a editar un archivo nuevo, todas las líneas aparecerán con éste carácter.

Tiene tres modos de trabajo. El modo de inserción, el de edición y el de comandos.

En el modo de inserción, toda la entrada que demos en el teclado se inserta en el archivo en el punto donde se encuentre el cursor. En el modo de edición daremos instrucciones que alteran el contenido, como por ejemplo para posicionarse en determinado punto, hacer reemplazos de texto, copiar o mover bloques de texto, etc. En el modo comandos se dan instrucciones para salvar el archivo, traer a edición otro, insertar otro archivo en el punto donde se está, terminar la edición, etc.

En el modo edición, las instrucciones para mover el cursor en del texto son:

comando se desplaza:

l un espacio a la derecha

h un espacio a la izquierda

j una línea hacia abajo

k una línea hacia arriba

$ al final de la línea

^ al principio de la línea

w a la siguiente palabra

e al final de la palabra

b al principio de la palabra

) al final de la frase

( al inicio de la frase

{ al inicio del párrafo

} al final del párrafo

n| a la columna n-ésima

H a la primera columna de la primera línea de la ventana

L a la primera columna de la última línea de la ventana

nG a la primera columna de la n-ésima línea del archivo Para el control de la parte del texto que se despliega en la pantalla:

instrucción acción:

^d desliza el texto hacia arriba

^u desliza el texto hacia abajo

^f despliega la ventana de texto siguiente

^b despliega la ventana de texto anterior

^l redespliega el texto en la ventana actual Las instrucciones para borrar texto:

dw suprime la palabra donde está el cursor

dd suprimir la línea donde está el cursor

D borra el texto entre el cursor y el fin de la línea

x borra el carácter sobre el que esta el cursor

Para hacer reemplazos de texto:

cw cambiar la palabra actual

cc cambiar la línea actual

C cambiar desde el cursor hasta el final de la línea

r cambiar el carácter sobre el que está el cursor

Algunas instrucciones suplementarias:

u anular la última instrucción dada

/ realiza una búsqueda hacia adelante

? realiza una búsqueda hacia atrás

n busca la siguiente ocurrencia de la última búsqueda

. repite la última instrucción

Y extrae la línea

p se coloca en la línea de abajo

P se coloca en la línea de arriba

ZZ salva el archivo y termina la edición

ESC cancela una orden

: se cambia a modo comandos

Cuando vi esta en modo de edición, para cambiarse a modo inserción se hace con el carácter i y se posiciona antes del cursor y con a después de éste. Con Esc se cambia a modo edición de nuevo.

En modo de comandos, se tienen las siguientes funciones:

:w salva el archivo en el disco

:q abandona la edición sin guardar los cambios

:wq escribe y termina

:q! abandona sin escribir cuando se realizó algún cambio.

:r carga otro archivo

:e edita el archivo

:f cambia o dá nombre al archivo actual

:n se posiciona en la n-ésima línea

:Esc se pasa a modo de edición

vi tiene muchas más instrucciones y es capáz de realizar tareas muy complejas. Es importante conocer la mayoría de ellas para hacer más eficiente nuestro trabajo, pero son demasiado extensas para incluirlas todas en este curso. Existen libros especializados donde se describe con toda sobriedad esta poderosa herramienta.

Existen además de vi otros editores para Unix, incluso más poderosos que él, pero esto depende de cada implementación de Unix. vi y ex (que por ser algo más limitado, no trataremos aquí) son los únicos que se garantiza que se pueden encontrar en cualquier instalación de Unix. Entre los editores más populares se encuentra Emacs, pero cuenta con un conjunto de instrucciones realmente complejo, lo cual forma parte de su tradición de ser para usuarios avanzados.

Haremos ahora un ejemplo para familiarizarnos con vi.

Comenzaremos editando un archivo nuevo que se llamará cordero.txt. Invocamos a vi con este argumento,

$vi cordero.txt

ahora la pantalla se limpia y aparecen varios renglones con tildes en el márgen izquierdo y en la parte inferior izquierda aparece el mensaje ¨cordero.txt¨ [New file], que indica que se esta creando un archivo nuevo.

“cordero.txt” [NEW FILE] 1 line, 1 char

En este momento nos encontramos en el modo de edición con el cual podemos iniciar la captura del texto. Para esto damos la instrucción i y nos pasamos a modo inserción. Ahora podemos escribir cualquier texto que necesitemos.

Cuando se tengan un par o más párrafos podemos ejercitar algunas de las instrucciones para movernos por el texto y para realizar búsquedas e incluso reemplazos.

1.4.2 EDITORES DE LINEA

El editor de líneas se usa para crear o editar la Tabla de Definición de Campos y la Tabla de Selección de Campos Estas tablas están formadas por una o más líneas, cada una de las cuales representa un elemento descriptivo. Aunque cada tabla tiene una estructura propia de sus elementos, los comandos del editor de líneas en ambos casos es idéntico. Para cada nuevo elemento de la tabla creado, el editor de líneas presenta un renglón en el que se muestra la posición y longitud de cada campo con líneas de subrayado (en coincidencia con el encabezado de la tabla presentado en la parte de arriba de la pantalla, y que contiene los nombres correspondientes a cada campo), y posiciona el cursor en el primer campo donde se van a teclear los datos.

Por ejemplo, la figura 63 y la figura 64 muestran como aparece la pantalla cuando se va a teclear en la primera línea de una FST y de una

FDT respectivamente.

Nótese que cuando se crea una nueva línea en la tabla, la primera posición (que tiene encabezado ?) no se usa, y que el cursor se posiciona en el primer campo donde se deben teclear datos (la primera posición se utiliza cuando se editan líneas ya existentes en la tabla, tal como se explica más adelante).

Se pueden teclear los diversos campos según sea necesario, y mover el cursor de uno al siguiente usando la tecla . La tecla devuelve el cursor al campo precedente. Nótese que todos los campos de más de un carácter de longitud activan al editor de campos (recordar que cuando el editor de campos está activo, el modo de edición se visualiza en la parte inferior izquierda de la. En este caso se pueden usar todas las facilidades del editor de campos, incluyendo las operaciones de manejo de bloques.

Para campos de un sólo carácter, simplemente debe teclearse el carácter relevante, el cursor pasará automáticamente al campo siguiente.

Por ejemplo, después de teclear el (ID) en una línea de una FST, se presiona para pasar a indicar la técnica de indizado (IT). Siendo un campo IT de un sólo carácter, basta con teclear uno de los códigos correspondientes (sin presionar ), para pasar al campo siguiente. El formato es un campo de texto, por lo que CDS/ISIS activará al editor de campos. Después del formato si se presiona CDS/ISIS pasará a la siguiente línea, ya que el formato es el último campo de la línea.

Al mover el cursor de un campo a otro, CDS/ISIS presenta un mensaje o un submenú relacionado con cada campo, en el área de mensajes (líneas 22–24).

Después de completar el último campo de una línea, el editor de líneas queda listo para la línea siguiente, para lo cual presenta el renglón correspondiente. Al presionar en este punto terminará la operación con la tabla y hará que se presente el mensaje siguiente:

Mensaje 105: Pág. sgte. M - Modifica C - Cancela X - Salida

Las respuestas que se pueden dar a esta solicitud son:

para salir del editor de líneas. CDS/ISIS en este caso creará o actualizará la tabla

• R para editar (modificar) la tabla

• C para salir del editor de líneas sin actualizar la tabla. Todas las modificaciones que se hubieran hecho son ignoradas.

Si se usa la opción M, el editor coloca el cursor en la posición de comando de la primera línea de la tabla, y presenta el submenú siguiente en el área de mensajes: Mensaje 381/382/383:

A - Insertar(desp) B - Insertar(antes) C - Cambiar línea D -Borrar línea

P - Página previa N - Próxima página T - Comienzo pág. E - Fin página

X - Salida - Próx. entrada

Las opciones se explican a continuación:

o A Insertar una nueva línea después de esta

o B Insertar una nueva línea antes de esta

o C Editar (modificar) línea (ver más adelante)

o D Borrar la línea

o E Final de la tabla (Las cinco últimas líneas se presentan en la parte superior de la pantalla)

o N Página siguiente

o P Página anterior

o T Inicio de la tabla (la primera línea se presenta en la parte superior de la pantalla)

o X Salir

o Deja sin cambios esta línea y salta a la siguiente. Si esta es la última, el editor pasará al modo de ingreso, con lo que pueden generarse nuevas líneas al final de la tabla, del modo que ya se describió.

o Deja la línea sin cambios y pasa a la anterior Para editar una línea debe presionar una C en la posición de comando. El editor en este caso posicionará el cursor en el primer campo de esa línea. Para modificar un campo, puede teclearse de nuevo (si el editor de campos no está activo), o editarlo usando el editor de campos. Si se presiona , el cursor pasa al campo siguiente, y lo pasa al campo anterior.

Para terminar la edición, oprimir X. Esto hará que se presente el mensaje 105 (ver más arriba).

1.4.1 EDITORES DE CARACTERES

Editor de Caracteres Privados

Situación

El uso de logos u otros ítems para ser usados en cualquier documento se puede volver engorroso con los métodos tradicionales.

Recomendación

Windows XP tiene una característica que permite personalizar logos o cualquier otro ítem para ser utilizado en cualquier documento. El Editor de Caracteres Privados (Private Character Editor) se puede acceder en digitando “Eudcedit” sin las comillas en la ruta Inicio/Ejecutar

Una vez haya construido y guardado el diseño

de su selección, puede accederlo a través del Mapa de Caracteres, al cual se llega por la ruta

Inicio/Todos los programas/Accesorios/Mapa de caracteres

En el tipo de letra se selecciona Todas las Fuentes (caracteres privados) y aparecerán sus adiciones. Las podrá copiar y pegar en cualquier documento.

1.4 EDITORES

1.3 LENGUAJES FORMALES

El lenguaje formal es aquel que el hombre ha desarrollado para expresar las situaciones que se dan en especifico en cada área del conocimiento científico. Las palabras y oraciones de un lenguaje formal son perfectamente definidas(una palabra mantiene su el mismo significado prescindiendo de su contexto o uso.

Los lenguajes formales son exentos de cualquier componente semántico fuera de sus operadores y relaciones. Los lenguajes formales pueden ser utilizados para modelar una teoría de la mecánica, fisica,

matemática, ingeniería eléctrica, o de otra naturaleza, con la ventaja de que en estos toda ambigüedad es eliminada.

En resumen las características de los lenguajes formales son las siguientes:

1. Se desarrollan de una teoría preestablecida.

2. Componente semántico minimo.

3. Posibilidad de incrementar el componente semántico de acuerdo con la teoría a formalizar.

4. La sintaxis produce oraciones no ambiguas.

5. La importancia del rol de los números.

6. Completa formalización y por esto, el potencial de la construcción computacional.

1.2 DEL PROBLEMA AL PROGRAMA CARGADO

El proceso de resolución de un problema con una computadora conduce a la escritura de un programa y a su ejecución en la misma. Aunque el proceso de diseñar programas es esencialmente un proceso creativo, se pueden considerar una serie de fases o pasos comunes, que generalmente deben seguir todos los programadores.

Tabla de contenidos

1.Definición del problema

2.Análisis del problema

3.Selección de la mejor alternativa

4.Diagramación

5.Prueba de escritorio

6.Codificación


7.Trascripción

8.Compilación

9.Pruebas de computador

10.Documentación externa

Las siguientes son las etapas que se deben cumplir para resolver con éxito un problema de programación:

1.- DEFINICIÓN DEL PROBLEMA

Está dada por el enunciado del problema, el cuál debe ser claro y completo. Es importante que conozcamos exactamente que se desea del computador; mientras qué esto no se comprenda, no tiene caso pasar a la siguiente etapa.

2.- ANÁLISIS DEL PROBLEMA

Entendido el problema (que se desea obtener del computador), para resolverlo es preciso analizar:

•Los datos o resultados que se esperan.
•Los datos de entrada que nos suministran.
•El proceso al que se requiere someter esos datos a fin de obtener los resultados esperados.
•Áreas de trabajo, fórmulas y otros recursos necesarios.
Una recomendación muy práctica es el que nos pongamos en el lugar del computador, y analizar que es necesario que me ordenen y en que secuencia, para poder producir los resultados esperados. También da buenos resultados hacer similitudes con la labor de un empleado que hace el mismo trabajo que deseamos programarle al computador.

3.- SELECCIÓN DE LA MEJOR ALTERNATIVA

Analizado el problema, posiblemente tengamos varias formas de resolverlo; lo importante es determinar cuál es la mejor alternativa: la que produce los resultados esperados en el menor tiempo y al menor costo. Claro que aquí también es muy válido el principio de que las cosas siempre se podrán hacer de una mejor forma.

4.- DIAGRAMACIÓN

Una vez que sabemos cómo resolver el problema, pasamos a dibujar gráficamente la lógica de la alternativa seleccionada. Eso es precisamente un Diagrama de Flujo: la representación gráfica de una secuencia lógica de pasos a cumplir por el computador para producir un resultado esperado.

La experiencia nos ha demostrado que resulta muy útil trasladar esos pasos lógicos planteados en el diagrama a frases que indiquen lo mismo; es decir, hacer una codificación del programa pero utilizando instrucciones en Español. Como si le estuviéramos hablando al computador. Esto es lo que denominaremos Algoritmo o Pseudocódigo.

Cuando logremos habilidad para desarrollar programas, es posible que no elaboremos el diagrama de flujo; en su lugar podremos hacer directamente el pseudocódigo del programa.

5.- PRUEBA DE ESCRITORIO

Para cerciorarnos de que el diagrama (y/o el pseudocódigo) esta bien, y, para garantizar que el programa que codifiquemos luego también funcione correctamente, es conveniente someterlo a una Prueba de Escritorio. Esta prueba consiste en que damos diferentes datos de entrada al programa y seguimos la secuencia indicada en el diagrama, hasta obtener los resultados. El análisis de estos nos indicará si el diagrama esta correcto o si hay necesidad de hacer ajustes (volver al paso 4). Se recomienda dar diferentes datos de entrada y considerar todos los posibles casos, aun los de excepción o no esperados, para asegurarnos de que el programa no producirá errores en ejecución cuando se presenten estos casos.

6.- CODIFICACIÓN

Una vez que hayamos verificado el diagrama mediante las pruebas de escritorio, codificamos el programa en el lenguaje de computador seleccionado. Esto es, colocamos cada paso del diagrama en una instrucción o sentencia, utilizando un lenguaje que el computador reconoce.

Todos los lenguajes de programación proveen facilidades para incluir líneas de comentarios en los programas. Estos comentarios aclaran lo que se ordena al computador y facilitan entender el programa. Puesto que estos comentarios no son tenidos en cuenta como instrucciones, y aparecen en los listados del programa, resulta muy conveniente agregar abundantes comentarios a todo programa que codifiquemos. Esto es lo que se denomina Documentación Interna.

7.- TRANSCRIPCIÓN

El programa codificado es necesario que lo llevemos a un medio que sea aceptado como entrada por el computador: lo perforamos en tarjetas, lo grabamos en un disco flexíble o lo grabamos en un disco duro. Este programa es el que se conoce como Programa Fuente (Source).

8.- COMPILACIÓN

Utilizamos ahora un programa de computador llamado Compilador o Traductor, el cúal analiza todo el programa fuente y detecta errores de sintaxis ocasionados por fallas en la codificación o en la transcripción. Las fallas de lógica que pueda tener nuestro programa fuente no son detectadas por el compilador. Cuando no hay errores graves en la compilación, el compilador traduce cada instrucción del programa fuente a instrucciones propias de la máquina (Lenguaje de Maquina), creando el Programa Objeto.

Algunos computadores utilizan Interpretadores, (Generalmente para el Lenguaje Basic), en reemplazo de programas compiladores. La diferencia consiste en que el interpretador recibe, desde una terminal, sólo una instrucción a la vez, la analiza y, si esta bien, la convierte al formato propio de la maquina. Si la instrucción tiene algún error, el interpretador llama la atención de la persona para que corrija dicha instrucción.

Como resultado de la corrida del compilador, podemos obtener varios listados:

•Listado del programa fuente
•Listado de los errores detectados
•Listado de campos utilizados, etc.
Los errores los debemos corregir sobre el mismo programa fuente, ya sea reemplazando las tarjetas mal perforadas o regrabando en el disco flexible o en el disco duro. Este paso de la compilación lo repetimos hasta eliminar todos los errores y obtener el programa ejecutable.

9.- PRUEBAS DE COMPUTADOR

Cuando tenemos el programa ejecutable (en lenguaje de maquina), ordenamos al computador que lo ejecute, para lo cuál suministramos datos de prueba, como lo hicimos en la prueba de escritorio (paso 5). Los resultados obtenidos los analizamos, luego de lo cuál puede ocurrir cualquiera de estas situaciones:

a.- La lógica del programa esta bien, pero hay errores sencillos, los cuales los corregimos modificando algunas instrucciones o incluyendo unas nuevas; el proceso debemos repetirlo desde el paso 6 .

b.- Hay errores ocasionados por fallas en la lógica, lo que nos obliga a regresar a los pasos 4 y 5 para revisión y modificación del diagrama.

c.- Hay errores muy graves y lo más aconsejable es que regresemos al paso 2 para analizar nuevamente el problema, y repetir todo el proceso.

d.- No hay errores y los resultados son los esperados. En este caso, el programa lo podemos guardar permanentemente en una librería o biblioteca del computador, para sacarlo de allí cuando necesitemos ejecutarlo nuevamente.

10.- DOCUMENTACIÓN EXTERNA

Cuando el programa ya se tiene listo para ejecutar, es conveniente que hagamos su documentación externa siguiendo las normas de la instalación o las recomendaciones indicadas por el profesor. Una buena documentación incluye siempre:

-Enunciado del problema -Diagrama de pasada -Narrativo con la descripción de la solución -Relación de las variables o campos utilizados en el programa, cada uno con su respectiva función -Diagrama del programa -Listado de la última compilación -Resultados de la ejecución del programa.

1.1 REVISION DEL MODELO VON NEWMAN

MODELO DE VON NEWMAN


Jon Von Newman fue un húngaro matemático de origen judío , tuvo que partir a los E.U. por la segunda guerra mundial; en 1945 hizo este modelo en donde en ese entonces empezó la primera generación de la computadora.

. En cuanto a la visión del hadware tenía las características de la primera generación: eran muy grandes, disipan mucho calor , tenia mucho almacenamiento.

. En cuanto al software se programaba por medio de la tablas enchufables.

Realizo este modelo con el fin de tener mejoría en cuanto a la programación.

Por lo cual ya se hacían operaciones de aritmética y lógica. Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

EXPLICACIÓN DEL MODELO:

En el existe una ENTRADA- PROCESO- SALIDA

En el CPU se encuentra la unidad de aritmética y lógica, registros de la máquina y unidad de control.

En la unidad de aritmética y lógica se encarga de hacer las operaciones ( suma , resta, multiplicación y división ). En la unidad de control se coloca un diccionario y tabla de variables.

A partir de este modelo se genero el concepto como :

. PROGRAMA FUENTE

. PROGRAMA OBJETO

. COMPILADOR

. LIGADOR

. CARGADOR

. SISTEMA OPERATIVO

MODELO DE VON NEWMAN:

John Von Newman observo que la torpeza de la aritmética decimal utilizadas en la computadora ENIAC podia remplazarse utilizando la aritmatica binaria.

Realizo un diseño básico llamado la máquina de Von Newman y se utilizo en la computadora EDVAC que fue la primer computadora que almacenaba el programa.

La máquina de Von Newman tenia 5 partes principales y son las siguientes:

LA MEMORIA: Constaba de 4096 palabras cada una de 40 bits.Y cada palabra podia contener 2 instrucciones de 20 bits cada una o un número entero de 39 bits y su signo.

UNIDAD DE CONTROL:Es la que supervisaba la transferencia de información y la indicaba a la unidad aritmetica lógica cual operación debia ejecutar.

UNIDAD DE ARITMATICA LÓGICA: Es aquella que se encarga de realizar las operaciones aritméticas y lógicas necesarias para la ejecución de una instrucción.

ENTRADA:Es cualquier dispositivopor el que se introduce información a la computadora.

SALIDA:Es cualquier dispositivo que recibe información de la máquina para ser utilizadas por el usuario.

Centrándonos en los ordenadores sobre los que vamos a trabajar desarrollaré a grandes rasgos la arquitectura Von Newman que, si bien no es la primera en aparecer, sí que lo hizo prácticamente desde el comienzo de los ordenadores y se sigue desarrollando actualmente. Claro es que está siendo desplazada por otra que permiten una mayor velocidad de proceso, la RISC.

En los primeros tiempos de los ordenadores, con sistemas de numeración decimal, una electrónica sumamente complicada muy susceptible a fallos y un sistema de programación cableado o mediante fichas, Von Newman propuso dos conceptos básicos que revolucionarían la incipiente informática:

a) La utilización del sistema de numeración binario. Simplificaba enormemente los problemas que la implementación electrónica de las operaciones y funciones lógicas planteaban, a la vez proporcionaba una mayor inmunidad a los fallos (electrónica digital).

b) Almacenamiento de la secuencia de instrucciones de que consta el programa en una memoria interna, fácilmente accesible, junto con los datos que referencia. De este forma la velocidad de proceso experimenta un considerable incremento; recordemos que anteriormente una instrucción o un dato estaban codificados en una ficha en el mejor de los casos.

Tomando como modelo las máquinas que aparecieron incorporando las anteriores características, el ordenador se puede considerar compuesto por las siguientes partes:

- La Unidad Central de Proceso, U.C.P., más conocida por sus siglas en inglés (CPU).

- La Memoria Interna, MI.

- Unidad de Entrada y Salida, E/S.

- Memoria masiva Externa, ME.

Realicemos a continuación una descripción de lo que se entiende por cada una de estas partes y cómo están relacionadas entre si:

- La Unidad Central de Proceso (CPU) viene a ser el cerebro del ordenador y tiene por misión efectuar las operaciones aritmético-lógicas y controlar las transferencias de información a realizar.

- La Memoria Interna (MI) contiene el conjunto de instrucciones que ejecuta la CPU en el transcurso de un programa. Es también donde se almacenan temporalmente las variables del mismo, todos los datos que se precisan y todos los resultados que devuelve.

- Unidades de entrada y salida (E/S) o Input/Output (I/O): son las encargadas de la comunicación de la máquina con el exterior, proporcionando al operador una forma de introducir al ordenador tanto los programas como los datos y obtener los resultados.

Como es de suponer, estas tres partes principales de que consta el ordenador deben estar íntimamente conectadas; aparece en este momento el concepto de bus: el bus es un conjunto de líneas que enlazan los distintos componentes del ordenador, por ellas se realiza la transferencia de datos entre todos sus elementos.

Se distinguen tres tipos de bus:

- De control: forman parte de él las líneas que seleccionan desde dónde y hacia dónde va dirigida la información, también las que marcan la secuencia de los pasos a seguir para dicha transferencia.

- De datos: por él, de forma bidireccional, fluyen los datos entre las distintas partes del ordenador.

- De direcciones: como vimos, la memoria está dividida en pequeñas unidades de almacenamiento que contienen las instrucciones del programa y los datos. El bus de direcciones consta de un conjunto de líneas que permite seleccionar de qué posición de la memoria se quiere leer su contenido. También direcciona los puertos de E/S.

UNIDAD 1: INTRODUCCION