tema 1. introducción a la programación orientada a...

30
Tema 1. Introducción a la Programación Orientada a Objetos Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de Málaga Programación Orientada a Objetos Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de Málaga Tema 1. Introducción a la Programación Orientada a Objetos Programación Orientada a Objetos 1 / 30

Upload: hoangtuong

Post on 20-Sep-2018

227 views

Category:

Documents


0 download

TRANSCRIPT

Tema 1. Introducción a la Programación Orientada aObjetos

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática.Universidad de Málaga

Programación Orientada a Objetos

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 1 / 30

Programación Orientada a Objetos

Tema 1. Introducción a la programación orientada a objetosEvolución de los lenguajes de programaciónConceptos fundamentales de la POO:

Clases y objetosMetodos, mensajes y atributosComposición y herenciaPolimorfismo y vinculación dinámica

Esta obra se encuentra bajo una licencia Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0) de Creative Commons.

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 2 / 30

Evolución de los lenguajes de programación

A medida que aumenta la potencia de los ordenadoresTambién aumenta la complejidad de los problemas que se resuelven.También aumenta la dificultad del diseño y desarrollo de los programas.Motiva la creación de nuevos paradigmas de programación que faciliten lacreación de programas cada vez más complejos.Los lenguajes de programación evolucionan adaptándose a los nuevos entornosy paradigmas.

ALGORITMOS LENGUAJES DATOSCódigo Máquina Código Máquina Dirección Memoria

Instrucciones Simbólicas Ensamblador Etiquetas SimbólicasSubprogramas Fortran Tipos y Variables

Programación Estructurada Algol Tipos EstructuradosMódulos Módula-2 Tipos Abstractos Datos

POO y Métodos Smalltalk Clases y Objetos

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 3 / 30

Conceptos fundamentales de la POO

Programación Orientada a ObjetosEs un paradigma de programación que nos permite diseñar programasdefiniendo abstracciones que modelan los datos que representan el problemaque queremos resolver.Se caracteriza por la definición y creación de objetos que encapsulan datos yalgoritmos:

Atributos (datos): almacenan el estado interno del objeto.Métodos (algoritmos): definen el comportamiento del objeto. Permiten lamanipulación e interacción entre objetos.

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 4 / 30

Ejemplo

Abstracción: UrnaUna urna es una caja opaca que contiene bolas blancas y negras.

Comportamiento de la urna (métodos):Introducir bolas blancas y negras.Sacar una bola (cualquiera).Saber si la urna está vacía.Saber cuantas bolas en total hay en la urna.

Estado interno de la urna (atributos):La cuenta del total de bolas blancas dentro de la urna.La cuenta del total de bolas negras dentro de la urna.

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 5 / 30

EjemploAbstracción: UrnaDada la abstracción (clase) Urna especificada en el ejemplo anterior:

Podemos crear múltiples instancias (objetos) de ella.Urna(3,1), Urna(5,0), Urna(2,4)

Cada instancia (objeto) de la Clase Urna posee su propio estado (atributos).La cuenta de bola blancas y bolas negras que contiene.

Todos las instancias de la Clase Urna tienen el mismo comportamiento.Podemos interactuar con cada objeto, independientemente, a través de losmétodos que definen su comportamiento.

Manipular el estado de cada objeto. Por ejemplo, podemos introducir una bolablanca en el objeto Urna(2,4).Consultar el estado de cada objeto. Por ejemplo, si consultamos el número debolas totales que hay en la urna después de la operación anterior, se devolveráuna cantidad total de 7.

◦ ◦ ◦ • • ▸ ◦ • •◦ ◦ • ◦ ◦ ◦ ◦ ◦ • • ▸ ◦ ◦ • •

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 6 / 30

Conceptos fundamentales de la POO

ClaseUna Clase representa una abstracción de datos, especifica las característicasde unos objetos: su estado y su comportamiento.Es una entidad estática, se define en tiempo de compilación.

Urna

n_blancas: intn_negras: int

introducirBola(c: Color)sacarBola(): ColorestaVacia(): booleantotalBolas(): int

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 7 / 30

Conceptos fundamentales de la POO

ObjetoUn objeto es una instancia de una determinada Clase.Las características del objeto (estado y comportamiento) están determinadaspor la Clase a la que pertenece.Puede haber muchos objetos distintos que sean de la misma Clase (y tambiende distintas Clases).Cada objeto almacena y contiene su propio estado interno (atributos), deforma independiente de los otros objetos.El objeto podrá ser manipulado e interactuar con otros objetos a través de losmétodos definidos por la Clase a la que pertenece.Es una entidad dinámica, se crea y se destruye durante la ejecución delprograma.

urna1: Urna urna2: Urna urna3: Urna

n_blancas = 3 n_blancas = 5 n_blancas = 2n_negras = 1 n_negras = 0 n_negras = 4

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 8 / 30

Conceptos fundamentales de la POOMétodos

La clase representa una abstracción de datos, y los métodos definen sucomportamiento.Los métodos son algoritmos especiales definidos por la Clase, y se aplicansobre los objetos.Manipulan el estado interno del objeto sobre el que se aplican.También se les denomina métodos de instancia, o métodos del objeto.

Paso de Mensajes. Invocación a MétodosSe puede enviar un mensaje a un objeto para invocar a un determinadométodo, que se aplicará sobre el objeto.Los objetos responden a las invocaciones de los métodos dependiendo de suestado interno.La invocación a métodos puede llevar parámetros asociados, produce unresultado, y manipula el estado interno del objeto sobre el que se aplica.Para invocar a un determinado método sobre un objeto, ese método debe estardefinido por la clase a la que el objeto pertenece.

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 9 / 30

Conceptos fundamentales de la POO

AtributosAlmacenan los valores del estado interno del objeto.Cada objeto tiene su propio estado interno asociado, independiente de losotros objetos.Los atributos estan protegidos. Sólo se permite su acceso y manipulación através de los métodos.También se les denomina variables de instancia, o variables del objeto.

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 10 / 30

EjemploAbstracción: Punto del plano CartesianoUn punto representa una determinada posición en el plano Cartesiano.

Comportamiento de un punto:Especificar el valor de sus coordenadas X e Y.Consultar el valor de sus coordenadas X e Y.Calcular la distancia que lo separa de otro objeto punto.Desplazar según una distancia especificada en ambos ejes.

Estado interno del punto:El valor de la coordenada X (abscisa).El valor de la coordenada Y (ordenada).

Podemos crear múltiples objetos de la Clase Punto:Punto(1,2), Punto(2,1), Punto(3,3), Punto(4,1)

(3,3)•

(1,2)•

(2,1) (4,1)• •

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 11 / 30

Ejemplo: Clase Punto

// Punto.javapublic class Punto {

// Atributosprivate double x, y;// Constructorespublic Punto() { x = 0; y = 0; }public Punto(double a, double b) { x = a; y = b; }// Métodospublic double abscisa() { return x; }public double ordenada() { return y; }public void abscisa(double a) { x = a; }public void ordenada(double b) { y = b; }public void desplazar(double a, double b) { x += a; y += b; }public double distancia(Punto pto) {

return Math.sqrt(Math.pow(this.x - pto.x, 2) + Math.pow(this.y - pto.y, 2));}

}

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 12 / 30

Ejemplo: Clase Punto

// Main.javapublic class Main {

public static void main(String[] args) {Punto pto1 = new Punto(1, 2);Punto pto2 = new Punto(2, 1);Punto pto3 = new Punto(3, 3);Punto pto4 = new Punto(3, 1);pto4.desplazar(1, 1);

}}

pto1 Punto pto2 Punto pto3 Punto pto4 Punto

• ▸ 1 2 • ▸ 2 1 • ▸ 3 3 • ▸ 3 1

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓(3,3) (3,3)

• •(1,2) (1,2) (4,2) pto4 Punto

• pto4.desplazar(1,1) • ◦(2,1)(3,1) (2,1) • ▸ 4 2

• ◦ •

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 13 / 30

Representación Gráfica UML de Clases y Objetos

Representación Gráfica UML de ClasesUna clase se representa mediante una caja con tres compartimentos,conteniendo cada uno de ellos el nombre, los atributos y los métodos de laclase.

Punto

x,y: double

desplazar(a: double, b: double)distancia(p: Punto): double

Representación Gráfica UML de ObjetosUn objeto se representa mediante una caja con dos compartimentos,conteniendo el primero el nombre del objeto y de la clase a la que pertenece,y el segundo los valores de los atributos del objeto.

pto1: Punto pto2: Punto pto3: Punto pto4: Punto

x = 1 x = 2 x = 3 x = 4y = 2 y = 1 y = 3 y = 2

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 14 / 30

Conceptos fundamentales de la POO

ComposiciónPermite la definición de nuevas clases a partir de otras clases ya definidas.Representa una relación en la cual un objeto tiene o está compuesto porotros objetos.

Por ejemplo, un Segmento tiene dos Puntos, el origen y el extremo.

Segmento Punto

origen, extremo: Punto x,y: double

desplazar(a: double, b: double) desplazar(a: double, b: double)longitud():double distancia(p: Punto): double

El objecto contenido forma parte de los atributos del objeto contenedor.La composición se puede expresar en UML mediante una línea sólida (oflecha con la punta abierta) entre la clase poseedora y la clase poseída.Esta línea sólida (o flecha de punta abierta) se suele etiquetar con elnombre del atributo, su nivel de acceso, y opcionalmente su multiplicidad(donde el asterisco indica múltiples elementos).

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 15 / 30

Conceptos fundamentales de la POO

ComposiciónPermite la definición de nuevas clases a partir de otras clases ya definidas.Representa una relación en la cual un objeto tiene o está compuesto porotros objetos.

Por ejemplo, un Segmento tiene dos Puntos, el origen y el extremo.

Segmento Puntoorigen

x,y: double

desplazar(a: double, b: double) desplazar(a: double, b: double)longitud():double extremo distancia(p: Punto): double

El objecto contenido forma parte de los atributos del objeto contenedor.La composición se puede expresar en UML mediante una línea sólida (oflecha con la punta abierta) entre la clase poseedora y la clase poseída.Esta línea sólida (o flecha de punta abierta) se suele etiquetar con elnombre del atributo, su nivel de acceso, y opcionalmente su multiplicidad(donde el asterisco indica múltiples elementos).

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 16 / 30

Conceptos fundamentales de la POO

ComposiciónPermite la definición de nuevas clases a partir de otras clases ya definidas.Representa una relación en la cual un objeto tiene o está compuesto porotros objetos.

Por ejemplo, un Segmento tiene dos Puntos, el origen y el extremo.

Segmento Puntoorigen

> x,y: double

desplazar(a: double, b: double) > desplazar(a: double, b: double)longitud():double extremo distancia(p: Punto): double

El objecto contenido forma parte de los atributos del objeto contenedor.La composición se puede expresar en UML mediante una línea sólida (oflecha con la punta abierta) entre la clase poseedora y la clase poseída.Esta línea sólida (o flecha de punta abierta) se suele etiquetar con elnombre del atributo, su nivel de acceso, y opcionalmente su multiplicidad(donde el asterisco indica múltiples elementos).

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 17 / 30

Ejemplo: Clase Segmento

// Segmento.javapublic class Segmento {

// Atributosprivate Punto origen, extremo;// Constructorespublic Segmento(double x1, double y1, double x2, double y2) {

origen = new Punto(x1, y1); // creación de objetos de la clase Puntoextremo = new Punto(x2, y2); // creación de objetos de la clase Punto

}// Métodospublic void desplazar(double a, double b) {

origen.desplazar(a, b); // invocación a métodos de la clase Puntoextremo.desplazar(a, b); // invocación a métodos de la clase Punto

}public double longitud() {

return origen.distancia(extremo); // invocación a métodos de la clase Punto}

}

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 18 / 30

Ejemplo: Clase Segmento

// Main.javapublic class Main {

public static void main(String[] args) {Segmento sgt = new Segmento(2, 1, 3, 3);double lng = sgt.longitud();

}}

sgt Segment Punto

• ▸ • • ▸ 2 1

Punto(3,3)• ▸ 3 3

��

�• (2,1)

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 19 / 30

Conceptos fundamentales de la POO

ComposiciónOtros ejemplos de composición.

Cilindro Círculo Puntobase centro

alt: double > rad: double > x,y: double

. . . . . . . . .

Concesionario Coche Motorcoches motor

nm: String > mod: String > pot: double*

. . . (0 o más) . . . . . .

El objecto contenido forma parte de los atributos del objeto contenedor.La composición se puede expresar en UML mediante una línea sólida (o flechacon la punta abierta) entre la clase poseedora y la clase poseída.Esta línea sólida (o flecha de punta abierta) se suele etiquetar con el nombre delatributo, su nivel de acceso, y opcionalmente su multiplicidad (donde elasterisco indica múltiples elementos).

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 20 / 30

Conceptos fundamentales de la POO

HerenciaPermite la definición de nuevas clases a partir de otras clases ya definidas.Representa una relación en la cual una Clase es una especialización oextensión de otra Clase.

Por ejemplo, una Partícula es un Punto con masa.

Punto

x,y: double

desplazar(a: double, b: double)distancia(p: Punto): double

^

Partícula

masa: double

atracción(p: Partícula): double

La herencia se expresa en UML mediante una línea sólida desde lasub-clase con un triángulo hueco en el extremo de la super-clase.

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 21 / 30

Conceptos fundamentales de la POO

HerenciaPermite la definición de nuevas clases a partir de otras clases ya definidas.Representa una relación en la cual una Clase es una especialización oextensión de otra Clase.

Por ejemplo, un Paciente es una Persona, y un Médico también es unaPersona.

Persona

nombre: String

. . .

^

Paciente Médico

numSegSocial: String categoría: String

. . . . . .

La herencia se expresa en UML mediante una línea sólida desde lasub-clase con un triángulo hueco en el extremo de la super-clase.

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 22 / 30

Conceptos fundamentales de la POOHerencia

Permite definir una nueva sub-clase (o clase derivada) como unaespecialización o extensión de una super-clase (o clase base) más general.La sub-clase hereda tanto los atributos como los métodos definidos por lasuper-clase (reusabilidad del código).La sub-clase puede definir nuevos atributos y nuevos métodos (extensibilidad),así como redefinir métodos de la super-clase.Permite definir jerarquías de clases (ascendientes, y descendientes).La relación de herencia es transitiva, si C hereda de B y B hereda de A,entonces C también hereda de A.

^

^ ^

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 23 / 30

Ejemplo: Clase Partícula

// Particula.javapublic class Particula extends Punto {

// Atributosfinal static double G = 6.67e-11;private double masa; // ( + los atributos heredados de Punto )// Constructorespublic Particula(float m) {

this(0, 0, m); // Se refiere a Partícula(double, double, double)}public Particula(double a, double b, double m) {

super(a, b); // Se refiere a Punto(double, double)masa = m;

}// Métodos ( + los métodos heredados de Punto )public void masa(double m) { masa = m; }public double masa() { return masa; }public double atraccion(Particula part) {

// Nótese la invocación al método distancia heredado de Puntoreturn G * this.masa * part.masa / Math.pow(this.distancia(part), 2);

}}

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 24 / 30

Conceptos fundamentales de la POO

PolimorfismoUn lenguaje tiene capacidad polimórfica cuando una variable declarada de undeterminado tipo (clase) (tipo estático) puede referenciar en tiempo deejecución a valores (objetos) de tipo (clase) distinto (tipo dinámico).En POO el polimorfismo está restringido a la relación de herencia.

El tipo dinámico debe ser descendiente del tipo estático.

El polimorfismo permite que un objeto de una sub-clase pueda serconsiderado y referenciado como un objeto de la super-clase. Principio desustitución.

La dirección de correspondencia opuesta no se mantiene: todos los Medicos sonPersonas, pero no todas las Personas son Médicos.

El polimorfismo afecta a:Asignaciones explícitas entre objetos.Paso de parámetros.Devolución del resultado en una función.

Punto pt1 = new Particula(3, 5, 22);

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 25 / 30

Conceptos fundamentales de la POOPolimorfismo

En contextos polimórficos, sólo es válido invocar a los métodos especificadospor el tipo estático de la variable.Punto pt1 = new Particula(3, 5, 22);Punto pt2 = new Particula(4, 6, 30);double d = pt1.distancia(pt2);// double f = pt1.atraccion(pt2); // ERROR. No es posible

Vinculación DinámicaLa vinculación dinámica permite que las sub-clases puedan redefinir elcomportamiento de los métodos definidos en la super-clase.

En contextos polimórficos, los métodos invocados se seleccionanadecuadamente, en tiempo de ejecución, dependiendo del tipo dinámico delobjeto, y no de su tipo estático.

La invocación del método que ha de resolver un mensaje se retrasa al tiempo deejecución, y depende del tipo dinámico del objeto.

Se puede impedir que las sub-clases redefinan un determinado métodoespecificando el calificador final en su definición.

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 26 / 30

Conceptos fundamentales de la POO

Herencia, Polimorfismo y Vinculación DinámicaGracias a la herencia, el polimorfismo, y la vinculación dinamica, se puedenconstruir estructuras con elementos dinámicos de distinta naturaleza, pero conun comportamiento común.

. . .

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 27 / 30

Ejemplo: Clase Urna (I)

// Urna.javapublic class Urna {

public static enum Color { Blanca, Negra }// Atributosprivate int n_blancas, n_negras;// Constructorespublic Urna() { n_blancas = 0; n_negras = 0; }// Métodospublic int totalBolas() { return n_blancas + n_negras; }public boolean estaVacia() { return (n_blancas + n_negras == 0); }public void introducirBola(Color c) {

if (c == Color.Blanca) {++n_blancas;

} else {++n_negras;

}}

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 28 / 30

Ejemplo: Clase Urna (II)

// Urna.java (continuación)public Color sacarBola() {

if (this.estaVacia()) {throw new RuntimeException("Urna vacía");

}int n = (int)(Math.random() * this.totalBolas());Color c;if (n < n_blancas) {

c = Color.Blanca;--n_blancas;

} else {c = Color.Negra;--n_negras;

}return c;

}}

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 29 / 30

Ejemplo: Clase Urna (III)

// Main.javapublic class Main {

public static void main(String[] args) {Urna urna = new Urna();urna.introducirBola(Urna.Color.Blanca);urna.introducirBola(Urna.Color.Blanca);urna.introducirBola(Urna.Color.Negra);System.out.println("NBolas: " + urna.totalBolas());while ( ! urna.estaVacia() ) {

Urna.Color c = urna.sacarBola();System.out.println("Bola: " + c);

}}

}

Dpto. Lenguajes y Ciencias de la Computación. E.T.S.I. Informática. Universidad de MálagaTema 1. Introducción a la Programación Orientada a ObjetosProgramación Orientada a Objetos 30 / 30