Anda di halaman 1dari 54

Estructura de los lenguajes

Bibliografa
!!

Seguiremos en general el temario del libro de Sebesta sin embargo el contenido ser enriquecido con lecturas complementarias.

Introduccin a los Lenguajes de Programacin

Qu es programar?
La programacin es el arte de decirle a otro humano que es lo que se desea que haga una computadora Donald Knuth

Programacin y lenguajes de programacin


El arte de la programacin es el arte de organizar la complejidad, debemos organizar los clculos de manera que nuestros limitados sentidos sean suficientes para garantizar que el cmputo arroje los resultados esperados. El lenguaje debe ayudarnos a escribir buenos programas; un programa es bueno si es fcil de leer, fcil de entender y fcil de modificar
Ravi Sethi, Lenguajes de Progamacin

Qu es un lenguaje de programacin?
La programacin es el arte de decirle a otro humano que es lo que se desea que haga una computadora Donald Knuth Un lenguaje de programacin es una notacin formal y rigurosa para describir procesos computacionales a otros Horowitz

Captulo 1
!!

!! !! !! !! !! !! !!

Razones para estudiar conceptos de Lenguajes de programacin Dominios de programacin Criterios de evaluacin de lenguajes Influencias en el diseo de lenguajes Categoras de lenguajes Trade-Offs (compromisos) en el diseo de lenguajes Mtodos de implementacin Entornos de programacin

Porqu estudiar Lenguajes de Programacin?

Razones para estudiar las estructuras de los lenguajes de programacin


1.! 2.! 3.! 4.! 5.! 6.!

Incrementar la capacidad de expresar ideas Mejorar el conocimiento para elegir lenguajes apropiados Incrementar la habilidad para aprender nuevos lenguajes Mejor entendimiento del significado de la implementacin Incrementar la capacidad de disear nuevos lenguajes Avance general de la computacin

Incrementar la capacidad de expresar ideas


!!

!!

!!

Para las personas es difcil conceptualizar estructuras que no pueden describir verbalmente o de forma escrita El LP pone lmites en las estructuras de control, de datos y abstracciones que el programador puede usar, por tanto las formas de los algoritmos que construyen estn tambin limitadas Conocer las caractersticas de una variedad de lenguajes puede reducir esta limitacin en el desarrollo de software

Mejorar el conocimiento para elegir lenguajes apropiados


!!

Conocimiento de fortalezas y debilidades de un lenguaje en particular: !! Clculos numricos: FORTRAN, C, Ada !! Toma de decisiones: ML, LISP, PROLOG

Incrementar la habilidad para aprender nuevos lenguajes


!! !!

!!

Comprensin mayor de los lenguajes Entendimiento de los detalles de las tcnicas de ejecucin Diferenciacin de las reas de aplicacin

Mejor entendimiento del significado de la implementacin


!!

!!

En el aprendizaje de un lenguaje de programacin es tanto interesante como necesario entender como los detalles de la implementacin afectan a las caractersticas del lenguaje Cierto tipo de problemas pueden ser solucionados cuando se tiene un conocimiento sobre los detalles de la implementacin

Incrementar la capacidad de disear nuevos lenguajes


!!

Estudiando construcciones y mtodos de implementacin de lenguajes:


!! !! !!

Interfaz de un procesador de texto Interfaz de usuario de un sistema operativo Interfaz de un paquete grfico

Avance general de la computacin


!!

A veces el desconocimiento de ciertas cuestiones sobre los lenguajes de programacin influyen en la aceptacin de otros nuevos

Relacin con otras reas


!!

!!

reas usuales de estudio: lenguajes de programacin, compiladores, arquitectura de computadoras, sistemas operativos, bases de datos, ingeniera de software, computacin grfica Muchas cosas interesantes ocurren en los lmites:
!! !! !! !!

!!

RISC arquitectura de comp. y compiladores Microkernels kernel y las libreras de tiempo de ejecucin Java compilador y libreras de tiempo de ejecucin Sistemas de memoria sistemas operativos, hardware, compiladores Diseo de lenguajes cuestiones de implementacin

Importancia del estudio de las estructuras de los lenguajes de programacin


!!

!!

!!

Los lenguajes de programacin tienen una fuerte influencia en la manera en la cual los programadores formulan las soluciones a los problemas Los paradigma poseen estilos de programacin muy diferentes, e influencian la manera en la cual los programadores ven los algoritmos Conocimiento del cmo funcionan los lenguajes de programacin

Influencias en el diseo de lenguajes


!!

!!

Arquitectura de computacin: nosotros utilizamos lenguajes imperativos, al menos en parte debido a que utilizamos mquinas de von Neumann Metodologas de programacin:
!!

!!

!! !!

50s y comienzos de los 60s: aplicaciones simples, preocupacin con relacin a la eficiencia de mquina; Fines de los 60s: La eficiencia de las personas se vuelve visiblemente ms importante; legibilidad, mejores estructuras de control Fines de los 70s: Abstraccin de datos Mediados de los 80s: Programacin orientada a objetos

Dominios de programacin

Porqu existen tantos lenguajes?


!!

!!

!!

Evolucin: bsqueda continua de hacer mejor las cosas Propsito especial: lenguajes diseados con un dominio de problemas especifico Preferencia personal: la diferencia en las preferencias hace poco probable que exista un lenguaje universalmente aceptado

Dominios de programacin
!! !! !! !! !! !! !!

Aplicaciones cientficas Aplicaciones de negocio Inteligencia artificial Programacin de sistemas Lenguajes de guiones (Scripting languages) Lenguajes de propsito general Lenguajes para Web

Criterios de evaluacin de lenguajes de programacin

Qu hace a un lenguaje exitoso?


!!

!! !! !! !!

Poder expresivo: principalmente las facilidades de abstraccin Facilidad de uso para un novato Facilidad de implementacin Compiladores excelentes Economa, espnsor, inercia

Qu hace a un lenguaje exitoso?


!!

!!

No existe un factor nico que determine que un lenguaje sea bueno Se deben considerar diferentes puntos de vista, tanto del implementador como del programador

Criterios de evaluacin de los lenguajes segn Sebesta


1.! 2.! 3.! 4.! 5.!

Legibilidad ( Readability ) Facilidad de escritura ( Writability ) Confiabilidad Costo Otros: portabilidad, generalidad, buena definicin

Legibilidad
La facilidad con la que los programas pueden ser ledos y entendidos -! Simplicidad general
-! -!

Es malo el poseer demasiadas/muy pocas caractersticas Es mala la multiplicidad de caractersticas Facilidad de leer y aprender El significado es independiente del contexto

-!

Ortogonalidad
-! -!

-! -! -!

Sentencias de control Estructuras y tipos de datos Consideraciones de sintaxis

Factores que afectan la legibilidad

Simplicidad general
!!

!!

!!

!!

!!

Un lenguaje con un gran nmero de componentes bsicos es ms difcil de aprender que uno con un nmero pequeo de componentes bsicos Patrn de aprendizaje: cuando se utiliza un lenguaje muy grande se tiende a aprender un subconjunto del mismo e ignorar el resto Multiplicidad de caractersticas: tener ms de una manera de realizar una operacin Sobrecarga de operadores: un solo smbolo tiene ms de un significados Simplicidad al extremo: asembler

Factores que afectan la legibilidad

Ortogonalidad
!!

!!

Ortogonalidad se debera tener un conjunto relativamente pequeo de construcciones, entendibles de manera independiente y libres de interacciones cuando se combinan. Ejemplo: los punteros deberan apuntar a cualquier tipo de variable o estructura de datos. La falta de ortogonalidad lleva a excepciones de la regla

Factores que afectan la legibilidad

Ortogonalidad
!!

!!

!! !!

La ortogonalidad est relacionada con la simplicidad: + ortogonalidad = - excepciones para las reglas del lenguaje - excepciones = + regularidad en el diseo + regularidad = lenguaje ms fcil de aprender, leer y entender

Factores que afectan la legibilidad

Ortogonalidad
Ejemplo, en C Existen dos tipos de tipos de datos estructurados: arrays y structs, los primeros no pueden ser valores devueltos por las funciones pero los segundos si Un miembro de una estructura puede ser de cualquier tipo excepto void o una estructura del mismo tipo Un elemento de un array puede ser de cualquier tipo excepto void o una funcin Los parmetros son pasados por valor excepto si son arrays en cuyo caso se pasan por referencia
!!

Factores que afectan la legibilidad

Sentencias de control
!!

Un programa que puede ser ledo de arriba a abajo es ms fcil de entender que un programa que requiere que el lector salte de una sentencia a otra no adyacente a fin de seguir el orden de ejecucin

Factores que afectan la legibilidad

Tipos de datos y estructuras


!!

Facilidades adecuadas para definir tipos de datos y estructuras en un lenguaje es otra manera de aumentar la facilidad de lectura de los programas

Factores que afectan la legibilidad

Consideraciones de sintaxis
!! !!

!! !!

La forma de los elementos del lenguaje tiene fuerte efecto en la legibilidad de los programas Forma de los identificadores: longitud de los identificadores Palabras especiales: maneras de construir sentencias anidadas, grupos de sentencias. Forma y significado: la apariencia de las construcciones deberan al menos indicar parcialmente su propsito

Facilidad de escritura
Que tan fcilmente un lenguaje puede ser utilizado para crear programas en un dominio especfico !! La mayora de las caractersticas que afectan la facilidad de lectura afectan tambin la facilidad de escritura !! Se deben evaluar los lenguajes en el contexto de la aplicacin para la cual fueron desarrollados Factores:
!! !! !!

Simplicidad y ortogonalidad Soporte para la abstraccin Expresividad

Factores que afectan la escritura

Simplicidad y ortogonalidad
!!

!!

Un nmero pequeo de construcciones primitivas y un conjunto consistente de reglas para combinarlas (ortogonalidad) es mejor que tener un gran nmero de primitivas Demasiada ortogonalidad puede ir tambin en detrimento de la facilidad de la escritura, cuando los errores de la programacin no pueden ser detectados puesto que prcticamente cualquier combinacin de primitivas es legal

Factores que afectan la escritura

Soporte para la abstraccin


!!

!!

!!

Abstraccin es la capacidad de definir y utilizar estructuras complicadas u operaciones de forma tal que los detalles pueden ser ignorados Abstraccin de procesos: ejemplo utilizacin de un subprograma para implementar un algoritmo Abstraccin de datos: el lenguaje debera proporcionar facilidades para acercar la solucin del problema al dominio del problema

Factores que afectan la escritura

Expresividad
!!

!!

Operadores muy poderosos que permiten la realizacin de grandes cmputos con programas relativamente pequeos El lenguaje posee maneras convenientes de expresar los cmputos

Confiabilidad
Un programa es confiable si se comporta de acuerdo a sus especificaciones bajo todas las condiciones. Qu caractersticas soportan los lenguajes para proveer confiabilidad a los programas. Factores
Chequeo de tipos Manejo de excepciones Aliasing Legibilidad y facilidad de escritura

Factores que afectan la confiabilidad

Chequeo de tipos
!!

!!

El chequeo de tipos es la verificacin de errores de tipo ya sea al momento de la compilacin o durante la ejecucin de un programa El chequeo en tiempo de compilacin es deseable: cuanto antes se detecten los errores sern menos costosos de reparar

Factores que afectan la escritura

Otros

Manejo de excepciones !! El manejo de excepciones se refiere a la habilidad de un programa de interceptar errores de tiempo de ejecucin, tomar medidas correctivas y luego continuar Aliasing !! Es tener ms de una referencia, mtodo o nombre para la misma celda de memoria

Costo
Categoras:
Entrenamiento de los programadores Creacin de software Compilacin Ejecucin Costo del compilador Pobre legibilidad -> Mantenimiento

5. Otras: portabilidad, generalidad, buena definicin

Criterios y caractersticas

El espectro de los lenguajes de programacin

Clasificacin de los lenguajes de programacin


!!

Los lenguajes de programacin pueden clasificarse en familias de acuerdo a su modelo de computacin:


!! !!

Declarativos: qu hace la computadora Imperativos: cmo lo hace

!!

!!

Los lenguajes declarativos pueden considerarse de mayor nivel, estn ms orientados al punto de vista del programador Los lenguajes imperativos predominan por razones de desempeo

Clasificacin de los lenguajes de programacin


!!

Declarativos: qu hace la computadora


Funcionales: Lisp/Scheme, ML, Haskell !! Lgicos o basados en restricciones: Prolog, VisiCalc
!!

!!

Imperativos: cmo lo hace


!! !!

von Newmann: Fortram, Pascal, Basic, C Orientado a Objetos: Smalltalk, C#, C++, Java

Subclases de los lenguajes de programacin


von Neumann (Ada, Pascal, C):
!! !! !!

Por lejos el ms comn y familiar El modelo de computacin se basa en la modificacin de variables Basados en sentencias (principalmente asignacin) que influencian los computos subsecuentes Basados en la definicin y aplicacin recursiva de funciones Toman su inspiracin del calculo lambda (Church, 1930) Un programa se considera una funcin de entradas a salidas, definidas en terminos de funciones ms simples a travs de un proceso de refinamiento

Funcionales (Lisp, Haskel)


!! !! !!

Subclases de los lenguajes de programacin


Orientados a objetos (Samalltalk, C++, Java, C#):
!!

Raices en Simula67, estn relacionados con el modelo de von Neumann pero con un modelo ms estructurado de memoria y computacin En vez de ver a la computacin como la operacin de un procesador monoltico, los OOL la ve como interacciones entre objetos semi-independientes cada uno de los cuales tiene su propio estado interno y funciones para manipular el estado

!!

Paradigmas de programacin
Lenguajes Lgicos o Basados en restricciones (Prolog, Gdel):
!! !!

Toman su inspiracin de la lgica proposicional El modelo computacional intenta encontrar valores que satisfacen ciertas relaciones, usando la bsqueda de objetivos a partir de una serie de reglas lgicas Modelan la computacin como el flujo de informacin (tokens) entre nodos funcionales primitivos. Proveen un modelo inherentemente paralelo: los nodos son disparados por el arribo de tokens de entrada, y pueden operar de manera concurrente

Lenguajes de flujo de datos (Id, Val, Sisal):


!!

!!

Otros paradigmas de programacin


Lenguajes de programacin concurrente (SR, Lynx). Lenguajes Agregados:
!!

Incluyen lenguajes para trabajar con formatos especiales de datos tales como: strings (SNOBOL y Icon), arrays (APL), bases de datos (SQL) , formulas matemticas (Mathematica y Maple) , matrices (Mathlab/Octave).

Compromisos en el diseo de lenguajes


1. Confiabilidad contra costo de ejecucin 2. Facilidad de escritura contra facilidad de lectura 3. Flexibilidad contra seguridad

Mtodos de implementacin

Mtodos de implementacin
1. Compilacin - Traduccin de un programa escrito en lenguaje de alto nivel a cdigo mquina - Traduccin lenta - Ejecucin rpida 2. Interpretacin pura - Sin traduccin - Ejecucin lenta - Cada vez ms rara 3. Sistemas de implementacin hbrida - Bajo costo de traduccin - Velocidad de ejecucin media

Entornos de programacin
La coleccin de herramientas utilizadas en el desarrollo de software 1. UNIX - Un antiguo sistema operativo y coleccin de herramientas 2. Borland C++ - Un entorno para C y C++ 3. Microsoft Visual Studio - Un entorno de programacin para la programacin en Windows

Actividad Grupal

!!

Presentar para la prxima clase un trabajo monogrfico de no ms de 5 pginas donde se resuma el captulo 1 del Libro de Sebesta.