Diseño de compiladores. Representación intermedia Ambientes de ejecución

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Diseño de compiladores. Representación intermedia Ambientes de ejecución"

Transcripción

1 Diseño de compiladores Representación intermedia Ambientes de ejecución

2 Generación de la RI Es la ultima etapa del frontend de un compilador El objetivo es traducir el programa en el formato que espera el backend del compilador El código intermedio generado no tiene porque ser ensamblador, puede ser de mayor nivel

3 Por que una RI? Simplificación del código El código maquina (objeto) tiene ciertas restricciones que hacen que no podamos realizar ciertas operaciones a ese nivel El lenguaje intermedio puede ser una aproximación a ese lenguaje final, en donde podamos realizar las operaciones deseadas Ejemplo: No tener multiplicación en el lenguaje destino? La implementamos como secuencia de sumas!

4 Por que una RI? Manejar con un solo backend, múltiples frontends Por ejemplo, gcc permite manejar C, C++, Java, Fortran y muchos mas Cada frontend traduce su código a un lenguaje intermedio denominado GENERIC Muy similar al enfoque.net, pero sin el runtime que controle el código ejecutable

5 Por que una RI? Manejar múltiples backends, para el mismo frontend La idea es utilizar el mismo lenguaje intermedio, y luego traducirlo a diferentes plataformas usando backends diferentes Las optimizaciones se tratan de hacer sobre el código intermedio en la mayoría de los casos Es similar a la idea de Java con el runtime (bytecode a código nativo, JIT)

6 Representación Intermedia Son difíciles de lograr, ya que deben balancear dos necesidades opuestas Por un lado tenemos las necesidades del lenguaje de alto nivel y por el otro las de bajo nivel Si la RI es muy de alto nivel, entonces no podemos hacer ciertas optimizaciones de bajo nivel Si la RI es muy de bajo nivel, entonces no podemos usar el conocimiento del alto nivel para mejorar el código

7 Código Fuente Un ejemplo, la arquitectura de GCC, de relativamente bajo nivel

8 Código Fuente AST

9 Código Fuente GENERIC AST

10 Código Fuente GENERIC AST HIGH GIMPLE

11 Código Fuente GENERIC AST HIGH GIMPLE SSA

12 Código Fuente GENERIC AST HIGH GIMPLE SSA LOW GIMPLE

13 Código Fuente GENERIC AST HIGH GIMPLE SSA LOW GIMPLE RTL

14 Código Fuente GENERIC AST HIGH GIMPLE SSA LOW GIMPLE Código Maquina RTL

15 Código Fuente GENERIC AST HIGH GIMPLE SSA LOW GIMPLE Código Maquina RTL

16 RI de alto nivel Algunos ejemplos Java Bytecode Cpython bytecode LLVM IR Microsoft CIL Aspectos interesantes: Mantienen la estructura de alto nivel del programa Permiten compilación a lenguajes de mas bajo nivel Permiten INTERPRETACION O JIT (Just In Time Compilation)

17 Que nos importa en esta etapa? Ambientes de ejecución Como implementamos las características de un lenguaje en el código maquina (especialmente si el código maquina no las soporta) Un ejemplo, que pasa con la recursión Que estructuras de datos necesitamos? Código de Tres Direcciones (C3D) Que ventajas tiene, porque es interesante Como podemos generar el C3D? Veremos con ejemplos

18 AMBIENTES DE EJECUCIÓN

19 Un problema importante Los lenguajes de programación manejan aspectos de alto nivel Funciones Objetos Excepciones Tipado dinámico y estático Introspección Estructuras de control

20 Un problema importante Pero la maquina destino suele operar en términos mucho mas primitivos Aritmética Movimiento de datos Estructuras de control muy simples, generalmente saltos y secuencias Soporte básico de acceso a memoria Acceso directo Acceso en formato PILA

21 Ambiente de ejecución Es una forma de representar estos conceptos de alto nivel, usando lo que tenemos disponible en la plataforma destino para nuestro lenguaje

22 Ambiente de ejecución Es una serie de estructuras de datos y procedimientos que se mantienen en runtime de forma de implementar los conceptos de alto nivel Ejemplos: Stack, Heap, Área estática, Tablas de funciones, etc. Depende FUERTEMENTE de las características del lenguaje origen y el lenguaje/plataforma destino

23 Por ejemplo Si tenemos un lenguaje tipo Java, debemos considerar Como se ven los objetos en memoria Como se ven las funciones en memoria Donde se colocan en la memoria Como se implementan las llamadas a funciones Como se implementa la herencia Lo mejor, es que no hay una única respuesta a estas consideraciones!

24 Representación de datos Nos interesa determinar como se colocan los datos en memoria La maquina por lo general soporta opciones limitadas Enteros de largo fijo: 8 bits, 16 bits, 32 bits, con signo, sin signo Flotantes: 32 bits, 64 bits, 80 bits IEEE 754 Debemos codificar nuestros tipos usando estos elementos disponibles

25 Representando tipos primitivos Tipos primitivos integrales byte, char, short, int, long, unsigned, uint16_t Se mapean directo a los tipos de la maquina destino Tipos primitivos reales float, double, long double Se mapean directo a los tipos de la maquina destino

26 Representando tipos primitivos Punteros Típicamente representados como enteros, que contienen la dirección de memoria destino que nos interesa El tamaño del entero depende de la arquitectura destino Tenemos enteros de 32 bits, 64 bits

27 Representando arrays Arrays tipo C Los elementos del array se colocan uno atrás del otro en memoria Arr[0] Arr[1] Arr[2]... Arr[n-1]

28 Representando arrays Arrays tipo Java Los elementos del array se colocan uno atrás del otro en memoria Se coloca el tamaño del array al principio n Arr[0] Arr[1] Arr[2]... Arr[n-1]

29 Representando arrays Arrays tipo D Los elementos del array se colocan uno atrás del otro en memoria Se coloca un punteo al primer y post-ultimo elemento Arr[0] Arr[1] Arr[2]... Arr[n-1] First Past-End

30 Representando arrays multidim. Se representan como arrays de arrays La forma de los arrays en memoria depende del tipo de array usado Arrays tipo C: int a[3][2] a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]

31 Representando arrays multidim. Se representan como arrays de arrays La forma de los arrays en memoria depende del tipo de array usado Arrays tipo C: int a[3][2] a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1] Array de tamaño 2 Array de tamaño 2 Array de tamaño 2

32 Representando arrays multidim. Se representan como arrays de arrays La forma de los arrays en memoria depende del tipo de array usado Arrays tipo Java: int[][] a = new int[3][2] 3 a[0] a[1] a[2] 2 a[0][0] a[0][1] 2 a[1][0] a[1][1] 2 a[2][0] a[2][1]

33 Representando funciones Algunas cosas a responder Como funciona la ejecución dinámica de funciones Donde se coloca el código ejecutable de las funciones Como se pasan los parámetros y como se devuelven los resultados Donde se almacenan las variables locales La respuesta depende de lo que soporte el lenguaje destino

34 Stack Generalmente las llamadas a funciones se implementan utilizando un stack de registros de activación (stack frames) Al llamar a una función, hacemos un push de un nuevo registro de activación Al retornar de una función, hacemos un pop del registro de activación actual

35 Árbol de activaciones Es un árbol que representa todas las llamadas a funciones hechas por un programa en una ejecución particular No siempre puede ser determinado en tiempo de compilación Depende del comportamiento en runtime El equivalente estático es un grafo de llamadas

36 Árbol de activaciones Cada nodo del árbol representa una llamada a una función Cada registro de activación contiene un link de control al registro de activación de la función que lo invoco Este link también es conocido como enlace de control Permite armar una cadena de llamadores Recordar tipado dinámico!

37 int main() { fibonacci(3); } main int fibonacci(int n) { if (n <= 1) return n; return fibonacci(n 1) + fibonacci(n 2); }

38 int main() { fibonacci(3); } int fibonacci(int n) { if (n <= 1) return n; return fibonacci(n 1) + fibonacci(n 2); } main fibonacci n = 3

39 int main() { fibonacci(3); } int fibonacci(int n) { if (n <= 1) return n; return fibonacci(n 1) + fibonacci(n 2); } main fibonacci n = 3 fibonacci n = 2

40 int main() { fibonacci(3); } int fibonacci(int n) { if (n <= 1) return n; return fibonacci(n 1) + fibonacci(n 2); } main fibonacci n = 3 fibonacci n = 2 fibonacci n = 1

41 int main() { fibonacci(3); } int fibonacci(int n) { if (n <= 1) return n; return fibonacci(n 1) + fibonacci(n 2); } main fibonacci n = 3 fibonacci n = 2 fibonacci n = 1 fibonacci n = 0

42 int main() { fibonacci(3); } int fibonacci(int n) { if (n <= 1) return n; return fibonacci(n 1) + fibonacci(n 2); } main fibonacci n = 3 fibonacci n = 2 fibonacci n = 1 fibonacci n = 1 fibonacci n = 0

43 Un árbol de activación no necesita ser mantenido en memoria para siempre SOLO nos interesa la rama actual Esto es equivalente a realizar una recorrida en profundidad

44 Por que podemos optimizar? El stack se puede optimizar por 2 grandes razones Una vez que una función retorna, su registro de activación no necesita ser referenciado nuevamente No necesitamos nodos viejos del árbol de activación

45 Por que podemos optimizar? El stack se puede optimizar por 2 grandes razones En un momento de tiempo, un registro de activación ha terminado de ejecutar, o es un ancestro del registro de activación actual No necesitamos múltiples ramas del árbol activas a la vez

46 Enlaces de control y activación El enlace de control de una función, es un puntero al registro de activación de la función que lo llamo Usado para determinar donde reanudar la ejecución después que la función retorna

47 Enlaces de control y activación El enlace de acceso de una función, es un puntero al registro de activación de la función donde esta definida la primera Usado para determinar el valor de variables fuera de scope

48 Un ejemplo Supongamos un lenguaje tipo Java o C Vamos a usar un runtime stack Cada registro de activación debe almacenar Parámetros Variables locales Variables temporales (introducidas por la RI) Enlaces de acceso y de control

49 Stack Frame La organización lógica del stack frame, es creada por el generador de RI Ignora detalles específicos de la maquina destino La organización física del stack frame, es creada por el generador de código Basada en la organización lógica Incluye aspectos de la maquina destino, como por ejemplo punteros, registros, etc.

50 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales

51 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M

52 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1

53 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1...

54 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1

55 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1 Locales y Temporales

56 Stack Frame para la invocación f(a1,a2,...,an) Stack Frame para la invocación g(b1,b2,...,bm) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1 Locales y Temporales

57 Convenciones de llamada El llamador es el responsable de pushear y popear el espacio necesario para los parámetros de la función llamada El llamado, es el responsable de pushear y popear el espacio necesario para sus variables locales y temporales

58 Objetos Es difícil construir un lenguaje orientado a objetos, expresivo y eficiente Algunos conceptos son difíciles de implementar Despacho dinámico Interfaces Herencia múltiple Control de tipos dinámico (instanceof)

59 structs tipo C Una estructura es un tipo que contiene valores nombrados Un enfoque común? colocar cada campo en memoria según el orden en que fue declarado

60 structs tipo C Una estructura es un tipo que contiene valores nombrados Un enfoque común? colocar cada campo en memoria según el orden en que fue declarado struct Struct { int myint; char mychar; double mydouble; }; 4 Bytes 1 Byte 8 bytes

61 structs tipo C En realidad en memoria, el direccionamiento se hace en multiplos de 8 bytes (o 32, o 64, etc) No podemos ocupar solo 5 bytes de memoria struct Struct { int myint; char mychar; double mydouble; }; 4 Bytes 1 Byte 8 bytes

62 structs tipo C En realidad en memoria, el direccionamiento se hace en múltiplos de 4 bytes (u 8, 16, 32, 64, etc.) No podemos ocupar solo 5 bytes de memoria struct Struct { int myint; char mychar; double mydouble; }; 4 Bytes 1 Byte 3 Bytes 8 bytes

63 Accediendo a los campos Una vez que los campos se han colocado en memoria, estamos solo ante una tira de bytes Como sabemos a que corresponde cada cosa? 4 Bytes 1 Byte 3 Bytes 8 bytes

64 Accediendo a los campos Una idea: Mantenemos una tabla, interna al compilador, contiendo el offset necesario para acceder a cada campo 4 Bytes 1 Byte 3 Bytes 8 bytes Cuando queremos acceder a un campo, comenzamos por la dirección del struct, y luego avanzamos según el offset elegido

65 struct Struct { int x; char y; double z; }; 4 Bytes 1 Byte 3 Bytes 8 bytes

66 struct Struct { int x; char y; double z; }; 4 Bytes 1 Byte 3 Bytes 8 bytes Struct* st = new Struct; st->x = 137; st->y = 'A'; st->z = 2.71;

67 struct Struct { int x; char y; double z; }; 4 Bytes 1 Byte 3 Bytes 8 bytes Struct* st = new Struct; st 0x F8 st->x = 137; st->y = 'A'; st->z = 2.71;

68 struct Struct { int x; char y; double z; }; 4 Bytes 1 Byte 3 Bytes 8 bytes Struct* st = new Struct; st->x = 137; st->y = 'A'; st->z = 2.71; st 0x F8 137 st + 0 bytes A st + 4 bytes 2.71 st + 8 bytes

69 Herencia Como se vería en memoria esto? class Base { int x; int y; } class Derived extends Base { int z; }

70 4 Bytes 4 Bytes class Base { int x; int y; };

71 class Base { int x; int y; }; 4 Bytes 4 Bytes 4 Bytes 4 Bytes 4 Bytes class Derived extends Base { int z; };

72 Accediendo a los campos El acceso a los campos de un objeto, en el caso de tener herencia, es muy similar a las estructuras antes vistas Usamos la dirección de la instancia, y un offset para cada campo que queramos acceder

73 class Base { int x; int y; }; 4 Bytes 4 Bytes class Derived extends Base { int z; }; 4 Bytes 4 Bytes 4 Bytes Base bs = new Base(); bs.x = 137; bs.y = 42; bs 0x F8 137 bs + 0 bytes 42 bs + 4 bytes

74 class Base { int x; int y; }; 4 Bytes 4 Bytes class Derived extends Base { int z; }; 4 Bytes 4 Bytes 4 Bytes Base bs = new Derived(); bs 0x F8 bs.x = 137; 137 bs + 0 bytes bs.y = 42; 42 bs + 4 bytes

75 class Base { int x; int y; }; 4 Bytes 4 Bytes class Derived extends Base { int z; }; 4 Bytes 4 Bytes 4 Bytes Base bs = new Base(); bs.x = 137; bs.y = 42; bs 0x F8 137 bs + 0 bytes 42 bs + 4 bytes Base dr = new Derived(); dr 0x F8 dr.x = 137; 137 dr + 0 bytes dr.y = 42; 42 dr + 4 bytes

76 Herencia simple El diagramado de memoria de una clase D que extiende a una clase B, esta dado por el diagramado de memoria de la clase B, seguido por el diagramado de memoria de la clase D Intuitivamente: Una referencia de tipo B, apuntando a un objeto de tipo D, aun ve el objeto B dentro de D

77 Herencia simple B B D ptr1 : referencia de tipo B ptr2 : referencia de tipo B ptr3 : referencia de tipo D

78 Métodos Los métodos de una clase, son como funciones tradicionales, pero con dos complicaciones Como sabemos cual es el objeto sobre el que se esta aplicando la función? Como sabemos cual función llamar en runtime, por ejemplo para casos de overloading u overriding?

79 this Dentro de una función miembro de una clase, la palabra clave this (o cualquiera de sus variantes), referencia el objeto sobre el que la función aplica Idea: Tratamos this como el primer parámetro implícito de toda función miembro de una clase Cualquier función de N argumentos, es en realidad una función de N+1 argumentos

80 class TheClass { int x; void thefunction(int value) { this.x = value; } } TheClass t = new TheClass(); t.thefunction(42);

81 class TheClass { int x; void thefunction(int value) { this.x = value; } } TheClass t = new TheClass(); t.thefunction(42);

82 class TheClass { int x; } void TheClass_theFunction(TheClass this, int value) { this.x = value; } TheClass t = new TheClass(); t.thefunction(42);

83 class TheClass { int x; } void TheClass_theFunction(TheClass this, int value) { this.x = value; } TheClass t = new TheClass(); t.thefunction(42);

84 class TheClass { int x; } void TheClass_theFunction(TheClass this, int value) { this.x = value; } TheClass t = new TheClass(); TheClass_theFunction(t, 42);

85 Algunas reglas para this Cuando generamos código para llamar a una función miembro de otro objeto, debemos pasar ese objeto como primer parámetro de la función Permite representar el this dentro de la función llamada Dentro de la función, tratamos this como un parámetro mas this puede ser usado como una estructura, en la que hacemos el lookup de los campos con los métodos anteriores

86 Despacho dinámico El despacho dinámico implica determinar que función llamar en runtime, en base al tipo dinámico del objeto sobre el que se invoca la función Conceptualmente, la idea es simple:

87 Despacho dinámico Primero, obtenemos una lista de todas las clases en nuestro programa Luego, generamos código en la RI similar a este: Si el objeto es de tipo A Llamamos a la versión de la clase A de la función Si el objeto es de tipo B Llamamos a la versión de la clase B de la función Si el objeto es de tipo C Llamamos a la versión de la clase C de la función

88 Despacho dinámico Generalmente, en la practica no es buena idea implementar literalmente lo anterior Por dos motivos Es lento El numero de chequeos es O(N), donde N es el numero de clases No es implementable en la mayoría de los lenguajes Que pasa si soporta carga dinámica de clases?

89 Despacho dinámico Podemos usar un enfoque similar al usado para los campos de una clase y su clase derivada Lo hacemos en base a tablas de funciones

90 class Base { int x; void sayhi() { Print("Base"); } } class Derived extends Base{ int y; void sayhi() { Print("Derived"); } } Base.x Base.x Derived.y Código para Base.sayHi Código para Derived.sayHi

91 class Base { int x; void sayhi() { Print("Base"); } } class Derived extends Base{ int y; void sayhi() { Print("Derived"); } } sayhi Base.x sayhi Base.x Derived.y Código para Base.sayHi Código para Derived.sayHi

92 class Base { int x; void sayhi() { Print("Base"); } } class Derived extends Base{ int y; void sayhi() { Print("Derived"); } } sayhi Base.x sayhi Base.x Derived.y Código para Base.sayHi Código para Derived.sayHi

93 class Base { int x; void sayhi() { Print("Base"); } } class Derived extends Base{ int y; void sayhi() { Print("Derived"); } } sayhi Base.x sayhi Base.x Derived.y Código para Base.sayHi Código para Derived.sayHi Base b = new Base(); b.sayhi(); fn = Dirección de b + 0 bytes Invocar fn(b)

94 class Base { int x; void sayhi() { Print("Base"); } } class Derived extends Base{ int y; void sayhi() { Print("Derived"); } } sayhi Base.x sayhi Base.x Derived.y Código para Base.sayHi Código para Derived.sayHi Base b = new Derived(); b.sayhi(); fn = Dirección de b + 0 bytes Invocar fn(b)

95 Virtual Function Tables Una vtable (Virtual Function Table), es un array de punteros a implementaciones de funciones miembro de una clase Para invocar a una función miembro Determinamos el índice en la vtable Obtenemos una referencia al código de la función a través de dicho índice Invocamos a la función

96 Virtual Function Tables Según el tipo de objeto con el que estemos trabajando, podemos tener variantes en las vtables Por ejemplo Que pasa cuando usamos interfaces? Que pasa cuando tenemos herencia múltiple? Que pasa cuando combinamos herencia múltiple con interfaces?

97 Chequeo dinámico de tipos Muchos lenguajes orientados a objetos, requieren alguna forma de control dinamico de tipos Por ejemplo En Java, instanceof En C++, dynamic_cast En C# is a Queremos determinar si un tipo es convertible en otro tipo, NO si son iguales

98 class A { void f() {} } class B extends A { void f() {} } class C extends A { void f() {} } class D extends B { void f() {} } class E extends C { void f() {} }

99 class A { void f() {} } class B extends A { void f() {} } class C extends A { void f() {} } class D extends B { void f() {} } class E extends C { void f() {} } Parent A.f() Parent B.f() Parent C.f() Parent D.f() Parent E.f()

100 Una idea simple Hacemos que cada vtable de un objeto, apunte a la clase padre Para chequear si el objeto es convertible a un tipo T, recorremos los punteros en la vtable de los objetos, hasta encontrar una clase T, o llegar a un tipo sin padre El tiempo de búsqueda es O(d), donde d es la profundidad de la clase en la jerarquía

101 Otra idea mucho mejor Hay una forma mucho mas inteligente y rápida de controlar en runtime la convertibilidad, en tiempo O(1) Asumimos: Que en general no hay muchas clases derivadas de una misma clase (por ejemplo, máximo 10) Un chequeo en runtime de convertibilidad de B a A, solo es posible si B <= A Todos los tipos son conocidos estáticamente

102 Parent A.f() Parent B.f() Parent C.f() Parent Parent Parent Parent D.f() E.f() F.f() G.f()

103 Parent A.f() Parent B.f() Parent C.f() Parent Parent Parent Parent D.f() E.f() F.f() G.f()

104 1 A.f() 2 B.f() 3 C.f() 2*5 2*7 3*11 3*13 D.f() E.f() F.f() G.f()

105 1 A.f() 2 B.f() 3 C.f() D.f() E.f() F.f() G.f()

106 1 A.f() 2 B.f() 3 C.f() D.f() E.f() F.f() G.f() A myobject = /* */ if (myobject instanceof C) { /* */ }

107 1 A.f() 2 B.f() 3 C.f() D.f() E.f() F.f() G.f() A myobject = /* */ if (myobject instanceof C) { /* */ }

108 1 A.f() 2 B.f() 3 C.f() D.f() E.f() F.f() G.f() A myobject = /* */ if (myobject->vtable.key % 3 == 0) { /* */ }

109 CDT mediante números primos Asignamos a cada clase, un numero primo único Podemos reusar primero en jerarquías diferentes Establecemos la clave de esa clase, como el producto de ese primo, por todos los primos de sus superclases

110 CDT mediante números primos Para chequear en runtime si un objeto es convertible a un tipo T Buscamos la clave del objeto (según su clase) Si la clave de T divide a la clave del objeto, entonces el objeto es convertible Sino, no es convertible Asumiendo que el producto de los primos, cabe en un entero (de ahí la limitación de tamaño), el control se puede hacer en O(1)

111 CÓDIGO DE TRES DIRECCIONES

112 C3D / TAC C3D = Código de 3 Direcciones TAC = Three Address Code Es un lenguaje ensamblador de alto nivel, en donde toda operación tiene como máximo tres operandos Usa un stack explicito para representar las llamadas a funciones Usa vtables para despacho dinámico de funciones

113 int x; int y; int x2 = x * x; int y2 = y * y; int r2 = x2 + y2; x2 = x * x; y2 = y * y; r2 = x2 + y2;

114 int a; int b; int c; int d; a = b + c + d; b = a * a + b * b; _t0 = b + c; a = _t0 + d; _t1 = a * a; _t2 = b * b; b = _t1 + _t2;

115 int a; int b; int c; int d; a = b + c + d; b = a * a + b * b; _t0 = b + c; a = _t0 + d; _t1 = a * a; _t2 = b * b; b = _t1 + _t2;

116 Variables temporales El código de tres direcciones puede tener como máximo tres operandos Evaluar una expresión con mas de tres operandos, implica romper la expresión en sub expresiones, introduciendo variables temporales

117 También podemos tener menos de tres operandos El máximo es tres int a; int b; a = * b; _t0 = 5; _t1 = 2 * b; a = _t0 + _t1;

118 Instrucciones de asignación Asignación de variables var = constant; var1 = var2; var1 = var2 op var3; var1 = constant op var2; var1 = var2 op constant; var = constant1 op constant2; Operadores: +, -, *, /, %

119 Booleanos int x; int y; bool b1; bool b2; bool b3; b1 = x + x < y b2 = x + x == y b3 = x + x > y _t0 = x + x; _t1 = y; b1 = _t0 < _t1; _t2 = x + x; _t3 = y; b2 = _t2 == _t3; _t4 = x + x; _t5 = y; b3 = _t5 < _t4;

120 C3D con booleanos Las variables booleanas se representan con enteros, que pueden tener valor 0 o diferente de 0 Agregamos los operadores: <, ==,, && Por ejemplo: b = (x <= y) _t0 = x < y; _t1 = x == y; b = _t0 _t1;

121 Flujo de control int x; int y; int z; if (x < y) z = x; else z = y; _t0 = x < y; IfZ _t0 Goto _L0; z = x; Goto _L1; _L0: z = y; _L1: z = z * z; z = z * z;

122 Flujo de control int x; int y; int z; if (x < y) z = x; else z = y; _t0 = x < y; IfZ _t0 Goto _L0; z = x; Goto _L1; _L0: z = y; _L1: z = z * z; z = z * z;

123 Flujo de control int x; int y; int z; if (x < y) z = x; else z = y; _t0 = x < y; IfZ _t0 Goto _L0; z = x; Goto _L1; _L0: z = y; _L1: z = z * z; z = z * z;

124 Etiquetas El C3D permite el uso de etiquetas, las que marcan puntos nombrados dentro del programa, a los cuales podemos saltar en la ejecución Tenemos 2 instrucciones para el control de flujo Goto LABEL IfZ value Goto LABEL IfZ siempre va asociado con un Goto

125 Flujo de control int x; int y; while (x < y) { x = x * 2; } y = x; _L0: _t0 = x < y; IfZ _t0 Goto _L1; x = x * 2; Goto _L0; _L1: y = x;

126 Un programa completo void main() { int x, y; int m2 = x * x + y * y; while (m2 > 5) { m2 = m2 x; } } main: BeginFunc 24; _t0 = x * x; _t1 = y * y; m2 = _t0 + _t1; _L0: _t2 = 5 < m2; IfZ _t2 Goto _L1; m2 = m2 x; Goto _L0; _L1: EndFunc;

127 Compilando funciones Una función consiste en Una etiqueta indicando el comienzo de la función Una instrucción BeginFunc N; reservando N bytes para almacenamiento local y temporal El cuerpo de la función Una instrucción EndFunc; marcando el final de la función Al llegar a esta instrucción, eliminamos el stack frame y retornamos

128 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales

129 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M

130 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1

131 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1...

132 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1

133 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1 Locales y Temporales

134 Stack Frame para la invocación f(a1,a2,...,an) Stack Frame para la invocación g(b1,b2,...,bm) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1 Locales y Temporales

135 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1

136 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales

137 Compilando llamadas a funciones void SimpleFn(int z) { int x, y; x = x * y * z; } void main() { SimpleFn(100); } _SimpleFn: BeginFunc 16; _t0 = x * y; _t1 = _t0 * z; x = _t1; EndFunc; main: BeginFunc 4; _t0 = 137; PushParam _t0; LCall _SimpleFn; PopParams 4; EndFunc;

138 Gestión del Stack BeginFunc N; solo reserva espacio para locales y temporales EndFunc; solo reclama el espacio reservado por el BeginFunc N; correspondiente Un parámetro se pushea en el stack usando la instrucción PushParam var; El espacio ocupado por los parámetros es reclamado por el llamador usando la instrucción PopParams N; N mide la cantidad de bytes, no una cantidad

139 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales

140 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M PushParam var;

141 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1 PushParam var; PushParam var;

142 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... PushParam var; PushParam var; PushParam var;

143 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1 PushParam var; PushParam var; PushParam var; PushParam var;

144 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1 Locales y Temporales PushParam var; PushParam var; PushParam var; PushParam var; BeginFunc N;

145 Stack Frame para la invocación f(a1,a2,...,an) Stack Frame para la invocación g(b1,b2,...,bm) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1 Locales y Temporales PushParam var; PushParam var; PushParam var; PushParam var; BeginFunc N;

146 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1 Locales y Temporales

147 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1 Locales y Temporales EndFunc;

148 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1

149 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales Param M Param M-1... Param 1 PopParams K;

150 Stack Frame para la invocación f(a1,a2,...,an) Param N Param N-1... Param 1 Locales y Temporales

151 Storage El C3D no especifica donde las variables y los temporales son almacenados Esto generalmente es gestionado en la etapa de generación de código

152 Frame Pointer Param N Param N-1... Param 1 Locales y Temporales

153 Frame Pointer Param N Param N-1... Param 1 Locales y Temporales Frame Pointer

154 Frame Pointer Param N Param N-1... Param 1 Locales y Temporales Frame Pointer Param N Param N-1... Param 1

155 Frame Pointer Param N Param N-1... Param 1 Locales y Temporales Frame Pointer Param N Param N-1... Param 1 Locales y Temporales

156 Frame Pointer Param N Param N-1... Param 1 Locales y Temporales Frame Pointer Param N Param N-1... Param 1 Locales y Temporales

157 Frame Pointer Param N Param N-1... Param 1 Locales y Temporales Frame Pointer Param N Param N-1... Param 1

158 Frame Pointer Param N Param N-1... Param 1 Locales y Temporales Frame Pointer

159 Frame Pointer Param N Param N-1... Param 1 Locales y Temporales Frame Pointer

160 Stack lógico vs Stack físico Param N Param N-1... Param 1 Locales y Temporales Param N Param N-1... Param 1 fp llamador Locales y Temporales Frame Pointer

161 Frame Pointer Param N... Param 1 fp llamador Locales y Temporales Frame Pointer

162 Frame Pointer Param N... Param 1 fp llamador Locales y Temporales Frame Pointer Param N... Param 1

163 Frame Pointer Param N... Param 1 fp llamador Locales y Temporales Frame Pointer Param N... Param 1 fp llamador

164 Frame Pointer Param N... Param 1 fp llamador Locales y Temporales Frame Pointer Param N... Param 1 fp llamador

165 Frame Pointer Param N... Param 1 fp llamador Locales y Temporales Frame Pointer Param N... Param 1 fp llamador Locales y Temporales

166 Frame Pointer Param N... Param 1 fp llamador Locales y Temporales Frame Pointer Param N... Param 1 fp llamador

167 Frame Pointer Param N... Param 1 fp llamador Locales y Temporales Frame Pointer Param N... Param 1 fp llamador

168 Frame Pointer Param N... Param 1 fp llamador Locales y Temporales Frame Pointer Param N... Param 1

169 Frame Pointer Param N... Param 1 fp llamador Locales y Temporales Frame Pointer

170 Dirección de retorno Internamente, el procesador tiene un registro especial denominado IP (Instruction Pointer), el cual almacena la dirección de la próxima instrucción a ejecutar Cuando una función retorna, debe restaurar el IP de forma de que la función llamadora pueda continuar desde donde se quedo Agregamos al stack físico la dirección de retorno

171 Return Address Param N... Param 1 fp llamador ra llamador Locales y Temporales Frame Pointer

172 Return Address Param N... Param 1 fp llamador ra llamador Locales y Temporales Frame Pointer Param N... Param 1

173 Return Address Param N... Param 1 fp llamador ra llamador Locales y Temporales Frame Pointer Param N... Param 1 fp llamador

174 Return Address Param N... Param 1 fp llamador ra llamador Locales y Temporales Frame Pointer Param N... Param 1 fp llamador ra llamador

175 Return Address Param N... Param 1 fp llamador ra llamador Locales y Temporales Frame Pointer Param N... Param 1 fp llamador ra llamador Locales y Temporales

176 Entonces En el generador de código, debemos asignar a cada temporal, variable local y parámetro su propia dirección Estas direcciones ocurren siempre en un stack frame especifico, y son siempre relativas al frame pointer (fp-relative)

177 Entonces Los parámetros comienzan siempre en la dirección fp + 4, creciendo hacia arriba en el stack (esto es una convención) Los locales y temporales comienzan en la dirección fp 8, creciendo hacia abajo en el stack (esto es una convención)

178 Entonces Frame Pointer Param N... Param 1 fp llamador ra llamador Local 0... Local M fp + 4N fp + 4 fp + 0 fp - 4 fp 8 fp 4 4M

179 Valor de retorno En forma análoga a los casos anteriores, debemos poder devolver un valor desde la función a la cual llamamos Debemos reservar espacio para el valor de retorno de la función Este valor debe ser colocado por la función llamadora

180 Valor de retorno Frame Pointer Param N... Param 1 fp llamador ra llamador Local 0... Local M fp + 4N + 4 fp + 8 Return Value fp + 4 fp + 0 fp - 4 fp 8 fp 4 4M

181 Global Pointer Existen lenguajes que soportan este tipo de construcciones: int globalvariable; int main() { globalvariable = 137; } Existe un registro especial, denominado Global Pointer, el cual permite indexar la información de las variables globales

182 Global Pointer Global Pointer Global Variable N... Global Variable 2 Global Variable 1 gp + 4N gp + 4 gp + 0

183 Objetos class A { void fn(int x) { int y; y = x; } } int main() { A a; a.fn(137); } _A.fn: BeginFunc 4; y = x; EndFunc; main: BeginFunc 8; _t0 = 137; PushParam _t0; PushParam a; LCall _A.fn; PopParams 8; EndFunc;

184 Objetos class A { int y; int z; void fn(int x) { y = x; x = z; } } int main() { A a; a.fn(100); } _A.fn: BeginFunc 4; *(this + 4) = x; x = *(this + 8); EndFunc; main: BeginFunc 8; _t0 = 137; PushParam _t0; PushParam a; LCall _A.fn; PopParams 8; EndFunc;

185 Objetos class A { int y; int z; void fn(int x) { y = x; x = z; } } int main() { A a; a.fn(100); } _A.fn: BeginFunc 4; *(this + 4) = x; x = *(this + 8); EndFunc; main: BeginFunc 8; _t0 = 137; PushParam _t0; PushParam a; LCall _A.fn; PopParams 8; EndFunc;

186 Instrucciones de memoria Agregamos estas operaciones de acceso var1 = *var2 var1 = *(var2 + constant) *var1 = var2 *(var1 + constant) = var2

187 GENERANDO C3D

188 Donde estamos? En este punto de la compilación, tenemos Un AST (Árbol Sintáctico) Anotado con información de scope Anotado con información de tipos Para generar el C3D, hacemos una recorrida recursiva de dicho árbol Generamos C3D para los nodos internos Componemos el resultado para armar C3D

189 C3D para expresiones Podemos generar el código de tres direcciones en forma recursiva Los casos base son las expresiones que no tienen hijos Estas, basta ponerlas en temporales Para expresiones que tienen hijos, lo que hacemos es generar recursivamente para estas el código de tres direcciones Vamos a necesitan una función para generar nombres de temporales

190 C3D para expresiones Supongamos una estructura de partida de la forma: Tipo: Operador Valor: + Tipo: Numero Valor: 20 Tipo: Numero Valor: 10

191

192 C3D para sentencias Podemos extender la función anterior para operar sobre sentencias A diferencia de la versión para expresiones, en este caso no retornamos el nombre del temporal usado, ya que una sentencia no genera un valor

193 Estructuras para representar C3D Al momento de representar C3D, necesitamos almacenar: El operador Los operandos Los argumentos para el operador El resultado de la operación Podemos utilizar triples y cuádruplos

194 Cuádruplos

195 Triples

GENERACIÓN DE CÓDIGO

GENERACIÓN DE CÓDIGO GENERACIÓN DE CÓDIGO INTRODUCCION La generación de código es la fase más compleja de un compilador, puesto que no sólo depende de las características del lenguaje fuente sino también de contar con información

Más detalles

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introduccion al Lenguaje C Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introducción C es un lenguaje de programación creado en 1972 por

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

8. Sentencia return y métodos

8. Sentencia return y métodos 92 A. García-Beltrán y J.M. Arranz 8. Sentencia return y métodos Objetivos: a) Describir el funcionamiento de la sentencia return b) Interpretar el resultado de una sentencia return en el código fuente

Más detalles

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

En cualquier caso, tampoco es demasiado importante el significado de la B, si es que lo tiene, lo interesante realmente es el algoritmo. Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa

Más detalles

Modulo 1 El lenguaje Java

Modulo 1 El lenguaje Java Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto

Más detalles

Introducción a la programación orientada a objetos

Introducción a la programación orientada a objetos Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases 3. El tipo Struct 4. Diferencias entre Class y Struct 5. Pilares de la Programación

Más detalles

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

Más detalles

Uso de excepciones en Java

Uso de excepciones en Java Uso de excepciones en Java En Java, cuando se produce un error en un método, se lanza un objeto Throwable. Cualquier método que haya llamado al método puede capturar la excepción y tomar las medidas que

Más detalles

Java Inicial (20 horas)

Java Inicial (20 horas) Java Inicial (20 horas) 1 Temario 1. Programación Orientada a Objetos 2. Introducción y Sintaxis Java 3. Sentencias Control Flujo 4. POO en Java 5. Relaciones entre Objetos 6. Polimorfismo, abstracción

Más detalles

PART II: Moviendo al jugador

PART II: Moviendo al jugador UNITY PART II: Moviendo al jugador El movimiento se lo vamos a dar a través de un programa Definición de programa: Un programa es una secuencia de instrucciones, escritas para realizar una tarea específica

Más detalles

Tema 2. El lenguaje de programación Java (Parte 1)

Tema 2. El lenguaje de programación Java (Parte 1) Programación en Java Tema 2. El lenguaje de programación Java (Parte 1) Luis Rodríguez Baena Facultad de Informática Elementos del lenguaje (I) El juego de caracteres. No utiliza ASCII, sino Unicode de

Más detalles

Programación Orientada a Objetos con Java

Programación Orientada a Objetos con Java Programación Orientada a Objetos con Java M.C. Jorge Eduardo Ibarra Esquer jorgeeie@uabc.mx Sobrecarga de métodos Java permite la definición de dos o más métodos que tengan el mismo nombre, dentro de la

Más detalles

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE Contenidos 1. Introducción 2. El operador NEW 3. El operador DELETE 1 Introducción Hasta ahora hemos visto que cada vez que queremos usar una variable debemos reservarle un lugar de la memoria al comenzar

Más detalles

Entre los más conocidos editores con interfaz de desarrollo tenemos:

Entre los más conocidos editores con interfaz de desarrollo tenemos: Herramientas de programación Para poder programar en ensamblador se precisa de algunas herramientas básicas, como un editor para introducir el código, un ensamblador para traducir el código a lenguaje

Más detalles

Capítulo 12: Indexación y asociación

Capítulo 12: Indexación y asociación Capítulo 12: Indexación y asociación Conceptos básicos Índices ordenados Archivos de índice de árbol B+ Archivos de índice de árbol B Asociación estática Asociación dinámica Comparación entre indexación

Más detalles

Introducción a la Programación 11 O. Humberto Cervantes Maceda

Introducción a la Programación 11 O. Humberto Cervantes Maceda Introducción a la Programación 11 O Humberto Cervantes Maceda Recordando En la sesión anterior vimos que la información almacenada en la memoria, y por lo tanto aquella que procesa la unidad central de

Más detalles

Tiempo de Compilación. Programa fuente. Secuencia. de caracteres. Scanner. Secuencia. de símbolos Parser. Compilador.

Tiempo de Compilación. Programa fuente. Secuencia. de caracteres. Scanner. Secuencia. de símbolos Parser. Compilador. ORGANIZACIÓN DE LA MEMORIA EN TIEMPO DE EJECUCIÓN Compilador Tiempo de Compilación Programa fuente Secuencia de caracteres Scanner Secuencia de símbolos Parser Árbol sintáctico Analizador semántico Generador

Más detalles

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código Tema 6 Reutilización de código Programación 2015-2016 Programación - Tema 6: Reutilización de código 1 Tema 6. Reutilización de código Modularidad. Implementación de métodos. Uso de métodos. Programación

Más detalles

by Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true

by Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true by Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true I. FUNDAMENTOS 3. Representación de la información Introducción a la Informática Curso de Acceso a la Universidad

Más detalles

Preliminares. Tipos de variables y Expresiones

Preliminares. Tipos de variables y Expresiones Preliminares. Tipos de variables y Expresiones Felipe Osorio Instituto de Estadística Pontificia Universidad Católica de Valparaíso Marzo 5, 2015 1 / 20 Preliminares Computadoras desarrollan tareas a un

Más detalles

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler Task Scheduler Se necesita modelar una aplicación que permita definir tareas y ejecutarlas en forma programada. Las tareas pueden ser: La ejecución de programa cualquiera o comando del sistema operativo,

Más detalles

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores Las variables se utilizan en programación para almacenar temporalmente

Más detalles

INSTITUTO TECNOLOGICO de la laguna Programación Orientada a Objetos en C++

INSTITUTO TECNOLOGICO de la laguna Programación Orientada a Objetos en C++ 5.- Herencia Múltiple. Un hecho natural es que una persona tenga más de un pariente mayor, esta situación también se puede dar en la herencia de clases, naturalmente este tipo de herencia involucra un

Más detalles

Nota 2. Luis Sierra. Marzo del 2010

Nota 2. Luis Sierra. Marzo del 2010 Nota 2 Luis Sierra Marzo del 2010 Cada mecanismo de definición de conjuntos que hemos comentado sugiere mecanismos para definir funciones y probar propiedades. Recordemos brevemente qué son las funciones

Más detalles

1. Manejo de memoria estática 2. Manejo de memoria dinámica

1. Manejo de memoria estática 2. Manejo de memoria dinámica 1. Manejo de memoria estática 2. Manejo de memoria dinámica *La administración de memoria de una computadora es una tarea fundamental debido a que la cantidad de memoria es limitada. *El sistema operativo

Más detalles

El lenguaje de Programación C. Fernando J. Pereda <ferdy@gentoo.org>

El lenguaje de Programación C. Fernando J. Pereda <ferdy@gentoo.org> El lenguaje de Programación C Fernando J. Pereda Por qué aprender C? Portable y muy extendido Estándar (C89, C99) El lenguaje de los sistemas Un lenguaje fácil (no, no es broma) Por

Más detalles

A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante

A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante Modulo 2. Inicio con Java Muchas veces encontramos en nuestro entorno referencias sobre Java, bien sea como lenguaje de programación o como plataforma, pero, que es en realidad Java?, cual es su historia?,

Más detalles

CONCEPTOS BASICOS DEL LENGUAJE JAVA

CONCEPTOS BASICOS DEL LENGUAJE JAVA CONCEPTOS BASICOS DEL LENGUAJE JAVA NOMENCLATURA GENERAL En Java se distinguen las letras mayúsculas y minúsculas. Las reglas del lenguaje respecto a los nombres de variables son muy amplias y permiten

Más detalles

Clases y Objetos. Informática II Ingeniería Electrónica

Clases y Objetos. Informática II Ingeniería Electrónica Clases y Objetos Informática II Ingeniería Electrónica Los Tipos de Datos Hasta ahora, en un programa podemos usar para representar variables a: Tipos fundamentales : enteros (int), caracteres (char),

Más detalles

Guía Corta: Alcance y Asociaciones. 1. Preliminares: Nombres y Asociaciones

Guía Corta: Alcance y Asociaciones. 1. Preliminares: Nombres y Asociaciones Universidad Simón Bolívar Departamento de Computación y Tecnología de la Información CI3641 Lenguajes de Programación I Guía Corta: Alcance y Asociaciones Esta guía presenta algunos conceptos básicos y

Más detalles

Estructura de Datos [Tipos de datos concretos y tipos de datos abstractos]

Estructura de Datos [Tipos de datos concretos y tipos de datos abstractos] Estructura de Datos [Tipos de datos concretos y tipos de datos abstractos] M. en C. Sergio Luis Pérez Pérez UAM CUAJIMALPA, MÉXICO, D. F. Trimestre 14-O Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Estructura

Más detalles

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Uso de Ficheros Todas las estructuras de datos vistas hasta ahora utilizan la

Más detalles

Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos

Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos Conceptos ELO329: Diseño y Programación Orientados a Objetos 1 Paradigmas de Programación Historia: Los computadores parten cableados por hardware, Luego se introduce la programación en binario, Se desarrolla

Más detalles

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009 Árboles Ejemplos de estructuras arborescentes: con forma de árbol Regla de Alcance: los objetos visibles en un procedimiento son aquellos declarados en él mismo o en cualquier ancestro de él (cualquier

Más detalles

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Unidad I Sistemas numéricos 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS.

Más detalles

Repaso de las características más importantes de la programación Java y su adaptación a Android

Repaso de las características más importantes de la programación Java y su adaptación a Android Repaso de las características más importantes de la programación Java y su adaptación a Android 1. Entorno de programación en java 2. Variables y tipos de datos 3. Operaciones y operadores 4. Clases y

Más detalles

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Introducción a Java LSUB. 15 de enero de 2015 GSYC Introducción a LSUB GSYC 15 de enero de 2015 (cc) 2014 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada

Más detalles

Objetos y Clases en Java. ELO 329: Diseño y Programación Orientados a Objetos

Objetos y Clases en Java. ELO 329: Diseño y Programación Orientados a Objetos Objetos y Clases en Java ELO 329: Diseño y Programación Orientados a Objetos 1 Elementos de Análisis y Diseño orientado a objetos Notación y relaciones entre clases: Las clases son abstracciones para los

Más detalles

Base de datos en Excel

Base de datos en Excel Base de datos en Excel Una base datos es un conjunto de información que ha sido organizado bajo un mismo contexto y se encuentra almacenada y lista para ser utilizada en cualquier momento. Las bases de

Más detalles

Tema 3 Elementos básicos de programación

Tema 3 Elementos básicos de programación Representación de Datos y Aplicaciones Tema 3 Elementos básicos de programación Natividad Martínez Madrid nati@it.uc3m.es Objetivos del tema 3 Conocer la estructura básica de un programa Java Comprender

Más detalles

Introducción al lenguaje de programación java

Introducción al lenguaje de programación java Introducción al lenguaje de programación java Algoritmia y Programación Slide 1 LENGUAJES DE PROGRAMACION Un lenguaje de programación es un idioma artificial diseñado y creado para expresar algoritmos

Más detalles

Modelo de Objetos Distribuidos

Modelo de Objetos Distribuidos Remote Method Invocation Modelo de Objetos Distribuidos Un objeto remoto es un objeto cuyos métodos pueden ser invocados desde otra máquina virtual de java, potencialmente en un host diferente. Modelo

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS

PROGRAMACIÓN ORIENTADA A OBJETOS PROGRAMACIÓN ORIENTADA A OBJETOS Clase 1. Introducción Profesor: Diego Sánchez Gómez Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases

Más detalles

Práctica 3: Programación con subrutinas

Práctica 3: Programación con subrutinas Práctica 3: Programación con subrutinas 3.1 Objetivos El objetivo de esta práctica es estudiar el soporte del ensamblador del ARM para la gestión de subrutinas, para lo que resulta necesario familiarizarse

Más detalles

Curso de Java POO: Programación orientada a objetos

Curso de Java POO: Programación orientada a objetos Curso de Java POO: Programación orientada a objetos Luis Guerra Velasco Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Introducción a la POO 2 Herencia y polimorfismo 3 Empaquetado de proyectos

Más detalles

Primera Escuela de la Red Temática SVO. Madrid, 27-28 Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta.

Primera Escuela de la Red Temática SVO. Madrid, 27-28 Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta. Primera Escuela de la Red Temática SVO. Madrid, 27-28 Noviembre, 2006 JAVA BÁSICO LAEFF - INTA raul@laeff.inta.es Qué es Java? Java es un lenguaje de programación orientado a objetos desarrollado por Sun

Más detalles

Árboles. Cursos Propedéuticos 2015. Dr. René Cumplido M. en C. Luis Rodríguez Flores

Árboles. Cursos Propedéuticos 2015. Dr. René Cumplido M. en C. Luis Rodríguez Flores Árboles Cursos Propedéuticos 2015 Dr. René Cumplido M. en C. Luis Rodríguez Flores Contenido de la sección Introducción Árbol genérico Definición y representación Árboles binarios Definición, implementación,

Más detalles

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL OBJETIVO Mejorar el nivel de comprensión y el manejo de las destrezas del estudiante para utilizar formulas en Microsoft Excel 2010. 1) DEFINICIÓN Una fórmula de Excel es un código especial que introducimos

Más detalles

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario Empleo de módulos y Procedimientos Procedimientos definidos por el usuario Según lo que hemos visto hasta ahora, Visual Basic, almacena el código en módulos. Hay tres clases de módulos: formularios (.frm),

Más detalles

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones Contenidos 1. Justificación del uso de funciones. 2. Declaración de funciones: prototipos. 3. Prototipos y ficheros de cabecera. 4. Polimorfismo (sobrecarga de funciones). 5. Argumentos formales y actuales.

Más detalles

Generación de código para funciones. Generación de código para funciones. Generación de código para funciones. Generación de código para funciones

Generación de código para funciones. Generación de código para funciones. Generación de código para funciones. Generación de código para funciones Ejemplo introductorio: escritura de funciones en NASM Ejemplo introductorio: escritura de funciones en NASM En estas transparencias pondremos una subrutina ASPLE y la generación de código equivalente En

Más detalles

Introducción a PHP. * No es necesario declarar previamente las variables.

Introducción a PHP. * No es necesario declarar previamente las variables. Introducción a PHP La programación de sitios web cada día está más orientada al desarrollo de páginas dinámicas y aplicaciones, o sea sitios donde el usuario pueda interactuar con la web. Dentro de los

Más detalles

Movimiento a través de una. José San Martín

Movimiento a través de una. José San Martín Movimiento a través de una curva José San Martín 1. Introducción Una vez definida la curva sobre la cual queremos movernos, el siguiente paso es definir ese movimiento. Este movimiento se realiza mediante

Más detalles

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz Compiladores y Lenguajes de Programación Maria de Guadalupe Cota Ortiz Organizaciones que rigen las normas para estandarización de Lenguajes de Programación IEEE (Instituto de Ingenieros Eléctricos y Electrónicos)

Más detalles

Listas, Pilas, Colas y Punteros. Semana 3

Listas, Pilas, Colas y Punteros. Semana 3 Listas, Pilas, Colas y Punteros Semana 3 Dictado por Marco González Núñez 14 de Febrero de 2011 Estructuras de datos simples Hoy hablaremos de lo que sin duda me motivó a crear este curso que son los punteros,

Más detalles

Introducción al tipo de dato ARRAY

Introducción al tipo de dato ARRAY CONTENIDOS. Introducción al tipo de dato ARRAY. Definición, Características, Declaración, Acceso e Inicialización.. Arrays multidimensionales Definición, Declaración, Acceso e Inicialización. Introducción

Más detalles

JavaScript como Orientación a Objetos

JavaScript como Orientación a Objetos Gustavo Lacoste (gustavo@lacosox.org) October 2012 Resumen El objetivo de las siguientes notas es generar una estructura en JavaScript que nos permita reutilizar de manera limpia las funciones creadas

Más detalles

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006 ARBOLES ESTRUCTURAS DE DATOS 2006 DEFINICION Un árbol (tree) es un conjunto finito de nodos. Es una estructura jerárquica aplicable sobre una colección de elementos u objetos llamados nodos; uno de los

Más detalles

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8.

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8. TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8. 1.) (HOLUB). Escribir un traductor que reconozca definiciones de C siguiendo el estilo antiguo, tal como: prueba(uno, dos, tres, cuatro,

Más detalles

Programación Genética

Programación Genética Programación Genética Programación Genética consiste en la evolución automática de programas usando ideas basadas en la selección natural (Darwin). No sólo se ha utilizado para generar programas, sino

Más detalles

TIPOS DE DATOS DEFINIDOS POR EL PROGRAMADOR: Estructuras CONTENIDOS

TIPOS DE DATOS DEFINIDOS POR EL PROGRAMADOR: Estructuras CONTENIDOS ESTRUCTURAS CONTENIDOS 1. Concepto de estructura 2. Definición del tipo de dato estructura 3. Declaración de variables de tipo estructura 4. Inicialización de variables de tipo estructura 5. Acceso a los

Más detalles

PHP y MySQL. Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases

PHP y MySQL. Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases PHP y MySQL Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases Herencia de Objetos La herencia permite crear muchas clases que son similares entre si, sin tener

Más detalles

Lenguajes de Programación

Lenguajes de Programación Lenguajes de Programación Mediante los programas se indica a la computadora que tarea debe realizar y cómo efectuarla, pero para ello es preciso introducir estas órdenes en un lenguaje que el sistema pueda

Más detalles

Estructuras de Datos y Algoritmos. Árboles de Expresión

Estructuras de Datos y Algoritmos. Árboles de Expresión Estructuras de Datos y Algoritmos Árboles de Expresión Año 2014 Introducción Los avances tecnológicos producen día a día una gran cantidad de información que debe ser almacenada y procesada en forma eficiente.

Más detalles

Taller de Programación Estructurada en Java Tema 2. Fundamentos de la programación orientada a objetos

Taller de Programación Estructurada en Java Tema 2. Fundamentos de la programación orientada a objetos Taller de Programación Estructurada en Java Tema 2. Fundamentos de la programación orientada a objetos Ingeniero en Computación José Alfredo Cobián Campos josealfredocobian@gmail.com Facultad de Ciencias

Más detalles

Tema 2. Diseño del repertorio de instrucciones

Tema 2. Diseño del repertorio de instrucciones Soluciones a los problemas impares Tema 2. Diseño del repertorio de instrucciones Arquitectura de Computadores Curso 2009-2010 Tema 2: Hoja: 2 / 16 Tema 2: Hoja: 3 / 16 Base teórica Al diseñar un computador,

Más detalles

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */ Principios de Programación El lenguaje C 1. Variables locales y globales 1.1. Variables locales Las funciones permiten al programador modularizar un programa. Todas las variables declaradas en las definiciones

Más detalles

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA Fuente: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Por qué Java? TIOBE Index for March 2015 Fuente: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Más detalles

DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO

DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO I. SISTEMAS NUMÉRICOS DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO LIC. LEYDY ROXANA ZEPEDA RUIZ SEPTIEMBRE DICIEMBRE 2011 Ocosingo, Chis. 1.1Sistemas numéricos. Los números son los mismos en todos

Más detalles

Objetivo de aprendizaje del tema

Objetivo de aprendizaje del tema Computación II Tema 3. Identificadores, palabras clave y tipos de datos Objetivo de aprendizaje del tema Al finalizar el tema serás capaz de: Distinguir i entre modificadores d válidos y no válidos. Enumerar

Más detalles

PROGRAMACIÓN BÁSICA DE LA COMPUTADORA. 1 Introducción. Tabla 1: Instrucciones MIPS

PROGRAMACIÓN BÁSICA DE LA COMPUTADORA. 1 Introducción. Tabla 1: Instrucciones MIPS PROGRAMACIÓN BÁSICA DE LA COMPUTADORA 1 Introducción Un sistema de computadora total incluye tanto circuitería (hardware) como programación (software). El hardware consta de los componentes físicos y todo

Más detalles

REDES INFORMATICAS: Protocolo IP

REDES INFORMATICAS: Protocolo IP REDES INFORMATICAS: Protocolo IP 1. PRINCIPIOS BÁSICOS DE IP El protocolo IP se basa en tres principios básicos: Un direccionamiento de los ordenadores. Un tipo de dato: el datragrama IP. Un algoritmo

Más detalles

Tecnologías en la Educación Matemática. Expresiones. Datos. Expresiones Aritméticas. Expresiones Aritméticas 19/08/2014

Tecnologías en la Educación Matemática. Expresiones. Datos. Expresiones Aritméticas. Expresiones Aritméticas 19/08/2014 Tecnologías en la Educación Matemática jac@cs.uns.edu.ar Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR 1 Datos Los algoritmos combinan datos con acciones. Los datos de entrada

Más detalles

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos 2.1. Principios básicos del Modelado de Objetos UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos Hoy en día muchos de los procesos que intervienen en un negocio o empresa y que resuelven

Más detalles

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3 UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3 INTRODUCCIÓN El elemento hardware de un sistema básico de proceso de datos se puede estructurar en tres partes claramente diferenciadas en cuanto a sus funciones:

Más detalles

11. Algunas clases estándar de Java (II)

11. Algunas clases estándar de Java (II) 122 A. García-Beltrán y J.M. Arranz 11. Algunas clases estándar de Java (II) Objetivos: a) Presentar la clase predefinida en Java para trabajar con arrays b) Interpretar el código fuente de una aplicación

Más detalles

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1 Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1.1 Ejercicio 1: Máquina Expendedora (3.5 ptos.)... 1 1.2 Ejercicio 2: Clase Circulo (1.0 pto.)... 3 1.3 Ejercicio

Más detalles

SERVICE ORIENTED ARCHITECTURE (SOA) CONTENIDO

SERVICE ORIENTED ARCHITECTURE (SOA) CONTENIDO SERVICE ORIENTED ARCHITECTURE (SOA) CONTENIDO Introducción:...1 Service Oriented Architecture...2 Elementos de una Service Oriented Architecture...2 Application frontends...2 Servicios...2 Contrato:...3

Más detalles

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso 2010 2011. Cuatrimestre de otoño. 17 de Enero de 2011

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso 2010 2011. Cuatrimestre de otoño. 17 de Enero de 2011 EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso 2010 2011. Cuatrimestre de otoño. 17 de Enero de 2011 1. (0,75 PUNTOS) Identificad a continuación las sentencias que son ciertas, descartando

Más detalles

ANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos.

ANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos. ANÁLISIS SEMÁNTICO El análisis semántico dota de un significado coherente a lo que hemos hecho en el análisis sintáctico. El chequeo semántico se encarga de que los tipos que intervienen en las expresiones

Más detalles

Árboles AVL. Laboratorio de Programación II

Árboles AVL. Laboratorio de Programación II Árboles AVL Laboratorio de Programación II Definición Un árbol AVL es un árbol binario de búsqueda que cumple con la condición de que la diferencia entre las alturas de los subárboles de cada uno de sus

Más detalles

Examen Principios de Programación Febrero 2012

Examen Principios de Programación Febrero 2012 Por favor siga las siguientes indicaciones: Escriba con lápiz. Escriba su nombre y número de documento en todas las hojas que entregue. Numere las hojas e indique el total de hojas en la primera de ellas.

Más detalles

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES CASO PRÁCTICO DISTRIBUCIÓN DE COSTES Nuestra empresa tiene centros de distribución en tres ciudades europeas: Zaragoza, Milán y Burdeos. Hemos solicitado a los responsables de cada uno de los centros que

Más detalles

Funciones. Diseño de funciones. Uso de instrucción jal y retorno de subrutina.

Funciones. Diseño de funciones. Uso de instrucción jal y retorno de subrutina. MIPS Funciones 1 Funciones Diseño de funciones. Uso de instrucción jal y retorno de subrutina. Se suelen denominar funciones, procedimientos, subrutinas, subprogramas a las estructuras que emplean los

Más detalles

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante Carnet Nombre: Examen C++ Grupo A Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante Pág.1 Índice 1. INTRODUCCIÓN... 1 2. EJERCICIO 1: AGENDA TELEFÓNICA (4.0 PTOS.)...1 3. EJERCICIO 2:

Más detalles

CLASE # 5 TÉCNICAS DE CAJA BLANCA

CLASE # 5 TÉCNICAS DE CAJA BLANCA CLASE # 5 TÉCNICAS DE CAJA BLANCA 750105M - TÉCNICAS DE PRUEBAS DE SOFTWARE INGENIERÍA DE SISTEMAS Y COMPUTACIÓN UNIVERSIDAD DEL VALLE SEMESTRE 2013A - DOCENTE BEATRIZ FLORIAN GAVIRIA Basado Parcialmente

Más detalles

1 1 0 1 x 1 0 1 1 1 1 0 1 + 1 1 0 1 0 0 0 0 1 1 0 1 1 0 0 0 1 1 1 1

1 1 0 1 x 1 0 1 1 1 1 0 1 + 1 1 0 1 0 0 0 0 1 1 0 1 1 0 0 0 1 1 1 1 5.1.3 Multiplicación de números enteros. El algoritmo de la multiplicación tal y como se realizaría manualmente con operandos positivos de cuatro bits es el siguiente: 1 1 0 1 x 1 0 1 1 1 1 0 1 + 1 1 0

Más detalles

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J. Sensor de Temperatura utilizando el Starter Kit Javelin Stamp Realizado por: Bertha Palomeque A. Rodrigo Barzola J. INTRODUCCION DIFERENCIAS EJEMPLOS JAVA Orientado a Objetos Multiplataforma Programar

Más detalles

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Contenido Tipos de herencia Herencia y niveles de visibilidad Herencia y creación Redefinición de métodos Conversión

Más detalles

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual Introducción Algunas de las personas que trabajan con SGBD relacionales parecen preguntarse porqué deberían preocuparse del diseño de las bases de datos que utilizan. Después de todo, la mayoría de los

Más detalles

Lenguaje de Programación: Go

Lenguaje de Programación: Go Centro de Investigación y de Estudios Avanzados del I.P.N 9 de Noviembre de 2011 Go Es un lenguaje de programación de propósito general que es promovido por: Rob Pike, Robert Griesemer, Ken Thompson, Russ

Más detalles

Ingº CIP Fabian Guerrero Medina Master Web Developer-MWD

Ingº CIP Fabian Guerrero Medina Master Web Developer-MWD 1 Java es un lenguaje de programación de Sun Microsystems originalmente llamado "Oak. James Gosling Bill Joy 2 Oak nació para programar pequeños dispositivos electrodomésticos, como los asistentes personales

Más detalles

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología La metodología para el desarrollo de software es un modo sistemático de realizar, gestionar y administrar un proyecto

Más detalles

3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON)

3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON) 3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON) 3.1.1 Introducción Este método proporciona un soporte para el diseño creativo de productos de software, inclusive a escala industrial.

Más detalles

19. Packages o paquetes

19. Packages o paquetes Programación orientada a objetos con Java 201 19. Packages o paquetes Objetivos: a) Definir el concepto de paquete b) Interpretar el código fuente de una aplicación Java donde se utilicen paquetes c) Construir

Más detalles

Definición de clases: Herencia, polimorfismo, ligadura dinámica

Definición de clases: Herencia, polimorfismo, ligadura dinámica Tema 7 Definición de clases: Herencia, polimorfismo, ligadura dinámica Con alguna frecuencia es necesario definir clases de objetos entre las cuales hay elementos comunes. En una aplicación en la cual

Más detalles

Manual de NVU Capítulo 4: Los enlaces

Manual de NVU Capítulo 4: Los enlaces Manual de NVU Capítulo 4: Los enlaces Pág. 1 Manual de NVU Capítulo 4: Los enlaces Reconocimiento-NoComercial-CompartirIgual 2.5 España Realizado por: Julio Ruiz Palmero (Universidad de Málaga) julioruiz@uma.es

Más detalles

Uso de Visual C++ Pre-Practica No. 3

Uso de Visual C++ Pre-Practica No. 3 Pre-Practica No. 3 Uso de Visual C++ Microsoft Visual C++ 2010 es una versión de Visual Studio específica para el lenguaje de programación C++. Es un entorno de desarrollo muy completo y profesional. Por

Más detalles

picojava TM Características

picojava TM Características picojava TM Introducción El principal objetivo de Sun al introducir Java era poder intercambiar programas ejecutables Java entre computadoras de Internet y ejecutarlos sin modificación. Para poder transportar

Más detalles