Conceptos avanzados oo (presentación 4)

6,485 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
6,485
On SlideShare
0
From Embeds
0
Number of Embeds
5,425
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Conceptos avanzados oo (presentación 4)

  1. 1. Conceptos Avanzados OO<br />
  2. 2. Principio de Responsabilidad Única<br />Una clase debe tener una, y solo una razón para cambiar<br />¿Por qué es importante mantener las responsabilidades en clases separadas?<br />Por que cada responsabilidad es un eje de cambio. Cuando los requerimientos cambian, esos cambios se manifiestan a través de un cambio de responsabilidades a través de las clases. Si una clase asume más de una responsabilidad, entonces habrá más de una razón para modificarla.<br />
  3. 3. Principio de Responsabilidad Única(2)<br /> Si una clase tiene mas de una responsabilidad, entonces estas responsabilidades se acoplan. Los cambios en una responsabilidad pueden afectar o inhibir la habilidad de la clase para cumplir con las demás. Este tipo de acoplamiento resulta en diseños frágiles que se rompen de formas inesperadas cuando hay cambios.<br />
  4. 4. Interface Modem<br />interface Modem<br />{<br />publicvoid marcar(String numero);<br />pubicvoid colgar()<br />publicvoid enviar(char c)<br />publicvoid recibir()<br />}<br />
  5. 5. Modem Correcto<br />
  6. 6. Principio Abierto Cerrado <br />Debe ser posible extender el comportamiento de una clase, sin modificarlo.<br />Los módulos que conforman el principio abierto-cerrado tienen dos atributos principales.<br />
  7. 7. Abiertos a la extensión<br />Están “Abiertos para la extensión”. Esto significa que el comportamiento del modulo puede ser extendido. <br />Se puede hacer que el modulo se comporte de maneras nuevas y diferentes conforme cambien los requerimientos de la aplicación, o para cumplir con los requerimientos de nuevas aplicaciones.<br />
  8. 8. Cerrados a la modificación<br />Están “Cerrados a la modificación”.<br />El código fuente de estos módulos es inviolable.<br />Nadie tiene permitido hacer cambios en sus códigos fuentes.<br />Los módulos deben tener una interfaz estable y bien definida que no se modificará para no afectar a otros módulos que dependan de ellos.<br />
  9. 9. Claves del principio Abierto-Cerrado<br /> El código bien diseñado puede ser extendido sin modificaciones; y que en los programas bien diseñados, se pueden agregar características nuevas agregando nuevo código, en ves de cambiar código antiguo que ya funciona.<br />Nota: La abstracción y el polimorfismo son la clave<br />
  10. 10. Principio de inversión de dependencias<br /> Se debe depender de abstracciones, no de cosas concretas.<br /> Los módulos de alto nivel no deben depender de módulos de bajo nivel. Ambos deben depender de abstracciones.<br /> Las abstracciones no deben depender de detalles. Los detalles deben depender de las abstracciones.<br />
  11. 11. Principio de sustitución de Liskov<br />Las funciones que usan referencias a clases base, deben ser capases de usar objetos de clases derivadas sin darse cuenta<br />La importancia de este principio se hace evidente cuando deja de cumplirse.<br />
  12. 12. Principio violado<br />publicclass figura<br />{<br />publicvoid dibuja()<br />{<br />if(thisinstanceofPoligono)<br />{<br />dibujaPoligono();<br />}<br />elseIf(thisinstanceof Circulo)<br />{<br />dibujaCirculo();<br />}<br />}<br />}<br />
  13. 13. Principio correcto<br />publicclassPoligonoextends Figura<br />{<br />publicvoid dibuja() {…}<br />}<br />publicclass Circulo extends Figura<br />{<br />publicvoid dibuja() {…}<br />}<br />
  14. 14. Principio de segregación de interfaces<br />Los clientes de una clase no deben depender de interfaces que no utilizan.<br />Este principio se ocupa de las desventajas de las interfaces “gordas”. Las clases que tienen interfaces “gordas ” son clases cuyas interfaces no son cohesivas. <br />
  15. 15. En otras palabras, las interfaces de las clases pueden ser separadas en grupos de funciones miembro. <br />Cada grupo sirve a un conjunto distinto de clientes. Por lo que algunos clientes usan un grupo de funciones miembro, y otros clientes usan los otros grupos.<br />Principio de segregación de interfaces<br />
  16. 16. ¿Alguna Pregunta?<br />16<br />
  17. 17. Gracias<br />17<br />http://www.javatutoriales.com/<br />Java Tutoriales en Facebook<br />

×