tema 1 - umdis.um.es/docencia/poo/wiki/lib/exe/fetch.php?media=curso2018:tem… · tema 1...

Post on 14-Jun-2020

5 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related