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

Introducción a UML / POO / PHP5

Dec 05, 2014

Download

Technology

Enrique Place

Breve charla introductoria en el marco de las primeras charlas abiertas del Grupo PHP Argentina
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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