Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Alex_bro en 15 Agosto 2011, 22:28 pm



Título: Sobre POO
Publicado por: Alex_bro en 15 Agosto 2011, 22:28 pm
Buenas,
Hace apenas dias que estoy mentiendome en esto de programar orientado a objetos con php, pues antes me parecia que era todo como una tonteria, y ahora me arrepiento de no haberlo intentado antes.

El caso es que ahora mismo tengo una clase Productos en la que tengo funciones para añadir,modificar... productos pero tambien para añadir,modificar... categorias. Esto se debe a que por ejemplo, al añadir un producto necesito la funcion que comprueba si existe la categoria a la cual se le asocia.

Creo que lo optimo seria separar 2 clases, una para productos y otra para categorias, pero no se como hacerlo si tengo esas dependencias.

Se supone que deberia hacerlo asi? para mantener la encapsulacion de la clase? o deberia crear una instancia hacia la clase Categorias cuando necesite funciones de ésta en la clase Productos?

Gracias :)


Título: Re: Sobre POO
Publicado por: EFEX en 15 Agosto 2011, 23:12 pm
Si podrias poner un resumen del codigo, mejor, solo para no dejar nada de lado, podrias aplicar lo que se le llama Herencia, te dejo un enlace:

Herencia
http://www.phpya.com.ar/poo/temarios/descripcion.php?cod=45&punto=11&inicio=0 (http://www.phpya.com.ar/poo/temarios/descripcion.php?cod=45&punto=11&inicio=0)

Fijate si es lo que necesitas, puede que me equivoque.


Título: Re: Sobre POO
Publicado por: Alex_bro en 15 Agosto 2011, 23:21 pm
Gracias por tu respuesta EFEX :)

No entiendo mucho, pero creo que la herencia no es la solución, porque la clase Categorias también requiere de funciones de la clase Productos, por ejemplo, al borrar una categoria debe comprobar si existen productos asignados a ella...

La verdad es que estoy hecho un lio... no se si es mejor practica tener una sola clase en un archivo con muchas lineas de codigo, o crear instancias a una clase dentro de otra... no se, no lo veo muy limpio esto ultimo jeje.

Un saludo, y gracias de nuevo.


Título: Re: Sobre POO
Publicado por: ~ Yoya ~ en 16 Agosto 2011, 16:17 pm
Te recomiendo que pienses como haras todo antes de programar. Así no tendrás lió ni nada por el estilo.


Título: Re: Sobre POO
Publicado por: [u]nsigned en 16 Agosto 2011, 16:35 pm
La base del paradigma POO es una 'modelacion' mas precisa o cercana al mundo real. Por lo tanto La clase Productos deberia poseer una propiedad (variable miembro) que sea un objeto de la clase categoria.

Código
  1. <?php
  2. class Categoria {
  3. static private $categorias = array('Zapatos', 'Carteras', 'Sombreros');
  4. private $value;
  5.  
  6. public function __construct(){
  7. //Constructor
  8. return true;
  9. }
  10.  
  11. public function existe($str){
  12. if( in_array($str, self::$categorias) ){
  13. return true;
  14. }else{
  15. return false;
  16. }
  17. }
  18.  
  19. function set($str){
  20. if( $this->existe($str) ){
  21. $this->value = $str;
  22. return true;
  23. }
  24. return false;
  25. }
  26.  
  27. function get(){
  28. return $this->value;
  29. }
  30.  
  31. function __toString(){
  32. return $this->value;
  33. }
  34.  
  35. }
  36.  
  37. class Producto {
  38. public $nombre;
  39. private $categoria;
  40.  
  41. function __construct(){
  42. //Constructor
  43. $this->categoria = New Categoria();
  44. return true;
  45. }
  46.  
  47. function setCat($str){
  48. return $this->categoria->set("Zapatos");
  49. }
  50. }
  51.  
  52. $producto = new Producto();
  53.  
  54. $producto->nombre = "Tennis Nike SGF21";
  55. $producto->setCat('Zapatos');
  56.  
  57. print_r($producto);
  58. ?>

Saludos.

PD: Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.


Título: Re: Sobre POO
Publicado por: Alex_bro en 18 Agosto 2011, 05:18 am
Gracias a todos por las respuestas.

nsigned, ese era el planteamiento al que me referia cuando decia lo de crear una instancia dentro de Productos hacia Categorias, agradezco con total sinceridad el trabajo que has hecho posteando todo el codigo... vamos que te lo has currado jejeje.

Solo tengo una duda. Si en algun momento necesitara una funcion de la clase Producto en la clase Categoria e instanciara Producto en una propiedad de Categoria, se crearia un bucle infinito no? que imagino que se solucionaria usando el patron SigleTon... vamos aunque seguramente este caso que planteo no será ni logico conforme a los principios que comentas sobre POO... solo lo pense por una funcion que comprueba si hay productos dentro de una categoria antes de borrarla, pero creo que esa funcion es propia de la clase Categoria y no de Producto.

Un saludo, y de nuevo muchas gracias por la dedicación.