Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bibliografa
!!
Seguiremos en general el temario del libro de Sebesta sin embargo el contenido ser enriquecido con lecturas complementarias.
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
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
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
!!
!!
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
Conocimiento de fortalezas y debilidades de un lenguaje en particular: !! Clculos numricos: FORTRAN, C, Ada !! Toma de decisiones: ML, LISP, PROLOG
!!
Comprensin mayor de los lenguajes Entendimiento de los detalles de las tcnicas de ejecucin Diferenciacin de las reas de aplicacin
!!
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
Interfaz de un procesador de texto Interfaz de usuario de un sistema operativo Interfaz de un paquete grfico
A veces el desconocimiento de ciertas cuestiones sobre los lenguajes de programacin influyen en la aceptacin de otros nuevos
!!
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
!!
!!
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
!!
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
!!
!!
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
!! !! !! !!
Poder expresivo: principalmente las facilidades de abstraccin Facilidad de uso para un novato Facilidad de implementacin Compiladores excelentes Economa, espnsor, inercia
!!
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
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
-! -!
-! -! -!
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
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
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
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
!!
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
Facilidades adecuadas para definir tipos de datos y estructuras en un lenguaje es otra manera de aumentar la facilidad de lectura de los programas
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
!!
!!
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
!!
!!
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
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
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
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
Criterios y caractersticas
!!
!!
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
!!
von Newmann: Fortram, Pascal, Basic, C Orientado a Objetos: Smalltalk, C#, C++, Java
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
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
!!
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).
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.