Introducción a UML / POO / PHP5

10,770 views

Published on

Breve charla introductoria en el marco de las primeras charlas abiertas del Grupo PHP Argentina

Published in: Technology, Education
5 Comments
4 Likes
Statistics
Notes
  • Re viendo la presentacion en la pagina 22 donde dices que 'Cualquier cambio en B afectara a A, pero no al reves'
    acaso no es que 'Cualquier Cambio en B No afectara A, y que los cambios en A afectan a B?
    Edit: ya le encontr sentido a la Flecha...... jajaja, no dije nada
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Muy bueno tu tutorial
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Ya está disponible el video ;-)

    http://phpsenior.blogspot.com/2010/03/video-de-la-charla-introduccion-poo-uml.html
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Gracias... debio a ver estado buenisima la presentacion
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Muy bueno, aun que me gustaría ver una grabación, en fin muchas felicidades
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
10,770
On SlideShare
0
From Embeds
0
Number of Embeds
3,681
Actions
Shares
0
Downloads
275
Comments
5
Likes
4
Embeds 0
No embeds

No notes for slide

Introducción a UML / POO / PHP5

  1. 1. Introducción a POO / UML / PHP5<br />Enrique Place (phpsenior.com / surforce.com)<br />
  2. 2. { objetivos}<br />
  3. 3. { objetivos}<br /> Entender qué es UML<br />Importancia de UML para POO<br /> Traducción UML -> PHP5<br />
  4. 4. 1/3 - Qué es UML?<br />U.M.L. = Lenguaje Unificado de Modelado<br />
  5. 5. 1/3 - Qué es UML?<br /> “UML es documentación”<br />
  6. 6. 1/3 - Qué es UML?<br /> “UML es independiente del lenguaje”<br />
  7. 7. UML es similar a usar diagramas de relaciones DER / MER para diseñar una base de datos<br />
  8. 8. Lo usan todas las empresas / proyectos profesionales de desarrollo de software<br />
  9. 9. Arquitecturas<br />Java / .Net<br />
  10. 10. 2/3 – Importancia de UML para POO?<br />
  11. 11. “Es una herramienta gráfica que permite planificar el correcto diseño de nuestros sistemas Orientados a Objetos”<br />
  12. 12. Nos permite razonar mejor, sin pensar en código<br />
  13. 13. Ejemplos Básicos de su aplicación<br />UML Simplificado<br />
  14. 14. Pensamiento<br />“por lo general buscamos que nuestras clases sean estables y reusables”<br />
  15. 15. Principio de Diseño<br />“nuestras clases deberían ser cerradas al cambio y abiertas a la extensión”<br />
  16. 16. A<br />“Una clase llamada A”<br />
  17. 17. A<br />B<br />“clase A se conoce con una clase B”<br />
  18. 18. A<br />B<br />“Las clases entablan una relación”<br />
  19. 19. A<br />B<br />“Las clases entablan una relación”<br />(siempre prestar atención al sentido de las flechas)<br />
  20. 20. A<br />B<br />Se traduce como <br />“La clase A usa / conoce la clase B” <br />
  21. 21. A<br />B<br />Pero también significa <br />“B no sabe de la existencia de A” <br />
  22. 22. A<br />B<br />También se concluye con:<br />“Cualquier cambio en B afectará a A, pero no al revés” <br />
  23. 23. B<br />A<br />C<br />D<br />
  24. 24. B<br />A<br />C<br />D<br />“A es más inestable”<br />
  25. 25. B<br />A<br />C<br />D<br />“A tiende a ser estable”<br />
  26. 26. “Situaciones que habría que evitar”<br />
  27. 27. A<br />B<br />“Bidireccionalidad”<br />
  28. 28. B<br />A<br />C<br />“Relaciones Cíclicas”<br />
  29. 29. 3/3 – Traducción UML -> PHP5<br />
  30. 30. “3 Zonas”<br />
  31. 31. “3 Zonas”<br />Nombre<br />
  32. 32. “3 Zonas”<br />Nombre<br />atributos<br />
  33. 33. “3 Zonas”<br />Nombre<br />atributos<br />métodos<br />
  34. 34. “3 Zonas”<br /> Persona<br />Nombre archivo: Persona.php<br />class Persona<br />{<br /> private $_nombre = “”;<br /> public function __construct($nombre)<br /> {<br /> $this->_nombre = $nombre;<br /> }<br /> public function saludar()<br /> {<br /> return ‘Mi nombre es ‘ . $this->_nombre;<br /> }<br />}<br />- nombre : String<br />+Persona(nombre:String)<br />+ saludar():String<br />
  35. 35. “3 Zonas”<br />Persona<br />Nombre archivo: Persona.php<br />class Persona<br />{<br /> private $_nombre = “”;<br /> public function __construct($nombre)<br /> {<br /> $this->_nombre = $nombre;<br /> }<br /> public function saludar()<br /> {<br /> return ‘Mi nombre es ‘ . $this->_nombre;<br /> }<br />}<br />- nombre : String<br />+Persona(nombre:String)<br />+ saludar():String<br />
  36. 36. “3 Zonas”<br />Persona<br />Nombre archivo: Persona.php<br />class Persona<br />{<br />private $_nombre = “”;<br /> public function __construct($nombre)<br /> {<br /> $this->_nombre = $nombre;<br /> }<br /> public function saludar()<br /> {<br /> return ‘Mi nombre es ‘ . $this->_nombre;<br /> }<br />}<br />- nombre : String<br />+Persona(nombre:String)<br />+ saludar():String<br />
  37. 37. “3 Zonas”<br />Persona<br />Nombre archivo: Persona.php<br />class Persona<br />{<br />private $_nombre = “”;<br />public function __construct($nombre)<br /> {<br /> $this->_nombre = $nombre;<br /> }<br /> public function saludar()<br /> {<br /> return ‘Mi nombre es ‘ . $this->_nombre;<br /> }<br />}<br />- nombre : String<br />+Persona(nombre:String)<br />+ saludar():String<br />
  38. 38. “3 Zonas”<br />Persona<br />Nombre archivo: Persona.php<br />class Persona<br />{<br />private $_nombre = “”;<br />public function __construct($nombre)<br /> {<br /> $this->_nombre = $nombre;<br /> }<br />public function saludar()<br /> {<br /> return ‘Mi nombre es ‘ . $this->_nombre;<br /> }<br />}<br />- nombre : String<br />+Persona(nombre:String)<br />+ saludar():String<br />
  39. 39. “Lo más importante, <br />las Relaciones”<br />
  40. 40. “Cada flecha es un require_once en la clase donde inicia la flecha”<br />
  41. 41. Efecto PHP<br />“Nunca hacer todos los require_onceen un único archivo, aunque funcione”<br />
  42. 42. no es lo mismo require, include, ni include_once, solo require_once<br />
  43. 43. Efecto PHP<br />“Respetar siempre las relaciones en donde se originan”<br />
  44. 44. A<br />B<br /><?php<br />require_once ‘B.php’<br />class A<br />{<br />}<br />
  45. 45. A<br />B<br /><?php<br />require_once ‘B.php’<br />class A<br />{<br />}<br /><?php<br />class B<br />{<br />}<br />
  46. 46. C<br />A<br />B<br /><?php<br />require_once ‘B.php’<br />class A<br />{<br />}<br /><?php<br />class B<br />{<br />}<br />
  47. 47. C<br />A<br />B<br /><?php<br />require_once ‘B.php’<br />require_once ‘C.php’<br />class A<br />{<br />}<br /><?php<br />class B<br />{<br />}<br />
  48. 48. C<br />A<br />B<br />D<br /><?php<br />require_once ‘B.php’<br />require_once ‘C.php’<br />class A<br />{<br />}<br /><?php<br />require_once ‘D.php’<br />class B<br />{<br />}<br />
  49. 49. C<br />A<br />B<br />D<br /><?php<br />require_once ‘B.php’<br />require_once ‘C.php’<br />require_once ‘D.php’<br />class A<br />{<br />}<br />Funciona, pero está MAL!<br />
  50. 50. Un caso práctico<br />“Usuario y su persistencia”<br />
  51. 51. Usuario<br />
  52. 52. Usuario<br />Persistencia<br />
  53. 53. Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />
  54. 54. Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Log<br />
  55. 55. Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Cómo se usa esto?<br />Log<br />
  56. 56. Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Index<br />Log<br />
  57. 57. Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Index<br />Log<br />
  58. 58. El error más común de los desarrolladores PHP (por el “efecto PHP”) es colocar todos los require_once en index.php y no colocar nada en las clases que corresponde<br />
  59. 59. Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Index<br />Log<br />
  60. 60. Nivel de Abstracción = 0<br />
  61. 61. <?php<br />require_once ‘Usuario.php’;<br />require_once ‘Persistencia.php’;<br />require_once ‘MySQL.php’;<br />require_once ‘PostgreSQL.php’;<br />require_once ‘Log.php’;<br />class Index<br />{<br />}<br />
  62. 62. Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Index<br />Log<br />
  63. 63. Esto hace que nuestro diseño sea débil ante la ausencia de Index, y no podamos reusar las clases porque estas no tienen correctamente implementadas sus relaciones<br />
  64. 64. Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Index<br />Log<br />
  65. 65. Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Index<br />Log<br />
  66. 66. Esto hace que nuestro diseño sea débil ante la ausencia de Index, y no podamos reusar las clases porque estas no tienen correctamente implementadas sus relaciones<br />
  67. 67. En resumen, nuestro diseño apesta y no sirve.<br />Eso es POO en PHP5 <br />mal implementada<br />
  68. 68. Se puede hacer buenos diseñossin diagramas?<br />
  69. 69. Palabras Finales<br />Para qué nos sirve UML a los desarrolladores PHP?<br />
  70. 70. Fin!<br />Preguntas?<br />phpsenior.com / surforce.com<br />

×