Menú Principal

Sobre POO

Iniciado por Alex_bro, 15 Agosto 2011, 22:28 PM

0 Miembros y 2 Visitantes están viendo este tema.

Alex_bro

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 :)

EFEX

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

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

Alex_bro

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.

~ Yoya ~

Te recomiendo que pienses como haras todo antes de programar. Así no tendrás lió ni nada por el estilo.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

[u]nsigned

#4
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 (php) [Seleccionar]
<?php
class Categoria {
static private $categorias = array('Zapatos''Carteras''Sombreros');
private $value;

public function __construct(){
//Constructor
return true;
}

public function existe($str){
if( in_array($strself::$categorias) ){
return true;
}else{
return false;
}
}

function set($str){
if( $this->existe($str) ){
$this->value $str;
return true;
}
return false;
}

function get(){
return $this->value;
}

function __toString(){
return $this->value;
}

}

class 
Producto {
public $nombre;
private $categoria;

function __construct(){
//Constructor
$this->categoria = New Categoria();
return true;
}

function setCat($str){
return $this->categoria->set("Zapatos");
}
}

$producto = new Producto();

$producto->nombre "Tennis Nike SGF21";
$producto->setCat('Zapatos');

print_r($producto);
?>


Saludos.

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

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

Alex_bro

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.