Lenguajes de Programación - Departamento de Ciencias e

Anuncio
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Lenguajes de Programación
Introducción – Criterios de evaluación
Ma. Laura Cobo
Universidad Nacional del Sur
Departamento de Ciencias e Ingeniería de la Computación
2016
Prof. Ma. Laura Cobo
Página 1
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computació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)
Conceptos generales
Sintaxis y semántica
Implementación
Principios de diseño
Paradigmas de
programación
Prof. Ma. Laura Cobo
Página 2
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Bibliografía
• 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
Prof. Ma. Laura Cobo
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
Objetivos generales del curso
Comparar y contraponer:
• principios teóricos - detalles técnicos
• semántica – sintaxis
•
Prof. Ma. Laura Cobo
evolución - historia
Página 4
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Razones para estudiar conceptos de lenguajes
de programación
o Incrementar la capacidad para expresar ideas.
o Mejorar la calidad y cantidad de conocimiento previo para la
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.
Prof. Ma. Laura Cobo
Página 5
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Razones para lenguajes de programación
o Comprender aspectos oscuros de los lenguajes.
o Elegir modos alternativos de expresar cosas.
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 6
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
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.
Prof. Ma. Laura Cobo
Página 7
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
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
Prof. Ma. Laura Cobo
Página 8
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Introducción a lenguajes de programación
o Originalmente las computadoras eran grandes y costosas, eran
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.
Prof. Ma. Laura Cobo
Página 9
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Lenguajes
Una de las clasificaciones para lenguajes de programación sigue
este esquema:
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
Prof. Ma. Laura Cobo
Página 10
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Lenguajes
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
Página 11
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Otra Clasificación
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
Prof. Ma. Laura Cobo
Página 12
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Desarrollo de Lenguajes de Programación
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.
Prof. Ma. Laura Cobo
Página 13
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Características deseables en el software
De cualquier software se espera, básicamente, que sea:
•
•
•
•
•
•
•
Prof. Ma. Laura Cobo
confiable
extensible
reusable
robusto
eficiente
flexibilidad
etc.
Página 14
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
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:
• facilidad de lectura y escritura (legibilidad)
• seguridad
• costo
Prof. Ma. Laura Cobo
Página 15
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
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.
• 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)
Prof. Ma. Laura Cobo
Página 16
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
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
Página 17
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
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
Prof. Ma. Laura Cobo
Página 18
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
Extraído de Sebesta, Robert “Cocepts of Programming Languages”
Prof. Ma. Laura Cobo
Página 19
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
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
Prof. Ma. Laura Cobo
Página 20
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Evolución de los lenguajes de programación
Factores críticos:
• Dominios de aplicación
• Conceptos: Abstracción
• Paradigmas
Prof. Ma. Laura Cobo
Página 21
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Dominios de programación
o
o
o
o
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
o
EFICIENCIA
Aplicaciones científicas.
COMPLEJIDAD
Manipulación de símbolos en lugar de manipulación numérica
Ejemplo: LISP
Programación de Sistemas – Base de datos
o
o
Búsqueda de eficiencia (por uso continuo)
Lenguajes ensambladores o C
o Software para la web
o
SEGURIDAD
INTEROPERABILIDAD
Colección ecléctica de lenguajes:
o
o
o
Prof. Ma. Laura Cobo
Mark-up languages: XHTML
Scipting: PHP
Proposito general: JAVA
Página 22
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Evolución en los conceptos: Abstracción
o Nombres simbólicos
o Expresiones
o Subprogramas
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
Página 23
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
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
Prof. Ma. Laura Cobo
Página 24
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Evolución en los conceptos: Abstracción
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)
Prof. Ma. Laura Cobo
Página 25
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Estructuras de control
A nivel instrucción: Programación Estructurada
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
Prof. Ma. Laura Cobo
Página 26
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Estructuras de control
A nivel unidad: Diseño Top-Down
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
Prof. Ma. Laura Cobo
Página 27
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
Encapsulamiento
Encapsular
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
Prof. Ma. Laura Cobo
Página 28
Lenguajes de Programación
Departamento de Cs. e Ingeniería de la Computación
Universidad Nacional del Sur
Primer Cuatrimestre de 2016
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
Prof. Ma. Laura Cobo
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
Página 29
Descargar