tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · curso...

31
Tema 1 Programación Orientada a Objetos Curso 2017/2018 Introducción al paradigma de programación orientado a objetos

Upload: phamhanh

Post on 11-Oct-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Tema 1

Programación Orientada a Objetos

Curso 2017/2018

Introducción al paradigma de programación orientado a objetos

Page 2: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 2

Contenido

� Introducción

� Paradigmas de programación vs. Lenguajes de

programación

� Lenguajes de programación orientados a objetos

� Características del lenguaje Java

� Características del paradigma de programación

orientado a objetos

Page 3: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 3

Introducción

� La evolución de los lenguajes de programación está ligada al crecimiento de la complejidad de las aplicaciones.

� Adaptación a las nuevas aplicaciones y a la mejora de la capacidad de procesamiento del hardware.

� La forma de programar se acerca más a los conceptos del dominio de la aplicación (abstracción).

Page 4: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 4

Paradigmas de programación

� Paradigma de programación:

� Colección de conceptos que guían el proceso de construcción de un programa, determinando su estructura.

� Estos conceptos controlan la forma en que pensamos y formulamos los programas.

� Un lenguaje de programación refleja un paradigma.

Paradigma de programación Lenguaje de programación

Imperativo Pascal, C, …

Orientado a Objetos Java, C++, C#, …

Page 5: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 5

Lenguajes de programación orientados a objetos

� Imagen tomada de: http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro15/11_lenguajes_de_programacin_orientados_a_objetos.html

Page 6: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 6

Lenguajes OO – Años 80

� Popularidad de los lenguajes OO.

� C++ (1985): • Extensión de C con características OO.

• Muy popular, ayudó a difundir la POO.

� Eiffel (1985):• Bertrand Meyer

• Lenguaje orientado a objetos puro.

• Fruto de un profundo estudio del paradigma OO.

• Lenguaje “teórico” poco utilizado.

Page 7: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 7

Lenguajes OO – Años 90

� Java (1995):• Sun Microsystems � Oracle (2009)

• Lenguaje OO puro.

• Se popularizó por su uso en la web.

• Actualmente soporta una extensa plataforma de desarrollo de software (numerosas bibliotecas de código).

� C# (2000):• Combina C++ y Java.

• Integrado en la plataforma .NET de Microsoft.

Page 8: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 8

Tecnología Java

� https://www.java.com/es/about/

– En empresas, el 97% de los ordenadores de escritorio

ejecutan Java.

– En el ámbito doméstico, el 89% de los ordenadores

personales en Estados Unidos ejecutan Java.

– Más de 9 millones de desarrolladores de Java en todo el

mundo.

– 3.000 millones de teléfonos móviles ejecutan Java.

– Todos los reproductores de Blu-ray incluyen Java.

– 125 millones de dispositivos de televisión ejecutan Java.

Page 9: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 9

Ranking

http://www.tiobe.com/tiobe-index/

Page 10: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 10

Evolución

http://www.tiobe.com/tiobe-index/

Page 11: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 11

Características del lenguaje Java

� Independiente de la plataforma de ejecución:

• El compilador Java genera código intermedio (bytecodes)

independiente de la plataforma.

• Los bytecodes son interpretados por la máquina virtual de

Java (JVM).

• El código compilado se puede ejecutar en muchas

plataformas (Windows, Linux, Mac, etc.) siempre y cuando

cuenten con el entorno de ejecución de Java (incluye la

máquina virtual)

• La tecnología de implementación (compilador+intérprete)

hace que el código Java sea portable.

Page 12: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 12

Características del lenguaje Java

� Independiente de la plataforma de ejecución:

Imagen tomada de: http://javapapers.wordpress.com/2011/11/28/java-virtual-machine-jvm/

Page 13: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 13

Características del lenguaje Java

� Sencillo:

• La sintaxis de Java es muy parecida a C++

• Elimina las características de C++ más complejas,

por ejemplo, punteros.

� Orientado a Objetos:

• A diferencia de C++, es un lenguaje OO puro.

• Las capacidades OO son similares a las de C++.

Page 14: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 14

Características del lenguaje Java

� Robusto:

• Lenguaje fuertemente tipado

- El compilador detecta muchos problemas que, en otros

lenguajes, aparecerían en tiempo de ejecución.

• Mecanismo de excepciones

- Gestión de errores en tiempo de ejecución.

• Elimina los errores derivados de una mala gestión

de memoria

- Mecanismo de “recogida de basura”.

- Elimina la gestión de punteros.

Page 15: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 15

Evolución del lenguaje Java

Imagen tomada de: http://wiki.bcmoney-mobiletv.com/index.php?title=Java

21/09/2017??

Page 16: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 16

Orientación a Objetos

� Técnica de programación que organiza el

software como una colección de objetos que

colaboran para realizar la funcionalidad de un

sistema.

Page 17: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 17

Orientación a Objetos

� Nuevo enfoque de programación centrado en los

conceptos (abstracciones) del dominio de la aplicación.

� Estrategia de desarrollo: el software se organiza en

torno a los módulos que son deducidos de los tipos de

objetos del dominio de la aplicación.

� Diferencia con el paradigma imperativo:

� Centrado en las funciones, qué hace el sistema, en lugar de quién lo hace.

� Estrategia de desarrollo: refinamiento por pasos sucesivos.

Page 18: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 18

Desarrollo Orientado a Objetos

� Identificar los objetos relevantes al problema.

� Describir los tipos de objetos y su propiedades.

� Encontrar las operaciones para los tipos de objetos.

� Identificar relaciones entre objetos.

� Utilizar los tipos de objetos y relaciones para estructurar el software.

Page 19: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 19

Ejemplo: Objeto Coche

Operaciones que puede realizar:•Mover •Parar •Girar a la derecha •Girar a la izquierda •Arrancar

Tiene las propiedades:•Color •Velocidad •Ángulo dirección

Page 20: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 20

Clases de objetos. Clase Coche

Coche

color

velocidad

dirección

mover()

parar()

girarDerecha()

girarIzquierda()

arrancar()

� Los objetos con propiedades similares y el mismo comportamiento se agrupan en clases.

Page 21: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 21

Relación de clientela

• Una persona tiene información sobre el

coche que posee.

Page 22: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 22

Comunicación entre objetos

� Objetos se comunican mediante paso de mensajes

Page 23: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 23

Relación de herencia

� Autobús ES UN Coche.

� Autobús es una especialización de Coche que tiene nuevas propiedades y funcionalidad.

Page 24: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 24

Características del paradigma OO

Page 25: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 25

Ejemplo: Pila. Abstracción

Definición del TAD:

inserta(x)añade x a la pila convirtiéndolo en el nuevo tope

recupera()devuelve el elemento situado en el tope

suprime()elimina el elemento situado en el tope

vacía()devuelve verdadero si está vacía

Fuente: Apuntes TP Juan Antonio Laguna

Page 26: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 26

Modularidad. Pila en C

Pila.h(definición TAD)

PilaEstatica.c(representación Array)

PilaDinamica.c(representación Nodos Enlazados)

� En un lenguaje imperativo la unidad de descomposición del software son las funciones.

Inserta(Pila p, int x) {

p->tope = p->tope + 1;

p->datos[p->tope] = x;

}

Page 27: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 27

Modularidad. Pila en Java

public class Pila {

final static int N = 100;

int[] datos = new int[N];

int tope = -1;

void inserta(int x){

tope = tope +1;

datos[tope] = x;

}

boolean vacia(){

return tope == -1;

}

}

Pila.java

Page 28: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 28

Encapsulación. Pila en Java

public class Pila {

final static int N = 100;

int[] datos = new int[N];

int tope = -1;

void inserta(int x){

tope = tope +1;

datos[tope] = x;

}

boolean vacia(){

return tope == -1;

}

}

Pila.javaEstructura

Comportamiento

Page 29: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 29

Ocultación de Información

public class Pila {

final static int N = 100;

int[] datos = new int[N];

int tope = -1;

void inserta(int x){

tope = tope +1;

datos[tope] = x;

}

boolean vacia(){

return tope == -1;

}

}

Pila.javaEstructura

Comportamiento

Privado

Privado

Privado

Page 30: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 30

Herencia

� ¿Si necesito una pila que sólo guarde las 5 últimas

modificaciones de un editor de texto?

� Cuando alcanza el tamaño límite se descarta la modificación

más antigua.

� ¿Tendría que crear una nueva clase pila?

� ¿Puedo reutilizar el trabajo que ya hemos hecho?

� Solución: PilaLimitada hereda de Pila.

Page 31: Tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · Curso 2017/2018 Programación Orientada a Objetos 3 Introducción La evolución de los lenguajes

Curso 2017/2018 Programación Orientada a Objetos 31

Polimorfismo

¡¡necesito

una pila!!

Pila

PilaLimitada