View
12.591
Download
2
Category
Preview:
DESCRIPTION
Charla de Enrique Place titulada "Introducción a POO / UML / PHP5" en las Primeras Charlas del Grupo PHP Argentina
Citation preview
Introducción a POO / UML / PHP5
Enrique Place (phpsenior.com / surforce.com)
{ objetivos }
{ objetivos }
1. Entender qué es UML2. Importancia de UML
para POO3. Traducción UML ->
PHP5
1/3 - Qué es UML?
U.M.L. = Lenguaje Unificado de Modelado
1/3 - Qué es UML?
“UML es documentación”
1/3 - Qué es UML?
“UML es independiente del lenguaje”
UML es similar a usar diagramas de relaciones DER / MER para diseñar
una base de datos
Lo usan todas las empresas / proyectos
profesionales de desarrollo de software
Arquitecturas
Java / .Net
2/3 – Importancia de UML para POO?
“Es una herramienta gráfica que permite planificar el correcto diseño de nuestros
sistemas Orientados a Objetos”
Nos permite razonar mejor, sin pensar en código
Ejemplos Básicos de su aplicación
UML Simplificado
Pensamiento
“por lo general buscamos que nuestras clases sean
estables y reusables”
Principio de Diseño
“nuestras clases deberían ser cerradas al cambio y abiertas a la extensión”
A
“Una clase llamada A”
A
“clase A se conoce con una clase B”
B
A
“Las clases entablan una relación”
B
A
“Las clases entablan una relación”
(siempre prestar atención al sentido de las flechas)
B
A
Se traduce como “La clase A usa / conoce la
clase B”
B
A
Pero también significa “B no sabe de la existencia
de A”
B
A
También se concluye con:
“Cualquier cambio en B afectará a A, pero no al revés”
B
A
B
C
D
A
B
C
D
“A es más inestable”
A
B
C
D
“A tiende a ser estable”
“Situaciones que habría que evitar”
AB
“Bidireccionalidad”
AC
“Relaciones Cíclicas”
B
3/3 – Traducción UML -> PHP5
“3 Zonas”
“3 Zonas”
NOMBRE
“3 Zonas”
NOMBRE
ATRIBUTOS
“3 Zonas”
NOMBRE
ATRIBUTOS
MÉTODOS
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
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
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
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
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
“Lo más importante,
las Relaciones”
“Cada flecha es un require_once en la clase donde inicia la flecha”
Efecto PHP
“Nunca hacer todos los require_once en un único
archivo, aunque funcione”
no es lo mismo require, include, ni include_once,
solo require_once
Efecto PHP
“Respetar siempre las relaciones en donde se
originan”
A
<?phprequire_once ‘B.php’
class A{}
B
A
<?phprequire_once ‘B.php’
class A{}
B
<?php
class B{}
A
<?phprequire_once ‘B.php’
class A{}
B
<?php
class B{}
C
A
<?phprequire_once ‘B.php’require_once ‘C.php’
class A{}
B
<?php
class B{}
C
A
<?phprequire_once ‘B.php’require_once ‘C.php’
class A{}
B
<?phprequire_once ‘D.php’
class B{}
C
D
A
<?phprequire_once ‘B.php’require_once ‘C.php’require_once ‘D.php’
class A{}
B
Funciona, pero está MAL!
C
D
Un caso práctico
“Usuario y su persistencia”
Usuario
Usuario
Persistencia
Usuario
Persistencia
MySQL
PostgreSQL
Usuario
Persistencia
MySQL
PostgreSQL
Log
Usuario
Persistencia
MySQL
PostgreSQL
Log
Cómo se usa esto?
Usuario
Persistencia
MySQL
PostgreSQL
Log
Index
Usuario
Persistencia
MySQL
PostgreSQL
Log
Index
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
Usuario
Persistencia
MySQL
PostgreSQL
Log
Index
Nivel de Abstracción = 0
<?phprequire_once ‘Usuario.php’;require_once ‘Persistencia.php’;require_once ‘MySQL.php’;require_once ‘PostgreSQL.php’;require_once ‘Log.php’;
class Index{}
Usuario
Persistencia
MySQL
PostgreSQL
Log
Index
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
Usuario
Persistencia
MySQL
PostgreSQL
Log
Index
Usuario
Persistencia
MySQL
PostgreSQL
Log
Index
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
En resumen, nuestro diseño apesta y no sirve.
Eso es POO en PHP5 mal implementada
Se puede hacer buenos diseños sin diagramas?
Palabras Finales
Para qué nos sirve UML a los desarrolladores PHP?
Fin!
Preguntas?
phpsenior.com / surforce.com
Recommended