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

modelando Clases

Estas en el tema de modelando Clases en el foro de Frameworks y PHP orientado a objetos en Foros del Web. ayuda plis. me gustaria que alguien me dijiese como modelar el caso tipico de la POO. Una factura con su detalle. Si tengo una clase ...
  #1 (permalink)  
Antiguo 07/05/2010, 13:27
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 15 años
Puntos: 16
modelando Clases

ayuda plis.

me gustaria que alguien me dijiese como modelar el caso tipico de la POO.

Una factura con su detalle.

Si tengo una clase FACTURA

y otra clase DETALLE_FACTURA

¿como podria modelar FACTURA para que uno de sus propiedades sea una coleccion de objetos de la clase DETALLE_FACTURA?

en CSHARP seria algo asi
Código C:
Ver original
  1. class factura
  2. {
  3. public string id;
  4. public string fecha;
  5. public decimal total;
  6. public List<detalleFactura> detalle;
  7.  
  8. }
  9.  
  10. class detalleFactura
  11. {
  12. public string id;
  13. public string idItem;
  14. public decimalvalorItem;
  15. }

ahora necesito hacer esto en PHP
Cualquier ayuda lo agradeceria enormemmente

  #2 (permalink)  
Antiguo 07/05/2010, 13:29
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.728
Antigüedad: 8 años, 2 meses
Puntos: 1512
Respuesta: modelando Clases

Te recomiendo que leas sobre extends. Aunque tu puedes instanciar detalleFactura dentro de la clase factura. Pero entiendo que la mejor forma es usar extends para lo que quieres hacer.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 07/05/2010, 14:13
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 15 años
Puntos: 16
Respuesta: modelando Clases

extends me permite heredar metodos y propiedades de otra supra clase.

lo cual no es lo que ando buscando, ya que los metodos del detalle de la factura son distintos a los metodos de la factura en sí.

alguna otra idea?

no existe algun tipo de dato que sea una coleccion de objetos o algo por el estilo en PHP ?
  #4 (permalink)  
Antiguo 07/05/2010, 14:21
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.728
Antigüedad: 8 años, 2 meses
Puntos: 1512
Respuesta: modelando Clases

Bueno aún así, como te indiqué puedes instanciar dentro de la clase
Código PHP:
Ver original
  1. <?php
  2. class factura{
  3.   public function foo(){
  4.     $obj = new detalleFactura();
  5.     return $obj->bar();
  6.   }
  7. }
  8.  
  9. class detalleFactura{
  10.   public function bar(){
  11.     return 'detalleFactura::bar';
  12.   }
  13. }
  14.  
  15. $obj = new factura();
  16. echo $obj->foo();
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 08/05/2010, 05:34
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 12 años, 2 meses
Puntos: 32
Respuesta: modelando Clases

Cita:
Iniciado por abimaelrc Ver Mensaje
Te recomiendo que leas sobre extends. Aunque tu puedes instanciar detalleFactura dentro de la clase factura. Pero entiendo que la mejor forma es usar extends para lo que quieres hacer.
La herencia solo se puede hacer si un DetalleFactura es un tipo de Factura, por lo que no es, por lo tanto no se puede hacer herencia.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #6 (permalink)  
Antiguo 08/05/2010, 05:49
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 12 años, 2 meses
Puntos: 32
Respuesta: modelando Clases

La relación debe ser "composición" (no tiene sentido la existencia de "detalle" sin la relación con factura, por lo tanto es una "relación de vida" entre ambas clases) y el diagrama UML sería el siguiente:



y la traducción a código sería:

Factura.php
Código PHP:
require_once 'FacturaDetalle.php';

class 
Factura
{
    private 
$_colDetalle = array();

    public function 
addDetalle(FacturaDetalle $detalle)
   {
      
$this->_colDetalle[] = $detalle;
   }

FacturaDetalle.php
Código PHP:
class FacturaDetalle
{
   
/** código de la clase **/

Forma de uso: index.php

Código PHP:
require_once 'Factura.php';
require_once 
'FacturaDetalle.php';

abstract 
Index
 
{
   public static function 
main()
   {
      
$factura = new Factura();

      
// Agrego 4 detalles a la factura

      
$factura->addDetalle(new FacturaDetalle());
      
$factura->addDetalle(new FacturaDetalle());
      
$factura->addDetalle(new FacturaDetalle());
      
$factura->addDetalle(new FacturaDetalle());
   }
}

Index::main(); 
Más información sobre el tema de diagramas y traducción de relaciones

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

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 19:33.