Introducción a POO / UML / PHP5<br />Enrique Place (phpsenior.com / surforce.com)<br />
{ objetivos}<br />
{ objetivos}<br /> Entender qué es UML<br />Importancia de UML para POO<br /> Traducción UML -> PHP5<br />
1/3 - Qué es UML?<br />U.M.L. = Lenguaje Unificado de Modelado<br />
1/3 - Qué es UML?<br /> “UML es documentación”<br />
1/3 - Qué es UML?<br /> “UML es independiente del lenguaje”<br />
UML es similar a usar diagramas de relaciones DER / MER para diseñar una base de datos<br />
 Lo usan todas las empresas / proyectos profesionales de desarrollo de software<br />
Arquitecturas<br />Java / .Net<br />
2/3 – Importancia de UML para POO?<br />
“Es una herramienta gráfica que permite planificar el correcto diseño de nuestros sistemas Orientados a Objetos”<br />
Nos permite razonar mejor, sin pensar en código<br />
Ejemplos Básicos de su aplicación<br />UML Simplificado<br />
Pensamiento<br />“por lo general buscamos que nuestras clases sean estables y reusables”<br />
Principio de Diseño<br />“nuestras clases deberían ser cerradas al cambio y abiertas a la extensión”<br />
A<br />“Una clase llamada A”<br />
A<br />B<br />“clase A se conoce con una clase B”<br />
A<br />B<br />“Las clases entablan una relación”<br />
A<br />B<br />“Las clases entablan una relación”<br />(siempre prestar atención al sentido de las flechas)<br />
A<br />B<br />Se traduce como <br />“La clase A usa / conoce la clase B” <br />
A<br />B<br />Pero también significa <br />“B no sabe de la existencia de A” <br />
A<br />B<br />También se concluye con:<br />“Cualquier cambio en B afectará a A, pero no al revés” <br />
B<br />A<br />C<br />D<br />
B<br />A<br />C<br />D<br />“A es más inestable”<br />
B<br />A<br />C<br />D<br />“A tiende a ser estable”<br />
“Situaciones que habría que evitar”<br />
A<br />B<br />“Bidireccionalidad”<br />
B<br />A<br />C<br />“Relaciones Cíclicas”<br />
3/3 – Traducción UML -> PHP5<br />
“3 Zonas”<br />
“3 Zonas”<br />Nombre<br />
“3 Zonas”<br />Nombre<br />atributos<br />
“3 Zonas”<br />Nombre<br />atributos<br />métodos<br />
“3 Zonas”<br /> Persona<br />Nombre archivo: Persona.php<br />class Persona<br />{<br />  private $_nombre = “”;<br />  pu...
“3 Zonas”<br />Persona<br />Nombre archivo: Persona.php<br />class Persona<br />{<br />  private $_nombre = “”;<br />  pub...
“3 Zonas”<br />Persona<br />Nombre archivo: Persona.php<br />class Persona<br />{<br />private $_nombre = “”;<br />  publi...
“3 Zonas”<br />Persona<br />Nombre archivo: Persona.php<br />class Persona<br />{<br />private $_nombre = “”;<br />public ...
“3 Zonas”<br />Persona<br />Nombre archivo: Persona.php<br />class Persona<br />{<br />private $_nombre = “”;<br />public ...
“Lo más importante, <br />las Relaciones”<br />
“Cada flecha es un require_once en la clase donde inicia la flecha”<br />
Efecto PHP<br />“Nunca hacer todos los require_onceen un único archivo, aunque funcione”<br />
no es lo mismo require, include, ni include_once, solo require_once<br />
Efecto PHP<br />“Respetar siempre las relaciones en donde se originan”<br />
A<br />B<br /><?php<br />require_once ‘B.php’<br />class A<br />{<br />}<br />
A<br />B<br /><?php<br />require_once ‘B.php’<br />class A<br />{<br />}<br /><?php<br />class B<br />{<br />}<br />
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 />
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 />...
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 /><?ph...
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...
Un caso práctico<br />“Usuario y su persistencia”<br />
Usuario<br />
Usuario<br />Persistencia<br />
Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />
Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Log<br />
Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Cómo se usa esto?<br />Log<br />
Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Index<br />Log<br />
Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Index<br />Log<br />
 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 c...
Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Index<br />Log<br />
 Nivel de Abstracción = 0<br />
<?php<br />require_once ‘Usuario.php’;<br />require_once ‘Persistencia.php’;<br />require_once ‘MySQL.php’;<br />require_o...
Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Index<br />Log<br />
 Esto hace que nuestro diseño sea débil ante la ausencia de Index, y no podamos reusar las clases porque estas no tienen c...
Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Index<br />Log<br />
Usuario<br />Persistencia<br />MySQL<br />PostgreSQL<br />Index<br />Log<br />
 Esto hace que nuestro diseño sea débil ante la ausencia de Index, y no podamos reusar las clases porque estas no tienen c...
En resumen, nuestro diseño apesta y no sirve.<br />Eso es POO en PHP5 <br />mal implementada<br />
Se puede hacer buenos diseñossin diagramas?<br />
Palabras Finales<br />Para qué nos sirve UML a los desarrolladores PHP?<br />
Fin!<br />Preguntas?<br />phpsenior.com / surforce.com<br />
Próxima SlideShare
Cargando en…5
×

Introducción a UML / POO / PHP5

10.811 visualizaciones

Publicado el

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

Publicado en: Tecnología, Educación
5 comentarios
4 recomendaciones
Estadísticas
Notas
  • 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
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • Muy bueno tu tutorial
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • Ya está disponible el video ;-)

    http://phpsenior.blogspot.com/2010/03/video-de-la-charla-introduccion-poo-uml.html
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • Gracias... debio a ver estado buenisima la presentacion
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • Muy bueno, aun que me gustaría ver una grabación, en fin muchas felicidades
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
Sin descargas
Visualizaciones
Visualizaciones totales
10.811
En SlideShare
0
De insertados
0
Número de insertados
3.681
Acciones
Compartido
0
Descargas
275
Comentarios
5
Recomendaciones
4
Insertados 0
No insertados

No hay notas en la diapositiva.

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 />

×