tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/materialteoriaalumnos/tema 1. conceptos... · • momento en el...
TRANSCRIPT
![Page 1: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/1.jpg)
Departamento de Lenguajes y Sistemas informáticosUniversidad de Granada
Tema 1
Lección 2Conceptos Básicos de los Lenguajes Dirigidos a Objetos
![Page 2: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/2.jpg)
Tiempo de Enlace
• Momento en el que se determina el significado de una construcción– Tipo de una variable– Clase de un objeto– Método que responde un mensaje
ejecucióncompilación
![Page 3: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/3.jpg)
Identificador, Tipo y Valor
• Identificador (variable)• Valor• Tipo
– Asignación estática de tipos– Asignación fuerte de tipos
x
![Page 4: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/4.jpg)
Tipo Estático y Tipo Dinámico
• Una variable puede referenciar a cualquier objeto de la clase declarada o de sus subclases– Tipo Estático– Tipo Dinámico
Animal
Ave Reptil
Gallina PatoAnimal x;
x = new Animal();
x = new Reptil();
x = new Gallina();
![Page 5: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/5.jpg)
El Problema del Contenedor
![Page 6: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/6.jpg)
El Problema del Contenedor
ArrayList empresa = new ArrayList();empresa.add(new EmpleadoAsalariado(“Juan”, 65426758, 1200));empresa.add(new EmpleadoAComision(“Ana”, 54416351, 0.3));Iterator itEmpr = empresa.Iterator();while(itEmpr.hasNext()) {
Object e = itEmpr.next();String n = (Empleado) e.dimeNombre();float s = (Empleado) e.calculaSueldo();if ( e instanceof EmpleadoAComision)
float c = (EmpleadoAComision) e.dimeComision();}
![Page 7: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/7.jpg)
El Problema del Contenedor
ArrayList empresa = new ArrayList();empresa.add(new EmpleadoAsalariado(“Juan”, 65426758, 1200));empresa.add(new EmpleadoAComision(“Ana”, 54416351, 0.3));Iterator itEmpr = empresa.Iterator();while(itEmpr.hasNext()) {
Empleado e = (Empleado) itEmpr.next();String n = e.dimeNombre();float s = e.calculaSueldo();if ( e instanceof EmpleadoAComision)
float c = (EmpleadoAComision) e.dimeComision();}
![Page 8: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/8.jpg)
Enlace Estático y Dinámico
Estático: ↑ Eficiencia, ↓ Flexibilidad
Dinámico: ↑ Flexibilidad, ↓ Eficiencia
eee fff
![Page 9: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/9.jpg)
Eficiencia vs Flexibilidad
• Asignación estática de tiposConocer el objeto que sale del contenedor
Almacenamiento y generación de código
Detectar errores de tipos en compilación
• Asignación dinámica de tiposAumenta el costo de paso de mensajes (requiere ligadura dinámica)
Simplifica la construcción de ED genéricas
![Page 10: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/10.jpg)
Eficiencia vs Flexibilidad
• Enlace estático de métodos Paso de mensajes implantado como llamadas a
procedimientos
• Enlace dinámico de métodosAcoplar en tiempo de ejecución método y mensaje
Pueden ocurrir errores en tiempo de ejecución
Facilita el desarrollo de componentes sw reutilizables
![Page 11: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/11.jpg)
El Problema del Contenedor
ArrayList empresa = new ArrayList();empresa.add(new Pera());empresa.add(new EmpleadoAComision(“Ana”, 54416351, 0.3));Iterator itEmpr = empresa.Iterator();while(itEmpr.hasNext()) {
Object e = itEmpr.next();String n = (Empleado) e.dimeNombre(); //Error en ejecuciónfloat s = (Empleado) e.calculaSueldo(); //Error en ejecuciónif ( e instanceof EmpleadoAComision)
float c = (EmpleadoAComision) e.dimeComision();}
![Page 12: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/12.jpg)
Ligadura en los Lenguajes de Programación
• Lenguajes tradicionales– Ligadura estática
(compilación/encuadernación)
• Lenguajes orientados a objetos– Siempre dinámica (Smalltalk)– Lo elige el programador (C++)– Depende de si se trata de una clase o un tipo
básico (Java)
![Page 13: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/13.jpg)
Ligadura en los Lenguajes de Programación
Estática por defecto
Dinámica para objetos
Dinámica
Ligadura de Métodos
Asignación de Tipos
EstáticaC++
EstáticaJava
DinámicaSmalltalk
![Page 14: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/14.jpg)
Ejemplo Ligadura Estática
![Page 15: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/15.jpg)
Ejemplo(I) Ligadura Dinámica
Object
ElementoBuzonBuzon
Sobre Lista
ver(){} ver(){}
ver();
0..*
![Page 16: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/16.jpg)
Ejemplo(II) Ligadura Dinámica
self preguntarPorSuSuegra
![Page 17: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/17.jpg)
Ejemplo(II) Ligadura Dinámica
![Page 18: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/18.jpg)
Ejemplo(II) Ligadura Dinámica
FloristaprepararFlores();
FloristaNormal FloristaFunerariaprepararFlores(){} prepararFlores(){}
![Page 19: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/19.jpg)
Ejemplo(II) Ligadura Dinámica
Ligadura dinámica
Variable polimórfica
![Page 20: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/20.jpg)
Stack vs Heap
• Variable automática{int a = 45;... a ...}
• Variable dinámicaString s = new String(“abc”); {String a;a = s;... a...
}
Stack
45a
“abc”
sa
Stack Heap
![Page 21: Tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 1. Conceptos... · • Momento en el que se determina el ... C++ Estática Java Estática ... •Apuntadores –Explícito](https://reader031.vdocuments.net/reader031/viewer/2022021517/5bb469ed09d3f2734f8dceb1/html5/thumbnails/21.jpg)
Stack vs Heap
• Recuperación de memoria– Liberación explícita– Recolector de basura
• Vida de los valores• Apuntadores
– Explícito– Todo son punteros
• Creación inmutable