tema 1 - lsi.ugr.eslsi.ugr.es/~pdo/materialteoriaalumnos/tema 1. conceptos... · • momento en el...

21
Departamento de Lenguajes y Sistemas informáticos Universidad de Granada Tema 1 Lección 2 Conceptos Básicos de los Lenguajes Dirigidos a Objetos

Upload: vukhanh

Post on 03-Oct-2018

313 views

Category:

Documents


0 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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