Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1...

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

Transcript of Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1...

Page 1: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Tema 1

Programación Orientada a Objetos

Curso 2018/2019

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

Page 2: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 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 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 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 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 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 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 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 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 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 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 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 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 8

Ranking

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

Page 9: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 9

Evoluciónhtt

p:/

/ww

w.t

iobe.

com

/tio

be-

index

/

Page 10: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 10

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 11: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 11

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 12: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 12

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 13: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 13

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 14: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 14

Evolución del lenguaje Java

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

17/07/2018

Page 15: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 15

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 16: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 16

Orientación a Objetos

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 17: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 17

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 18: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 18

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 19: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 19

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 20: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 20

Relación de clientela

• Una persona tiene información sobre el

coche que posee.

Page 21: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 21

Comunicación entre objetos

Objetos se comunican mediante paso de mensajes

Page 22: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 22

Relación de herencia

Autobús ES UN Coche.

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

Page 23: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 23

Paradigma Orientación a Objetos

Page 24: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 24

Características del paradigma OO

Abstracción:

Permite centrarnos en las propiedades de los tipos de datos y no en la implementación.

Modularidad:

Permite descomponer el software en componentes (clases, funciones) que se pueden combinar para resolver el problema original.

Encapsulación:

Permite agrupar en un mismo módulo tanto la estructura como el comportamiento de los tipos de datos.

Page 25: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 25

Características del paradigma OO

Ocultación de Información:

Permite establecer la visibilidad de las propiedades de un módulo, diferenciando la parte pública y la parte privada.

Herencia:

Permite definir unas clases a partir de otras.

Polimorfismo:

Permite que una entidad pueda hacer referencia a objetos de diferente tipo en tiempo de ejecución. Ligado al concepto de ligadura dinámica.

Page 26: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 26

Ejemplo: Pila. Abstracción.

Definición del tipo de datos:

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 Sánchez Laguna

Page 27: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 27

Modularidad. Pila en C

Pila.h(definición del tipo de datos)

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 28: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 28

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 29: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 29

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 30: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 30

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 31: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 31

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 32: Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1 Programación Orientada a Objetos Curso 2018/2019 Introducción al paradigma de programación

Curso 2018/2019 Programación Orientada a Objetos 32

Polimorfismo

En la configuración

del navegador podemos

cambiar el modo de

gestionar el historial

Pila

PilaLimitada