2.1 introducción a la programación orientada a objetos. 2.1.1 orígenes de la poo. 2.1.2...

41

Upload: lucinde-rolon

Post on 22-Jan-2016

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1
Page 2: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

2.1 Introducción a la Programación orientada a objetos.2.1.1 Orígenes de la POO.2.1.2 Beneficios de la POO.

2.2 Clases.2.2.1 Encapsulamiento.

2.2.1.1 Concepto de caja negra.2.2.1.2 Concepto de interfaz.

2.2.2 Abstracción.2.2.2.1 Abstracción efectiva.2.2.2.2 Ocultamiento de información.2.2.2.3 Atributos2.2.2.4 Métodos2.2.2.5 Mensajes

2.2.3 Diseño de una clase2.3 Objetos

2.3.1 Ciclo de vida de un objeto.2.3.2 Estado y comportamiento de los objetos.

2.4 Herencia y Polimorfismo.2.4.1 Conceptos básicos.2.4.2 Relación entre herencia y el polimorfismo.

Unidad 2.- Fundamentos del paradigma orientado a objetos.

Page 3: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Abstracción

Las abstracciones son una manera fundamental que tenemos los humanos de manejarnos con la complejidad. Estas devienen del reconocimiento de las similaridades entre ciertos objetos, situaciones o procesos en el mundo real, y la decisión de concentrarse en estas similaridades ignorando las diferencias. Una abstracción es una descripción simplificada de un sistema que enfatiza algunos de sus detalles o propiedades mientras suprime otros. Una buena abstracción es la que enfatiza detalles que son significantes al lector, y suprime los que no lo son.Una abstracción se enfoca sobre una vista externa del objeto, y sirve para separar su comportamiento esencial de su implementación.

La abstracción enfoca las características esenciales de algún objeto, relativa a la perspectiva del observador

Un cliente es un objeto que usa recursos de otro objeto. El comportamiento de un objeto se puede caracterizar por las operaciones que sus clientes pueden realizar sobre él, y las operaciones que él puede realizar sobre otros objetos. El conjunto de operaciones que un cliente puede requerir de un objeto define su protocolo.

Page 4: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Encapsulamiento

La abstracción de un objeto debería preceder a su implementación. Una vez que la implementación es seleccionada, esta debería tratarse como un secreto de la abstracción y ocultársela a la mayoría de los clientes.Abstracción y encapsulamiento son conceptos complementarios: la abstracción enfoca la vista externa de un objeto, y el encapsulamiento (ocultamiento de la información) previene que los clientes vean la parte interna, donde el comportamiento de la abstracción es implementada.Entonces, "El encapsulamiento es el proceso de ocultar todos los detalles de un objeto que no contribuyen a sus características esenciales.

El encapsulamiento oculta detalles de implementación de un objeto

Page 5: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

1) Objetos

2) Clasificación

3) Instanciación

4) Generalización

5) Abstracción

6) Encapsulación

7) Modularidad

8) Extensibilidad

9) Polimorfismo

10) Reuso de Código

Los aspectos principales de la programación orientada a objetos son:

Page 6: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Objetos• El objeto es la entidad básica del modelo orientado a objetos,• El objeto integra una estructura de datos (atributos) y un comportamiento (operaciones)• Los objetos se distinguen entre sí por medio de su propia identidad, aunque internamente los valores de sus atributos sean iguales.

Clasificación• Las clases describen posibles objetos, comunes en su estructura y comportamiento.• Los objetos que contienen los mismos atributos y operaciones pertenecen a la misma clase.• La estructura de clases integra las operaciones con los atributos a los cuales se aplican.

Page 7: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Instanciación• El proceso de crear objetos pertenecientes a cierta clase se llama instanciación.• El objeto es la instancia de una clase.• Pueden ser instanciados un número indefinido de objetos de cierta clase.

Generalización• En una jerarquía de clases, se comparten atributos y operaciones entre clases basados en la generalización de clases.• El mecanismo para describir la jerarquía de generalización de clases es la herencia.• Las clases más generales se conocen como superclases.• Las clases más especializadas se conocen como subclases.• La herencia puede ser sencilla o múltiple.

Page 8: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Abstracción• Se concentra en lo primordial de una entidad y no en sus propiedades secundarias.• Se concentra en lo que el objeto hace y no en cómo lo hace.• Se da énfasis a cuales son los objetos y no cómo son usados, logrando el desarrollo de sistemas más estables.

Encapsulación• Encapsulación o encapsulamiento es la separación de las propiedades externas de un objeto de los detalles de implementación internos del objeto.• Se separa la interface del objeto de sus implementación, limitando la complejidad al mostrarse sólo la información relevante.• Se limita el impacto a cambios en la implementación, ya que los cambios a las propiedades internas del objeto no afectan su interacción externa.• Se reduce el esfuerzo en migrar el sistema a diferentes plataformas.• Se protege al objeto contra posibles errores, y se permite hacer extensiones futuras en su implementación.

Page 9: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Modularidad• El encapsulamiento de los objetos da lugar a gran modularidad.• Cada módulo se concentra en una sola clase de objetos.• Los módulos tienden a ser pequeños y concisos.• La modularidad facilita encontrar y corregir problemas.• La complejidad del sistema se reduce facilitando su mantenimiento.

Extensibilidad• La extensibilidad permite hacer cambios en el sistema sin afectar lo que ya existe.• Nuevas clases pueden ser definidas sin tener que cambiar la interface del resto del sistema.• La definición de los objetos existentes puede ser extendida sin necesidad de cambios más allá del propio objeto.

Polimorfismo• Polimorfismo permite definir las mismas operaciones con diferente comportamiento en diferentes clases.• Se permite llamar una operación sin preocuparse de cuál implementación es requerida en que clase, siendo la responsabilidad de la jerarquía de clases y no del usuario.

Page 10: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Reuso de Código• La orientación a objetos apoya el reuso de código en el sistema.

• Los componentes orientados a objetos se pueden utilizar para estructurar librerías reusables.

• El reuso reduce el tamaño del sistema durante la creación y ejecución.

• Al corresponder varios objetos a una misma clase, se guardan los atributos y operaciones una sola vez por clase, y no por cada objeto.

• Por medio de la generalización y especialización, las subclases heredan atributos y operaciones comunes, definidos en las superclases.

• La herencia es uno de los factores más importantes contribuyendo al incremento en el reuso de código dentro de un proyecto o entre múltiples proyectos.

• Nuevas subclases de clases previamente definidas se pueden crear en el reuso de una clase, pudiéndose crear nuevas operaciones, o modificar las ya existentes.

Page 11: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Definición de clase Clase : Es una descripción de atributos y comportamientos de un conjunto de objetos similares. Los objetos de una clase o tipo determinado comparten los mismos comportamientos y atributos. Las clases actúan en forma muy parecida a una plantilla o molde para galletas en el sentido de que una clase se utiliza para crear o instanciar objetos

Los atributos son características externas y visibles de una clase. El color de los ojos y del cabello de una persona, son ejemplos de atributos.

Un método (comportamiento) es la acción que realiza un objeto cuando se le pasa un mensaje o en respuesta a un cambio de estado;  es algo que realiza un objeto.

Un objeto puede ejercer el comportamiento de otro objeto ejecutando una operación sobre este último. Los términos llamada a método, llamada a función o paso de mensaje se utilizan en lugar de realizar una operación, cada una de estas acciones activa el comportamiento de un objeto

Page 12: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Definición de clase (continuación)

 [ modificadores ]    class    nombre-clase  [extends  claseSuperior ]    [implements  interfaz1,  interfaz2, ...interfazn ]   {       cuerpo    }

Donde:modificadores  es opcional y puede ser uno más de las siguientes tres palabras reservadas:

{  public, abstract, final, synchronizable }

class  es una palabra reservada que se utiliza para definir o declarar una clase

nombre-clase  es cualquier identificador válido

extends   es una  palabra reservada que indica si la clase tiene herencia o es subclase o extensión de una claseSuperior  o superclase

claseSuperior  es un identificador o nombre de la superclase de la que hereda atributos y comportamientos

implements  es una palabra reservada que indica si la clase implementa una o varias interfaces

cuerpo  es una secuencia de declaraciones de variables, constantes , constructores y métodos

La sintaxis de una simple definición o declaración de clase es:

Page 13: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Atributos (o Variables)

Los atributos o variables son elementos en los programas que cambian su valor en el transcurso de ejecución del programa.  Los atributos guardan valores de cierto tipo que pueden ser valores de tipo primitivos u objetos.  En Java podemos clasificar los atributos en:

•Instancias de atributos. Son miembros de la clase y se crean al instanciar un objeto de la clase.

•Atributos de una clase. Son miembros de la clase y son algo similar a variables globales, utilizan el modificador static.

•Atributos locales a métodos. Su ámbito es dentro del método. La declaración de atributos en Java se hace de forma similar al C / C++.

Page 14: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

La sintaxis de una simple declaración de un atributo es:

[ modificadores ]    nombre-del-tipo   nombre-de-atributo;

Donde:modificadores  es opcional y puede ser uno más de las siguientes siete palabras reservadas:

{ static, final, transient, volatile,  public , protected, private }

Cabe señalar que el único modificador que puede ponérsele a una variable local a un método es el modificador final.

nombre-del-tipo    es una de las ocho siguientes palabras reservadas ( pero también pueden ser el nombre de una clase p.ej. String, Alumno, Date, etc.  ):

{ boolean, byte, char, short, int, long, float, double }

nombre-de-atributo     es cualquier identificador válido.

Page 15: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Métodos

Los métodos son algo parecido a las funciones del lenguaje C /C++, pero en Java no se permiten colocar métodos fuera de la definición de clase . Con los métodos implementamos el comportamiento de los objetos.  

Hay varios tipos de métodos:

•Métodos de instancia.  Son miembros de la clase y son métodos que pueden ser utilizados cuando se crea un objeto de la clase a la que pertenecen, esto es, cuando se crea una instancia de la clase.

•Métodos de clase.   Son miembros de la clase y son métodos que pueden ser invocados sin necesitar crear una instancia de la clase, y los identificamos fácilmente porque tienen el modificador. STATIC

•Métodos constructores.  Como veremos más adelante, son métodos con el nombre de la clase y que son invocados al instanciar un objeto o crear un ejemplar de la clase al que pertenecen con el operador new.

Page 16: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Métodos (Continuación)

La sintáxis de una simple declaración de un método es: 

[modificadores] tipo-de-retorno nombre-método (lista-de-parámetros) [ throws claseExcepcion1,.., claseExcepcionN ]    {       cuerpo     }

Donde:modificadores es opcional y puede ser uno más de las siguientes ocho palabras reservadas:

{ static, abstract, final, native,  synchronized,  public , protected, private }

tipo-de-retorno es cualquier nombre de clase o una de los siguientes nueve palabras reservadas:

{  void, boolean, byte, char, short, int, long, float, double  }

nombre-método es cualquier identificador válido

lista-de-parámetros es una secuencia de declaraciones de parámetros

[ throws claseExcepcion1,.., claseExcepcionN ]  es una lista de posibles excepciones que en un momento dado el código del método puede lanzar.

Cuerpo es una secuencia de declaraciones de variables e instrucciones que son ejecutadas por el método cuando se le invoca. 

Page 17: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Métodos (Continuación)

Ejemplo:

public static void main(String args[]) throws IOException{   /* aquí van las sentencias del cuerpo */}

Vamos a aprovechar el ejemplo para definir un concepto importante conocido como firma del método.

Firma de un método:   Es la definición del método, excluyendo el cuerpo, es algo parecido al concepto de función prototipo del lenguaje C.  En el ejemplo anterior, la firma del método es:

public static void main(String args[]) throws IOException El concepto es importante, porque la documentación de las API's de Java vemos listadas,  cientos de miles de firmas de métodos y las clases a los que pertenecen.

Page 18: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Creación de objetos

Objeto.  Un objeto es una cosa, generalmente extraída del vocabulario del espacio del problema o del espacio de la solución .

Todo objeto tiene:

Identidad (puede nombrarse o distinguirse de alguna manera de otros objetos )

Estado ( generalmente hay algunos datos asociados a él)

Comportamiento ( se pueden hacer cosas al objeto, y él puede a su vez puede hacer cosas a otros objetos)

Creación de Objetos.  Todo en Java se trata como un objeto. Se puede manipular objetos a través de handles (referencias, identificadores)

El handle o referencia no necesariamente está conectado a un objeto. Ejemplo:

String s;

Solo es creado la referencia pero hay que inicializarlo:

String s = “Curso de Java”;

Page 19: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Para conectar un handle o referencia a un objeto se usa la palabra llave new que es una palabra reservada de Java y significa mas o menos lo siguiente “creame un nuevo objeto de éste tipo”  o, " créame una nueva instancia o ejemplar de éste tipo" Ejemplo:

String s = new  String(“Curso de Java”);

El caso de objetos de la clase String es especial, porque puede crearse o instanciarse un objeto de esta clase sin el operador new, porque es una clase muy utilizada.

El efecto de crear un objeto con el operador new se traduce en la asignación de memoria para ese objeto en el heap de la RAM.

Creación de objetos (continuación)

Page 20: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Definición de clase● Una clase se define mediante

―La palabra reservada class―Seguida por el nombre de la clase que vamos definir―el cuerpo de la clase estará rodeado de llaves ({ })

class Alumno {…}

● Una clase está compuesta de atributos y métodos

Page 21: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Atributos● Variables que definen el estado de un objeto

― De tipo primitivo o de tipo referencias

class Alumno {

String nombre;String apellidos;int añoDeNacimiento;int númeroPersonal; //identificativo únicoString grupo;char horario; //’M’: mañana, ‘T’: tarde...

}

Alumno alumno1 = new Alumno();alumno1.nombre = “Pedro”;

Page 22: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

● Definen el comportamiento del objeto, es decir, determinan los mensajes que puede recibir un objeto

● Ejemplo:class Alumno {

...public String dameGrupo ( ) {

... }public void ponGrupo(String nuevoGrupo) {

... }...

}

Alumno alumno1 = new Alumno();alumno1.ponGrupo(“7031-91”);System.out.println(“El grupo de “ + alumno1.nombre + “ “ +alumno1.apellidos + “ es el “ + alumno1.dameGrupo());

Métodos

Page 23: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Interfaz pública de una clase● La interfaz pública de una clase (y de un objeto) está formada por:― Sus atributos públicos (no debería haber, salvo que seanconstantes)― Sus métodos públicos – el usuario sólo necesita conocer lasignatura

Page 24: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Derechos de acceso● Java proporciona un mecanismo para definir distintos derechos de acceso tanto a la clase como a sus elementos (atributos y métodos)

1. Acceso privado2. Acceso de paquete3. Acceso protegido4. Acceso público

Acceso privado● Se representa con la palabra reservada private

● Los elementos privados sólo pueden ser usados dentro de la clase que los define

―No son accesibles desde el exterior―Pero pueden ser accedidos por otro objeto de la misma clase

Page 25: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Acceso protegido• Se representa con la palabra reservada protected

● Estos elementos pueden ser usados en la clase que los define, en las de su paquete y en las que heredan de ella

Acceso público• Se representa con la palabra reservada public

● Se puede acceder a este elemento desde cualquier clase.

Acceso de paquete• Es el acceso por defecto, es decir, si no se utiliza ninguna palabra reservada

― También llamado acceso amistoso

● Los elementos son accesibles desde dentro del paquete que los define

Page 26: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Niveles de acceso

Page 27: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Elementos de clase (static)

● Elementos estáticos de clase: Métodos y atributos que pertenecen a la clase

― No se los invoca sobre un objeto concreto, sino que están disponibles siempre, sin necesidad de crear previamente un objeto de la clase

― Precedidos por la palabra clave reservada static

Page 28: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Definición de métodosvisibilidad Tipo nombreMétodo (listaArgumentos) {

// cuerpoMétodo}

● Visibilidad― Desde qué partes del programa se va a poder acceder al método.Un ejemplo de identificador de visibilidad es public● Tipo― Tipo primitivo o clase del resultado del método― El resultado del método se define en la sentencia return● Lista de parámetros― Tipo y nombre de 0, 1 o varios parámetros pasados al método― Si son varios, van separados por comas● Cuerpo del método― Qué acciones se realizan al llamar a dicho método

Page 29: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

class Alumno {

String nombre;String apellidos;int añoDeNacimiento;int númeroPersonalString grupo;char horario = ‘M’;

public String dameGrupo () {

return grupo;}

public void ponGrupo(String nuevoGrupo) {

grupo = nuevoGrupo;} // otras definiciones de métodos

}

Tipos devueltos

Nombres método

Lista de parámetrosVisibilidad

Cuerpo

Page 30: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Parámetros del método

● Parámetros: datos que un método necesita para su ejecución● Permiten generalizar el comportamiento

int cuadrado(){

return 10 * 10;}

int cuadrado (int i){

return i*i;}

● Parámetros (parámetros formales):― Variables que se detallan en la cabecera del método― El ámbito de los parámetros es el cuerpo del método

● Argumentos (parámetros reales)― Valores concretos que se pasan para esos parámetros en

la llamada al método

Page 31: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Argumentos del método

● Cualquier expresión del tipo del parámetro1. Valor literal

alumno1.ponNombre(“Pedro”);2. Variable

alumno1.ponNombre(nombreAlumno1);3. Operación

alumno1.ponNombre(“Pe” + finalNombre);4. Resultado de una llamada a método

alumno1.ponNombre(alumno3.dameNombre());

Page 32: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Paso de parámetros● En la llamada a un método, se copian los valores de losargumentos en los parámetros― Es lo que se conoce en programación como paso por valor― Los cambios que el método haga sobre el parámetro no afectanal valor original del atributo― Ejemplo:void cambiaParametro (int i) {

i++;}● Si llamamos a este método:int i = 1;ejemplo.cambiaParametro(i);System.out.println(i);● Imprimirá un 1.

Page 33: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Resultado de la llamada al método● Un método es ejecutado en un objeto receptor como reacción al mensaje mandado por un objeto llamante― El método puede devolver un resultado (respuesta al mensaje)

Page 34: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

● Se define en la sentencia return― Tras ejecutarse, el método termina● Tres formas básicas de terminar un método:1. Escribiendo la palabra reservada return seguida del valor resultante

public String dameGrupo () {

return grupo;}

2. Para métodos que no devuelven resultados (tipo resultado void)return;

3. Para métodos que no devuelven resultados (tipo resultado void,como en caso anterior) es posible suprimir la sentencia return.

La ejecución del método termina cuando se llega al final delcuerpo del método (})

Page 35: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Resultado de la llamada al método

● El valor resultado de la llamada al método puede usarse directamente en el programa llamante

― Tipo del resultado compatible con el tipo de la variable asignada

String grupoAlumno1 = alumno1.dameGrupo();

― O bien en cualquier lugar donde se espere un valor del tipo devuelto

System.out.println(alumno1.dameGrupo());

Page 36: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

● Método especial que se llama para crear un objeto● El objetivo del constructor suele ser inicializar el objeto

alumno1 = new Alumno();

―con new se reserva la memoria necesaria―con el constructor Alumno() se inicializa el objeto―con el operador de asignación = se asigna la dirección del objeto a la referencia

Constructores

● Caracteristicas:―mismo nombre que la clase―puede tener cero, uno o varios parámetros―no devuelve ningún resultado (en realidad, devuelve el propio

objeto)● Sintaxis del constructorvisibilidad NombreClase (listaParámetros) throws ListaExcepciones {

//cuerpo constructor}

Page 37: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Constructor por defecto

● Todas las clases necesitan al menos un constructor―Si el programador no define ningún constructor, el compilador

crea un constructor por defecto

● El constructor por defecto no tiene parámetros

● El constructor por defecto inicializa los atributos―Numéricos a cero―De referencia a null―Booleanos a false

Page 38: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Cuándo definir un constructor● Cuando se dé al menos una de estas circunstancias

― Se necesitan parámetros para el estado inicial― Construcción del objeto costosa y necesita código adicional― Las instancias deben crearse correctamente o no crearse

en absoluto― Se requiere que el constructor no sea público

Sobrecarga de constructores● Se puede sobrecargar el constructor―Varios constructores en la misma clase, pero con distintos argumentos

● Se ofrecen distintas opciones para crear el objeto―Por ejemplo, dependiendo de la información disponible en el momento de la creación

Page 39: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Ejemplo: Constructor

public class Coche {

String matricula;String fabricante;String modelo;String color;public Coche (String m) {

matricula = m;}// añadir un constructor que inicialice todos los atributos

}

public class PruebaCoche {

public static void main (String[] args) {

Coche c1 = new Coche (“3468 CXV”);Coche c2 = new Coche (“4462 BIG”, “BMW”, “525i”, “Negro”);Coche c3 = new Coche (); // Qué pasa en este caso?

}}

Page 40: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Ejercicio: Constructores

● Definir una clase Rectángulo que―Tenga dos atributos enteros, uno para cada lado―Tenga un constructor con dos parámetros que inicialice los atributos―Tenga un constructor con un parámetro para construir cuadrados

● Definir una clase PruebaRectángulo que compruebe el correcto funcionamiento de los constructores

Page 41: 2.1 Introducción a la Programación orientada a objetos. 2.1.1 Orígenes de la POO. 2.1.2 Beneficios de la POO. 2.2 Clases. 2.2.1 Encapsulamiento. 2.2.1.1

Recolector de basura

● En inglés: garbage collection

● Es necesario liberar la memoria dinámica (heap) que ya no se necesita

● En Java no hay mecanismo explícitos para destruir objetos

● El recolector de basura lo destruye si detecta que ya no se va a utilizar

― Cuando ya no quedan referencias a un objeto