introducción a uml / poo / php5

70
Introducción a POO / UML / PHP5 Enrique Place (phpsenior.com / surforce.com)

Upload: enrique-place

Post on 05-Dec-2014

11.553 views

Category:

Technology


2 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Introducción a UML / POO / PHP5

Introducción a POO / UML / PHP5

Enrique Place (phpsenior.com / surforce.com)

Page 2: Introducción a UML / POO / PHP5

{ objetivos }

Page 3: Introducción a UML / POO / PHP5

{ objetivos }

1. Entender qué es UML2. Importancia de UML

para POO3. Traducción UML ->

PHP5

Page 4: Introducción a UML / POO / PHP5

1/3 - Qué es UML?

U.M.L. = Lenguaje Unificado de Modelado

Page 5: Introducción a UML / POO / PHP5

1/3 - Qué es UML?

“UML es documentación”

Page 6: Introducción a UML / POO / PHP5

1/3 - Qué es UML?

“UML es independiente del lenguaje”

Page 7: Introducción a UML / POO / PHP5

UML es similar a usar diagramas de relaciones DER / MER para diseñar

una base de datos

Page 8: Introducción a UML / POO / PHP5

Lo usan todas las empresas / proyectos

profesionales de desarrollo de software

Page 9: Introducción a UML / POO / PHP5

Arquitecturas

Java / .Net

Page 10: Introducción a UML / POO / PHP5

2/3 – Importancia de UML para POO?

Page 11: Introducción a UML / POO / PHP5

“Es una herramienta gráfica que permite planificar el correcto diseño de nuestros

sistemas Orientados a Objetos”

Page 12: Introducción a UML / POO / PHP5

Nos permite razonar mejor, sin pensar en código

Page 13: Introducción a UML / POO / PHP5

Ejemplos Básicos de su aplicación

UML Simplificado

Page 14: Introducción a UML / POO / PHP5

Pensamiento

“por lo general buscamos que nuestras clases sean

estables y reusables”

Page 15: Introducción a UML / POO / PHP5

Principio de Diseño

“nuestras clases deberían ser cerradas al cambio y abiertas a la extensión”

Page 16: Introducción a UML / POO / PHP5

A

“Una clase llamada A”

Page 17: Introducción a UML / POO / PHP5

A

“clase A se conoce con una clase B”

B

Page 18: Introducción a UML / POO / PHP5

A

“Las clases entablan una relación”

B

Page 19: Introducción a UML / POO / PHP5

A

“Las clases entablan una relación”

(siempre prestar atención al sentido de las flechas)

B

Page 20: Introducción a UML / POO / PHP5

A

Se traduce como “La clase A usa / conoce la

clase B”

B

Page 21: Introducción a UML / POO / PHP5

A

Pero también significa “B no sabe de la existencia

de A”

B

Page 22: Introducción a UML / POO / PHP5

A

También se concluye con:

“Cualquier cambio en B afectará a A, pero no al revés”

B

Page 23: Introducción a UML / POO / PHP5

A

B

C

D

Page 24: Introducción a UML / POO / PHP5

A

B

C

D

“A es más inestable”

Page 25: Introducción a UML / POO / PHP5

A

B

C

D

“A tiende a ser estable”

Page 26: Introducción a UML / POO / PHP5

“Situaciones que habría que evitar”

Page 27: Introducción a UML / POO / PHP5

AB

“Bidireccionalidad”

Page 28: Introducción a UML / POO / PHP5

AC

“Relaciones Cíclicas”

B

Page 29: Introducción a UML / POO / PHP5

3/3 – Traducción UML -> PHP5

Page 30: Introducción a UML / POO / PHP5

“3 Zonas”

Page 31: Introducción a UML / POO / PHP5

“3 Zonas”

NOMBRE

Page 32: Introducción a UML / POO / PHP5

“3 Zonas”

NOMBRE

ATRIBUTOS

Page 33: Introducción a UML / POO / PHP5

“3 Zonas”

NOMBRE

ATRIBUTOS

MÉTODOS

Page 34: Introducción a UML / POO / PHP5

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: Introducción a UML / POO / PHP5

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: Introducción a UML / POO / PHP5

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: Introducción a UML / POO / PHP5

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: Introducción a UML / POO / PHP5

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: Introducción a UML / POO / PHP5

“Lo más importante,

las Relaciones”

Page 40: Introducción a UML / POO / PHP5

“Cada flecha es un require_once en la clase donde inicia la flecha”

Page 41: Introducción a UML / POO / PHP5

Efecto PHP

“Nunca hacer todos los require_once en un único

archivo, aunque funcione”

Page 42: Introducción a UML / POO / PHP5

no es lo mismo require, include, ni include_once,

solo require_once

Page 43: Introducción a UML / POO / PHP5

Efecto PHP

“Respetar siempre las relaciones en donde se

originan”

Page 44: Introducción a UML / POO / PHP5

A

<?phprequire_once ‘B.php’

class A{}

B

Page 45: Introducción a UML / POO / PHP5

A

<?phprequire_once ‘B.php’

class A{}

B

<?php

class B{}

Page 46: Introducción a UML / POO / PHP5

A

<?phprequire_once ‘B.php’

class A{}

B

<?php

class B{}

C

Page 47: Introducción a UML / POO / PHP5

A

<?phprequire_once ‘B.php’require_once ‘C.php’

class A{}

B

<?php

class B{}

C

Page 48: Introducción a UML / POO / PHP5

A

<?phprequire_once ‘B.php’require_once ‘C.php’

class A{}

B

<?phprequire_once ‘D.php’

class B{}

C

D

Page 49: Introducción a UML / POO / PHP5

A

<?phprequire_once ‘B.php’require_once ‘C.php’require_once ‘D.php’

class A{}

B

Funciona, pero está MAL!

C

D

Page 50: Introducción a UML / POO / PHP5

Un caso práctico

“Usuario y su persistencia”

Page 51: Introducción a UML / POO / PHP5

Usuario

Page 52: Introducción a UML / POO / PHP5

Usuario

Persistencia

Page 53: Introducción a UML / POO / PHP5

Usuario

Persistencia

MySQL

PostgreSQL

Page 54: Introducción a UML / POO / PHP5

Usuario

Persistencia

MySQL

PostgreSQL

Log

Page 55: Introducción a UML / POO / PHP5

Usuario

Persistencia

MySQL

PostgreSQL

Log

Cómo se usa esto?

Page 56: Introducción a UML / POO / PHP5

Usuario

Persistencia

MySQL

PostgreSQL

Log

Index

Page 57: Introducción a UML / POO / PHP5

Usuario

Persistencia

MySQL

PostgreSQL

Log

Index

Page 58: Introducción a UML / POO / PHP5

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: Introducción a UML / POO / PHP5

Usuario

Persistencia

MySQL

PostgreSQL

Log

Index

Page 60: Introducción a UML / POO / PHP5

Nivel de Abstracción = 0

Page 61: Introducción a UML / POO / PHP5

<?phprequire_once ‘Usuario.php’;require_once ‘Persistencia.php’;require_once ‘MySQL.php’;require_once ‘PostgreSQL.php’;require_once ‘Log.php’;

class Index{}

Page 62: Introducción a UML / POO / PHP5

Usuario

Persistencia

MySQL

PostgreSQL

Log

Index

Page 63: Introducción a UML / POO / PHP5

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: Introducción a UML / POO / PHP5

Usuario

Persistencia

MySQL

PostgreSQL

Log

Index

Page 65: Introducción a UML / POO / PHP5

Usuario

Persistencia

MySQL

PostgreSQL

Log

Index

Page 66: Introducción a UML / POO / PHP5

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: Introducción a UML / POO / PHP5

En resumen, nuestro diseño apesta y no sirve.

Eso es POO en PHP5 mal implementada

Page 68: Introducción a UML / POO / PHP5

Se puede hacer buenos diseños sin diagramas?

Page 69: Introducción a UML / POO / PHP5

Palabras Finales

Para qué nos sirve UML a los desarrolladores PHP?

Page 70: Introducción a UML / POO / PHP5

Fin!

Preguntas?

phpsenior.com / surforce.com