Tema 1iesmalilla.edu.gva.es/cms_2_5/attachments/article/1208/... · 2020-04-03 · • El...
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/1.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/2.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/3.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/4.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/5.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/6.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/7.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/8.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/9.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/10.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/11.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/12.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/13.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/14.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/15.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/16.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/17.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/18.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/19.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/20.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/21.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/22.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/23.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/24.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/25.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/26.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/27.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/28.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/29.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/30.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/31.jpg)
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. •](https://reader034.fdocuments.mx/reader034/viewer/2022043004/5f853fbe41190567362ab297/html5/thumbnails/32.jpg)
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