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...
Tema 1
Programación Orientada a Objetos
Curso 2019/2020
Introducción al paradigma de programación orientado a objetos
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
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).
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#, …
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
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.
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.
Curso 2019/2020 Programación Orientada a Objetos 8
Ranking
http://www.tiobe.com/tiobe-index/
Curso 2019/2020 Programación Orientada a Objetos 9
Evoluciónhtt
p:/
/ww
w.t
iobe.
com
/tio
be-
index
/
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.
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/
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++.
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.
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
…
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.
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.
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.
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
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.
Curso 2019/2020 Programación Orientada a Objetos 20
Relación de clientela
• Una persona tiene información sobre el
coche que posee.
Curso 2019/2020 Programación Orientada a Objetos 21
Comunicación entre objetos
Objetos se comunican mediante paso de mensajes
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.
Curso 2019/2020 Programación Orientada a Objetos 23
Paradigma Orientación a Objetos
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.
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.
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
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;
}
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
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
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
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.
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