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