Enrique Place: Introducción a POO / UML / PHP5

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