2. Prof. Eliezer Córdova
¿Porqué estudiar lenguajes de programación?
La pregunta es ¿cuál es la ventaja de estudiar una
variedad de lenguajes diferentes que es poco
probable que uno llegue a utilizar?:
3. Prof. Eliezer Córdova
Mejorar la habilidad para desarrollar algoritmos eficaces.
Mejorar el uso del lenguaje de programación disponible.
Hacer posible una mejor elección del lenguaje de
programación.
Facilitar el diseño de un nuevo lenguaje.
¿Porqué estudiar lenguajes de programación?
4. Prof. Eliezer Córdova
El papel de los lenguajes de programación
Inicialmente los lenguajes se proyectaban para ejecutar
programas con eficiencia. A mediados de los años sesenta la
programación cambia:
Las máquinas son menos costosas y aumentan los costos de
programación.
Surge la necesidad de trasladar programas de unos sistemas a otros.
El mantenimiento del producto consume mayores recursos de
cómputo.
La tarea del lenguaje de alto nivel es la de facilitar el desarrollo de
programas correctos para resolver problemas en alguna área de
aplicación dada.
5. Prof. Eliezer Córdova
El papel de los lenguajes de programación
Los lenguajes de programación evolucionan o dejan de
usarse. Influencias que obligan a la revisión de los
lenguajes:
Capacidad de las computadoras.
Aplicaciones: Los requerimientos de nuevas áreas de aplicación
afectan los diseños de nuevos lenguajes y las revisiones y
ampliaciones de los más antiguos.
Métodos de programación.
Métodos de implementación.
Estudios teóricos.
Estandarización.
6. Prof. Eliezer Córdova
Atributos de un buen lenguaje
Claridad, sencillez y unidad (legibilidad): La sintaxis del lenguaje afecta
la facilidad con la que un programa se puede escribir, por a prueba, y más
tarde entender y modificar.
Ortogonalidad: Capacidad para combinar varias características de un
lenguaje en todas las combinaciones posibles, de manera que todas ellas
tengan significado.
Naturalidad para la aplicación: La sintaxis del programa debe permitir
que la estructura del programa refleje la estructura lógica subyacente.
Apoyo para la abstracción: Una parte importante de la tarea del
programador es proyectar las abstracciones adecuadas para la solución
del problema y luego implementar esas abstracciones empleando las
capacidades más primitivas que provee el lenguaje de programación
mismo.
7. Prof. Eliezer Córdova
Atributos de un buen lenguaje
Facilidad para verificar programas: La sencillez de la estructura
semántica y sintáctica ayuda a simplificar la verificación de programas.
Entorno de programación: Facilita el trabajo con un lenguaje
técnicamente débil en comparación con un lenguaje más fuerte con poco
apoyo externo.
Portabilidad de programas
Costo de uso:
1. Costo de ejecución del programa.
2. Costo de traducción de programas.
3. Costo de creación, prueba y uso de programas.
4. Costo de mantenimiento de los programas: costo total del ciclo de vida.
8. Prof. Eliezer Córdova
Dominios de aplicación
Aplicaciones de los años sesenta. Durante la década de
1960, casi toda la programación se podía dividir en cuatro
modelos básicos de programación:
De procesamiento de negocios (COBOL).
Científicos (FORTRAN).
De sistemas (ALGOL, JOVIAL, etc.): Para construir sistemas
operativos.
De Inteligencia Artificial (LISP).
9. Prof. Eliezer Córdova
Dominios de aplicación
Aplicaciones de los años noventa. La situación actual tiene
más dominios de aplicación:
De procesamiento de negocios (COBOL).
Científicos (FORTRAN 90).
De sistemas: Con el advenimiento de los microprocesadores baratos
que gobiernan automóviles, hornos de microondas, etc., ha
aumentado la necesidad de contar con lenguajes para tiempo real.
10. Prof. Eliezer Córdova
Dominios de aplicación
Aplicaciones de los años noventa. La situación actual tiene
más dominios de aplicación:
Edición: Los sistemas de procesamiento de texto tienen su propia
sintaxis para mandatos de entrada y archivos de salida. El traductor
TEX produce un programa en el lenguaje PostScript de descripción de
páginas. PostScript se puede compilar por medir de un procesador
adecuado. Éste suele ser la impresora láser que se utiliza para
imprimir el documento.
De proceso: Dentro de UNIX, el lenguaje de comandos de usuario se
conoce como shell y a los programas se les llama guiones de shell
(parecidos a los archivos .bat). Estos guiones se pueden invocar
siempre que ocurren ciertas condiciones habilitadoras.
11. Prof. Eliezer Córdova
Estandarización de los lenguajes
Los estándares son en general de dos clases:
1. Estándares patentados (DE PACTO): Son las definiciones
elaboradas por la compañía que desarrollo el lenguaje y que es su
propietaria.
2. Estándares de consenso (DE FACTO): Se trata de documentos
elaborados por organizaciones con base en un acuerdo entre los
participantes pertinentes. Método principal para asegurar la
uniformidad entre varias implementaciones de un lenguaje.
Ejemplo: ANSI, IEEE, ISO, etc.
12. Prof. Eliezer Córdova
Estandarización de los lenguajes
Proceso en el desarrollo de normas: Un grupo decide
que un lenguaje requiere una definición estándar. El
organismo normativo organiza un grupo de trabajo de
voluntarios para desarrollar esa norma. Cuando el grupo de
trabajo llega a un acuerdo sobre su norma, se somete a
votación por parte de un bloque más grande de individuos
interesados. Los desacuerdos se resuelven y se produce el
estándar del lenguaje.
13. Prof. Eliezer Córdova
Uso de estándares en forma eficaz
Es necesario ocuparse de tres cuestiones:
Oportunidad (¿Cuándo estandarizar un lenguaje?): Lo deseable sería
estandarizar un lenguaje lo suficientemente pronto para que exista
suficiente experiencia en el uso del lenguaje, pero no demasiado tarde, para
no alentar muchas implementaciones incompatibles.
Conformidad (¿Qué significa que un programa se adhiere a un estándar y
que un compilador compila un estándar?): Si existe un estándar para un
lenguaje, se suele hablar de conformidad con respecto a ese estándar. Un
programa es conforme si sólo utiliza características definidas en el
estándar. Un compilador conformable es uno que, cuando se le da un
programa conforme, produce un programa ejecutable que genera la salida
correcta.
14. Prof. Eliezer Córdova
Es necesario ocuparse de tres cuestiones:
Obsolescencia (¿Cuándo envejece un estándar y cómo se modifica?): Los
estándares se tienen que revisar cada 5 años y ya sea renovarse o
descartarse. Casi todos los estándares requieren compatibilidad hacia
atrás; El nuevo estándar debe incluir versiones más antiguas del lenguaje.
Esto tiene el problema de que el lenguaje se puede hacer difícil de manejar
a causa de las numerosas construcciones obsoletas.
Una característica es obsolescente si es candidata a ser descartada en la
próxima versión del estándar.
Una característica desaprobada se puede volver obsolescente en el
próximo estándar, por lo cual puede ser descartada después de dos
revisiones.
Uso de estándares en forma eficaz
15. Prof. Eliezer Córdova
Efectos de los entornos sobre los lenguajes
Cuatro clases generales de entornos objetivo cubre
casi todas las aplicaciones de programación:
de procesamiento por lotes,
interactivo,
de sistema empotrado, y
de programación (entorno interactivo).
Cada uno plantea distintos requerimientos sobre los
lenguajes adaptados a esos entornos.
16. Prof. Eliezer Córdova
Entornos de procesamiento por lotes
El más simple entorno operativo se compone sólo de archivos externos
de datos. Un programa toma un cierto conjunto de archivos de datos
como entrada, procesa los datos y produce un conjunto de archivos de
datos de salida. El nombre de procesamiento por lotes viene porque los
datos de entrada se reúnen en “lotes” de archivos y son procesados en
lotes por programas.
Los archivos constituyen la base para casi toda la estructura de E/S.
Un error que termine la ejecución del programa es aceptable aunque costoso.
No es posible la ayuda externa por parte del usuario para manejar o corregir
errores de inmediato.
Carencia de restricciones de regulación de tiempo. No hay recursos para
monitorear o afectar directamente la velocidad de ejecución del programa.
17. Prof. Eliezer Córdova
Entornos interactivos
El programa interactúa durante su ejecución directa con un
usuario en una consola de visualización, enviando
alternativamente salidas hacia ésta y recibiendo entradas
desde el teclado o ratón (procesadores de texto, hojas de
cálculo, juegos, etc.).
Las características de E/S interactivas son diferentes de las
operaciones ordinarias con archivos.
El programa debe ser capaz de gestionar el manejo de errores. La
terminación del programa como respuesta aun error no es
ordinariamente aceptable (a diferencia del procesamiento por lotes).
18. Prof. Eliezer Córdova
Entornos interactivos
El programa interactúa durante su ejecución directa con un
usuario en una consola de visualización, enviando
alternativamente salidas hacia ésta y recibiendo entradas
desde el teclado o ratón (procesadores de texto, hojas de
cálculo, juegos, etc.).
Los programas interactivos deben utilizar con frecuencia algún
concepto de restricciones de tiempo.
El concepto de programa principal suele estar ausente. En su lugar,
el programa se compone de un conjunto de subprogramas y el
usuario introduce el “programa principal como una serie de
comandos en el terminal.
19. Prof. Eliezer Córdova
Entornos de sistemas incrustados (empotrados)
Un sistema de computadora que se usa para controlar parte de un sistema
más grande como una planta industrial, una aeronave, etc., se conoce con
el nombre de sistema de computadora incrustado. El fallo de una aplicación
empotrada puede poner en peligro la vida. La seguridad de funcionamiento
y corrección son atributos principales.
Suelen operar sin un sistema operativo subyacente y sin archivos de entorno y
dispositivos de E/S usuales. El programa debe interactuar directamente con la
máquina.
El manejo de errores tiene gran importancia. Cada programa debe estar
preparado para manejar todos los errores en forma interna, adoptando acciones
apropiadas para recuperarse y continuar. La interrupción del programa no es
aceptable y no hay un usuario en el entorno que pueda proporcionar la
corrección interactiva del error.
20. Prof. Eliezer Córdova
Entornos de sistemas incrustados (empotrados)
Un sistema de computadora que se usa para controlar parte de un sistema
más grande como una planta industrial, una aeronave, etc., se conoce con
el nombre de sistema de computadora incrustado. El fallo de una aplicación
empotrada puede poner en peligro la vida. La seguridad de funcionamiento
y corrección son atributos principales.
Operan en tiempo real, donde la respuesta las entradas debe producirse en
intervalos de tiempo restringidos.
Suele ser un sistema distribuido, compuesto por más de una computadora.
Una vez iniciadas las tareas, se ejecutan por lo común de forma simultánea e
indefinida.
21. Prof. Eliezer Córdova
Entornos de programación
Es el entorno en el cual los programas se crean y se ponen a prueba. Consiste en
un conjunto de herramientas (editor, depurador, verificador, generadores de datos
de prueba, etc.) de apoyo y un lenguaje para invocarlas.
Al compilar por separado cada subprograma el compilador necesita información
de:
La especificación del número, orden y tipo de parámetros.
La declaración de tipo de datos.
La definición de un tipo de datos (para la declaración local de variables).
22. Prof. Eliezer Córdova
Entornos de programación
Un problema común, es encontrar, durante el ensamblado del programa final
completo, que varios subprogramas y otras unidades de programa tienen nombres
(de variables) iguales. Métodos para evitar este problema:
1. Todo nombre compartido debe ser único. Se deben usar convenciones para la
asignación de nombres desde un principio.
2. Definir, en el lenguaje, reglas de ámbito, para ocultar nombre.
3. Los nombres se pueden conocer agregando explícitamente sus definiciones desde una
biblioteca externa (herencia en POO).
23. Prof. Eliezer Córdova
Entornos de programación
Características que ayudan a poner a prueba y depurar programas.
1. Características para rastreo de ejecución.
2. Puntos de interrupción. Cuando se alcanza un punto de interrupción durante la
ejecución del programa, la misma se interrumpe y el control se traslada al programador
en un terminal.
3. Asertos: expresan relaciones que deben cumplirse entre los valores de las variables en
ese punto del programa.
24. Prof. Eliezer Córdova
Marcos de ambiente
Este marco suministra
servicios como un
depósito de datos,
interfaz gráfica de
usuario, seguridad y
servicios de
comunicación.
25. Prof. Eliezer Córdova
Paradigmas de Programación
La clasificación de los lenguajes atendiendo a sus
características intrínsecas conduce a los llamados
paradigmas de programación. Un paradigma de
programación es un modelo de programación que
engloba a ciertos lenguajes que comparten:
Elementos estructurales: ¿con qué se confeccionan los
programas?
Elementos metodológicos: ¿cómo se confecciona un programa?
26. Prof. Eliezer Córdova
Programación Imperativa o Procedural: C
Desarrollado por Ritchie y Thompson en el 72.
Multiuso (inicialmente para sistemas)
Sintaxis compacta
27. Prof. Eliezer Córdova
Programación Imperativa o Procedural: C
Historia
60 Thompson desarrolla en Bell Multics, se crea un
lenguaje llamado B.
70, el proyecto UNIX avanza y el lenguaje B se queda
pequeño, se comienza a desarrollar C
82, C es distribuido con Unix y muy usado en las
universidades. ANSI comienza a desarrollar un
estándar
28. Prof. Eliezer Córdova
Perspectiva del lenguaje C
La programación en C se compone de:
El lenguaje C, con un limitado nº de estructuras de
control. No hay primitivas si no se usan las librerías.
El preprocesador de C (#), estos enunciados no forman
parte del lenguaje C y son preprocesados antes de la
compilación.
29. Prof. Eliezer Córdova
Perspectiva del lenguaje C
La programación en C se compone de:
preprocesados antes de la compilación.
Los supuestos de interfaz C (.h), lor archivos “header”
informan al usuario de las funciones incluidad en una
biblioteca.
Las bibliotecas de C. Archivos obj o lib conteniendo la
implementación de las funciones.
30. Prof. Eliezer Córdova
Objetos de datos
Tipos de datos primitivos
Los nombres de variables no pueden comenzar con dígito.
Sensible a may-min.
Los datos son enteros (char, short, long), enumerados (enum) o
float. Los punteros se declaran con el tipo seguido de ‘*’.
No hay booleanos.
31. Prof. Eliezer Córdova
Objetos de datos
Tipos de datos estructurados
Arrays, comienzan en 0 y se guardan por filas.
Tipos definidos por el usuario. Struct { }.
32. Prof. Eliezer Córdova
Representación de almacenamiento
Los tipos de C emplean básicamente la representación
hardware de sus datos.
Una variable de tipo array es también el puntero al
primer elemento del array que comienza con el índice 0.
Es posible inicializar cualquier variable declarada
estáticamente.
33. Prof. Eliezer Córdova
Evaluación del lenguaje
C es muy potente y popular:
Flexible
Eficiente
Disponible (se distribuye con Unix)
Portatil
Pero C también permite una programación
descuidada y propensa a errores.