Lenguajes de programación - Conceptos generales

26
Técnicas Avanzadas de Programación Ingeniería en Informática Carlos Abaffy [email protected]

Transcript of Lenguajes de programación - Conceptos generales

Page 1: Lenguajes de programación - Conceptos generales

Técnicas Avanzadas de Programación

Ingeniería en InformáticaCarlos Abaffy

[email protected]

Page 2: Lenguajes de programación - Conceptos generales

Contenido de la Materia

1. Conceptos Generales de LenguajesI. Definición de LenguajesII. HistoriaIII. CaracterísticasIV. Tipos de LenguajesV. Maquinas VirtualesVI. Tipos de Compiladores

2. Programación FuncionalI. Fundamentos de Programación FuncionalII. Lenguaje Scheme

3. CompiladoresI. Sintaxis y SemánticaII. BNFIII. Funcionamiento de un Compilador

Page 3: Lenguajes de programación - Conceptos generales

Contenido de la Materia

4. Programación LógicaI. Fundamentos de Programación LógicaII. Lenguaje Prolog

5. Programación Orientada a ObjetosI. Fundamentos del Modelo de ObjetosII. Lenguaje C++III. Lenguaje JavaIV. Otros lenguajes basados en el modelo de

objetos

Page 4: Lenguajes de programación - Conceptos generales

Bibliografía

1.- Lenguajes de Programación principios y paradigmas - Mc Graw Hill – 2003A.Tucker – R.Noonan

2.- Concepts of Programming Languages – Addison Wesley 1999Robert Sebesta

3.- Programming Languages Design andImplementation – Prentice Hall 1984Terrence W. Pratt

4.- Seven Languages in Seven Weeks – 2010Bruce Tate

5.- Manuales de Los Lenguajes a utilizar disponibles en Internet

Page 5: Lenguajes de programación - Conceptos generales

Herramientas de Software

1.- Programación Funcional - Scheme (Código Abierto)http://www.drscheme.org

2.- Programación Lógica - Prolog (Código Abierto)http://www.swi-prolog.org/

3.- Programación Orientada a Objetos - C++ /Java/Ruby(Código Abierto)

Page 6: Lenguajes de programación - Conceptos generales

Conceptos de Lenguajes

• Cualquier notación para la descripción de algoritmos y estructuras de datos puede llamarse lenguaje de programación, sin embargo, también es requerido que el lenguaje sea implementado en un computador.

Page 7: Lenguajes de programación - Conceptos generales

Conceptos de Lenguajes

Definiciones:

• Medio de Comunicación entre el Hombre y la Máquina.

• Lenguaje usado para dar instrucciones a la máquina . Permite que el programador exprese el procesamiento de datos de una forma simbólica, sin tener en cuenta los detalle específicos de la máquina

Page 8: Lenguajes de programación - Conceptos generales

Conceptos de Lenguajes

Por qué estudiar lenguajes de Programación:

• Terrence Pratt identifica 5 razones:• Para mejorar el conocimiento del lenguaje que se estáusando (Los conceptos se pueden aplicar en cualquier lenguaje)• Para enriquecer el vocabulario de estructuras de programación útiles (El lenguaje sirve como ayuda y restricción al momento de pensar)• Para realizar una mejor selección del lenguaje de Programación (Mayor conocimiento implica una mejor selección)• Para facilitar el aprendizaje de un nuevo lenguaje (Aprendizaje por asociación)• Facilita el diseño de un nuevo lenguaje (Reutilización de conceptos en diferentes campos)

Page 9: Lenguajes de programación - Conceptos generales

Conceptos de Lenguajes

Niveles de Lenguajes

Page 10: Lenguajes de programación - Conceptos generales

Conceptos de Lenguajes

Historia de los Lenguajes de Programación:

• Los primeros lenguajes de programación fueron los lenguajes de código de máquina de las primeras computadores diseñadas en los años cuarenta. • Los primeros lenguajes de ato nivel surgen en 1950 y han evolucionado rápidamente desde su creación.

• La figura siguiente muestra la evolución e influencia que han tenido los lenguajes de programación claves.

• Java se considera un lenguaje interesante debido a que aparece como un lenguaje influenciado por varios paradigmas de programación

Page 11: Lenguajes de programación - Conceptos generales

Conceptos de Lenguajes

Page 12: Lenguajes de programación - Conceptos generales

Conceptos de Lenguajes

Influencias en la evolución de los lenguajes:

• Hardware y Sistemas OperativosHardware más poderoso y sistemas operativos con mayores servicios.

• AplicacionesMayor uso del computador => mayor demanda de lenguajes de programación más eficientes.

• Métodos de Programación e ImplementaciónNuevos métodos => inclusión de nuevas características en los lenguajes

• Estudios TeóricosHan demostrado las fortalezas y debilidades de las características de los lenguajes.

• EstandarizaciónNecesidad de lenguajes estándar que puedan implementados fácilmente en diversas arquitecturas.

Page 13: Lenguajes de programación - Conceptos generales

Conceptos de Lenguajes

Influencias en la evolución de los lenguajes:

•. Métodos de Programación e Implementación

• 1960-1970 Programación Estructurada(eliminación de goto)

• 1970–1980 Enfásis en Datos y No en Procesos(Soporte Abstracción)

• 1980 Software Orientado a Objetos(Orientación a Objetos)

Page 14: Lenguajes de programación - Conceptos generales

Conceptos de Lenguajes

Características de un Buen Lenguaje:

o Claridad y Simplicidad

o Unificación de Conceptos

o Soporte para Abstracción

o Facilidad de Verificación

o Ambiente de programación

o Portabilidad

o Costo de Ejecución

o Costo de Creación, Prueba y Uso

Page 15: Lenguajes de programación - Conceptos generales

Conceptos de LenguajesEstructura y Operación del Computador:

Se identifican 6 componentes principales:

o Data: Archivos, memoria principal, registros, tipos básicos y estructurados

o Operaciones Primitivas: Conjunto de operaciones para manipular data (primitivas aritmeticas, acceso a memoria, etc)

o Secuencias de Control: Mecanismos para controlar secuencias de ejecución (Próxima instrucción a ejecutar)

o Data de Control: Mecanismos para manejo de operandos que cada instrucción de máquina usa.

oAdministración de Almacenamiento: Almacenamiento de data y programas

o Sistema Operativo: Mecanismos de administración y comunicación con el ambiente.

Page 16: Lenguajes de programación - Conceptos generales

Conceptos de Lenguajes

Estructura y Operación del Computador:

Archivos Externos I/O

Memoria principal

Registro DataRegistro Dirección Programa

INTERPRETADOR OPERACIÓNPRIMITIVA 1

OPERACIÓNPRIMITIVA n

UNIDAD CENTRAL DE PROCESAMIENTO - CPU

{Registro AltaVelocidad

{ElementosProcesamientoActivo

Page 17: Lenguajes de programación - Conceptos generales

Conceptos de LenguajesComputador Virtual:

o Computador Corre Código de Máquina.

o Puedo tener diferente hardware para diferentes lenguajes. Ejm. Máquinas Lisp => Alto Costo

o Computador es un conjunto integrado de algoritmos y estructuras de datos que pueden almacenar y ejecutar programas

o Computador Real: Hardware

o Computador Virtual: Simulación Software

Page 18: Lenguajes de programación - Conceptos generales

Conceptos de Lenguajes

Computador Virtual:

CompiladorFortran

CompiladorC

CompiladorPascal

CompiladorAda Asembler

InterpretadorLisp

HW

LenguajeMáquina

SistemaOperativo

...

InterpreteComandos

SistemaOperativo

ComputadorVirtual Pascal

ComputadorVirtual C

Page 19: Lenguajes de programación - Conceptos generales

Conceptos de LenguajesCompilación:

Los lenguajes pueden ser implementados por 3 métodos:

Compilador puro: Los programas son transformados en código de máquina que puede ser ejecutado directamente en el computador. Ejm: C, C++,Pascal, etc.

Interpretador puro: El interpretador actúa como un software de simulación que busca y ejecuta instrucciones de alto nivel en vez de instrucciones de máquina. Ejm: Lisp. Desventaja: Más Lento(10-100 veces).

Sistema Híbrido: El código fuente es transformado en un código intermedio que facilita la interpretación. Ejm; Java

Page 20: Lenguajes de programación - Conceptos generales

Conceptos de LenguajesCompilador Puro: Código

Fuente

AnalizadorLexicográfico

AnalizadorSintáctico

GeneradorCódigo

IntermedioOptimización

GeneradorCódigo

Computador

TablaSímbolos

Resultados

LenguajeMáquina

CódigoIntermedio

ArbolParsing

Tokens

(opcional)

Enlazador(Sistema Operativo)

Data Entrada

Page 21: Lenguajes de programación - Conceptos generales

Conceptos de LenguajesInterpretador Puro:

CódigoFuente

Interpretador

Resultados

DataEntrada

Page 22: Lenguajes de programación - Conceptos generales

Conceptos de LenguajesSistema Híbrido: Código

Fuente

Interpretador

Resultados

Entrada

AnalizadorLexicográfico

AnalizadorSintáctico

GeneradorCódigo

IntermedioCódigo

Intermedio

ArbolParsing

Tokens

Page 23: Lenguajes de programación - Conceptos generales

Conceptos de LenguajesParadigmas de Programación:Los principales paradigmas de programación son:

Lenguajes Imperativos: Consiste en una secuencia de instrucciones y datos almacenados en memoria y de un procesador, el cual es capaz de ejecutar de manera secuencial una serie de operaciones llamadas comandos. Estos lenguajes ofrecen al programador conceptos que se traducen de forma natural al modelo de la máquina.

Ejm. Fortran, Pascal, C, Ada

Problema: Es más cercano a la máquina que al razonamiento humano.

Ventaja: Eficiencia en la ejecución.

Page 24: Lenguajes de programación - Conceptos generales

Conceptos de LenguajesParadigmas de Programación: (continuación)

Lenguajes Funcionales: Basado en el uso de funciones que convierten datos en resultados. Las funciones pueden manipular datos simbólicos y no sólo numéricos. Ejm: Lisp.

Programar en lenguaje funcional significa construir a partir de funciones ya existentes => es importante conocer las funciones existentes ya definidas.

Problema: No son eficientes debido a que son más cercanos al razonamiento humano que al computador.

Ventaja: Son más cercanos al razonamiento humano.

Page 25: Lenguajes de programación - Conceptos generales

Conceptos de LenguajesParadigmas de Programación: (continuación)

Lenguajes lógicos: Se fundamentan en la lógica de 1°orden. Se definen axiomas y reglas para deducir cosas. Estos lenguajes son conocidos como declarativos, Ejm: Prolog.

El trabajo del programador se restringe a la buena descripción del problema en forma de hechos y reglas. A partir de estos hechos se pueden encontrar muchas soluciones dependiendo como se formulen las preguntas.⇒NO ES NECESARIO DEFINIR EL ALGORITMO DE

SOLUCIÓNPero se debe expresar muy bien el conocimiento del problema

Problema: No son eficientes debido a que son más cercanos al razonamiento humano que al computador.

Ventaja: Son más cercanos al razonamiento humano.

Page 26: Lenguajes de programación - Conceptos generales

Conceptos de LenguajesParadigmas de Programación: (continuación)

Lenguajes Orientados a Objetos: Introducen una nueva abstracción de datos a los lenguajes procedimentales (Objetos, Herencia, polimorfismo).

Los objetos facilitan la construcción de programas, ya que manejan abstracciones del mundo real, aumentan la modularización y la reutilización. Ejm: C++, Java.

Problema: Excesivo manejo de memoria dinámica y una carga fuerte de código causada por la invocación de métodos.

Ventaja: Facilitan el desarrollo de programas.