Instituto Tecnol - PowerPoint PPT Presentation

1 / 333
About This Presentation
Title:

Instituto Tecnol

Description:

Instituto Tecnol gico de Culiac n Maestria en Ciencias Computacionales Lenguajes de Programaci n Mar a Luc a Barr n Estrada, PhD mlbe2000_at_hotmail.com – PowerPoint PPT presentation

Number of Views:85
Avg rating:3.0/5.0
Slides: 334
Provided by: MariaLuci1
Category:

less

Transcript and Presenter's Notes

Title: Instituto Tecnol


1
Instituto Tecnológico de CuliacánMaestria en
Ciencias ComputacionalesLenguajes de
Programación
  • María Lucía Barrón Estrada, PhD
  •  mlbe2000_at_hotmail.com
  • mbarron_at_fit.edu

2
Programa del curso
  • Capítulo 1. Introducción.
  • Capítulo 2. Evolución de los Lenguajes de
    Programación.
  • Capítulo 3. Sintaxis y semántica.
  • Capítulo 4. Nombres, Uniones, chequeo de tipos y
    alcances.
  • Capítulo 5. Tipos de Datos.
  • Capítulo 6. Expresiones y Estatutos de
    asignación.
  • Capítulo 7. Estructuras de control a nivel de
    estatutos.
  • Capítulo 8. Subprogramas.
  • Capítulo 9.Tipos de Datos abstractos y
    encapsulamiento.
  • Capítulo 10.Programación orientada a objetos.
  • Capítulo 11. Programación Funcional.

3
Programa del Curso
  • Capítulo 1. Introducción
  • 1.1.    Razones para estudiar LP
  • 1.2.    Dominios de la programación
  • 1.3.     Criterios para evaluación de los LP
  • 1.4.     Métodos de implementación de LP
  • Capítulo 2. Evolución de los Lenguajes de
    programación
  • 2.1.    Los primeros lenguajes
  • 2.2.    Fortran
  • 2.3.    LISP
  • 2.4.    ALGOL
  • 2.5.    COBOL
  • 2.6.    BASIC
  • 2.7.    SIMULA
  • 2.8.    Prolog
  • 2.9.    Ada
  • 2.10.  C
  • 2.11.  Java
  • 2.12.  Otros

4
  • Capítulo 3. Sintaxis y semántica
  • 3.1.    Problemas describiendo la sintaxis de los
    lenguajes
  • 3.2.    Métodos formales para describir la
    sinatxis
  • 3.3.    Semántica dinamica
  •  
  •  
  • Capítulo 4. Nombres, Uniones, Chequeo de Tipos y
    Alcances.
  • 4.1.     Introducción
  • 4.2.     Nombres
  • 4.3.     Variables
  • 4.4.     Uniones
  • 4.5.     Chequeo de tipos
  • 46.     Alcances
  •  

5
  •  Capítulo 5. Tipos de Datos
  • 5.1.    Primitivo
  • 5.2.    Definidos por el usuario
  • 5.3.    Arreglos
  • 5.4.    Registros
  • 5.5.    Referencias (apuntadores)
  •  
  • Capítulo 6. Expresiones y Estatutos de asignación
  • 6.6.    Expresiones aritmeticas
  • 6.7.    Sobrecarga de operadores
  • 6.8.    Conversiones de tipos
  • 6.9.    Expresiones booleanas y relacionales
  • 6.10.  Evaluación Short-Circuit
  • 6.11.  Asignaciones

6
  • Capítulo 7. Estructuras de control a nivel de
    estatutos
  • 7.1.    Estatutos de Selección
  • 7.2.    Estatutos de iteración
  • 7.3.    Saltos
  •  
  • Capítulo 8. Subprogramas
  • 8.1.    Introducción
  • 8.2.    Medios ambientes de referencia
  • 8.3.    Métodos para pase de parámetros
  • 8.4.    Sobrecarga de subprogramas
  • 8.5.    Subprogramas genericos
  •  

7
  • Capítulo 9.Tipos de Datos abstractos y
    encapsulamiento
  • 9.1.    Concepto de Abstracción
  • 9.2.    Abstracción de datos
  • 9.3.    Abstracción de tipos de datos (ADT)
  • 9.4.    ADT parametrizados
  • 9.5.    Encapsulamiento
  •  
  • Capítulo 10. Programación orientada a objetos
  • 10.1.  Elementos básicos de la OOP
  • 10.2.  Modula-3
  • 10.3.  C
  • 10.4.  Java
  • 10.5.  C
  • 10.6.  MOOL
  • 10.7.  Implementación
  •  
  • Capítulo 11. Programación Funcional
  • 11.1.  Introducción y fundamentos
  • 11.2.  LISP

8
Bibliografia
  • Concepts of Programming Languages
  • Robert W. Sebesta
  • Addison Wesley
  •  
  • Types in Programming Languages
  • Benjamin Pierce
  • The MIT Press, Cambridge, Massachusetts, 2002.
  •  
  • Foundations of Object-Oriented Languages Types
    and Semantics.
  • Kim Bruce
  • MIT-Press 2002.
  •  
  • A Theory of Objects.
  • Martin Abadi and Luca Cardelli.
  • Monographs in Computer Science, Springer-Verlag
    New York, 1996.

9
  • ML Primer
  • Ryan Stansifer
  •  
  • MOOL an OOL with modules and generics
  • María Lucía Barrón Estrada  
  • The JavaTM Programming Language.
  • Ken Arnold and James Gosling.
  • Addison Wesley. 1998.
  •  
  • Standard ECMA-334. C Language Specification
    Online http//www.ecma.ch December 2001.

10
Capitulo 1. Introducción
  • Razones para estudiar LP
  • Dominios de la programación
  • Criterios para evaluación de los LP
  • Métodos de implementación de LP

11
Razones para estudiar LP
  • Incrementa la capacidad de expresar ideas.
  • Ayuda a seleccionar el lenguaje mas apropiado
    para cierta aplicación.
  • Incrementa la habilidad de aprender nuevos
    lenguajes.
  • Mejora el entendimiento de el significado de la
    implementación.
  • Avance general de la Computación

12
Dominios de la programación
  • Cuales son las áreas de aplicación de las
    computadoras?
  • Aplicaciones científicas.
  • Aplicaciones de negocios
  • Inteligencia artificial
  • Programación de sistemas (software del sistema)
  • Lenguajes para libretos (scripting)
  • Aplicaciones especiales

13
Criterios para evaluar LP
  • Cuales son los conceptos que deben ser evaluados
    para determinar el impacto de los lenguajes en el
    proceso de desarrollo de software?
  • Facilidad de leer programas
  • Facilidad de escribir programas
  • Confiabilidad
  • Costos

14
Facilidad de leer los programas(Readability)
  • Simplicidad del lenguaje
  • Ortogonalidad
  • Estatutos de Control
  • Estructuras y tipos de datos
  • Sintaxis

15
Facilidad de escribir programas(Writability)
  • Simplicidad y ortogonalidad
  • Soporte para la abstracción
  • Expresividad

16
Confiabilidad(Reliability)
  • Chequeo de tipos
  • Manejo de excepciones
  • Control de alias
  • Legibilidad y escritura

17
Costos
  • Capacitación de programadores (simplicidad y
    otogonalidad)
  • Costo de escribir programas en el lenguaje
    (escritura y area de aplicación del lenguaje)
  • Costo de compilación.
  • Costo de ejecución de programas (incrementar
    velocidad de ejecución y/o decrementar tamaño)
  • Costo de implementación (precio de compiladores)
  • Costo de confiabilidad
  • Costo de mantenimiento (legibilidad)

18
Criterios para evaluación de los LP
19
Métodos de implementación de LP
  • Compilación
  • Interpretación
  • Sistemas híbridos

20
Compilación
21
Interpretación Pura
Programa Fuente
Datos de entrada
Interprete
Resultados
22
Sistemas Híbridos
Programa Fuente
Datos de entrada
Interprete
Generador de Código Intermedio
Analizador Lexico
Analizador Sintáctico
Resultados
23
Capítulo 2. Evolución de los Lenguajes de
programación
  • 2.1.     Los primeros lenguajes
  • 2.2.     Fortran
  • 2.3.     LISP
  • 2.4.     ALGOL
  • 2.5.     COBOL
  • 2.6.     BASIC
  • 2.7.     SIMULA
  • 2.8.     Prolog
  • 2.9.     Ada
  • 2.10.   C
  • 2.11.   Java
  • 2.12.   Otros

24
Evolución de los Lenguajes de Programación
  • Abstracción
  • Conceptualización sin referirse a instancias
    específicas. El acto de determinar las
    propiedades fundamentales sin asociarlas a
    detalles específicos.
  • Notación
  • Representación formal de elementos.
  • Es importante la notación?
  • Multiplicación con números Romanos
  • Exponentes

25
2.1. Los primeros lenguajes
  • Que es un Lenguaje de Programación?
  • Notación para describir algoritmos y estructuras
    de datos además del significado de las frases.
  • Implementación
  • Influencias en la evolución de los Lenguajes de
    Programación
  • Evolución del hardware y los sistemas operativos
  • Nuevas aplicaciones en diferentes ámbitos
  • Métodos de programación paradigmas y
    metodologías
  • Métodos de implementación - eficiencia
  • Estudios teóricos demostraciones matemáticas
  • Estandarización - portabilidad

26
2.1. Los primeros lenguajes
  • Konrad Zuse Científico alemán
  • Constructor de computadoras 1936-1945
  • 1943 Propuesta para su disertación doctoral el
    desarrollo de un lenguaje de programación llamado
    Plankalkül (program calculus)
  • 1945 manuscrito describiendo el lenguaje,
    publicado en 1972.
  • Características del lenguaje
  • Manejo de estructuras de datos
  • Datos numéricos
  • Arreglos
  • Registros
  • Recursión
  • expresiones parecidas a aserciones de Eiffel

Ejemplo A5 A4 1 A 1 gt A v 4
5 s 1.n 1.n
27
Fortran
  • Noviembre 1954 John Backus (IBM) presenta el
    primer reporte The IBM Mathematical FORmula
    TRANslation System Fortran
  • Tan eficiente como el código ensamblador
  • Tan fácil de programar como los pseudocódigos
  • Elimina errores y depuración (poco chequeo de
    sintaxis)
  • Enero 1955 inicia la implementación del primer
    LAN con compilador para la IBM 704
  • Caracteristicas del medio ambiente para la
    definición de Fortran
  • Computadoras lentas, poca memoria, poco
    confiables
  • Aplicaciones científicas
  • No métodos eficientes de programación
  • Mas costoso el uso de la computadora que los
    programadores

28
Fortran I.
  • Compilador en abril 1957 (18 años-trabajador)
  • Input/Output
  • Nombres de variables hasta de 6 caracteres
  • I,J,K,L,M y N implicitamente enteras otras
    reales
  • Subrutinas definidas por el usuario
  • Estatuto If aritmético
  • If (expresión aritmetica) N1, N2, N3
  • Estatuto Do
  • Do N1 variable first_value, last_value
  • Restricción en el tamaño de programas (300-400
    lineas)

29
  • Fortran II
  • Compilación independiente de subrutinas
  • Fortran IV
  • Declaración explícita de tipos de datos
  • Estatuto If lógico
  • Subrutinas como parámetros
  • Fortran 77
  • Manejo de cadenas de caracteres
  • Estatutos para ciclos lógicos
  • Parte Else en el estatuto If
  • Fortran 90
  • Funciones para arreglos
  • Almacenamiento dinámico
  • Registros (derived types)
  • Apuntadores (referencias)
  • Estatuto Case
  • Recursión
  • Módulos
  • Identificadores y palabras clave inician con
    mayúscula

30

Ejemplo
Program Example ! Fortran 95 example
program Implicit none Integer
Int_List(99) Integer List_Len, Counter, Sum,
Average, Result Result 0 Sum 0 Read ,
List_len If ((List_Len gt 0) .AND. (List_Len
lt100)) Then Do Counter1 List_Len Read
,Int_List(Counter) Sum Sum
Int_List(Counter) End Do Average Sum /
List_len Do Counter1, List_Len If
(Int_List(Counter) gt Average) Then
Result Result 1 End If End Do
Print , Number of Values gt average is ,
Result Else Print , Error list length
value is not legal End If End Program Example
31
2.3. LISP (LISt Processor)
  • John McCarthy propone una lista de requerimientos
    para un LP en 1958 en el Information Research
    Department de IBM
  • LISP es un lenguaje funcional donde todas las
    operaciones se describen aplicando funciones a
    los argumentos
  • Contiene solamente átomos (símbolos,
    identificadores, literales) y listas (delimitadas
    por parentesis)
  • Interpretado con el ciclo lee-evalua-imprime

32
ATOMS LISTS a ( )
john (a) 34 (a john 34
c3po) c3po ((john 34) a ((c3po)))
gt( 2 13 45) 60
gt(cons 1 nil) (1) gt(cons 1 (cons 2 nil)) (1
2)
gt(length '(1 2 3)) 3
(DEFUN equal_lists (list1 list2) (COND
((ATOM list1) (EQ list1 list2)) ((ATOM
list2) NIL) ((equal_lists (CAR list1) (CAR
lsit2)) (equal_lists (CDR lsit1) (CDR
list2))) (T NIL) ) )
gt(setq words (cons 'this (rest words))) (THIS
LIST OF WORDS) gt(setf (first words) 'the) THE
gtwords (THE LIST OF WORDS) gt(setf (third words)
'is) IS gtwords (THE LIST IS WORDS)
33
2.4. ALGOL (ALGOrithmic Language)
  • Diseñado por un grupo de investigadores
    especificamente para aplicaciones científicas en
    1958
  • Características
  • Estructuras de datos
  • Estructura de bloque para alcances de variables
  • Pase de parámetros (por valor, por nombre)
  • Recursión
  • Palabras reservadas
  • Arreglos dinámicos y
  • Tipos de datos definidos por el usuario

34
Ejemplos
// the main program (this is a comment) BEGIN
FILE F (KINDREMOTE) EBCDIC ARRAY E 011
REPLACE E BY "HELLO WORLD!" WHILE TRUE
DO BEGIN WRITE (F, , E) END
END.
// the main program (this is a comment) begin
integer N Read Int(N) begin
real array Data1N real sum, avg
integer i sum0 for i1 step 1 until
N do begin real val
Read Real(val) Dataiif vallt0
then -val else val end for i1
step 1 until N do sumsum Datai
avgsum/N Print Real(avg) end
end
35
2.5.  COBOL (Common Business Oriented Language )
  • Propuesta de Grace Hopper en UNIVAC (1955)
  • programas matemáticos deben ser escritos en
    notación matemática, programas para procesar
    datos deben ser escritos en instrucciones en
    Inglés
  • Características propuestas para el diseño (1959)
  • El lenguaje debe ser fácil de usar
  • Usar Inglés tanto como sea posible
  • El diseño no debe ser restringido por problemas
    de implementación
  • Características del lenguaje
  • Definición de macros
  • Identificadores largos usando guion de piso
  • Separación de la definición de datos y proceso
  • No hay funciones en la PROCEDURE DIVISION
  • No parámetros

36
Ejemplos
000100 IDENTIFICATION DIVISION. 000200
PROGRAM-ID. HELLOWORLD. 000300 DATE-WRITTEN.
02/05/96 2104. 000400 AUTHOR BRIAN COLLINS
000500 ENVIRONMENT DIVISION. 000600
CONFIGURATION SECTION. 000700 SOURCE-COMPUTER.
RM-COBOL. 000800 OBJECT-COMPUTER. RM-COBOL.
000900 001000 DATA DIVISION. 001100 FILE
SECTION. 001200 100000 PROCEDURE DIVISION.
100100 100200 MAIN-LOGIC SECTION. 100300
BEGIN. 100400 DISPLAY " " LINE 1 POSITION 1
ERASE EOS. 100500 DISPLAY "HELLO, WORLD." LINE
15 POSITION 10. 100600 STOP RUN. 100700
MAIN-LOGIC-EXIT. 100800 EXIT.
37
2.6.  BASIC (Beginner's All Purpose Symbolic
Instruction Code)
  • Desarrollado por John Kemeny and Thomas Kurtz en
    Dartmouth College en 1964
  • Características propuestas para el diseño
  • Fácil de aprender y usar por estudiantes de areas
    no cientificas
  • Debe ser amigable
  • Proveer resultados rápidos para las tareas
  • Acceso de dos tipos libre y privado
  • El tiempo del usuario es mas importante que el
    tiempo de la computadora

38
Ejemplos
REM BASIC Example program DIM intlist(99)
result 0 sum 0 INPUT listlen IF
listlen gt 0 AND listlen lt 100 THEN FOR
counter 1 to listlen INPUT
intlist(counter) sum sum
intlist(counter) NEXT counter average
sum/listlen FOR counter 1 to listlen
IF intlist(counter) gt average
THEN result result 1 NEXT counter
PRINT The number of values that are gt average is
result ELSE PRINT ERROR - input
list length is not legal END IF END
39
2.7.  SIMULA
  • Diseñado entre 1962-1964 por Ole-Johan Dahl y
    Kristen Nygaard en el Norwegian Computing Center
  • Diseñado inicialmente para la simulación
  • Simula-67 es una versión de propósito general que
    incluía registros
  • Primer lenguaje con clases (abstracción de datos)
    y herencia con subtipos
  • Basado en ALGOL (estructura de bloque y estatutos
    de control)

40
Ejemplos
Begin while 1 1 do begin
outtext ("Hello World!") outimage
end End
class Lab begin text Nam, Street,
Town, County, Code  procedure ReadLabel
begin Nam - InLine
Street - InLine
Town - InLine County
- InLine Code - InLine
endofReadLabel  procedure
WriteLabel begin OutLine(Nam)
OutLine(Street) OutLine(Town)
OutLine(County) OutLine(Code)
endofWriteLabel  end--of--Lab
begin integer Int1 comment The first
SIMULA program written for this book
Int13 OutInt(Int1,4) OutImage end
41
2.8.  Prolog (PROgramming LOGic)
  • Creado en 1970 por Alain Colmeraurer, Robert
    Kowalski, Phillipe Roussel y otros.
  • Lenguaje declarativo basado en la lógica de
    predicados
  • Posee una máquina de inferencia que le permite
    concluír si es posible deducir o no la meta
    propuesta
  • Se usan clausulas HORN para especificar las
    reglas
  • goalclause(Variables) - clause1 (V1), ,
    clauseN(VN)
  • Los hechos se representan usando la primer parte
    de la regla.
  • goalclause(valores).

42
grandfather(X, Z) - (mother(X, Y) father(X,Y)),
father(Y,Z).
mother(maria, ana). father(juan,
ana). father(tom, juan). parent (X,Y) -
mother(X, Y). parent(X, Y) - father(X,
Y). grandfather(X, Z) - parent (X, Y),
father(Y,Z).
grandfather(tom, ana)?
43
2.9.  Ada
  • Diseñado por un comité en 1977 convocado por el
    DoD de USA
  • Características
  • Paquetes (módulos)
  • Manejo de excepciones
  • Genéricos
  • Concurrencia
  • Ada 95
  • Orientado a objetos
  • Rediseño de librerías
  • Mejores mecanismos para datos compartidos

44
with Text_To use Text_To procedure hello
is begin put("Hello World") end
hello
45
2.10.  C
  • Es una extensión del lenguaje C diseñada por
    Bjarne Stroustrup en los Bell Labs en Mayo 1980
  • Elementos agregados para crear C
  • Chequeo de tipo de parámetros en funciones y
    conversiones
  • Clases, clases derivadas
  • Acceso público y privado para los elementos de
    las clases
  • Constructores y destructores
  • Friends
  • Sobrecarga de operadores
  • Metodos virtuales con despacho dinámico
  • Herencia multiple
  • Manejo de excepciones

46
2.11.  Java
  • Diseñado en 1995 por James Gosling
  • Características
  • Mas pequeño, Mas simple y Mas confiable que C
  • Todo dentro de la clase
  • No hay funciones solo metodos
  • Herencia simple (de implementación)
  • Recolección de basura implícita
  • Etc.

47
Ejemplos
class HelloWorldApp public static void
main(String args) System.out.println("
Hello World!") //Display the string.
import java.applet.Applet import
java.awt.Graphics public class HelloWorld
extends Applet public void paint(Graphics
g) g.drawString("Hello world!", 50,
25)
48
2.12.  Otros Lenguajes
  • Lenguajes Script -PERL, awk, JavaScript
  • Lenguajes OO -C, Self, Smalltalk
  • Lenguajes Markup HTML, XML

49
Capítulo 3. Sintaxis y Semántica
  • 3.1. Problemas describiendo la sintaxis de los
    lenguajes
  • 3.2. Métodos formales para describir la sintaxis
  • 3.3. Semántica dinámica
  •  

50
  • Descripción de un lenguaje de programación.
  • Quienes deben entender la descripción de un
    lenguaje?
  • Implementadores
  • Usuarios (Programadores)
  • Lenguaje de programación Sintaxis Semántica

51
  • El filósofo americano Charles William Morris
    (1901-1979) en su libro Signs, Language, and
    Behavior da estas definiciones
  • Pragma- Origen, uso y efecto de los signos.
  • Semántica- El significado de los signos en todas
    sus formas de significado.
  • Sintaxis- Combinación de signos sin considerar su
    significado específico o sus relaciones del
    comportamiento en el cual estan presentes.

52
  • Sintaxis La sintaxis de un lenguaje de
    programación es la forma de sus expresiones,
    estatutos y programas. La estructura de un
    lenguaje.
  • Semántica Es el significado de esas
    expresiones, estatutos y programas.
  • Pragmatica Es el origen, uso, contexto del
    lenguaje

53
Ejemplos
  • Estatuto while en Java
  • while (ltbool_exprgt) ltstatementgt
  • Símbolos para la Conjunción
  • AND vs vs ,
  • Número vs numeral

54
Estructura
  • El acomodo de los elementos de una entidad y sus
    relaciones con otros elementos.
  • Tipos de estructuras
  • Estructura lineal- como los eslabones de una
    cadena
  • Estructura Jerárquica- Cajas adentro de otras
    cajas
  • Estructura de árbol- Arboles genealógicos
  • Estructura gramatical-

55
Contextos
  • La estructura tiene significado.
  • Ejemplo
  • El pollo esta listo para comer.
  • Quien va a comer??

56
3.1. Problemas describiendo la sintaxis de los
lenguajes
  • Lenguaje Conjunto de cadenas de caracteres
    formadas con un alfabeto.
  • Oraciones o estatutos Son las cadenas de un
    lenguaje.
  • Las reglas de sintaxis - especifican cuales
    cadenas de caracteres formadas con el alfabeto
    son parte del lenguaje.

57
  • Lenguaje objeto es el lenguaje que se estudia
  • Metalenguaje- es el lenguaje usado para comunicar
  • Alfabeto- símbolos atómicos
  • Cadenas- lista o secuencia de símbolos

58
Jerarquia de Chomsky
  • 0 Sin restricción Máquinas de Turing,
    Sistemas Post
  • 1 Contexto sensitivo No usadas en LP
  • 2 Contexto libre BNF, autómatas push-down
  • Regulares expresiones regulares,
    autómatas
  • finitos

59
  • Sin restricción - Se usan para describir algunas
    partes de la semántica (gramáticas atributibas)
  • Contexto sensitivo No usadas en LP
  • Contexto libre- Se usan para describir la
    sintaxis de los LP
  • Regulares- se usan para describir los tokens de
    un LP

60
  • Dado un alfabeto Aa,b,c,d
  • Una cadena es una lista (ordenada) de símbolos
    del alfabeto
  • La lista puede no contener símbolos (cadena
    vacia) y se representa con
  • Operaciones con cadenas
  • Concatenación
  • Alternación
  • Cierre

61
Expresiones Regulares
  • Cadena vacia Ø
  • Atomo cualquier símbolo tal que a ? A es una
    expresión regular
  • Alternación- Si r1 y r2 son expresiones
    regulares, entonces r1r2 es también una
    expresión regular
  • Concatenación- Si r1 y r2 son expresiones
    regulares, entonces r1.r2 es también una
    expresión regular
  • Cierre- Si r1 es una expresión regular, entonces
    r1 es también una expresión regular

62
Significado de las ER
  • Da1 a1
  • Dan an
  • D(r1 r2) Dr1 U Dr2
  • D(r1.r2) x.y x ? Dr1, y ? Dr2
  • donde x.y es la concatenación de x y y
  • Dr U (Dr)i
  • i

Donde Si se define recursivamente S0 Si1
x.y x ? S, y ? Si
63
Ejemplos de ER
  • D(a.b) x.y x ? Da, y ? Db
  • x.y x ? a, y ? b
  • a.b ab
  • D(a (a.b)) Da U D(a.b)
  • a U ab
  • a, ab

64
Ejemplos de ER
  • D(a (b.c)) U (Da U D(a (b.c)))i
  • i
  • U a, bc U D(a
    (b.c)) 2 U
  • , a, bc U
    a,aa,abc,bc,bca,bcbc U
  • , a,aa,bc, abc,bca,bcbc
    U

65
Otras operaciones en ER
  • Opcional-
  • r? (r Ø)
  • Una o mas-
  • r (r . r)
  • Cualquiera-
  • (abyz)
  • Conjunto- (asume que el alfabeto esta ordenado)
  • a-z (abyz)
  • Complemento- (asume que el alfabeto esta
    ordenado)
  • c-x (abyz)

66
Problemas con ER
  • Las expresiones regulares no pueden ser usadas
    para describir completamente un lenguaje de
    programación (no son suficientemente expresivas).
  • No es posible expresar la correcta anidación de
    paréntesis en expresiones.

67
Descripción de Lenguajes
  • Reconocedores.
  • L es el lenguaje
  • S es el alfabeto
  • R dispositivo reconocedor- diseñado para
    reconocer si una entrada dada es o no parte del
    lenguaje L.
  • Generadores.
  • Dispositivo usado para generar frases de un
    lenguaje.
  • Uso limitado como descriptor de lenguaje.

68
3.2.  Métodos formales para describir la sinatxis
  • CFG - Gramáticas de Contexto Libre definidas por
    Chomsky (1950s)
  • BNF Backus-Naur Form usada para describir la
    sintaxis de de ALGOL (1960)
  • EBNF BNF Extendida mejora la legibilidad y
    facilidad de escribir

69
Gramáticas de Contexto Libre
  • Una gramática es un tuple de 4 elementos
    ltT,N,S,Pgt
  • T es el conjunto de símbolos terminales
  • N es el conjunto de símbolos no terminales
  • S es un simbolo no terminal e inicial de la
    gramática
  • P es un conjunto de producciones de la gramática

70
BNF
  • BNF- Colección de clausulas donde la parte
    izquierda es una categoria sintáctica y la parte
    derecha se forma con categorias sintacticas y
    tokens.
  • LHS RHS

71
BNF Extendida
  • Extensiones a BNF (EBNF)
  • Selección
  • Repetición
  • Opcional

72
  • Regla recursiva una regla es recursiva si la
    LHS aparece en la RHS
  • ltident_listgt identifier
  • identifier ,
    ltident_listgt
  • Recursión por la izquierda
  • ltexprgt ltexprgt lttermgt
  • lttermgt
  • Recursión por la derecha
  • ltfactorgt ltexprgt ltfactorgt
  • ltexprgt

73
Arbol de Parser
  • Es una estructura formada por los elementos que
    contiene una frase (expresión, declaración,
    estatuto, etc.)
  • Cada producción usada en la derivación de un
    string aparece como un subarbol en el diagrama.
  • El símbolo no terminal de la izquierda de la
    producción, aparece como la raíz del árbol y los
    símbolos a la derecha de la producción aparecen
    como hijos de ese nodo raíz.

74
Arbol de Parser
  • S --gt if C then S
  • if C then S else S

75
Arbol de Parser
  • Gramática ambigua Una gramática es ambigua
    cuando es posible representar una frase con más
    de un árbol de parser.

76
S --gt if C then S if C then S else S
S
if (a0) then if (b0) then x b else xa
if
C
then
S
else
S
S
if
C
then
S
if
C
then
S
if
C
then
S
else
S
77
Ejercicio
  • Usando la gramática siguiente, escribe el árbol
    de parser de la expresión ABAC
  • ltassigngt ltidgt ltexprgt
  • ltidgt A B C
  • ltexprgt ltexprgt ltexprgt
  • ltexprgt ltexprgt
  • (ltexprgt )
  • ltidgt

78
Ejercicio
  • Definir una gramática de contexto libre para un
    lenguaje de expresiones aritméticas con
  • Operaciones de asignación, suma y resta
  • Variables cualquier letra del alfabeto.
  • Literales - enteras

79
Limitaciones de BNF
  • No es posible expresar que el identificador de un
    inicio de bloque sea el mismo que el usado en el
    cierre del mismo bloque.
  • Número de parámetros en la llamada a un
    procedimiento.
  • Dificil de expresar las reglas de compatibilidad
    de tipos en expresiones.
  • Todas las variables deben ser declaradas antes de
    usarse.

80
Limitaciones de BNF
  • ltblockgt ltblock identifiergt
  • begin ltstatementgt ltstatementgt
  • end ltblock identifiergt
  • ltcallgt ltidentifiergt (ltexpresióngt)

El identificador del bloque, debe ser el mismo
usado al inicio
El número de parámetros en la llamada, debe
coincidir con la declaración
81
Gramática Atributiba
  • Una GA es una gramática de contexto libre
    aumentada con atributos (sintetizados y
    heredados) en un árbol de parser particular,
    donde los valores de los atributos asociados se
    determinan en base a los nodos del arbol.

82
Gramática Atributiba
  • Atributos- similares a variables, mantienen un
    valor del atributo
  • Funciones para cálculo de atributos- llamadas
    funciones semánticas, especifican como se
    calculan los valores de los atributos
  • Funciones predicados- se asocian con las reglas
    gramaticales

83
Tipos de Atributos
  • Atributos sintetizados- Se usan para pasar
    información hacia los nodos de arriba del árbol
    de parser.
  • Atributos heredados- pasan información a los
    nodos descendientes en la jerarquia.
  • Atributos intrinsecos- son atributos sintetizados
    cuyos valores se determinan fuera del árbol de
    parser.

84
Ejemplo
Regla sintáctica ltproc_defgt procedure
ltproc_namegt1
ltproc_bodygt end ltproc_namegt2 Regla semántica
ltproc_namegt1.string ltproc_namegt2.string
85
3.3.  Semántica Dinámica
  • Operacional- describe el significado de las
    construcciones del lenguaje en términos de los
    efectos sobre una una máquina abstracta.
  • Axiomática- basada en la logica formal, es un
    sistema para probar propiedades a cerca de las
    relaciones entre los estados de entrada y salida
    de los programas.
  • Denotacional- describe los programas como
    entidades matemáticas usando funciones recursivas.

86
Descripción de la Semántica
  • Estandarización de los lenguajes
  • Referencia para usuarios
  • Prueba que los programas son correctos
  • Referencia para los implementadores
  • Implementación automática
  • Mejor entendimiento para el diseño de lenguajes

87
Semántica Axiomática
  • Basada en la lógica matemática.
  • Fue definida en conjunción con el desarrollo de
    un método para probar que los programas son
    correctos.
  • Es la demostración de que un programa se ejecuta
    de acuerdo a sus especificaciones.
  • La demostración anexa a cada estatuto una
    expresión lógica que especifica algunas
    restricciones en las variables.

88
Semántica Axiomática
  • Aserción- Tambien llamada predicado, es una
    fórmula de la lógica para caracterizar un estado.
  • Precondición- es una aserción que precede a un
    estatuto donde se especifican algunas
    restricciones.
  • Postcondición- es una aserción que sigue a un
    estatuto y contiene nuevas restricciones en las
    variables de la precondición y otras.

89
Hoare Triple
  • La ejecución de S en un lenguaje de programación
    puede describirse por el estado que se obtiene
    despues de ejecutar un segmento de un programa.
  • P S Q
  • Hoare Triple. Un triple es valido si la ejecución
    del segmento de programa S inicia con un estado
    que satisface P y termina en un estado que
    satisface Q.

90
Axioma de la Asignación
  • QVT V T Q
  • 2 2 x2 x 2
  • y1 2 x 2 x y1
  • y17 x2 y17
  • 221 x2 xx1

91
Problema??
  • y0 x1 y0

92
Cálculo de la precondición mas debil.
  • La precondición mas debil Qxe es aquella que
    es de mayor utilidad para la asignación VT y la
    postcondición Q.
  • La precondición mas debil se expresa WP(VT, Q)
  • P a b/2 1 a lt 10
  • b/2 1 lt 10 a b/2 1 a lt 10

P Qxe P alt10 xe P b/2-1lt10
93
Otras Reglas
Loop invariant. Es una aserción que es válida
antes y despues de la terminación del while.
  • Condicional
  • B P S1 Q B P S2 Q
  • P if B then S1 else S2 Q
  • Composición
  • P S1 Q Q S2 R
  • P S1 S2 R
  • While.
  • B I S1 I
  • I while B do S end B I

94
Capítulo 4. Nombres, Uniones, Chequeo de Tipos y
Alcances.
  • 4.1.   Introducción
  • 4.2.   Nombres
  • 4.3.   Variables
  • 4.4.   Uniones
  • 4.5.   Chequeo de tipos
  • 4.6.   Alcances

95
4.1.  Introducción
Modelo de Arquitectura von Neumman y Lenguajes
Imperativos
  • Variables representan celdas de memoria
  • Tipos de datos
  • Compatibilidad
  • Alcance
  • Tiempo de vida

96
4.2.    Nombres
  • Un nombre es una cadena de caracteres que se usa
    para identificar alguna entidad en un programa.
  • Comunmente conocidos como identificadores.
  • Variables
  • Subprogramas
  • Etiquetas
  • Parámetros formales
  • Módulos
  • Tipos de datos

97
  • Los nombres en lenguajes de programación refieren
    a dos objetos diferentes
  • Localidad
  • Valor
  • L-value refiere a la localidad de memoria donde
    se almacena X
  • R_value refiere al valor de X
  • X X 1 Fortran
  • X X 1 Pascal
  • X !X 1 ML

X X 1 L_value R_value
98
Expresiones L_value
R_value x x2 3x2 A2i2
Funciones L_value en ML val x ref 1 (
declara variable ) val y ref 2 (
declara variable ) fun f(n) if (n mod 2) then
x else y f(3) 4 ( y 4 )
L_value x a2i aij r.f r.ai4
99
Tópicos en el Diseño de Lenguajes
  • Son los identificadores sensitivos a mayúsculas y
    minúsculas? Esta decisión afecta
  • Legibilidad de programas
  • Facilidad de escribir
  • Como afecta la longitud de los nombres?
  • Una sola letra
  • Seis caracteres (Fortran)
  • Sin límite (Java y Ada)

100
  • Las palabras especiales son reservadas o palabras
    clave?
  • Una palabra clave es una palabra de un lenguaje
    de programación que tiene un significado especial
    en cierto contexto.
  • Una palabra reservada es una palabra especial de
    un lenguaje que NO puede ser usada como nombre.
  • Un identificador predefinido es quel que tiene un
    significado especial en el lenguaje pero que
    puede ser redefinido por el usuario.

101
Ejemplos
  • Fortran usa palabras clave
  • Real Apple // Real es el tipo en la
    declaración de variable
  • Real 3.4 // Real es una variable de la
    expresión
  • Integer Real // declara una variable de
    tipo entera
  • Real Integer // declara una variable de
    tipo real
  • Java y otros usan palabras reservadas.
  • class class // error de compilación!

102
4.3.   Variables
  • Una variable en un programa es una abstracción de
    una o mas celdas de memoria.
  • Atributos
  • Nombre
  • Dirección
  • Valor
  • Tipo
  • Tiempo de vida
  • Alcance

103
  • Nombre. Cadena usada para identificar a un
    elemento de un programa.
  • Dirección. Dirección de memoria donde se almacena
    su valor.
  • l_value
  • Mismo identificador en distintos bloques o
    subprogramas
  • Alias
  • Valor. Contenido actual de la celda(s) de
    memoria.
  • Tipo. Determina el rango de valores y el conjunto
    de operaciones definidas para ese tipo.
  • Tiempo de vida. Tiempo que una variable esta
    ligada a una celda de memoria especifica.
  • Alcance. Es el rango de código en el cual la
    variable esta visible.

104
4.4.   Uniones
  • Una unión es una asociación entre
  • Un atributo y una entidad o
  • Una operación y un símbolo
  • Tiempo de unión. Es el tiempo en el que se
    efectua la asociación.
  • La unión puede ser estática o dinámica.

105
Clases de Uniones
  • Unión estática. Una unión es estática cuando
    ocurre antes del tiempo de ejecución y permanece
    sin cambios durante la ejecución del programa.
  • Unión dinámica. Son las uniones que ocurren en
    tiempo de ejecución o pueden cambiar en tiempo de
    ejecución del programa.

106
Uniones de Variables y Tipo
  • La unión de una variable a su tipo define una
    unión estática con una declaración
  • Declaración explícita, asocia tipos a variables
    por medio de declaraciones.
  • Declaración implícita, asocia tipos a variables
    usando convenciones definidas en el lenguaje.

107
Uniones de Variables y Tipo
  • La unión dinámica de tipo sucede cuando se asigna
    un valor a un identificador, el tipo de la
    expresion en la derecha, determina el tipo de la
    variable a la izquierda.
  • Ventaja, provee mucha flexibilidad en la
    programación
  • Desventajas detección de errores en tiempo de
    ejecución, costo de chequeo de tipos en tiempo de
    ejecución, lenguajes interpretados.
  • Ejemplo en JavaScript
  • list 3.5, 1.8 // el tipo de list es
    arreglo
  • list 47 // el tipo de list
    cambia a escalar

108
Inferencia de Tipos
  • El tipo de una expresión puede determinarse sin
    que el programador especifique los tipos de las
    variables.
  • fun circumf (r) 3.14159 r r
  • fun times10 (n) 10 n
  • fun square (n) n n

109
Tarea
  • Leer sección 5.4.3 del libro.

110
Ambientes Referenciales
  • Un medio ambiente es una colección de uniones
    disponiblles para ser usadas en las operaciones
    referenciales.
  • Tipos de ambientes
  • Local
  • Foraneo
  • Global
  • Predefinido

111
Tipos de ambientes
  • Local- contiene parametros formales, variables
    locales y subprogramas definidos internamente.
  • Foraneo- contiene las asociaciones que pueden
    usarse dentro del subprograma pero que no se
    crean cuando el subprograma se activa.
  • Global- contiene las asociaciones creadas al
    inicio de la ejecucion del programa principal.
  • Predefinido- contiene asociaciones definidas
    directamente en el lenguaje.

112
Uniones de Almacenamiento y Tiempo de Vida
  • Asignación de memoria (Allocation). La celda de
    memoria que se une a una variable, se toma de un
    espacio de memoria disponible.
  • Desasignación de memoria (Deallocation). Proceso
    que regresa al espacio de memoria disponible la
    celda que fue liberada de la union a una
    variable.
  • Tiempo de vida. Es el tiempo que una variable
    esta ligada a una celda de memoria especifica.

113
Categorias
  • Variables Estáticas. Se unen antes de iniciar la
    ejecución del programa y permanecen unidas
    durante toda la ejecución.
  • Variables Dinámicas de Stack. Son aquellas que
    crean su unión al almacenamiento cuando su
    declaración es elaborada., lo que ocurre en
    tiempo de ejecución.
  • Variables Explícitas Dinámicas en Heap. Son
    asignadas y desasignadas explicitamente usando
    apuntadores (referencias). La unión con el tipo
    es estática, pero la unión con la celda de
    memoria es dinámica.
  • Variables Implícitas Dinámicas en Heap. Estas
    variables se unen al almacenamiento cuando
    reciben un valor en una asignación.

114
Tiempos de Union
  • Las uniones se pueden definir en diferentes
    tiempos
  • Definición del lenguaje
  • Implementación del lenguaje
  • Compilación de programas
  • Carga de programas
  • Ligado de programas
  • Ejecución de programas

115
Ejemplos de Uniones
  • Definición del lenguaje. La estructura de un
    lenguaje, el significado de los simbolos ,
    etc.
  • Implementación del lenguaje. La representación
    interna de ciertos elementos depende del hardware
    disponible.
  • Compilación de programas. Uniones escogidas por
    el programador (nombres de variables, tipos,
    etc.) Uniones escogidas por el traductor
    (asignación de localidades de memoria, etc.)
  • Carga de programas. Asociación de localidades de
    memoria real.
  • Ligado de programas. Llamadas a funciones o
    procedimientos que residen en librerias.
  • Ejecución de programas. Almacenamiento de un
    valor en una variable, creacion de variables
    locales.

116
x x 10
  1. Conjunto de tipos posibles para la variable x?
  2. Tipo de la variable x?
  3. Serie de posibles valores para x?
  4. Valor de la variable x?
  5. Representación de la literal 10?
  6. Propiedades del operador ?
  7. Union de x con una localidad de memoria?

117
4.5 Tipos
  • Primitivos, básicos, simples, no estructurados,
    son aquellos que contienen un solo valor en un
    momento especifico del tiempo enteros, reales,
    booleanos, etc.
  • Estructurados, compuestos, son aquellos que
    pueden contener mas de un valor en un momento
    especifico del tiempo arreglos, registros, tipos
    de funciónes, clases, definidos por el usuario.

118
Chequeo de Tipos
  • Chequeo de tipos proceso para verificar que
    operandos y los operadores son de tipos
    compatibles.
  • Chequeo de tipos puede ser
  • En tiempo de compilación (estático).
  • En tiempo de ejecución (dinámico).
  • Tipos compatibles son aquellos tipos que son
    legales para los operadores o que pueden ser
    implicitamente convertidos (coerción) en tipos
    legales.

119
  • Lenguajes fuertemente tipeados son aquellos en
    donde no ocurren malinterpretaciones de bits en
    tiempo de ejecución y todo el chequeo de tipos se
    hace en tiempo de compilación.
  • Inferencia de tipos proceso para determinar los
    tipos de los identificadores sin declaraciones de
    tipo en los programas.

120
Los Tipos son Distintos
String
Boolean
Float
Integer
Character
Otros tipos de datos
121
Interpretación
  • Inseguridad de tipos se da cuando los datos
    pueden ser mal interpretados.
  • La misma representación interna de bits puede
    significar diferentes cosas. Por ejemplo los 32
    bits siguientes
  • 0x9207BFF0 1001 0010 0000 0111 1011 1111 1111
    0000
  • -1844985872 en complemento a 2s
  • 2449981424 entero sin signo
  • -4.283507E-28 IEEE 754 punto flotante
  • Add fp, -16, o1 código ensamblador de
    SPARC
  • Azul transparente alpha RGB (color en
    Java)

122
Sistemas de Tipos
  • Un sistema de tipos en un lenguaje fuertemente
    tipeado garantiza que las propiedades de los
    datos que el programador crea podran ser
    verificadas para asegurar que no habra datos mal
    interpretados en tiempo de ejecución.

123
Lenguajes que NO son Fuertemente Tipeados
  • Perl- usa nombres en tres formas escalares
    inician con , arreglos inician con _at_, tablas
    hash inician con
  • APL- escalares, vector, 2D arreglos
  • LISP- atomos, listas
  • Costo los errores de tipo no son detectados en
    compilación, el chequeo de tipos se hace en
    tiempo de ejecución

124
Equivalencia de Tipos
  • Equivalencia por Nombre tipos con el mismo
    nombre son iguales. Facil de implementar, pero
    muy restrictiva.
  • Ejemplo en Ada
  • type IndexType is 1..100
  • count Integer
  • index IndexType

count e index no son compatibles
125
Equivalencia por Nombre
  • type
  • T record a int bchar end
  • var
  • x,y array1..2 of record a int bchar end
  • z array1..2 of T
  • u,v array1..2 of record a int bchar end
  • type
  • T record a int bchar end
  • Anon1 array1..2 of record a int bchar
    end
  • Anon2 array1..2 of T
  • var
  • x,y Anon1
  • z Anon2
  • u,v Anon1

126
Equivalencia por Nombre
-- equivalencia por nombre no provee
abstracción declare type Pt is record First,
Second Float end record type Cx is record
First, Second Float end record P Pt C
Cx begin P C -- ilegal no son del mismo
tipo! -- mismo efecto se puede lograr
con P.First C.First P.Second
C.Second end
127
Equivalencia de Tipos
  • Equivalencia por Estructura tipos con la misma
    estructura son iguales. Dificil de implementar,
    pero mas flexible.
  • Registros con la misma estructura pero nombres
    diferentes?
  • Definiciones recursivas?
  • struct tree
  • int n struct tree left, struct tree right
  • class Tree
  • int n Tree left, Tree right
  • datatype tree empty node of int tree tree

128
Equivalencia por Estructura
  • type T1 is record
  • X Integer
  • N access T1
  • end record
  • type T2 is record
  • X Integer
  • N access T2
  • end record

type T4 is record X Integer N access T2 end
record type T5 is record N access T5 X
Integer end record
type T6 is record Y Integer N access T6 end
record
129
Características del Sistema de Tipos de ADA
  • Fuertemente tipeado, equivalencia por nombre, no
    coerción implícita, sobrecarga.
  • Subtipos. Verificación en TC vs TE
  • Tipos derivados.
  • Registros etiquetados.
  • Genéricos. Polimorfismo universal paramétrico
  • Paquetes. Abtracciones de tipos

130
Sistema de Tipos de ADA
type celsius is new Float -- tipo derivado
de Float farenheit is new Float --
estos tipos son incompatibles Ada maneja
compatibilidad por nombre subtype Small_type is
Integer range 0..99 --compatible con
Integer C, D array (1..10) of Integer --
definición de dos arreglos anónimos de tipos
incompatibles type List10 is array (1..10) of
Integer C, D List10 -- arreglos con tipos
compatibles
131
Ada
  • declare
  • subtype Wide_Type is Integer range 1..100
  • subtype Narrow_Type is Integer range 10..20
  • subtype Farout_Type is Integer range
    150..300
  • Wide Wide_Type
  • Narrow Narrow_Type
  • Farout Farout_Type
  • begin
  • Narrow Farout
  • Wide Narrow
  • Narrow Wide
  • end

Chequeo en tiempo de ejecución si no satisfacen
las restricciones la excepción CONSTRAINT_ERROR es
ejecutada
132
Inseguridad de Tipos en Pascal
  1. Subrangos
  2. Registros variantes
  3. Subprocedimientos como argumentos

133
Pascal
  • var
  • wide 1..100
  • narrow 10..20
  • farout 150..1000
  • begin
  • narrow farout
  • wide narrow
  • narrow wide
  • end

type option (a,b) vrt record case
tagoption of a (f1real) b (f2
integer) end var x vrt begin x.tag
a x.f1 12.65 x.tag b if x.f2
32 then ( ... ) end
134
4.6.   Alcances
  • El alcance de una declaración es la porción de
    programa en la cual el identificador introducido
    en la declaración esta visible. Una variables es
    visible en un estatuto si puede ser refererida en
    ese estatuto.
  • Tipos de alcances
  • Estático el alcance de la variable se puede
    determinar en tiempo de compilación
  • Dinámico se basa en la secuencia de llamadas de
    los subprogramas, y no en su relación espacial.

135
Alcance Estático
  • Se basa en la búsqueda de la declaración de la
    variable en el bloque actual o en el que lo
    contiene y asi sucesivamente hasta encontrar la
    variable.

136
Alcance Estático
  • procedure Big is
  • x Integer
  • procedure Sub1 is
  • begin
  • x
  • end
  • procedure Sub2 is
  • x Real
  • begin
  • x
  • Sub1
  • end
  • begin
  • Sub1
  • Sub2
  • end

137
Alcance Dinámico
  • El alcance de una variable se determina en
    tiempo de ejecución y puede variar de acuerdo a
    la secuencia de llamadas de los subprogramas.

138
Alcance Dinámico
procedure Big is X Integer procedure Sub1
is begin x end procedure Sub2
is X Real begin x
Sub1 end begin Sub1 Sub2 end
139
Capítulo 5. Tipos de Datos
  • 5.1.         Primitivos
  • 5.2.         Definidos por el usuario
  • 5.3.         Arreglos
  • 5.4.         Registros
  • 5.5.         Referencias (apuntadores)
  •  

140
Tipos de Datos
  • Un tipo de dato define una colección de datos
    objeto y un conjunto de operaciones definidas
    para esos objetos.
  • Los tipos de datos definidos por el usuario
    mejoran legibilidad de los programas a traves de
    el uso de nombres significativos para los tipos.

141
Tipos de Datos
  • Un descriptor es una colección de atributos de
    una variable.
  • Los tipos de datos abstractos (ADT) separan el
    uso de un tipo de su representación y sus
    operaciones sobre los valores de ese tipo.

142
  • Un objeto inmutable es aquel que no puede ser
    cambiado por una operación.
  • Sumar 1 a un entero, no cambia al entero, el
    resultado es otro entero.
  • Un objeto mutable es aquel que tiene un estado
    que puede ser modificado por ciertas operaciones
    sin cambiar la identidad del objeto.
  • Actualizar un elemento de un arreglo.

143
5.1.   Primitivos
  • Los datos primitivos son aquellos que no son
    definidos en función de otros tipos.
  • La mayoria de los lenguajes de programación
    proveen una serie de datos primitivos.
  • Los datos primitivos son la base para la creación
    de tipos estructurados.

144
Tipos Numericos
  • Entero.
  • Signo (Con signo, sin signo)
  • Representaciones (Signo magnitud, Complemento a
    2)
  • Rango de valores (número de bytes usados)
  • Punto flotante.
  • Precisión (simple, doble)
  • Representación ( Formato Estandar 754 de la IEEE)
  • Decimales.
  • Almacenados en BCD
  • Boolean.
  • Caracter.
  • Código (ASCII, ISO 8859-1, Unicode)
  • String??

145
Tipos Primitivos
146
Strings
  • Tipo especial de arreglo de caracteres o Tipo
    primitivo??
  • Longitud estática o dinámica?
  • Estática -Objetos inmutables (Java, C, C y
    .NET)
  • Dinámica
  • Variable limitada a cierto número de caracteres
  • Variable sin limite máximo.
  • Implementación

Descriptor en T. Compilación
Descriptor en T. Ejecución
147
5.2.  Definidos por el usuario
  • Cardinales. El rango de valores puede ser
    fácilmente asociado con un conjunto de enteros.
  • Enumeración. Tipo en el cual todos los posibles
    valores (constantes enumeradas) se proveen en la
    definición.
  • Subrango. Secuencia contigua de un tipo cardinal.

148
Enumeración
  • Puede una constante aparecer en mas de una
    enumeración? Como se checa una ocurrencia de esta
    en un programa?
  • Los elementos de una enumeración se convierten
    (implicitamente) a un valor entero?
  • Se pueden convertir otros tipos a un tipo
    enumeración?
  • Como afecta esto al sistema de tipos?

149
Ejemplos de Enumeración
  • Fortran
  • Integer lun, mar
  • Data lun, mar/0, 1/
  • // C
  • enum dias lun, mar, mie, jue, vie, sab, dom //
    default 0,1,2..
  • dias diaActual mie
    // se convierte a int en expresiones
  • diaActual 1 // ilegal se debe hacer un cast
    (dias) a la literal 1
  • // C enumeraciones son como C pero las
    literales NO se convierten a int
  • enum diasLun, Mar, Mie, Jue,Vie, Sab, Dom

150
Ejemplos de Enumeración
// Java public class City public final int
MIAMI 0 public final int ORLANDO 1
  • No es seguro (tipos)
  • Dificil de actualizar
  • No se pueden imprimir
  • Los valores int no son informativos
  • Los clientes requieren recompilacion

public class City private final String
name private City(String name) this.name
name public String toString() return
name public static final City MIAMI new
City(Miami) public static final City
ORLANDO new City(Orlando) public static
final City MELBOURNE new City(Melbourne)
//Java 1.5 public enum City Miami, Orlando,
Melbourne
151
Enumeración
  • Ventajas
  • Mejoran legibilidad
  • Facilitan le escritura y lectura de programas
  • Seguridad?
  • Ada, C - las operaciones aritmeticas no son
    legales y valores fuera de los rangos no pueden
    swer asignados
  • C no provee seguridad
  • C - requieren cast
  • Java seguras, son implementadas usando el
    patron definido por Bloch donde cada constante es
    creada como un objeto de la clase y no puede ser
    cambiada.
  • Desventajas???

152
Subrango
  • Requieren chequeo dinámico en asignaciones.
  • -- Ada
  • type Days is (Lun, Mar, Mie, Jue, Vie, Sab, Dom)
  • subtype Weekdays is Days range Lun..Vie
  • subtype index is Integer range 1..100
  • Day1 Days
  • Day2 Weekdays
  • Day2 Day1 -- chequeo dinámico
  • ( Pascal )
  • type index 1..100

153
5.3.    Arreglos
  • Un arreglo es una agregación homogenea de
    elementos en la cual cada elemento es
    identificado por su posición, relativa al primer
    elemento.
  • Nombre
  • Indice(s) (índice inferior implícito o
    explícito)
  • int datos // Java inicia en 0
  • datos array-3..3 of integer // Pascal
    inicia e -3
  • Tipo (de los elementos, de los índices)

154
Preguntas sobre Arreglos
  • Cuales tipos son legales para los indices?
  • Se deben checar los valores de las expresiones
    que definen los subindices?
  • En que tiempo se efectua la union de el rango de
    los subindices?
  • Cuando se almacena un arreglo?
  • Que tipo de arreglos se requieren rectangulares,
    jagged o ambos?
  • En que momento se inicializan los elementos de un
    arreglo?
  • Se permite procesar rebanadas de un arreglo?

155
Arreglos
  • Arreglo estático- es aquel donde el rango de los
    subindices es estaticamente unido y su
    almacenamiento es en memoria estática.
  • Arreglo dinámico en stack con tamaño fijo- el
    rango de los subindices es estaticamente unido
    pero su almacenamiento se da en tiempo de
    ejecución cu
Write a Comment
User Comments (0)
About PowerShow.com