Post on 13-Jun-2015
Técnicas Avanzadas de Programación
Ingeniería en InformáticaCarlos Abaffy
abaffy@gmail.com
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
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
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
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)
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.
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
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)
Conceptos de Lenguajes
Niveles de Lenguajes
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
Conceptos de Lenguajes
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.
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)
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
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.
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
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
Conceptos de Lenguajes
Computador Virtual:
CompiladorFortran
CompiladorC
CompiladorPascal
CompiladorAda Asembler
InterpretadorLisp
HW
LenguajeMáquina
SistemaOperativo
...
InterpreteComandos
SistemaOperativo
ComputadorVirtual Pascal
ComputadorVirtual C
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
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
Conceptos de LenguajesInterpretador Puro:
CódigoFuente
Interpretador
Resultados
DataEntrada
Conceptos de LenguajesSistema Híbrido: Código
Fuente
Interpretador
Resultados
Entrada
AnalizadorLexicográfico
AnalizadorSintáctico
GeneradorCódigo
IntermedioCódigo
Intermedio
ArbolParsing
Tokens
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.
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.
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.
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.