Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo....

14
1 { MARCOS L { MARCOS LÓPEZ SANZ } PEZ SANZ } Kybele, 2007 © Tema 2: Programación basada en Objetos Programación Orientada a Objetos Marcos López Sanz Máster en Informática Gráfica, Juegos y Realidad Virtual Kybele, 2007 © { MARCOS L { MARCOS LÓPEZ SANZ } PEZ SANZ } Índice Objetivos Introducción Vista Pública Clases Objetos Vista Privada Clases Objetos Miembros de instancia vs. de Clase Normas de estilo

Transcript of Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo....

Page 1: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

1

{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ } Kybele, 2007 ©

Tema 2: Programación basada en Objetos

Programación Orientada a Objetos

Marcos López Sanz

Máster en Informática Gráfica, Juegos y Realidad Virtual

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Índice

� Objetivos

� Introducción

� Vista Pública� Clases� Objetos

� Vista Privada� Clases� Objetos

� Miembros de instancia vs. de Clase

� Normas de estilo

Page 2: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

2

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Objetivos

� Presentar el nnúúcleo de Java cleo de Java

� Codificar clases (atributos y métodos) y objetos (estado y mensajes)

� Manejo de clases y objetos de forma aislada (visivisióón no n no colaborativacolaborativa de un programa)

�� Aspectos globalesAspectos globales del conjunto de objetos de una clase

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Introducción

� Aplicación del principio de encapsulación:� Diferencia entre vista pública y privada� Según el ámbito de accesibilidad

� Conceptos:� Accesible: que se puede mencionar, utilizar o conocer� Vista Pública (interfaz o protocolo):

• Público: accesible desde cualquier punto del programa, anterior o posterior a su declaración

• Establece las únicas vías de actuación con los objetos

� Vista Privada (implantación o implementación)• Privado: accesible sólo desde la implementación de la clase

• Reúne los detalles de atributos (estructuras de datos) y métodos (algoritmos)

� Son los mecanismos que sustentan los principios de abstracción (v. pública), encapsulación (v. privada) y modularidad (combinación de vistas en una clase)

Page 3: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

3

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Introducción

L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

Metodo_3

Metodo_2

Metodo_1

OBJETO

CLASE

Mensaje_1

Mensaje_3

Atributo_2

Atributo_1

Atributo_2

Atributo_1

CLASES: VISTA PUBLICA

OBJETOS: VISTA PUBLICA

CLASES: VISTA PRIVADA

OBJETOS: VISTA PRIVADA

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Pública: Clases

�� NombreNombre de la clase:� Único (en un paquete)� Identificador que comienza por letra mayúscula (convención de

estilo)� Patrón de creación (Java):

<modificadores> class <idClase> <herencia>{…}

� Miembros de una clase:� Métodos� Atributos (“campos”)� Clases o interfaces anidadas (dependiente del lenguaje)

public class Esfera extends Figura

{…}

Page 4: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

4

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Pública: Clases

� Tipos de métodos:

� Constructores� Funciones (“métodos estándar”)� Destructores

�� ConstructoresConstructores: para crear nuevos objetos

• Su nombre coincide con el de la clase

• No devuelven valores (ni siquiera void) � el valor devuelto por un constructor es el propio objeto

• Su ejecución es implícita al crear un objeto

• No es obligatorio definirlos

• Generalmente se utilizan para inicializar el estado de un objeto

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Pública: Clases

�� FuncionesFunciones: para comunicarse con una objeto instancia de la clase• Nombre personalizado

• Pueden devolver valores (básicos, objetos y estructuras)

• Ejecución mediante la “notación punto”• Devuelven/No devuelven valor.

• Con/Sin parámetros

�� DestructoresDestructores• Su nombre siempre es finalize (en java)

• No devuelven valores (tampoco void) � en algunos lenguajes pueden devolver un valor booleano indicando la correcta destrucción del objeto

• Ejecución implícita a la destrucción de un objeto

• Raramente existen

Page 5: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

5

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Pública: Clases

� Métodos:� Cabecera

• Modificador: public/private (protected en C++) � visibilidad• Tipo devuelto

• Nombre

• Lista de parámetros (opcional)

• Manejadores de excepciones (opcionales)

� Dentro de cada método está implícito el uso del propio objeto que lo invoca

� Finalización de un método:• Terminar el código

• Ejecutar una sentencia return: return ‘[‘<expresión>’];• Lanzar una excepción no controlada

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Pública: Clases

� Métodos� Tipos de datos básicos (parámetros y valores devueltos en java)

� boolean: los valores de verdad ‘true’ y ‘false’

� char: caracteres del código Unicode 3.0 (J2SE 1.4) o Unicode 4.0 (J2SE 5.0) de 16 bits.

� byte: número entero de 8 bits con signo

� short: número entero de 16 bits con signo

� int: número entero de 32 bits con signo

� long: número entero de 64 bits con signo

� float: número con coma flotante de 32 bits (norma IEEE 754-1985)

� double: número con coma flotante de 64 bits (norma IEEE 754-1985)

� void: cuando no se quiere devolver ningún valor (sólo se puede utilizar como valor devuelto)

Page 6: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

6

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Pública: Clases

� Sobrecarga de métodos:

� Def.: Cualidad que permite tener 2 o más

métodos con el mismo nombre en la misma

clase o en diferentes.

import java.lang.*;

public class Prueba

{

public void probar(Integer i){

System.out.println("Integer");

}

public void probar(Number i){

System.out.println("Number");

}

public static void main() {

Prueba p = new Prueba();

p.probar(new Short("3"));

}

}

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Pública: Objetos

� Forma en que dichos objetos aparecen (se construyen), existen (reciben mensajes) y

desaparecen (se destruyen)

� “Todo objeto es dinámico” � creación, destrucción y paso de mensajes a través de referencias a ellos �

�� INSTANCIACIINSTANCIACIÓÓN: N: creación de un objeto (apuntado por una referencia)

� Referencia = dirección memoria del objeto � asignable y evaluable

<Clase> <referencia> [ = <expresion> ];

<Clase> <identificador>[ ] [ = <expresion> ];

<Clase> <identificador>[ ] = { <expresion>, <expresion>, … };

new <tipo de objeto> ([ parámetros ]); (java)

Page 7: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

7

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Pública: Objetos

� Destrucción de un objeto � Automática� Recolector de basura: libera la memoria reservada a objetos inútiles (no

accesibles mediante una referencia)

� Paso de mensajes: notación punto� Una vez instanciado un objeto es posible pasarle mensajes (= invocar) los

métodos definidos en su clase

� Parámetros: siempre por valor. Si se pasa una referencia, la referencia en sí no varía pero puede hacerlo el estado del objeto apuntado

<referencia>.<método> ([<parámetros>])

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Privada: Clases

�� VistaVista privadaprivada: se encapsulan los atributos (estructuras de datos) y los algoritmos (definición de métodos)

� El orden en la declaración de atributos y en la definición de métodos no influye en su acceso

� Definición de atributos:: para seguir el principio de encapsulación deben ser definidos como privados (sólo accesibles desde dentro de la clase):� private <tipo/clase><identificador> [ = <expresion>];

� private final <tipo/clase><identificador> [ = <expresion>];

� “final”:� Forma de definir constantes� El valor asignado a una variable final no varía mientras el código está en ejecución:

final float vLuz;... // sigue el programa... vLuz = 3e+5F; // este valor se mantendrá hasta el final

Page 8: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

8

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Privada: Clases

� Definición de métodos:� Método:

• Algoritmo mediante el cual se implementa el comportamiento de un objeto

• Flujo de ejecución en el cual se manipulan variables y se lanzan mensajes a objetos accesibles

� Ley estricta de Demeter:• Desde la definición de los métodos de una clase se tiene acceso a:

– Los atributos de la clase

– Los parámetros del método

– Las declaraciones locales al métodos que se está definiendo

– “this”:

» Referencia al supuesto objeto que recibe el mensaje correspondiente al método que se está implantando

» Ofrece la posibilidad de eliminar las colisiones entre variableslocales/parámetros y atributos de una clase con el mismo nombre

» Como norma de estilo se recomienda usar this.nombre_atributo en todo caso (aunque no haya colisión)

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Privada: Clases

� Ejemplo: clase intervalo

class Intervalo {

// Atributos

private double extremoInferior;

private double extremoSuperior;

private final double ORIGEN = 0.0;

// Métodos privados

// Métodos públicos

}

Page 9: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

9

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Privada: Clases

� Ejemplo: clase intervalo

// Métodos privados

private double getExtremoInferior (){

return this.extremoInferior;

}

private double getExtremoSuperior (){

return this.extremoSuperior;

}

private void setExtremoInferior (double extremoInferior){

this.extremoInferior = extremoInferior;

}

private void setExtremoSuperior (double extremoSuperior){

this.extremoSuperior = extremoSuperior;

}

private void setExtremos (double extremoInferior, double

extremoSuperior){

this.putExtremoInferior(extremoInferior);

this.putExtremoSuperior(extremoSuperior);

}

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Privada: Clases

� Ejemplo: clase intervalo

// Métodos públicos: Constructores

public Intervalo (){

this.putExtremos(ORIGEN,ORIGEN);

}

public Intervalo (double extremo){

this.putExtremos(ORIGEN,extremo);

}

public Intervalo (double extremoInferior, double extremoSuperior){

this.putExtremos(extremoInferior,extremoSuperior);

}

public Intervalo (Intervalo intervalo){

this.putExtremos(intervalo.getExtremoInferior(),

intervalo.getExtremoSuperior());

}

Page 10: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

10

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Privada: Clases

� Ejemplo: clase intervalo

// Métodos públicos: funciones

public double longitud (){

return this.getExtremoSuperior() – this.getExtremoInferior();

}

public double puntoMedio (){

return (this.getExtremoSuperior() + this.getExtremoInferior())/2;

}

public Intervalo copia (){

return new Intervalo(this.getExtremoInferior(), this.getExtremoSuperior());

}

public boolean incluye (double punto) {

return (this.getExtremoInferior() <= punto &&

punto <= this.getExtremoSuperior());

}

public void desplazar (double desplazamiento){

this.setExtremoInferior (this.getExtremoInferior()+desplazamiento);

this.setExtremoSuperior (this.getExtremoSuperior()+desplazamiento);

}

public boolean igual (Intervalo intervalo) {…}

public boolean incluye (Intervalo intervalo) {…}

public boolean intersecta (Intervalo intervalo) {…}

public Intervalo union (Intervalo intervalo) {…}

// precondición: existe interseccion

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Privada: Objetos

� Vista privada de objetos: ver qué sucede internamente en los objetos �creación, destrucción y paso de mensajes

� Creación de un objeto� Reserva de memoria para cada atributo definido en la clase del objeto �

desencadenamiento de “instanciaciones”� Inicialización de cada atributo: asignación de valores, creación de objetos y tablas� Ejecución de un constructor (opcionalmente)

� Destrucción de un objeto� Liberación de recursos de memoria� Borrado de objetos referenciados por el recolector de basura

� Paso de mensajes� Reserva de memoria para los parámetros y asignación del valor � Ejecución de las sentencias del método� Liberación de la reserva de memoria al finalizar la ejecución

Page 11: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

11

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Privada: Objetos

� Valores de inicialización (java)

nullReferencia

+0.0double

+0.0ffloat

0byte, short, int, long

‘\ u 0000’char

falseboolean

Valor inicialValor inicialTipoTipo

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Vista Privada: Objetos

� Consideraciones:

� Creación de un objeto ≈ Desencadenamiento de:

• Instanciaciones � new / atributos

• Paso de mensajes � inicialización / constructor

� Paso de un mensaje ≈ Desencadenamiento de:

• Paso de mensajes � ejecución en sí del método

• Instanciaciones � posibles new en la ejecución del método

Page 12: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

12

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Miembros de Instancia vs. de Clase

� Miembros de instancia � La clase describe el comportamiento particular de cada uno de los objetos

creados: atributos y métodos

� Miembros de clase o estáticos� Atributos y métodos globales a todos los objetos� Su uso indiscriminado convierte la POO en técnicas de programación

tradicional

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Miembros de Instancia vs. de Clase

� Atributos estáticos<public/private> static <tipo> <idAtributo> = <expresion>;

� La inicialización es obligatoria� Globalidad:

• Están compartidos por todos los objetos de la clase

• Son accesibles desde cualquier método de objeto

• Cualquier efecto sobre su valor repercute en todos los objetos de esa clase (en ejecución)

� Reserva de memoria e inicialización: al principio de la ejecución del programa (incluso si no hay objetos de esa clase)

� Notación de acceso: <clase>.<atributo>

Page 13: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

13

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Miembros de Instancia vs. de Clase

� Métodos estáticos<public/private> static <tipo> <idMétodo> ([<parámetros>]){…};

� Globalidad:

• No tienen acceso a this y por tanto a sus atributos (por la ausencia de

objeto)

• Sólo tiene acceso a atributos y métodos estáticos de la clase

� Notación de ejecución: <clase>.<metodo>(<argumentos>);

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Miembros de Instancia vs. de Clase

� Código estático

� Utilizado para inicializaciones complejas (calculadas) de atributos estáticos

� Solución propuesta por java:static { … }

• Permite declaración de vbles. auxiliares y sentencias de ejecución

• Acceso: únicamente a atributos estáticos

• El código se ejecuta al principio del programa

Page 14: Tema 2: Programación basada en ObjetosPOO-2006-2007]Tema2.pdf · L. Fernández, F. Arroyo. Programación II: Teoría y práctica del módulo de programación orientada a objetos

14

Kybele, 2007 ©{ MARCOS L{ MARCOS LÓÓPEZ SANZ }PEZ SANZ }

Agradecimientos

Parte de los contenidos y gráficas recogidas en estas transparencias han sido extraídos del libro:

Programación II: Teoría y práctica del módulo de programación orientada a objetos

ISBN: 84-87238-39-4

Es por ello que queremos agradecer a Luís Fernández Muñoz la posibilidad de reproducir parte de su contenido