You are on page 1of 4

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.

AR
Fac. Cs. Exactas (UNICEN) Hoja 1

Introducción a la Arquitectura de Sistemas – Apunte Paradigmas de la


Programación

Un lenguaje de programación es una notación formal para describir


algoritmos que serán ejecutados en una computadora. Posee reglas a nivel
simbólico bien definidas. Cada lenguaje tiene una determinada sintaxis que debe
ser respetada para que el algoritmo pueda implementarse. A este conjunto de
ideas que indica una forma de programar se lo conoce como Paradigma de la
Programción. A través de los paradigmas se pueden diferenciar los lenguajes por
la forma de trabajo que presentan al programador, ofreciendo diversas formas de
"ver" y "pensar" un programa antes de escribirlo.

Dentro de los tipos de lenguajes podemos diferenciar:

de Alto Nivel: Se utiliza un lenguaje coloquial (el inglés) para facilitar el


trabajo del programador. Estos lenguajes son faciles de escribir y entender pero
tiene una desventaja, se necesita un traductor para que el microprocesador los
entienda. Ejemplos de lenguajes de alto nivel: Pascal, C++, etc...
de Bajo Nivel: Estos lenguajes son más complicados de escribir y entender
ya que se debe saber sobre la estructura del CPU, su programación es la menos
portable de una plataforma a la otra, es decir, no mantiene su funcionamiento
estable si se producen modificaciones en los recursos de la máquina (hadware,
Sistema Operativo, etc...). Por otro lado, es más rápido y ocupa menos memoria.
Ejemplos de lenguajes de bajo nivel: Código máquina, lenguaje ensamblador.

Dentro de los paradigmas de la programación encontramos dos tipos:

Imperativos: Se trata de una forma antigua en la que el programador "da


órdenes" que la computadora debe cumplir.

Programación Orientada a Flujo: se refiere al modo en que el


programador codifica, es decir, linealmente y sin realizar saltos. Esto implica la
necesidad de repetir código ya que no se hacen llamados a sentencias anteriores.
El lenguaje que más respeta este paradigma es BASIC.
Debido a las desventajas que presentaban (in-escalable, propenso a
cometer errores al programar, poca legibilidad) surge una nueva programación.
Programación Procedural o Estructurada: el código se encuentra
organizado en bloques indivisibles por lo que se hace más sencilla la lectura del
programa. Se produce un principio de encapsulamiento: dejan de utilizarse las
variables globales , se elimina el goto. Se pueden controlar las variables locales a
partir del alcance y la visibilidad de las mismas. Es decir, se sabe cuanto tiempo
dura la variable y desde donde la puedo acceder. Los lenguajes que más respetan
este paradigma son: Pascal y C, aunque hay sentencias, como el brake, return y
loop que rompen con este.

Declarativos: El programador especifíca el problema y la máquina lo


resuelve. Enuncia el resultado y no importa como se llegue a él.
Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR
Fac. Cs. Exactas (UNICEN) Hoja 2

Programación Funcional: En un lenguaje funcional todo sistema


puede ser descrito como una serie de listas o expresiones funcionales utilizadas
para combinar valores básicos y obtener los resultados deseados. El lenguaje más
conocido es el LISP.

Ejemplo de programación en LISP:

(Declarar _ función Promedio ( A B ) ( / ( + A B ) 2 )

Programación lógica: Se basa en hechos y reglas. Un lenguaje lógico


conocido es PROLOG. Realiza un calculo predictivo para obtener los resultados.

Ejemplo de programación en PROLOG:

Padre(Pedro, Juan)
Padre(Juan, Pablo)

Abuelo(x, y) si Padre (x, z)


Padre (z, y)

El programa consiste en decir si existe una relación “abuelo” entre los


elementos de un conjunto dado.

Paradigmas de Objetos:
Programación orientada a objetos: Surge a partir de los paradigmas
imperativos y declarativos. Consiste en un conjunto de datos y métodos que se
utilizan para acceder a esos datos. Apto para problemas que incluyen otros
problemas (problemas muy extensos y complejos). Las características más
importantes de esta forma de programación son:
Herencia: Permite la programación diferencial, es decir, a partir
de un objeto ya definido, se programa otro que lo completa. Por ejemplo, se puede
controlar una cuenta corriente y una caja de ahorros a partir de un objeto más
general como sería una cuenta bancaria.
Polimorfismo: Habilidad de llamar de la misma forma a dos
métodos o procedimientos diferentes. El programa decide qué método utilizar a
partir de los parámetros que recibe.
Ejemplo de lenguaje basado en la programación orientada a objetos:
Java, el cual nace a partir de C++ y Smalltalk.

Procesos de cambio de un lenguaje de alto nivel a un lenguaje de bajo nivel:


Los programas en lenguaje de alto nivel deben ser traducidos a código ejecutable.
Para ello hay dos formas:
Compilación: Compila todo el programa de una vez, generando código
Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR
Fac. Cs. Exactas (UNICEN) Hoja 3

objeto. Este código es casi ejecutable, solo le falta vincularse con las librerías
externas al programa . Es un lenguaje rígido ya que cualquier modificación en el
programa implica realizar una nueva compilación.
Interpretación: Lee y compila línea por línea en el orden de ejecución y luego
la ejecuta. Es un lenguaje más flexible ya que si modifico el programa, el binario
se genera inmediatamente; convierte cada proposición del programa fuente en
lenguaje de máquina conforme vaya siendo necesario durante el proceso de los
datos. No se graba el código objeto para utilizarlo posteriormente. Esto se debe a
que el análisis, traducción y ejecución están ligados, al contrario de un programa
compilado donde la ejecución es independiente. Por ejemplo: durante el
procesamiento repetitivo de los pasos de un ciclo, cada instrucción del ciclo
tendrá que volver a ser interpretada cada vez que se ejecute el ciclo, lo cual hace
que el programa sea más lento en tiempo de ejecución (porque se va revisando el
código en ese tiempo) pero más rápido en tiempo de diseño (porque no se tiene
que estar compilando a cada momento el código completo).
El interprete elimina la necesidad de realizar una compilación después de
cada modificación del programa cuando se quiere agregar funciones o corregir
errores; pero es obvio que un programa objeto compilado con antelación deberá
ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso
durante una ejecución.

Los lenguajes de programación se caracterizan por poseer varios niveles:


Léxico: Símbolos que se pueden usar (operadores, constante, instrucciones
e identificadores)
Sintáctico: Construcciones válidas.
Semántico: Significado de las construcciones.

Pasos de Compilación: Filtros y Tuberías...

En el análisis se crea una representación intermedia del programa fuente.


Comprueba que el programa sea correcto. Es la más compleja ya que requiere de
técnicas específicas.
Al realizar el análisis léxico, se buscan los símbolos y se los clasifican.
Detecta primitivas (if, then, else, etc...) y variables. Este análisis comprueba que
los símbolos usados sean propios del lenguaje almacenándolos en una tabla de
símbolos (contiene un registro por símbolo). Esta tabla permite encontrar el
registro de cada identificador y almacenar o consultar datos de ese registro.
Analiza el símbolo, identifica el tipo y luego lo almacena en la tabla de símbolos.
Si encuentra un caracter no válido, genera un error léxico
Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR
Fac. Cs. Exactas (UNICEN) Hoja 4

Cuando se realiza el análisis sintáctico, antes de generar el código, se crea


un Árbol de Sintaxis de la estructura del programa para simplificarlo, si el árbol
no se puede generar se indica el error, es decir, a partir del árbol generado, el
compilador verifica que las sentencias estén bien escritas.
Ejemplo de árbol sintáctico para el siguiente código:

if A < 3 then
x=2
else
x=4

El árbol quedaría así:

También se realiza un análisis semántico que comprueba que las


construcciones tengan significados coherentes, es decir, comprueba que las
expresiones sean de tipos compatibles. Lo hace empleando la verificación de
tipos.

El optimizador es un algoritmo que analiza el árbol de sintaxis e intenta


mejorarlo de modo que resulte un código máquina más rápido de ejecutar y que
ocupe menos espacio. El generador de código realiza sobre todo el programa una
traducción al lenguaje ensamblador a partir del árbol. Luego el ensamblador lleva
el programa que el compilador creo en lenguaje Assembler a lenguaje máquina
(binario).
Por último se realiza la vinculación (estática o dinámica). Se une cada
variable con el lugar de memoria correspondiente. Utiliza dll's (librerías de enlace
dinámico). A partir del ejecutable y las librerías se termina el proceso de
vinculación.

You might also like