tema 1 - dis.um.esdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2017:tema... · curso...
TRANSCRIPT
Tema 1
Programación Orientada a Objetos
Curso 2017/2018
Introducción al paradigma de programación orientado a objetos
Curso 2017/2018 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 2017/2018 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 2017/2018 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 2017/2018 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 2017/2018 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 2017/2018 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 2017/2018 Programación Orientada a Objetos 8
Tecnología Java
� https://www.java.com/es/about/
– En empresas, el 97% de los ordenadores de escritorio
ejecutan Java.
– En el ámbito doméstico, el 89% de los ordenadores
personales en Estados Unidos ejecutan Java.
– Más de 9 millones de desarrolladores de Java en todo el
mundo.
– 3.000 millones de teléfonos móviles ejecutan Java.
– Todos los reproductores de Blu-ray incluyen Java.
– 125 millones de dispositivos de televisión ejecutan Java.
Curso 2017/2018 Programación Orientada a Objetos 9
Ranking
http://www.tiobe.com/tiobe-index/
Curso 2017/2018 Programación Orientada a Objetos 10
Evolución
http://www.tiobe.com/tiobe-index/
Curso 2017/2018 Programación Orientada a Objetos 11
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 2017/2018 Programación Orientada a Objetos 12
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 2017/2018 Programación Orientada a Objetos 13
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 2017/2018 Programación Orientada a Objetos 14
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 2017/2018 Programación Orientada a Objetos 15
Evolución del lenguaje Java
Imagen tomada de: http://wiki.bcmoney-mobiletv.com/index.php?title=Java
21/09/2017??
Curso 2017/2018 Programación Orientada a Objetos 16
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 2017/2018 Programación Orientada a Objetos 17
Orientación a Objetos
� Nuevo 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 2017/2018 Programación Orientada a Objetos 18
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 2017/2018 Programación Orientada a Objetos 19
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 2017/2018 Programación Orientada a Objetos 20
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 2017/2018 Programación Orientada a Objetos 21
Relación de clientela
• Una persona tiene información sobre el
coche que posee.
Curso 2017/2018 Programación Orientada a Objetos 22
Comunicación entre objetos
� Objetos se comunican mediante paso de mensajes
Curso 2017/2018 Programación Orientada a Objetos 23
Relación de herencia
� Autobús ES UN Coche.
� Autobús es una especialización de Coche que tiene nuevas propiedades y funcionalidad.
Curso 2017/2018 Programación Orientada a Objetos 24
Características del paradigma OO
Curso 2017/2018 Programación Orientada a Objetos 25
Ejemplo: Pila. Abstracción
Definición del TAD:
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 Laguna
Curso 2017/2018 Programación Orientada a Objetos 26
Modularidad. Pila en C
Pila.h(definición TAD)
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 2017/2018 Programación Orientada a Objetos 27
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 2017/2018 Programación Orientada a Objetos 28
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 2017/2018 Programación Orientada a Objetos 29
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 2017/2018 Programación Orientada a Objetos 30
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 2017/2018 Programación Orientada a Objetos 31
Polimorfismo
¡¡necesito
una pila!!
Pila
PilaLimitada