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

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

Embed Size (px)

DESCRIPTION

Charla de Enrique Place titulada "Introducción a POO / UML / PHP5" en las Primeras Charlas del Grupo PHP Argentina

Citation preview

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

Introducción a POO / UML / PHP5

Enrique Place (phpsenior.com / surforce.com)

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

{ objetivos }

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

{ 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

1/3 - Qué es UML?

U.M.L. = Lenguaje Unificado de Modelado

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

1/3 - Qué es UML?

“UML es documentación”

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

1/3 - Qué es UML?

“UML es independiente del lenguaje”

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

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

Lo usan todas las empresas / proyectos

profesionales de desarrollo de software

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

Arquitecturas

Java / .Net

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

2/3 – Importancia de UML para POO?

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

“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

Nos permite razonar mejor, sin pensar en código

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

Ejemplos Básicos de su aplicación

UML Simplificado

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

Pensamiento

“por lo general buscamos que nuestras clases sean

estables y reusables”

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

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

A

“Una clase llamada A”

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

A

“clase A se conoce con una clase B”

B

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

A

“Las clases entablan una relación”

B

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

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

A

Se traduce como “La clase A usa / conoce la

clase B”

B

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

A

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

de A”

B

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

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

A

B

C

D

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

A

B

C

D

“A es más inestable”

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

A

B

C

D

“A tiende a ser estable”

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

“Situaciones que habría que evitar”

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

AB

“Bidireccionalidad”

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

AC

“Relaciones Cíclicas”

B

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

3/3 – Traducción UML -> PHP5

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

“3 Zonas”

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

“3 Zonas”

NOMBRE

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

“3 Zonas”

NOMBRE

ATRIBUTOS

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

“3 Zonas”

NOMBRE

ATRIBUTOS

MÉTODOS

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

“Lo más importante,

las Relaciones”

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

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

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

Efecto PHP

“Nunca hacer todos los require_once en un único

archivo, aunque funcione”

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

no es lo mismo require, include, ni include_once,

solo require_once

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

Efecto PHP

“Respetar siempre las relaciones en donde se

originan”

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

A

<?phprequire_once ‘B.php’

class A{}

B

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

A

<?phprequire_once ‘B.php’

class A{}

B

<?php

class B{}

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

A

<?phprequire_once ‘B.php’

class A{}

B

<?php

class B{}

C

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

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

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

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

Un caso práctico

“Usuario y su persistencia”

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

Usuario

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

Usuario

Persistencia

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

Usuario

Persistencia

MySQL

PostgreSQL

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

Usuario

Persistencia

MySQL

PostgreSQL

Log

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

Usuario

Persistencia

MySQL

PostgreSQL

Log

Cómo se usa esto?

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

Usuario

Persistencia

MySQL

PostgreSQL

Log

Index

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

Usuario

Persistencia

MySQL

PostgreSQL

Log

Index

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

Usuario

Persistencia

MySQL

PostgreSQL

Log

Index

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

Nivel de Abstracción = 0

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

Usuario

Persistencia

MySQL

PostgreSQL

Log

Index

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

Usuario

Persistencia

MySQL

PostgreSQL

Log

Index

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

Usuario

Persistencia

MySQL

PostgreSQL

Log

Index

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

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

Se puede hacer buenos diseños sin diagramas?

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

Palabras Finales

Para qué nos sirve UML a los desarrolladores PHP?

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

Fin!

Preguntas?

phpsenior.com / surforce.com