1 / 91

SCJP Luis Loor Verónica Carrasco

SCJP Luis Loor Verónica Carrasco. Encapsulación Objetivo. 5.1 Desarrollar código que implementa la encapsulación, acoplamiento, y gran cohesión en las clases, y describir los beneficios. Encapsulación. La Encapsulación hace sencillo el mantenimiento y la modificación del código.

delano
Download Presentation

SCJP Luis Loor Verónica Carrasco

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SCJP Luis Loor Verónica Carrasco

  2. Encapsulación Objetivo 5.1 Desarrollar código que implementa la encapsulación, acoplamiento, y gran cohesión en las clases, y describir los beneficios.

  3. Encapsulación • La Encapsulación hace sencillo el mantenimiento y la modificación del código. • public class BadOO{ • public int size; • public int weight; • ...} • public class ExploitBadOO { • public static void main (String [] args) { • BadOO b = new BadOO(); • b.size = -5; • } • }

  4. Como Encapsular? • Mantener las variables de las instancias protegidas a través de modificadores de acceso Ej: private. • Crear metodos con identificadores de acceso público, y obligar a invocar a estos métodos para acceder a las instancias de las variables. • Para los métodos, aplicar la convención de los Java Beans set<someProperty> and get<someProperty>.

  5. public class Box { • // protect the instance variable; only an instance • // of Box can access it " d " "dfdf" • private int size; • // Provide public getters and setters • public int getSize() • { • return size; • } • public void setSize(int newSize) { • size = newSize; • } • }

  6. Cambiar a modificador de Acceso PRIVATE class Foo { public int left = 9; public int right = 3; public void setLeft(int leftNum) { left = leftNum; right = leftNum/3;} // lots of complex test code here}

  7. Herencia • Objetivo: • Implementar código que tenga relaciones “is-a” y/o “has-a”

  8. Herencia • Capacidad que tienen los objetos Java de heredar propiedades y características de otros objetos • Toda clase en Java es un subclase de Object por lo tanto siempre cualquier clase hereda todos los métodos de la clase Object. Metodos: equals, clone, notify, wait, etc. • La herencia es importante para reusar código y uso del polimorfismo.

  9. Herencia • Reuso de código • Crear clases generales y clases mas especializadas. Las clases especializadas deben heredar de las clases generales.

  10. Herencia • Las clases mas especializadas heredan los atributos y métodos de las clases mas generales.

  11. Herencia • Polimorfismo • Muchas formas. • Toda subclase puede ser ubicada en base a la clase general de la cual se extiende. • Ejemplo:

  12. Herencia • Otra clase con un método que reciba un argumento de tipo GameShape, puede resolver cualquier tipo de objeto que sea de tipo GameShape o cualquier subclase de esta.

  13. Herencia • En polimorfismo, cuando se invoca a los argumentos de una clase general, no importa si se lo hace desde un subtipo, solo se pueden invocar los métodos de la clase general así el subtipo tenga implementado mas métodos.

  14. Herencia • Relaciones “IS-A” y/o “HAS-A” • Objetivo: • Ver código y determinar si se muestran relaciones “IS-A” y/o “HAS-A”

  15. Herencia • “IS-A” • Basado en la herencia o implementación de interfaces • “IS-A” -> this thing is a type of that thing (esta cosa es de tipo esa cosa) • “IS-A” se expresa a través de extends y a través de implements

  16. Herencia • Ejemplo: • Que podríamos decir de la clase Subaru y Car?

  17. Herencia Más complejidad… Subaru “is a” Car Subaru “is a” Vehicle Car “is a” Vehicle

  18. Herencia • “HAS-A” • Se basan en el uso mas que en la herencia • A “HAS-A” C si A tiene una referencia a una instancia de la clase C.

  19. Polimorfismo Objetivo: 5.2 Determinar que un codigo implementa polimorfismo. Determinar cuando sería necesario hacer un casting y reconocer los errores de compilacion y de ejecución

  20. Polimorfismo • Cualquier objeto Java que puede pasar mas de un prueba IS-A puede ser considerado polimorfico. • Entonces a excepción del objeto tipo Object, todos los objetos de java poseen polimorfismo o son polimorficos (pasan la prueba para el tipo Objeto y para su propio tipo).

  21. Polimorfismo • La única manera de acceder a un objeto es a través de una referencia: • Recordar • Una referencia puede ser de un solo tipo y declarada una sola vez, ese tipo no puede ser cambiado (Sin embargo el objeto al cual hace referencia si puede cambiar). • Una referencia es una variable, entonces puede ser asinganda a otros objetos(a menos que la referencia sea declarada como FINAL) • Un tipo de referencia variable determina los métodos que pueden ser invocados en el objeto al cual la variable hace referencia.

  22. Polimorfismo • Una variable de referencia se puede referir a cualquier objeto del mismo tipo, o se puede referir a cualquier subtipo del tipo declarado. • public class SuperClase { • public int metodoSuperClase(){ • int numero = 2; • return numero; • } • } • public class ExtiendoSuperClase extends SuperClase{ • int numero = metodoSuperClase(); • } • public class pruebasCap1 { • SuperClase mySuperClase = new SuperClase(); • ExtiendoSuperClase myExtSuperClase = new ExtiendoSuperClase(); • public void metodo(){ • mySuperClase = myExtSuperClase; • } • }

  23. Una variable de referencia puede ser de tipo clase o de tipo interfaz. Si es de tipo interfaz, entonces puede hacer referencia a cualquier objeto o clase que implemente dicha interfaz. • Una clase solo puede tener una inmediata súper clase: • class PlayerPiece extends GameShape, Animatable { // Incorrecto! • // aquí va el código • } • Usar interfaces: • public interface Animatable { • public void animate(); • } • class PlayerPiece extends GameShape implements Animatable { • public void movePiece() { • System.out.println("moving game piece"); • } • public void animate() { • System.out.println("animating..."); • } • // more code • }

  24. PlayerPiece pasa la prueba IS-A para GameShape y para Animatable, entonces puede ser tratada polimorficamente como una de cuatro cosas en un instante de tiempo, dependiendo del tipo declarado y la variable de referencia. • Un objeto (todo objeto hereda de Object) • Un GameShape (PlayerPiece hereda de GameShape) • Un PlayerPiece (lo que realmente es) • Un Animatable (PlayerPiece implementa Animatable)

  25. class GameShape { • public void displayShape() { • System.out.println("displaying shape"); • } • } • class PlayerPiece extends GameShape{ } • Declaraciones legales: • PlayerPiece player = new PlayerPiece(); • Object o = player; • GameShape shape = player; • Animatable mover = player; • Cual de estas variables puede invocar al método displayShape() ?? • La variable mover, que métodos puede invocar??

  26. Objetivo Determinar correctamente si un método es sobre escrito o sobre cargado.

  27. Overriding methods • Cuando se hereda un método desde una clase padre, éste método puede ser sobrescrito (a menos que sea marcado como final). • Beneficio: Definir el comportamiento específico para un subclase.

  28. Overriding methods • Ejemplo de sobre escritura de un método. • Para clases abstractas la sobre escritura es “casi una obligación”

  29. Overriding methods Un caso más complejo (Polimorfismo incluido) Con el polimorfismo hay que tener cuidado a la hora de saber qué métodos sobre escritos se invocan al momento de referenciar objetos. Analicemos el siguiente código.

  30. Overriding methods

  31. Overriding methods a.eat() // qué método se invoca? b.eat() // qué método se invoca? b.buck() // es código válido? Porqué? Horse horse = new Animal() // es código válido? Porqué?

  32. Overriding methods • Reglas para sobre escribir métodos. • La lista de argumentos deben ser iguales. • Mismo tipo de retorno. • El nivel de acceso no puede ser más restrictivo que el declarado en el método a sobrescribir. • El nivel de acceso puede ser menos restrictivo. • Sólo se puede hacer sobrescribir métodos de instancia a través de una subclase que los herede. • Se puede sobrescribir métodos de una super clase no marcados como final o private (dentro del mismo paquete)

  33. Overriding methods • En paquetes diferentes, sólo aquellos marcados como public o protected. • No se pueden sobrescribir métodos marcados como final. • No se pueden sobrescribir métodos marcados como static.

  34. Overriding methods • Analicemos el siguiente método. • Compila o no compila?

  35. Overriding methods Invocando la versión del método sobrescrito definido en la superclase. Para esto se utiliza la palabra super.

  36. Overloading methods • La sobrecarga de métodos permite usar el mismo nombre de un método de una clase pero con diferentes lista de argumentos y opcionalmente diferente tipo de retorno. • Reglas. • Se debe cambiar la lista de argumentos. • Se puede cambiar el tipo de retorno. • Se puede cambiar el nivel de acceso. • Se puede declarar checked exceptions.

  37. Overloading methods Llamada a métodos sobrecargados La invocación de los métodos sobrecargados depende de los argumentos que reciba cada método.

  38. Overloading methods

  39. Overloading methods Invocación de métodos sobrecargados (mas complejo) Examinemos el siguiente código.

  40. Overloading methods • Cual es la salida en consola?

  41. Overloading methods Y ahora? Cuál es la salida?

  42. Overloading methods Polimorfismo en métodos sobrescritos y sobrecargados Cuidado en ocasiones un método está sobrecargado y sobrescrito a la vez.

  43. Overloading methods • Dar los resultados en cada caso

  44. Overriding/Overloading • Puntos claves • Sobrecarga se detecta en el tiempo de complicación • Sobrescritura se detecta en tiempo de ejecución.

  45. Casting Cast conocido como downcast porque hacemos el casting hacia abajo en el árbol de herencia hacia una clase más especifica. En este caso es correcto porque antes nos aseguramos (con instanceof) que sea de tipo Dog.

  46. Casting El compilador no se da cuenta del error porque todo lo que puede hacer es verificar que los dos tipos estén en el mismo árbol de herencia.

  47. Casting

  48. Casting El otro tipo de casting, el upcasting (casting hacia arriba del árbol de jerarquía, hacia una clase más general), trabaja implícitamente

  49. Para el examen

  50. Objetivo Poder escribir código implementando interfaces.

More Related