Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Saber qué métodos pertenecen a qué clases

Estas en el tema de Saber qué métodos pertenecen a qué clases en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Muy buenas. Mi consulta es más bien de concepto de OO, que de php puramente, pero no he encontrado otro foro más adecuado, y ya ...
  #1 (permalink)  
Antiguo 08/02/2010, 05:55
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona (España)
Mensajes: 134
Antigüedad: 19 años, 3 meses
Puntos: 0
Saber qué métodos pertenecen a qué clases

Muy buenas. Mi consulta es más bien de concepto de OO, que de php puramente, pero no he encontrado otro foro más adecuado, y ya que la aplicación que estoy montando es en php lo posteo aquí.

Tengo problemas en decidir qué métodos son propios de qué clase. Por ejemplo imaginemos una aplicación de comercio electrónico, en la que los productos se organizan de manera típica: productos, que se agrupan en categorías o tipos de productos, que estos a su vez se agrupan en tiendas. Es decir, y resumiendo mucho, tres clases: tienda - categoría - producto.

Entonces, para obtener las categorías de una tienda, a mi se me ocurre tener un método tal que así:

Código PHP:
$tienda->getCategorias(); 
Y para obtener los productos de una categoría, algo así:

Código PHP:
$categoria->getProductos(); 
En otros sitios he visto otras soluciones, como tener clases llamadas ConjuntoCategorías, y ConjuntoProductos, y tener métodos tales como:

Código PHP:
$conjuntoCategorías->getCategoriasPortienda($tienda
Código PHP:
$conjuntoProductos->getProductosPorCategoria($categoria
Quisiera saber si las dos soluciones son igual de buenas o no, igual de correctas desde un punto de vista OO, y sobretodo si hay alguna regla para poder efectuar estas decisiones de la manera más correcta posible.

Muchas gracias
  #2 (permalink)  
Antiguo 08/02/2010, 09:36
 
Fecha de Ingreso: noviembre-2007
Ubicación: Lanus, Buenos Aires
Mensajes: 178
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Saber qué métodos pertenecen a qué clases

Las clases $conjunto... no las veo necesarias, yo haria

Código PHP:
$categoria->getProductos();  
$categoria->getProductos($categoria); 
Si envias la categoria entonces devuelves los productos de esa categoria, sino devueltes todos

lo mismo con las tiendas
  #3 (permalink)  
Antiguo 08/02/2010, 09:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Saber qué métodos pertenecen a qué clases

Son iguales los dos, la única diferencía es que una es llamada usando el conjunto, e internamente en tus clases tienda y producto puede ser algo así:
Código PHP:
Ver original
  1. public function getCategorias()
  2. {
  3.           $conjuntoCategorias = new Conjunto_Categorias();
  4.           return $conjuntoCategorias->getCategoriasPorProducto($this);
  5. }

Saludos.
  #4 (permalink)  
Antiguo 08/02/2010, 10:40
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Saber qué métodos pertenecen a qué clases

Que tal xberni

La verdad que te sugiero siempre discutir diseños usando UML más que código (si no sabes UML, es un buen momento para empezar ).

Sobre diseños con clases de tipo ConjuntoCategorías, si bien lo he visto (en aplicaciones complejas de mundos Java), considero que son distorsiones de una representación de la realidad que no existe... es decir, lo más natural (pensando en POO puro) es tu primer propuesta, lo otro, no existe en tu "realidad", el "conjunto" se arma "conceptualmente", pero no a través de una clase de tipo "Conjunto".

De todas formas, hay momentos que no queda otra forma que aplicar este tipo de clases "ficticias", pero si no llegaste a esa situación comprometida (aún los diseños son simples, o intentas siempre que sean simples), evita ese tipo de clases (en lo personal las evito siempre).

Prefectamente tu "conjunto de categorías" se representa con una colección (array) de objetos de tipo Categoría.

No se si quedó clara mi explicación, cualquier cosa me vuelves a preguntar.

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #5 (permalink)  
Antiguo 08/02/2010, 11:44
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona (España)
Mensajes: 134
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Saber qué métodos pertenecen a qué clases

Antes que nada, gracias a todos por las respuestas, especialmente a enrique por su excelente explicación.

Algo sé de UML (lo que he estudiado en la universidad), aunque se me haría difícil formular una pregunta sobre UML aquí, sin poder dibujar los "cuadraditos" y las relaciones entre ellos. Como hasta ahora no he trabajado 'a la POO', pues me apaño mejor con el modelo Entidad/Relación de las bases de datos.

Me ha quedado clarísima tu explicación, y abundando en la misma quería hacer otra pregunta:

Para modelar un objeto, por ejemplo "Producto" en este caso de la tienda, y para intentar hacerlo multiidioma tengo 2 relaciones:

- producto (id, precio, etc)
- producto_descripcion (id_producto, id_idioma, descripcion_corta, descripcion_larga, etc etc)

Me pregunto cual es la manera más "correcta" desde el punto de vista OO:

1) Tener 2 clases, Producto y DescripcionProducto (con los atributos y métodos de su tabla relacionada: getId, getPrecio en la primera, y getDescripcionCorta, getDescripcionLarga, etc lara la segunda clase)
2) Tener una única clase Producto que reuna todos esos métodos en una clase, y que trabaje con las dos tablas, relacionándolas con sus joins respectivas, etc

Hace unos meses estuve estudiando Symfony (sin demasiado éxito, era un poco exigente para mi nivel iniciado), y reconozco que estoy un poco influido por la manera que tenía de mapear las relaciones a objetos (a través del ORM Propel creo recordar), generando una clase por relación, y también las clases "ConjuntoDeX" o "Peer" que comentaba en mi primer post. Es decir, para las dos relaciones que menciono anteriormente, Symfony me hubiera creado 4 clases:

- Producto
- ProductoPeer (o conjunto de productos)
- DescripcionProducto
- DescripcionProductoPeer (conjunto de...)

Gracias por anticipado
  #6 (permalink)  
Antiguo 08/02/2010, 12:05
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: Saber qué métodos pertenecen a qué clases

Yo crearía una clase Producto que reuniera todas las características de un producto, creo que es lo mas correcto.
__________________
I see dead pixels

Etiquetas: clases
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:46.