operador == método: equals() método: hashcode() método: tostring() palabra: static atributos de...

40

Upload: basilio-rogel

Post on 03-Jan-2015

24 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas
Page 2: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas
Page 3: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas e Interfaces Nested e Inner Clases Ejemplos

Page 4: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

El operador == determina si dos referencias son idénticas (Si hacen referencia al mismo objeto)

El método equals determina si los objetos son “iguales”, pero no necesariamente idénticos.

La implementación de equals en la clase Object utiliza el operador ==

Los usuarios pueden sobrescribir el método equals para implementar el testeo de igualdad específico de su lógica

Page 5: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

public class MyDate {private int day;private int month;private int year;

public MyDate(int day, int month, int year) { this.day = day; this.month = month; this.year = year; }

Page 6: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

public boolean equals(Object o) {boolean result = false;if ( (o != null) && (o instanceof MyDate) ) {MyDate d = (MyDate) o; if ((day==d.day)&&(month==d.month)&&(year==d.year) ) { result = true; } } return result; }

public int hashCode() { return (day ^ month ^ year); } }

Page 7: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Es reflexivo₋ Para cualquier variable de referencia x, x.equals(x) debe

retornar true.

Es simétrico₋ x.equals(y) == true si y solo si y.equals(x) == true

Es transitiva₋ x.equals(y) == true y y.equals(z) == true, entonces

x.equals(z) == true

Page 8: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Es consistente₋ Ante múltiples invocaciones iguales si no se producen

cambios en la información utilizada para el cálculo de equals, el valor de retorno debería ser el mismo

Para cualquier x != null, x.equals(null) debería ser falso

Page 9: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Si dos objetos son considerados iguales utilizando el método equals( ), entonces el valor de hashcode debe ser idéntico

Por esto, se recomienda sobrescribir hashCode( ) si se sobrescribe equals( )

Page 10: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

El valor hashcode de un objeto es utilizado por algunas clases que implementan colecciones.

Colecciones como HashMap y HashSet utilizan este valor para determinar donde deben colocar el objeto en su estructura

Page 11: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Durante la misma ejecución el hashcode de un objeto debe ser el mismo, mientras no se modifique información que altere la comparación equals

Page 12: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Convierte un objeto en String

Usado durante la concatenación de String

Sobrescribir este método para brindar información sobre el objeto

Page 13: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Es utilizada como un modificador en variables, métodos y “nested” clases (anidadas).

Declara que el atributo o método esta asociado a la clase y no a una instancia de objeto en particular

Debido a lo antes mencionado, los miembros static son llamados “miembros de clase”, como atributo de clase o método de clase

Page 14: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Son compartidos a lo largo de todas las instancias de la clase

public class Count { private int serialNumber; private static int counter = 0;

public Count() { counter++; serialNumber = counter; }

Page 15: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Pueden ser accedidos desde fuera de la clase, sin una instancia de la clase(si esta marcada como public)

public class OtherClass { public void incrementNumber() { Count1.counter++; } }

Page 16: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Una clase puede contener código en un bloque static que no pertenece a ningún método.

Los bloques de código static ejecutan solo una vez, cuando la clase se carga

Un bloque static se utiliza usualmente para inicializar atributos static (de la clase)

Page 17: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

public class Count4 {public static int counter;static { counter = Integer.getInteger("myApp.Count4.counter").intValue();} } public class TestStaticInit {public static void main(String[] args) { System.out.println("counter = "+ Count4.counter); } }

La salida del programa es la siguiente:java –DmyApp.Count4.counter=47 TestStaticInitcounter = 47

Page 18: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

No se puede extender una clase final

No se puede sobrescribir un método final

Una variable final es una constante

Se puede setear una variable final solo una vez, pero la asignación puede ser independiente de la declaración

Page 19: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Constantes:

public class Bank {private static final

doubleDEFAULT_INTEREST_RATE=3.2;... // more declarations}

Page 20: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Atributo final en blanco de instanciapublic class Customer {private final long customerID;public Customer() {

customerID = createID();}public long getID() {

return customerID;}private long createID() {

return ... // generate new ID}}

Page 21: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

El problema:

₋ Cuando en una superclase se tiene que implementar un método que van a heredar sus subclases y no se le puede dar comportamiento.

₋ Cuando diseñamos una clase solo para heredar y no queremos permitir crear una instancia nunca

Page 22: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Java permite al diseñador que una superclase declara un método que no provee implementación. Este método es llamado abstracto.

Se utiliza la palabra reservada abstract

La implementación del método la va a realizar la subclase.

Cualquier clase con por lo menos un método abstracta, es una clase abstracta y se tiene que declarar de esta forma

Page 23: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

El compilar previene el intanciar una clase abstracta

Hacer new de una clase abstracta no esta permitido

Puede tener:₋ Atributos₋ Métodos concretos₋ Constructores

Page 24: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Una interfaz pública es un contrato entre el código cliente y la clase que implementa esa interfaz.

En java, es la declaración formal de dicho contrato y todos los métodos no tienen implementación

Muchas clases no relacionadas pueden implementar la misma interfase

Una clase puede implementar muchas interfases no relacionadas

Page 25: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

public interface Flyer { public void takeOff(); public void land(); public void fly();}public class Airplane implements Flyer { public void takeOff() { // accelerate until lift-off // raise landing gear }

public void land() {

// lower landing gear

// deccelerate and lower flaps until touch-down

// apply breaks

}

public void fly() {

// keep those engines running

}}

Page 26: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas
Page 27: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas
Page 28: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

public class Bird extends Animal implements Flyer {

public void takeOff() { /* take-off implementation */ }

public void land() { /* landing implementation */ }

public void fly() { /* fly implementation */ }

public void buildNest() { /* nest building behavior */ }

public void layEggs() { /* egg laying behavior */ }

public void eat() { /* override eating behavior */ }

}

Page 29: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas
Page 30: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

public class Harbor { public static void main(String[] args) {

Harbor bostonHarbor = new Harbor(); RiverBarge barge = new RiverBarge(); SeaPlane sPlane = new SeaPlane(); bostonHarbor.givePermissionToDock(barge); bostonHarbor.givePermissionToDock(sPlane);

} private void givePermissionToDock(Sailer s) {

s.dock(); }}

Page 31: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Declarar métodos que una o más clases esperan implementar

Determinar una interfaz de objetos para programar, sin revelar el cuerpo actual de la clase.

Capturar similitudes ente clases que no están

relacionadas, sin forzar una relación entre ambas

Simular herencia múltiple declarando que una clase implementa varias interfases

Page 32: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Agregadas en Java™ Development Kit (JDK™) 1.1

Permite la definición de una clase dentro de otra definición de clase

Grupo de clases que lógicamente tiene sentido que estén juntas

Se puede controlar la visibilidad de una dentro de la otra

Se utilizan para implementar detalles de implementación que no deben ser compartidas por otras clases

Page 33: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas
Page 34: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas
Page 35: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas
Page 36: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Dentro del alcance que contiene la definición de la clase, se puede hacer referencia a la misma por el nombre.

Fuera de dicho alcance se debe usar el nombre completo(ejemplo Outer.Nested)

Puedo definir nested clases dentro de métodos. Estas clases se llaman locales.

Las clases locales pueden acceder a variables locales, incluyendo argumentos del método, del bloque que la contenga, pero tienen que ser final

Page 37: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Excepto la clases locales, las clases nested pueden ser declaradas con cualquier nivel de protección

Las clases nested pueden ser abstractas

Una interfaz puede ser nested, entonces puede ser implementada en forma normal o por otra clase nested

Las clases nested pueden acceder miembros static de la clase que la contiene

Page 38: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Nested clases pueden ser declaradas static

Las clases nested no static son llamadas inner clases

Page 39: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Qué es java.lang? Clase Object Wrapper Classes Utilidades de Conversión de tipos Clase String Clase StringBuffer Clase Math

Page 40: Operador == Método: equals() Método: hashCode() Método: toString() Palabra: static Atributos de clase Métodos de clase Palabra final Clases abstractas

Thinking in Java₋ Bruce Eckel

The Java Tutorial₋ http://download.oracle.com/javase/tutorial/