Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El...

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

Transcript of Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El...

Page 1: Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Tema 1

Programación Orientada a Objetos

Curso 2019/2020

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

Page 2: Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 Programación Orientada a Objetos 8

Ranking

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

Page 9: Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 Programación Orientada a Objetos 9

Evoluciónhtt

p:/

/ww

w.t

iobe.

com

/tio

be-

index

/

Page 10: Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 Programación Orientada a Objetos 14

Evolución del lenguaje Java

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

Page 15: Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 Programación Orientada a Objetos 20

Relación de clientela

• Una persona tiene información sobre el

coche que posee.

Page 21: Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 Programación Orientada a Objetos 21

Comunicación entre objetos

Objetos se comunican mediante paso de mensajes

Page 22: Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 Programación Orientada a Objetos 23

Paradigma Orientación a Objetos

Page 24: Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 Programación Orientada a Objetos 24

Características del paradigma OO

Abstracción:

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

Modularidad:

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

Encapsulación:

Permite agrupar en un mismo módulo tanto laestructura como el comportamiento de los tipos dedatos.

Page 25: Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 Programación Orientada a Objetos 25

Características del paradigma OO

Ocultación de Información:

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

Herencia:

Permite definir unas clases a partir de otras.

Polimorfismo:

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

Page 26: Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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.java

Estructura

Comportamiento

Page 30: Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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.java

Estructura

Comportamiento

Privado

Privado

Privado

Page 31: Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 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 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. •

Curso 2019/2020 Programación Orientada a Objetos 32

Polimorfismo

En la configuración del navegador podemos cambiar el modo de

gestionar el historial

Pila

PilaLimitada