Programación

40
INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS

Transcript of Programación

Page 1: Programación

INTRODUCCIÓN A LA PROGRAMACIÓN DE SISTEMAS

Page 2: Programación

¿QUE ES? Un sistema es un conjunto de componentes que

interaccionan entre si para lograr un objetivo común. Las personas se comunican con el lenguaje, que es un sistema muy desarrollado formado por palabras y símbolos que tienen significado para el que habla y para quienes lo escuchan, lo mismo es para las computadoras las cuales tienen sistemas y se comunican por medio de computadoras.

La programación es el proceso de convertir las

especificaciones a grandes rasgos de los sistemas en instrucciones de maquina que produzcan los resultados deseados.

Page 3: Programación

¿QUE ESTUDIA? Áreas específicas: Sistemas digitales para arquitecturas

paralelas y control de procesos y sistemas reconfigurables.

Inteligencia artificial aplicada a trabajo cooperativo

Sistemas para arquitecturas paralelas y distribuidas

Diseño de sistemas operativos para arquitecturas paralelas y sistemas distribuidos, herramientas para programación paralela y distribuida.

Sistemas de tiempo real

Diseño y programación de sistemas grandes

Page 4: Programación

Herramientas Desarrolladas Con Teoría De Programación De SistemasLas herramientas de programación, son aquellas

que permiten realizar aplicaciones, programas, rutinas, utilitarios y sistemas para que la parte física de la computadora, funcione y pueda producir resultados.

Las herramientas de programación más comunes del mercado, cuentan hoy dia con programas de depuración o debugger, que son utilitarios que nos permiten detectar los posibles errores en tiempo de ejecución o corrida de rutinas y programas.

Page 5: Programación

Muchas herramientas de software que manipulan programas fuente realizan primero algún tipo de análisis. Algunos ejemplos de tales herramientas son:

1. Editores de estructuras: Un editor de estructuras toma como entrada una secuencia de órdenes para construir un programa fuente.

2. Impresoras estéticas: Una impresora estética analiza un programa y lo imprime de forma que la estructura del programa resulte claramente visible.

3. Verificadores estáticos: Un verificador estático lee un programa, lo analiza e intenta descubrir errores potenciales sin ejecutar el programa.

Page 6: Programación

4. Intérpretes: En lugar de producir un programa objeto como resultado de una traducción, un intérprete realiza las operaciones que implica el programa fuente.

5. Compiladores: Tradicionalmente, se concibe un compilador como un programa que traduce un programa fuente, como FORTRAN, al lenguaje ensamblador o de máquina de alguna computadora.

Page 7: Programación

Lenguajes

Se llama lenguaje a cualquier tipo de código semiótico estructurado, para el que existe un contexto de uso y ciertos principios combinatorios formales. Existen muchos contextos tanto naturales como artificiales donde aparecen lenguajes.

Page 8: Programación

Lenguajes NaturalesEste tipo de lenguaje es el que nos permite el

designar las cosas actuales y razonar a cerca de ellas, fue desarrollado y organizado a partir de la experiencia humana y puede ser utilizado para analizar situaciones altamente complejas y razonar muy sutilmente.

Un LN puede ser modelado fácilmente por un lenguaje formal, similar a los utilizados en las matemáticas y la lógica.

Page 9: Programación

Otra propiedad de los lenguajes naturales es la polisemantica, es decir la posibilidad de que una palabra en una oración tenga diversos significados.

En un primer resumen, los lenguajes naturales se caracterizan por las siguientes propiedades:

Desarrollados por enriquecimiento progresivo antes de cualquier intento de formación de una teoría.

La importancia de su carácter expresivo debido grandemente a la riqueza del componente semántico

Page 10: Programación

Lenguajes Artificiales (Formales)En la actualidad nos encontramos con distintos

lenguajes para para programar y también los campos de aplicación son variados y completamente distintos.

De acuerdo a la complejidad del problema a resolver sera necesario hacer una selección adecuada del lenguaje de programación (incluso se puede generar el lenguaje de programación propio) que permita resolver de manera eficiente el problema

Page 11: Programación

Hasta hace pocos años, el software de desarrollo se basaba fundamentalmente en Lenguajes Artificiales (Basic, C, Cobol, Pascal…) para “explicar” a la computadora las acciones a realizar. Por el contrario, los “Orientados a Objetos” permiten que el programador ignore el lenguaje comprensible para la máquina poniendo a su disposición una serie de objetos preprogramados. De este modo la tarea se simplifica enormemente y se reduce a disponer, dentro de la ventana de programa y en la secuencia adecuada, los programas y funciones de los que nos provee.

Page 12: Programación

1.3.3 Proceso De La Comunicación

Page 13: Programación

Proceso De La ComunicaciónLa comunicación es un fenómeno inherente

a la relación grupal de los seres vivos por medio del cual éstos obtienen información acerca de su entorno y de otros entornos y son capaces de compartirla haciendo partícipes a otros de esa información. La comunicación es de suma importancia para la supervivencia de especies gregarias, pues la información que ésta extrae de su medio ambiente y su facultad de transmitir mensajes serán claves para sacar ventaja del modo de vida gregario.

Page 14: Programación

Proceso de transmisión de información de un emisor (A) a un receptor (B) a través de un medio ©. En la transmisión y la recepción de esa información se utiliza un código específico que debe ser “codificado”, por el emisor y “decodificado” por el receptor”.

Page 15: Programación

Elementos del Proceso de la comunicación

Fuente: Es el lugar de donde emana la información, los datos, el contenido que se enviará, en conclusión: de donde nace el mensaje primario.

Emisor o codificador: Es el punto (persona, organización…) que elige y selecciona los signos adecuados para transmitir su mensaje; es decir, los codifica para poder llevarlo de manera entendible al receptor. En el emisor se inicia el proceso comunicativo.

Page 16: Programación

Receptor o decodificador: Es el punto (persona, organización…) al que se destina el mensaje, realiza un proceso inverso al del emisor ya que en él está el descifrar e interpretar lo que el emisor quiere dar a conocer.

Código: Es el conjunto de reglas propias de

cada sistema de signos y símbolos que el emisor utilizará para trasmitir su mensaje, para combinarlos de manera arbitraria porque tiene que estar de una manera adecuada para que el receptor pueda captarlo.

Page 17: Programación

Mensaje: Es el contenido de la información (contenido enviado): el conjunto de ideas, sentimientos, acontecimientos expresados por el emisor y que desea trasmitir al receptor para que sean captados de la manera que desea el emisor. El mensaje es la información.

Canal: Es el medio a través del cual se transmite la información-comunicación, estableciendo una conexión entre el emisor y el receptor.

Referente: Realidad que es percibida gracias al mensaje. Comprende todo aquello que es descrito por el mensaje.

Page 18: Programación

Situación: Es el tiempo y el lugar en que se realiza el acto comunicativo.

Interferencia o barrera: Cualquier perturbación que sufre la señal en el proceso comunicativo, se puede dar en cualquiera de sus elementos.

Retroalimentación o realimentación

(mensaje de retorno): Es la condición necesaria para la interactividad del proceso comunicativo, siempre y cuando se reciba una respuesta (actitud, conducta…) sea deseada o no.

Page 19: Programación

1.4 Traductor y Su Estructura

Page 20: Programación

1.4 Traductor y Su Estructura

Traductor: En un sentido orientado hacia la computación, un traductor, de manera general, es un software que toma como entrada un programa escrito en un código llamado fuente y genera como salida otro programa en un código llamado objeto.

Su estructura podria ser expresada de la siguiente manera:

código fuente traductor código objeto

Page 21: Programación

Algunos ejemplos de traductores son los compiladores (toma como entrada código en alto nivel y genera como salida código en bajo nivel), los interpretes (toma como entrada código en alto nivel y genera como salida un código intermedio), los preprocesadores (toma como entrada código en alto nivel y genera como salida código en alto nivel) y el ensamblador (toma como entrada código en ensamblador y genera como salida código en bajo nivel).

Page 22: Programación

Intérpretes o Traductores

Page 23: Programación

Definición. Un intérprete es un programa que ejecuta un programa escrito en un determinado lenguaje examinando y ejecutando cada sentencia del programa una a una, por separado y sin realizar un proceso de compilación previo.

El intérprete NO traduce la sentencia a código máquina antes de ejecutarla. En su lugar, identifica el tipo de sentencia y la ejecuta directamente. El código para ejecutar la sentencia está contenido dentro del intérprete que contendrá rutinas para: evaluar una expresión, almacenar información en memoria, recuperar datos de memoria, etc.

Page 24: Programación

El intérprete contendrá el número de rutinas necesarias para poder ejecutar cualquier sentencia del lenguaje que está interpretando.

Ejemplo: C := A + B 1. El intérprete lee la sentencia y determina

que es una asignación. 2. Llamará a una de sus rutinas para evaluar

la expresión a la derecha de la asignación. 3. Esta rutina toma los símbolos A y B,

determina donde están almacenados, obtiene sus valores actuales y los suma.

Page 25: Programación

Compilación e InterpretaciónAdemás de elegir entre compilar o

interpretar un programa, otra opción es combinar ambos procesos de traducción. En este caso, se realiza una compilación “parcial” a un código intermedio que es seguida de un proceso de interpretación. Uno de los lenguajes más utilizados hoy en día, sobre todo para el desarrollo de aplicaciones para la Web, que sigue esta propuesta es el lenguaje Java.

Page 26: Programación

En el lenguaje Java el código primero se compila con el compilador de Java javac. Este compilador genera un código virtual llamado Byte Code. Este código es luego interpretado por una Máquina Virtual de Java (o JVM de Java Virtual Machine) que debe estar instalada y ejecutándose en la máquina en la que se desee ejecutar el código compilado con javac.

Page 27: Programación

Algunas de las ventajas de compilar frente a interpretar son:Se compila una vez; se ejecuta muchas veces La ejecución del programa objeto es mucho más rápida que

si se interpreta el programa fuente. El compilador tiene una visión global del programa, por lo

que la información de mensajes de error es más detallada. Por otro lado, algunas de las ventajas de interpretar frente a

compilar son: Un intérprete necesita menos memoria que un compilador. Permiten una mayor interactividad con el código en tiempo

de desarrollo.

Page 28: Programación

1.4.1 Lenguajes EnsambladoresEl término ensamblador (del inglés assembler) se

refiere a un tipo de programa informático que se encarga de traducir un programa o archivo fuente escrito en un lenguaje ensamblador, a programa o archivo objeto que contiene código máquina, ejecutable directamente por la máquina para la que se ha generado. El propósito para el que se crearon este tipo de aplicaciones es la de facilitar la escritura de programas, ya que escribir directamente en código binario, que es el único código entendible por la computadora, es en la práctica imposible

Page 29: Programación

FuncionamientoEl programa lee el programa escrito en

lenguaje ensamblador y sustituye cada uno de los códigos técnicos que aparecen por su código de operación correspondiente en sistema binario.

Page 30: Programación

Tipos de ensambladores

Ensambladores básicos. Son de muy bajo nivel, y su tarea consiste básicamente en ofrecer nombres simbólicos a las distintas instrucciones, parámetros y cosas tales como los modos de direccionamiento. Además, reconoce una serie de directivas (o meta instrucciones) que indican ciertos parámetros de funcionamiento del ensamblador.

Page 31: Programación

Ensambladores modulares, o macro ensambladores. Descendientes de los ensambladores básicos, fueron muy populares en las décadas de los 50 y los 60, antes de la generalización de los lenguajes de alto nivel. Hacen todo lo que puede hacer un ensamblador, y además proporcionan una serie de directivas para definir e invocar macroinstrucciones (o simplemente, macros).

Page 32: Programación

Ensambladores modulares 32-bits o de alto nivel. Son ensambladores que aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits, muchos de ellos teniendo compatibilidad hacia atrás pudiendo trabajar con programas con estructuras de 16 bits. Además de realizar la misma tarea que los anteriores, permitiendo también el uso de macros, permiten utilizar estructuras de programación más complejas propias de los lenguajes de alto nivel.

Page 33: Programación

Lenguajes CompiladoresUn 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. Este proceso de traducción se conoce como compilación.

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.

Page 34: Programación

Partes de un compilador Normalmente los compiladores están divididos en dos

partes:

Front End: es la parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar.

Back End: es la parte que genera el código máquina, específico de una plataforma, a partir de los resultados de la fase de análisis, realizada por el Front End.

Page 35: Programación

Esta división permite que el mismo Back End se utilice para generar el código máquina de varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código fuente de un lenguaje de programación concreto sirva para la generación de código máquina en varias plataformas distintas.

El código que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker).

Page 36: Programación

Tipos de compiladores

Compiladores cruzados: generan código para un sistema distinto del que están funcionando.

Compiladores optimizadores: realizan cambios en

el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.

Compiladores de una sola pasada: generan el

código máquina a partir de una única lectura del código fuente.

Page 37: Programación

Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.

Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan.

Page 38: Programación

Lenguajes Interpretes

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

Se trata de traductores-ejecutores ya que con cada instrucción realizan un proceso triple de lectura-traducción-ejecución. Son relativamente lentos, pero muy buenos para la depuración de programas.

Page 39: Programación

Lenguajes Generadores De Codigo Para Compiladores

Estas herramientas trabajan basadas en un conjunto de reglas; estas reglas definen la traducción de las instrucciones del lenguaje intermedio al lenguaje de máquina.

Para la generación de código, se busca en las reglas establecidas la proposición que coincida con la entrada actual; la entrada actual proviene de un árbol. Un ejemplo de esto seria

Page 40: Programación

Entonces el compilador recibe una entrada de caracteres, por lo general escrita por el programador; el compilador realiza los análisis: léxico, sintáctico y semántico, para generar seguidamente el código intermedio, el código intermedio se genera con principios de búsqueda de patrones y aplicación de reglas. Después se hace la optimización del código intermedio; seguidamente se realiza la generación de código