Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1...
Transcript of Tema 1 - UMdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · Tema 1...
Tema 1
Programación Orientada a Objetos
Curso 2018/2019
Introducción al paradigma de programación orientado a objetos
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
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).
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#, …
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
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.
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.
Curso 2018/2019 Programación Orientada a Objetos 8
Ranking
http://www.tiobe.com/tiobe-index/
Curso 2018/2019 Programación Orientada a Objetos 9
Evoluciónhtt
p:/
/ww
w.t
iobe.
com
/tio
be-
index
/
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.
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/
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++.
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.
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
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.
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.
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.
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
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.
Curso 2018/2019 Programación Orientada a Objetos 20
Relación de clientela
• Una persona tiene información sobre el
coche que posee.
Curso 2018/2019 Programación Orientada a Objetos 21
Comunicación entre objetos
Objetos se comunican mediante paso de mensajes
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.
Curso 2018/2019 Programación Orientada a Objetos 23
Paradigma Orientación a Objetos
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.
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.
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
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;
}
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
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
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
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.
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