LENGUAJES DE
PROGRAMACIÓN
CLASE N°1
Leissi M. Castañeda León
Que veremos hoy?
1.
Razones para estudiar los conceptos de los lenguajes
de programación
2.
Aplicaciones de los lenguajes de programación
3.Criterio de Evaluación de Lenguajes
Influencias en el Diseño de Lenguajes
4.
Influencias en el Diseño de Lenguajes
5.Categorías de Lenguajes
6.
Compensación del diseño de lenguajes
7.Métodos de implementación
1.1 Razones para estudiar
los conceptos de los
1.1 Razones para estudiar los conceptos
de los lenguajes de programación
Incrementar la habilidad para expresar ideas.
Aumentar el background para escoger lenguajes
apropiados.
Incrementar la habilidad para aprender nuevos
Incrementar la habilidad para aprender nuevos
lenguajes
Mejor entendimiento de la importancia de la
implementación
1.2 Aplicaciones de
los lenguajes de
1.2 Aplicaciones de los lenguajes de
programación
Aplicaciones Científicas
Muchos cálculos en punto flotante
FORTRAN
Aplicaciones de Negocio
Producir reportes, uso de números decimales y caracteres
COBOL
COBOL
Inteligencia Artificial
Manipulación de símbolos en lugar de números LISP
Programación de Sistemas
Eficiencia necesaria por el uso contínuo
C
Software Web
1.3 Criterio de
evaluación de
1.3 Criterio de evaluación de Lenguajes
Legibilidad (Readability):
La facilidad en que
los programas pueden ser leídos y entendidos.
Habilidad de escritura (Writability):
La
facilidad en que los lenguajes pueden ser usados
facilidad en que los lenguajes pueden ser usados
para crear programas.
Fiabilidad (Reliability):
Conformidad con las
especificaciones (cumple con sus especificaciones)
Legibilidad (Readability)
Sencillez general
Un conjunto manejable de características y constructores. Pocas características de multiplicidad (medios de hacer la
misma operación).
Mínima sobrecarga de operadores.
Ortogonalidad
Un número relativamente pequeño de constructores primitivos
puede ser combinado en un número relativamente pequeño de alternativas.
Cada posible combinación es legal.
Declaraciones de Control
Tipos de Datos y Estructuras
La presencia de mecanismos adecuados para representar
estructuras de datos.
Consideraciones Sintácticas
Consideraciones Sintácticas
Identificadores de formas: composición flexible.
Palabras especiales y métodos para formar declaraciones
compuestas.
Formas y significados: construcciones autodescriptivas, palabras
Habilidad de Escritura(Writability)
Simplicidad y Ortogonalidad
Pocos constructores, un pequeño número de primitivas, un
pequeño conjunto para combinarlas.
Soporte para la Abstracción
La habilidad para definir y usar estructuras complejas u La habilidad para definir y usar estructuras complejas u
operaciones en maneras que permitan que los detalles sean ignorados.
Expresividad
Un conjunto de maneras relativamente convenientes de
especificar operaciones.
Ejemplo: la inclusión de la declaracion
for
en muchosFiabilidad (Reliability)
Checkeo de Tipos
Testing para los errores de tipos.
Manejo de excepciones
Interceptar errores en tiempo de corrida (run-time) y tomar las
medidas correctivas.
Aliasing
Presencia de dos o más distintos métodos de referencia para la
misma localización de memoria.
Legibilidad y facilidad de escritura
Un lenguaje que no soporta maneras “naturales” de expresar un
Costo
Entrenamiento para los programadores para usar el
lenguaje
Escritura de programas (relativo a aplicaciones
particulares)
Compilación de programas
Compilación de programas
Ejecución de programas
Sistemas de implementación de lenguajes:
disponibilidad de compiladores libres.
Otros
Portabilidad
La facilidad mediante la cual los programas pueden
ser movidos de una implementacion a otra
Generalidad
1.4 Influencias en el
diseño de los
1.4 Influencias en el diseño de los
lenguajes
Arquitectura de computadoras
Los lenguajes son desarrollados en torno a la arquitectura de
computadoras prevalente, conocida como la arquitectura von Neumann.
Metodologías de Programación
Nuevas metodologías de desarrollo de software (ejemplo,
I. Arquitectura de Computadoras
Arquitectura de computadoras bien conocida: Von
Neumann
Lenguajes imperativos, son los mas dominantes, por el
uso de computadoras von Neumann
Los datos y programas son almacenados en memoria. Los datos y programas son almacenados en memoria.
La memoria está separada de la CPU.
Las instrucciones y los datos son llevados de la memoria hacia el
CPU.
Bases para lenguajes imperativos
Las variables son modelos de las celdas de memoria
Declaraciones de asignación son modelos de envío
I. Metodologías de Programación
1950s y 1960s: aplicaciones simples; preocupación
acerca de las deficiencias de la máquina.
Finales 1960s: Eficiencia de la gente viene a ser
importante; legibilidad, mejor control de estructuras
Programación estructurada
Diseño descendente (top-down) y refinamiento paso a paso.
Diseño descendente (top-down) y refinamiento paso a paso.
Finales 1970s: de orientado a procesos a orientado a
datos
Abstracción de datos
Mediandos 1980s: programación orientada a objetos
1.5 Categorías de los lenguajes
Imperativo
Características centrales son las variables, declaraciones de asignación
e iteración.
Ejemplos: C, Pascal
Funcional
La característica principal es realizar cálculos mediante la aplicación de
funciones a parámetros dados.
Ejemplos: LISP, Scheme
Lógico
Lógico
Basado en reglas (las reglas son especificadas en cualquier orden).
Ejemplo: Prolog
Orientado a Objetos
Abstracción de datos, herencia, binding tardío.
Ejemplos : Java, C++
Etiquetas
Nuevos; No son lenguajes de programación de por sí, pero son usados
1.6 Compensación del diseño de lenguajes
Fiabilidad vs. Costo de ejecución
Criterios conflictivos.Ejemplo: Java demanda que todas las referencias a los
elementos de los arrays sean chekeadas para un indexado apropiado pero esto implica un incremento en los costos de ejecución
Legibilidad vs. Habilidad para escritura
Legibilidad vs. Habilidad para escritura
Criterios conflicitivosEjemplo: APL provee muchos operadores muy útiles (y un gran
número de símbolos nuevos), permitiendo escribir cálculos
complejos en un programa compacto pero al costo de una baja legibilidad
Flexibilidad en la habilidad para escritura vs.
Fiabilidad
Criterios conflictivos
1.7 Métodos de Implementación
Compilación
Los programas son traducidos a lenguaje de máquina.
Interpretación Pura
Los programas son interpretados por otros programas conocidos Los programas son interpretados por otros programas conocidos
como intérpretes
Sistemas de implementación Híbridos
Compilación
Traduce los programas de alto nivel (lenguaje fuente) a
código máquina (lenguaje de máquina).
Traducción Lenta, Ejecución rápida.
El proceso de compilación tiene muchas fases:
Análisis Léxico: convierte caracteres en el programa fuente a Análisis Léxico: convierte caracteres en el programa fuente a
unidades léxicas.
Análisis Sintáctico: transforma las unidades léxicas a árboles
Parser los cuales representan la estructura sintáctica del programa.
Análisis Semántico: genera código intermedio.
El Proceso de
Compilación
Algunos ejemplos
Algunos ejemplos
típicos de lenguajes
compilados: Fortran; la
familia de lenguajes
de C, incluyendo C++;
Ada, Pascal
(incluyendo su
Interpretación Pura
No traducción.
Fácil implementación de programas (los errores en
tiempo de ejecución pueden ser fácilmente e
inmediatamente mostrados).
Ejecución Lenta (de 10 a 100 veces más lenta que los
programas compilados).
programas compilados).
Frecuentemente requieren de mayor espacio.
Los programas escritos se suelen llamar “scripts”.
Los lenguajes interpretados mas conocidos en la
Sistemas de Implementación Híbrida
Un compromiso entre los compiladores e intérpretes
puros.
Un programa de un lenguaje de alto nivel es traducido a
lenguaje intermedio que permite una fácil interpretación.
Más rápido que una interpretación pura.
Más rápido que una interpretación pura.
Ejemplos:
Los programas Perl son parcialmente compilados para detectar
errores antes de la interpretación.
Implementaciones iniciales de Java fueron híbridos; la forma
Proceso de la
1.8 Entornos de Programación
La colección de herramientas usadas en desarrollo de
software
UNIX
Un sistema operativo antiguo y una colección de herramientas
Usado hoy en día con una GUI (e.g., CDE, KDE, o GNOME) que
corren sobre UNIX corren sobre UNIX
Borland JBuilder
Un entorno de desarrollo integrado para Java
Microsoft Visual Studio.NET
Un entorno visual complejo y grande
Usado para programar en C#, Visual BASIC.NET, Jscript, J#, or
Resumen
El estudio de los lenguajes de programación es
importante por muchas razones:
Incrementa nuestra capacidad para utilizar diferentes
constructores.
Nos habilita para escoger lenguajes mas inteligentemente. Nos hace aprender nuevos lenguajes mas fácilmente.
Muchos criterios importantes para evaluar lenguajes de
programación incluyen
programación incluyen
Legibilidad (Readability), Habilidad de Escritura (writability),
Fiabilidad (reliability), Costo
Las mayores influencias en el diseño de los lenguajes
han sido la arquitectura de las computadoras y las
metodologías de desarrollo de software.
Los mayores métodos de implementar lenguajes de
Finalmente, podemos decir que …
Un lenguaje de programación es una técnica estándar
de comunicación que permite expresar las instrucciones
que han de ser ejecutadas en una computadora.