Lenguajes de Programación - Departamento de Ciencias e

Anuncio
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Lenguajes de Programación
Introducción – Criterios de evaluación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Organización general del curso
- desde los conceptos a la ejemplificación sobre lenguajes
(enfoque vertical)
- buscar los conceptos sobre lenguajes de programación específicos
(enfoque horizontal)
Ma. Laura Cobo
Conceptos generales
Sintaxis y semántica
Implementación
Universidad Nacional del Sur
Departamento de Ciencias e Ingeniería de la Computación
2016
Principios de diseño
Paradigmas de
programación
Bibliografía
Objetivos generales del curso
• Scott, Michael L. “Programming Languages Pragmatics” 2da.
Edidición. Morgan Kaufmann Publishers 2006
• Sebesta, Robert W. “Concepts of Programming Languages”.
10ma. Edición. Editorial Addison Wesley. 2012
• Ghezzi, Carlo - Jazayeri, Mehdi “Programming Languages Concepts”.
3ra. Edición. Editorial John Wiley and Sons. 1997
Vamos a ir utilizando separatas de diferentes libros para los
diferentes temas
Comparar y contraponer:
• principios teóricos - detalles técnicos
• semántica – sintaxis
•
evolución - historia
Razones para estudiar conceptos de lenguajes
de programación
Razones para lenguajes de programación
o Incrementar la capacidad para expresar ideas.
o Comprender aspectos oscuros de los lenguajes.
o Mejorar la calidad y cantidad de conocimiento previo para la
o Elegir modos alternativos de expresar cosas.
apropiada selección de lenguajes.
o Aumentar la habilidad para aprender nuevos lenguajes.
o Mejor comprensión de la importancia de la implementación.
o Inclusión de los avances en las formas de cómputo.
o Realizar buenos debuggers, ensambladores, linkeadores y
herramientas relacionadas.
o Simular facilidades útiles en un lenguaje que carece de la
misma
o Hacer mejor uso de la tecnología de los lenguajes de
programación a medida que aparecen.
Prof. Ma. Laura Cobo
Página 1
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Lenguajes
Un lenguaje en general, es el medio del que se vale cualquier
individuo para comunicar ideas y experiencias a otros
individuos. Estas ideas y experiencias están “almacenadas” de
alguna manera el individuo emisor y “almacenadas” tal vez
con otra representación en el receptor.
El lenguaje de programación en general tiene la misma idea,
solo que el receptor es una computadora, por ello es una de
las principales herramientas en el proceso de desarrollo del
software.
Introducción a lenguajes de programación
o Originalmente las computadoras eran grandes y costosas, eran
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
El arte de diseñar lenguajes
Hay una gran variedad de lenguajes y continúan apareciendo
nuevos ¿por qué?
• Evolución
• Propósito especial
• Preferencia personal
¿qué convierte a un lenguaje en exitoso?
• Poder expresivo
• Facilidad de uso para novatos (baja curva de aprendizaje)
• Facilidad de implementación
• Código abierto
• Excelentes compiladores
• Inercia, economía, quien lo promueve
Lenguajes
programadas en lenguajes maquina (expresado como números en
hexadecimal)
o A medida que se comenzaron a escribir programas más largos, se
volvió claro que era necesario utilizar un lenguaje menos propenso
a errores (notación con abreviaturas nemotécnicas – lenguaje
ensamblador). La traducción quedó a cargo del ensamblador.
o Con la evolución de las computadoras y el desarrollo de diseños se
volvió frustrante reescribir los programas para cada nueva
máquina. También se volvió humanamente complicado entender
los programas en lenguaje ensamblador.
o Se hizo necesario contar con lenguajes independientes de la
máquina.
Una de las clasificaciones para lenguajes de programación sigue
este esquema:
Lenguajes
Otra Clasificación
4. Cuarta Generación (1970-1990) lenguajes con las sig.
características:
• Estructura y programación de bases de datos
• Diccionario de datos centralizado con información sobre las
componentes del sistema
• Programación visual
• Capacidad de definir interfases para el usuario
• Entorno de programación multifuncional, integrado e interactivo
Ejemplo SQL (Strctured Querry Language)
5. Quinta Generación (1990-actualidad) también llamados
lenguajes de muy alto nivel, tales como los basados en lógica y
matemática. Ej. ML, Miranda
Prof. Ma. Laura Cobo
1. Primera Generación (1951-1957) son esencialmente
lenguajes máquina
2. Segunda Generación (1958-1963) lenguajes de alto nivel,
no estructurados como los lenguajes ensambladores
3. Tercera Generación (1964-1969) lenguajes que incorporan
la moyoría de las habilidades procedurales actuales. Son
ejemplo de esta generación: Pascal, C, Modula2 y Ada
Declarativa:
Funcional
Lisp/Scheme, ML, Haskell
Dataflow (flujo de información) Id, Val
Lógica, basada en restricciones
Prolog, aspectos programables de las hojas de
cálculo (Excel, Lotus, etc.)
Basada en templates
XSLT
Imperativa:
Von Newmann
C, Ada, Fortran, …..
Scripting
Perl, Python, PHP, …..
Orientada a objetos
Smalltalk, Eiffel, C++, Java
Página 2
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Desarrollo de Lenguajes de Programación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Características deseables en el software
De cualquier software se espera, básicamente, que sea:
El lenguaje de programación surge de la vinculación entre las
diferentes metodologías de diseño y las arquitecturas de la
computadoras.
Otro de los factores que terminan teniendo especial relevancia
es el dominio de aplicación pretendido.
Características deseables en el software
Los lenguajes de programación también son software pero al
tener otro tipo de propósito se espera que posea otras
características:
•
•
•
•
•
•
•
confiable
extensible
reusable
robusto
eficiente
flexibilidad
etc.
Readability (facilidad de lectura)
La facilidad para leer e interpretar programas es fundamental.
Características que contribuyen a la legibilidad:
• Simplicidad
Se obtiene en gran medida de combinar un número de pequeño de
constructores primitivos y un uso limitado (ni mucho-ni poco) del concepto
de ortogonalidad.
• Ortogonalidad
Básicamente significa que un conjunto pequeño de constructores
primitivos, puede ser combinado en número relativamente pequeño a la
hora de construir estructuras de control y datos. Cada combinación es legal
y con sentido.
• facilidad de lectura y escritura (legibilidad)
• seguridad
• costo
• Estructuras de control y de datos
Contar con estructuras legibles (sólo uso de goto – agregado del tipo
boolean)
• Consideraciones sobre la sintaxis
Formas de los identificadores – palabras reservadas – forma y significado
(por ejemplo el modificador static de JAVA)
Writability (facilidad de escritura)
La facilidad para crear programas de un dominio. Este criterio
depende del dominio de aplicación del lenguaje.
• Simplicidad y Ortogonalidad
Mucha ortogonalidad genera una menor detección de errores. Si el
lenguaje no es simple solo se aprende y utiliza una pequeña porción de
él.
• Soporte para la abstracción
Capacidad de definir y usar estructuras u operaciones complicadas de
manera que sea posible ignorar muchos de los detalles.
• Expresividad
El lenguaje posee formas relativamente convenientes de expresar
ciertas operaciones, por ejemplo contador++ en lugar de contador =
contador + 1 o el uso del for en lugar del while equivalente.
Prof. Ma. Laura Cobo
Reliability (fiabilidad)
• Chequeo de tipos
Cuanto antes se encuentren errores menos costoso resulta realizar los arreglos
que se requieran.
• Manejo de excepciones
La habilidad para interceptar errores en tiempo de ejecución, tomar medidas
correctivas y continuar.
Costo
• Aprender (a escribir programas cercanos a aplicaciones particulares)
• Usar (entrenar programadores para el uso del lenguaje)
• Compilar
• Ejecutar
• Sistema de implementación del lenguaje (disponibilidad de compiladores gratuitos)
• Confiabilidad (escasa confiabilidad conlleva altos costos)
• Programas de mantenimiento
Página 3
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Criterios de evaluación para lenguajes de programación
Lenguajes de Programación
Evolución de los lenguajes de programación
Ma. Laura Cobo
Universidad Nacional del Sur
Departamento de Ciencias e Ingeniería de la Computación
2016
Extraído de Sebesta, Robert “Cocepts of Programming Languages”
Evolución de los lenguajes de programación
Dominios de programación
o
Factores críticos:
o
o
o
• Conceptos: Abstracción
• Paradigmas
o
Programación de Sistemas – Base de datos
o
o
o
o
o Tipos de datos
o Estructuras de control
o A nivel instrucción
o A nivel unidad
o Encapsulamiento
o Abstracción de datos
o Polimorfismo
Prof. Ma. Laura Cobo
INTEROPERABILIDAD
Colección ecléctica de lenguajes:
o
o Subprogramas
SEGURIDAD
Búsqueda de eficiencia (por uso continuo)
Lenguajes ensambladores o C
o
o Nombres simbólicos
o Expresiones
COMPLEJIDAD
Manipulación de símbolos en lugar de manipulación numérica
Ejemplo: LISP
o Software para la web
Evolución en los conceptos: Abstracción
PORTABILIDAD
Gran producción de reportes, manejos de números decimales y caracteres.
El lenguaje más destacado: COBOL
Inteligencia Artificial
o
o
o
Gran cantidad de cómputos sobre grandes números en punto flotante.
El principal exponente en esta categoría es Fortran
Aplicaciones de negocios
o
o
• Dominios de aplicación
EFICIENCIA
Aplicaciones científicas.
Mark-up languages: XHTML
Scipting: PHP
Proposito general: JAVA
Evolución en los conceptos: Abstracción(2)
Nombres simbólicos
con restricciones
(al principio se utilizaban 0 y 1 en tarjetas perforadas)
Expresiones
más cercanas a la realidad (la expresión se escribe en una
línea, no como una secuencia de instrucciones)
Introducción de los primeros chequeos: que exista la
operación, que los operandos sean accesibles, etc.
Subprogramas
pensados solo como una forma de agrupar código
Página 4
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Evolución en los conceptos: Abstracción
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Estructuras de control
A nivel instrucción: Programación Estructurada
Tipos de datos
los símbolos indexan variables de memoria con semántica,
ya no hay locaciones de memoria anónimas.
Cada celda está asociada a un tipo
Avanza el nivel de confiabilibilidad (chequeo y seguridad)
Solo tipos de datos que proveía el lenguaje.
En la siguiente generación de lenguajes se extendió a tipos
adecuados a diversas áreas de aplicación (definidos por el
usuario)
La siguiente generación brinda pocos tipos primitivos; pero
también más constructores generales combinables entre si
(+ ortogonal)
Estructuras de control
Hasta ahora había secuencia y transferencia de
control (condicional e incondicional) y venían ligadas
a la arquitectura subyacente
La programación estructurada propone utilizar:
1. Secuencia
2. Iteración
3. Condicional
Evolucionan los lenguajes eliminando
la transferencia de control (goto)
En base a las estructuras de control surgen luego la
ejecución simétrica (o concurrente) y manejo de
excepciones
Encapsulamiento
A nivel unidad: Diseño Top-Down
Encapsular
Utilización de subprogramas para partir el problema en
sub-problemas
Para resolver sub-problemas
Funcionalidad de la unidad
Para usarla en macro-problema
Esquemas de relación entre unidades
Jerárquico
Simétrico
Paralelo
Latente
Inicialmente teniendo en cuenta las acciones
Teniendo en cuenta datos
• TDA
• representación adecuada
• conjunto de operaciones
Para que el lenguaje sea bueno en abstracción debe
tener encapsulamiento y mecanismo para crear
instancias
Encapsulamiento sin abstracción = agrupamiento sin
ocultamiento
Ad hoc
Polimorfismo
Coherción
Convierte el tipo del argumento de una función al tipo esperado por
ella (el polimorfismo es aparente)
Sobrecarga
(significó una evolución para algunos y una involución para otros)
Inicialmente solo disponible para identificadores predefinidos.
Es una forma de polimorfismo, mismo operador para variables de distintos
tipos.
universal
Genericidad
un TDA define comportamiento abstracto independientemente del tipo de sus
componentes
Herencia
forma particular de clasificación
balancea la trascendencia de datos y acciones
Evitar sobre especificar, sub especificar y repetir código
Prof. Ma. Laura Cobo
Página 5
Descargar