7
Capitulo 1 - Sebesta ================= ¿Que es un lenguaje de programación? Programación : organizar cálculos de manera que nuestros limitados sentidos sean suficientes para garantizar que el computo arroje los resultados esperados. Lenguaje : debe ayudarnos a escribir buenos programas [fácil de leer, entender, y modificar] > Un lenguaje de programación es una notación formal y rigurosa para describir procesos computacionales a otros. 1.1 Razones para estudiar los conceptos de lenguajes de programación : - Incrementan la capacidad para expresar ideas : la complejidad con que expresamos nuestras ideas esta ligada al poder expresivo del lenguaje en el cual nos estamos comunicando. Los programadores también tienen un problema similar durante el desarrollo del software, el lenguaje empleado para el desarrollo del software pone limites en las estructuras de control, de datos y de abstracciones que pueden ser utilizadas, por tanto la forma de los algoritmos que construyen también están limitadas. Si conocemos las características de una variedad de lenguajes de programación podemos reducir estas limitaciones en el desarrollo del SW -> Elegir el correcto. - Mejorara los conocimientos para elegir lenguajes apropiados : muchos de los programadores eligen el lenguaje con el que esta familiarizados, aunque este no sea el adecuado. Si conocemos las fortalezas y debilidades de una variedad de lenguajes podemos escoger el que mejor se adapte a los requerimiento. Ejemplo : Cálculos numéricos : FORTRAN, C, Ada ; Toma de decisiones : ML, PROLOG, LISP. - Incrementa la capacidad para aprender nuevos lenguajes : el diseño de metodologías, herramientas para el desarrollo de SW y los lenguajes de programación esta en constante evolución por lo que es esencial un aprendizaje continuo. El proceso de aprender nuevos lenguajes es difícil, mas para aquellos que creen que conociendo 1 o 2 lenguajes es suficiente y nunca han examinado los conceptos generales de un lenguaje de programación. Si aprendemos los conceptos fundamentales de los lenguajes, entonces aprender nuevos lenguajes se vuelve mas fácil. - Mejor entendimiento del significado de la implementación : en muchos casos, un entendimiento de las cuestiones de la implementación permite entender porque los lenguajes fueron diseñados de esa manera, algunos errores solo pueden ser encontrados y corregidos por un programador que conoce relativamente los detalles de implementación. La compresión de la implementación también permite visualizar como la computadora ejecuta varias construcciones de los lenguajes. Ejemplo : los programadores que no entienden como se realiza la recursividad, con frecuencia no saben que el algoritmo recursivo suele ser menor que el algoritmo iterativo equivalente. - Incrementa la capacidad de diseñar nuevos lenguajes : un examen critico de los lenguajes de programación ayuda a diseñar sistemas complejos. Ejemplo: la mayoría de los sistemas de SW requieren que el usuario interactúe con el sistema recorriendo una lista de menús y comandos. - Avance general de la computación : a veces el desconocimiento de ciertas cuestiones sobre los lenguajes de programación influyen en la aceptación de otros nuevos.

Resumen Capitulo 1 - Sebesta

Embed Size (px)

Citation preview

Page 1: Resumen Capitulo 1 - Sebesta

Capitulo 1 - Sebesta=================

¿Que es un lenguaje de programación?

Programación : organizar cálculos de manera que nuestros limitados sentidos sean suficientes para garantizar que el computo arroje los resultados esperados.

Lenguaje : debe ayudarnos a escribir buenos programas [fácil de leer, entender, y modificar]

> Un lenguaje de programación es una notación formal y rigurosa para describir procesos computacionales a otros.

1.1 Razones para estudiar los conceptos de lenguajes de programación :

- Incrementan la capacidad para expresar ideas : la complejidad con que expresamos nuestras ideas esta ligada al poder expresivo del lenguaje en el cual nos estamos comunicando. Los programadores también tienen un problema similar durante el desarrollo del software, el lenguaje empleado para el desarrollo del software pone limites en las estructuras de control, de datos y de abstracciones que pueden ser utilizadas, por tanto la forma de los algoritmos que construyen también están limitadas. Si conocemos las características de una variedad de lenguajes de programación podemos reducir estas limitaciones en el desarrollo del SW -> Elegir el correcto.

- Mejorara los conocimientos para elegir lenguajes apropiados : muchos de los programadores eligen el lenguaje con el que esta familiarizados, aunque este no sea el adecuado. Si conocemos las fortalezas y debilidades de una variedad de lenguajes podemos escoger el que mejor se adapte a los requerimiento.Ejemplo : Cálculos numéricos : FORTRAN, C, Ada ; Toma de decisiones : ML, PROLOG, LISP.

- Incrementa la capacidad para aprender nuevos lenguajes : el diseño de metodologías, herramientas para el desarrollo de SW y los lenguajes de programación esta en constante evolución por lo que es esencial un aprendizaje continuo. El proceso de aprender nuevos lenguajes es difícil, mas para aquellos que creen que conociendo 1 o 2 lenguajes es suficiente y nunca han examinado los conceptos generales de un lenguaje de programación. Si aprendemos los conceptos fundamentales de los lenguajes, entonces aprender nuevos lenguajes se vuelve mas fácil.

- Mejor entendimiento del significado de la implementación : en muchos casos, un entendimiento de las cuestiones de la implementación permite entender porque los lenguajes fueron diseñados de esa manera, algunos errores solo pueden ser encontrados y corregidos por un programador que conoce relativamente los detalles de implementación. La compresión de la implementación también permite visualizar como la computadora ejecuta varias construcciones de los lenguajes.Ejemplo : los programadores que no entienden como se realiza la recursividad, con frecuencia no saben que el algoritmo recursivo suele ser menor que el algoritmo iterativo equivalente.

- Incrementa la capacidad de diseñar nuevos lenguajes : un examen critico de los lenguajes de programación ayuda a diseñar sistemas complejos.Ejemplo: la mayoría de los sistemas de SW requieren que el usuario interactúe con el sistema recorriendo una lista de menús y comandos.

- Avance general de la computación : a veces el desconocimiento de ciertas cuestiones sobre los lenguajes de programación influyen en la aceptación de otros nuevos.

Page 2: Resumen Capitulo 1 - Sebesta

Importancia del estudio de las estructuras de los lengaujes de programación : Los LP influyen en la manera en que los programadores formulan las soluciones a los problemas.. Los paradigmas poseen estilos de programación muy diferentes e influencian la manera en la cual los programadores ven los algoritmos. Es importante conocer como funcionan los LP.

Metodología de programación:. 50s y comienzos de los 60s aplicaciones simples, la preocupación →eficiencia de la maquina. Fines de los 60s la eficiencia de las personas se vuelve mas importante → legibilidad, mejores estructuras de control Fines de los 70s : abstracción de datos. Mediados de los 80s : programación orientada a objetos.

1.2 Dominios de Programación¿Porque existen tantos lenguajes? 1- Evolución: busqueda continua de hacer mejor las cosas.2- Proposito especial: lenguajes diseñados con un dominio de problema especifico.3- Preferencia personal: la diferencia en las preferencias hace poco probable que exista un lenguaje universalmente aceptado.

1.2.1 Aplicaciones cientificas : la primera computadora (1940) fue creada para aplicaciones cientificas las cuales usan simples estructuras de datos, pero requieren grandes calculos arimentos en punto flotante.Ejemplo : FORTRAN

1.2.2 Aplicaciones de negocio : el uso de ordenadores para aplicaciones de negocio comenzo en 1950, se desarrollaron equipos y lenguajes especiales.Ejemplo: COBOL (1960) [ Hojas de Calculo, Base de Datos ]

1.2.3 Inteligencia Artificial : se caracteriza por el uso de simbolos antes que los calculos numericos, este tipo de programación requiere mas flexibilidad que otros.Ejemplo: LISP (1959), PROLOG

1.2.4 Programación de sistemas: el S.O. y todas las herramientas de programación constituyen el software el cual se utiliza continuamente por lo tanto debe proporcionar una rapida ejecución.Ejemplo: PL/S → para las computadoras mainframe de IBM

BLISS → televisión digital.ALGO → lenguaje ensamblador

AT! Unix esta escrito casi en su totalidad en C (1989) lo que ha hecho que sea relativamente facil de portar o mover a diferentes maquinas.

1.2.5 Lenguajes de guiones (scripting): es un lenguaje de programación para poner una lista de comandos, llamadas o scrip en un archivo para ser ejecutado.Ejemplo: SH(Inteprete de comando), awk(generacion de informes)

PERL es una combinación de SH y awkJavascript: es un LP usado en servidores web y los navegadores.

1.2.6 Lenguajes de proposito general :1.3 Ciretarios de Evalución de un lenguaje: ¿Que hace a un lenguaje exitoso?̣- Poder expresivo → facilidades de abstracción.- Facilidad de uso para un novato- Facilidad de implementación- Compiladores exelentes

Page 3: Resumen Capitulo 1 - Sebesta

- Economia, sponsorNo existe un factor unico que determine que un lenguaje sea bueno, se debe considerar diferentes puntos de vista, tanto del implementador como del programador.

Caracteristica Legibilidad Facilidad de Escritura

Confiabilidad

Sencillez/Ortogonalidad

x x x

Estructuras de Control

x x x

Tipos de datos y Estructuras

x x x

Diseño de Sintaxis x x x

Apoyo a la Abstracción

x x

Expresividad x x

Comprobacion de Tipos

x

Manejo de Excepciones

x

Aliasing restringido x

1.3.1 Legibilidad : la facilidad con la que los programas puede ser leidos y entendidos, debe ser considerada en el contexto del dominio del problema. Las caracteristicas que afectan la legibilidad son :

Simplicidad : un lenguaje con un gran número de componentes basicos es mas dificil de aprender que uno con un pequeño numero de componentes (simplicidad = limitada ortogonalidad) Cuando se utiliza un lenguaje muy grande se tiende a aprender un subconjunto del mismo e ignorar sus demas caracteristicas → problema. Multiplicidad de caracteristicas : tener mas de una manera de realizar una operación [a = a +1 || a++] Sobrecarga de operadores : un solo simbolo tiene mas de un significado. Simplicidad al extremo : asembler → demasiado sencillo → menos legible.

Ortogonalidad: cuando un pequeño conjunto de construcciones primitivas pueden ser combinadas de forma relativamente pequeña para construir las estructuras de datos y de control. Es independiente del contexto donde se ejecuta el programa. Demasiada ortogonalidad →complejidad innecesaria.

+ ortogonalidad = - excepciones para las reglas del lenguaje- excepciones = + regularidad en el diseño

+ regularidad = + facil de leer, entender y aprender

Falta de Ortogonalidad en C Hay 2 tipos de datos estructuradosarrays : nostruct : pueden ser devueltos por funciones Los parametros son pasados por valor, excepto arrays → por referencia Un elemento de un array puede ser cualquier tipo, excepto void o una funcion

Page 4: Resumen Capitulo 1 - Sebesta

Sentencias de Control: un programa que puede ser leido de arriba a abajo es mas facil de entender que un programa que requiere que el lector salte de una sentencia de control a otroa no adyacente a fin de seguir el orden de ejecucion

Tipos de Datos y Estructuras: mientras mas facil y adecuada sea la definicion de datos y estructuras mayor sera la facilidad de lectura del programa.

Consideraciones sintacticas: sintaxis = forma. Forma de los identificadores: si se restringe la longitud de los identificadores se reduce la legibilidad → no se puede utilizar nombres connotativos Palabras especiales: algunos lenguajes permiten que las palabras especiales pueden ser usadas como nombres de variables → ambiguedades → problema. Formas y significados: la apariencia de las construcciones deberian al menos indicar parcialemnte su proposito, pero en algunos casos el siginificado de las palabras depende del contexto en el que aparecenEjemplo : static → fuera de una funcion → solo visible ahi

→ dentro de una funcion → en tiempo de compilacion

1.3.2 Facilidad de Escritura : que tan facilmente un lenguaje puede ser utilizado para crear programas en un dominio especifico. La mayoria de las caracteristicas que afectan la facilidad de escritura:

Simplicidad y Ortogonalidad: un numero pequeño de construcciones primitivas y un conjunto consistente de reglas para combinarlas (ortogonalidad) es mejor que tener un gran numero de primitivas.

AT! demasiada ortogonalidad puede perjudicar la facilidad de escritura, cuando los errores de programacion no pueden ser detectados puesto que practicamente cualquier combinacion de primitivas es legal.

Soporte para la abstraccion:Abstraccion: es la capacidad de definir y utilizar estructuras u operaciones complicadas de forma que muchos detalles son ignorados, los LP soportan dos tipos de abstracciones.:

- Abastraccion de Datos: el lenguaje deberia proporcionar facilidades para acercar la solucion del problema al dominio del problema → TDA (clase)

- Abstraccion de procesos: por ejemplo la utilizacion de un subprograma para implementar un algoritmo→ejemplo: algoritmo de ordenamiento, hago un subprograma y lo llamo cuando lo necesite, no necesito copiar el mismo codigo varias veces.

Expresibilidad: la expresibilidad puede hacer referencia a varias caracteristicas diferentes; el lenguaje posee maneras convenientes de expresar los computos → count++, for..

1.3.3. Confiabilidad: un programa es confiable si se comporta de acuerdo a sus especificaciones bajo todas las condiciones, sus caracteristicas son:Chequeo de tipos: es la verificacion de errores de tipo ya sea al momento de la compilacion o durante la ejecucion de un programa.AT! El chequeo en tiempo de compilación es deseable → cuanto antes se detecten los errores sera menos costosos de reparar

Manejo de excepciones: se refiere a la habilidad de un programa de interceptar errores de tiempo de ejecución, tomar medidas correctivas y continuar.

Aliasing: es cuando se tiene más de una referencia, metodo o nombre para la misma celda de memoria, es una herramienta de doble filo.

Legibilidad y facilidad de escritura: ambos influyen en la confiabilidad, programas que

Page 5: Resumen Capitulo 1 - Sebesta

son dificiles de leer son dificiles tanto para escribir y modificar → mantener.

1.3.4 Costo: el costo final de un lenguaje de programación depende de sus caracteristicas: Costo de entrenamiento de los programadores para el uso del lenguaje depende de la simplicidad y ortogonalidad. Costo de creación del SW: escritura en dicho lenguaje → facilidad de escritura Costo de compilación Costo de ejecución: los compiladores pueden utilizar tecnicas para aumentar o disminuir la velocidad de ejecución del codigo que produce → diseño del lenguaje Costo de implementación Costo para confiabilidad Costo de mantenimiento: corrección y modificaciones para añadir nuevas capacidades

1.3.5 Otros criterios: Portabilidad: es la facilidad con la cual los programas pueden ser movidos de una implementación a otra. Generalidad: capacidad de ser aplicado a un gran número de aplicaciones. Buena definición: la integridad y la posición del documento oficial del lenguaje.

1.4 Influencias en el diseño de un lenguaje:

Arquitectura de las computadoras: la mayor parte de los lenguajes de losultimos 45 años se han diseñado basandose en la arquitectura de Von Neumann → estos lenguajes se denominan lenguajes imperativos.

[Grafico Computadora Von Neumann]

Metodologias de la programación: los problemas cada vez mayores y complejos se resolvian por las computadoras → los costos de HW disminuyeron y los costos de programación aumentaron. Las nuevas metodologias de desarrollo de SW → de arriba hacia abajo diseño y refinamiento paso a paso → fueron resultados de una investigación en desarrollo de SW en 1970, donde fueron descubiertas 2 deficiencas de los LP:

Chequeos de tipos incompleto Sentencias de control inadecuadas

A finales de los 70 → uso de tipos abstracto para resolver problemas. El ultimo paso en la evolución del desarrollo de SW que se inicio a principios de los 80 es el diseñor orientado a objetos, cuyas caracteristicas principales son: TDA, enlace dinamico y herencia → SmallTalk (primer lenguaje orientado a objetos)

1.5 Clasificación de los lenguajes de programacion:

De acuerdo a su modelo de computación

Declarativos: ¿Que hace la computadora? son de mayor nivel → son mas oriantados al punto de vista del programador.

Funcionales: basados en la definición y aplicación recursiva de funciones. Se basa em calculo lambda. Un programa se considera una función de entradas y salidas, definidas en terminos de funciones más simples a través de un proceso de refinamiento.Ejemplo: LISP/Scheme, ML, Haskell.

Logicos o Basados en Restricciones: basados en la logica proposicional, el modelo computacional intenta encontrar valores que satisfagan ciertas relaciones, usando la busqueda de objetivos a partir de una serie de reglas logicas → no hay un orden de ejecución, el sistema lo decide.Ejemplo: Prolog, VisiCalc.

Page 6: Resumen Capitulo 1 - Sebesta

Imperativos: ¿Como lo hace?, predominan por razones de desempeño (el algoritmo es especificado en gran detalle, se define un orden de ejecución).

Von Neumann: el mas común y familiar, el modelo de computación se basa en modificación de variables, basados en sentencias (principalmente de asignación).Ejemplo: Fortran, Pascal, Basic, C

Orientado a Objetos: en vez de ver la computación como la operación de un procesador monolitico, la ve como interacciones entre objetos semi-independientes, cada uno de los cuales tiene su propio estado interno y funciones para manipular el estado.Ejemplo: Smalltalk, C#, C++, Java.

Otros:

De flujo de datos: modelan la computacion como el flujo de informacion (tokens) entre nodos funcionales primitivos, provee un modelo paralelo → los nodos son disparados por el arribo de tokens de entrada y pueden operar de manera concurrente.Ejemplo: Id, Val, Sisal

Concurrentes: SR, lyrix

Lenguajes agregados: lenguajes para trabaar con formatos especiales de datos como:Ejemplo: String →SNOBOL y Icon

arrays →base de datos → SQLmatrices → Mathlab/Octave

1.6 Criterios de diseño de lenguaje que estan en conflicto: Confiabilidad contra costo de ejecución Facilidad de escritura contra facilidad de lectura Flexibilidad contra seguridad

1.6 Métodos de implementación

Compilación: consiste en la traducción de un programa escrito en lenguaje de alto nivel a codigo maquina. El proceso de traducción es lento, pero una vez terminado, la ejecución es muy rapida. Interpretación pura: los programas son interpretados linea por linea por otro programa llamado interprete sin traducción alguna, pero la ejecución es mas lenta que el metodo de compilación, requiere mas espacio y ademas del codigo fuente necesita la «tabla de simbolos»(contiene el tipo y/o atributo de cada nombre definido por el usuario) para la interpretación. Sistemas de implementación hibrida: algunos lenguajes son un arreglo entre compiladores y la interpretación pura, se traduce el programa a un lenguaje intermedio designado para permitir la facil interpretación → bajo costo de traducción y velocidad de ejecución media → mejor que la interpretación pura → las sentencias de codigo son decodificadas solo una vez.

Linker: es una programa que toma todos los objetos generados en los primeros pasos de compilación, la informacion de todos los recursos necesarios (bibliotecas), quita aquellos recursos que no se necesitan y enlaza el codigo objeto su/s biblioteca/s con lo que finalmente produce un fichero ejecutable.

Preprocesador: es un programa que procesa un programa inmediatamente antes que el programa sea compilado, sus instrucciones son insertadas en los programas.

Page 7: Resumen Capitulo 1 - Sebesta

1.8 Entorno de programación: un entorno de programación es una colección de herramientas usadas en el desarrollo del SW. Esta colección puede consistir solo en un archivo de sistema, un editor de textos, un enlazador o un compilador. O puede incluir una gran colección de herramientas integrados que pueden ser accedidos por una uniforme interface de usuario.Ejemplo: Unix : un antiguo S.O. y una coleccion de herramientas →problema → tenia una interfaz comun entra sus herramientas → dificultdad de uso y aprendizaje. Borland C++ : un entorno para C y C++. Microsoft Visual Studio : un entorno de programación para la programación en Windows.