PHP - Objetos como propiedades

 
Vista:

Objetos como propiedades

Publicado por Sandra (1 intervención) el 25/11/2010 22:17:55
Saludos :)

Tengo algo como lo siguiente:

class Procesadores{
private $procesador;

public function setProcesador($procesador){
$this->procesador= $procesador;
}

public function getProcesador(){
return $this->procesador;
}

}

class Memorias{
private $memoria;

public function setMemoria($memoria){
$this->memoria = $memoria;
}

public function getMemoria(){
return $this->memoria;
}
}

class Computadoras{

private $cant;

public function setCantidad($cant){
$this->cant = $cant;
}

public function getCantidad(){
return $this->cant;
}

}

Debo instanciar sólo la clase "Computadoras":

$oComputadoras = new Computadoras();

Y asignarle valores:

$oComputadoras->setCantidad = 3;
$oComputadoras->setProcesador = "Pentium";
$oComputadoras->setMemoria = "xxxxx";

Qué tengo que realizar en la clase "Computadoras" para poder asignar valores a setProcesador y a setMemoria?, ojo, esto no es herencia.

Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Objetos como propiedades

Publicado por AndresS (52 intervenciones) el 26/11/2010 17:03:30
Hola Sandra,

No se si es lo recomendable, pero se puede instanciar dentro de una clase, otra:

class Computadoras{

private $cant;
private $procesadores;

public function setCantidad($cant){
$this->cant = $cant;
}

public function getCantidad(){
return $this->cant;
}

// Procesadores dentro de Computadoras

public function setProcesador($procesador){
$this->procesadores= new Procesadores();
$this->procesadores->setProcesador($procesador);
// Tendrás que agregar un getProcesadores() a la clase Procesadores para obtener el valor del set
}

}

// Los metodos setters y getters son:

$oComputadoras->setCantidad (3);
$oComputadoras->setProcesador ("Pentium");
$oComputadoras->setMemoria( "xxxxx");

y no:

$oComputadoras->setCantidad = 3;
$oComputadoras->setProcesador = "Pentium";
$oComputadoras->setMemoria = "xxxxx";

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objetos como propiedades

Publicado por Sandra (2 intervenciones) el 26/11/2010 18:19:21
AndresS, agradezco tu atención.

Me aconsejas que agregue un getProcesadores a la clase Procesadores, y efectivamente esta clase ya cuenta con sus sets y gets correspondientes, por lo cual ya no debería crear (pienso yo) sets y gets en la clase Computadoras que ya existen en la clase Procesadores, como me señalas con:

public function setProcesador($procesador){ // <-- ESTE SET YA EXISTE EN CLASS PROCESADORES
$this->procesadores= new Procesadores();
$this->procesadores->setProcesador($procesador);
// Tendrás que agregar un getProcesadores() a la clase Procesadores para obtener el valor del set
}

Qué me aconsejas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objetos como propiedades

Publicado por AndresS (52 intervenciones) el 26/11/2010 19:00:53
Ok, si ya existen en Procesadores, no hay que crearlos en esa Clase, pero si crearlos en Computadoras, porque que tenemos que obtener desde computadoras el objeto Procesadores, ya que si escribo:

$oComputadoras->setProcesador('procesador x');

estas llamando a un metodo de Computadoras y no de Procesadores, por lo tanto debe existir también en Computadoras, de esta forma si puedes escribir la linea de arriba.

La duda es porqué no hacer herencia? con la herencia si puedes llamar a getProcesadores sin que exista en Computadoras.

class Computadoras extends Procesadores {}

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objetos como propiedades

Publicado por Sandra (2 intervenciones) el 27/11/2010 01:25:29
Hola AndresS.

No puede ser herencia, mira, piensa que en la DB tenemos una tabla computadoras, una procesadores, una memorias, etc, todas con sus campos correspondientes, existe una relación entre la tabla computadoras y las demás, puede ser uno a uno o uno a muchos.

Si no me equivoco una clase tiene una correspondencia con las tablas, algo así (clase:tabla, campo: atributo), bueno, entre otras cosas más que se pueden realizar en las clases.

Entonces más bien pienso en una "composición" entre clases para establecer la relación, esto es:

$oProcesador = new Procesadores();
$oProcesador->setId(1);
$oProcesador->setDescripcion("Describe procesador");
...

$oMemorias = new Memorias();
$oMemorias->setId(3);
$oMemorias->setDescripcion("Describe memoria");
...

$oComputadoras = new Computadoras();
$oComputadoras->setProcesador($oProcesador);
...

class Computadoras {
private $cantidad;
private $oProcesador;

public function setProcesador($oprocesador){
$this->oProcesador = $oprocesador
}

public function getIdProcesador(){
return $this->oProcesador->getId(); // ALGO ASÍ
}
...

}

No lo he probado, ahora mismo se me ha ocurrido.
Qué opinas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objetos como propiedades

Publicado por AndresS (52 intervenciones) el 27/11/2010 14:57:01
O quizas para una mejor organización, crear una clase relacional:

class Gestion{

private $oProcesadores;
private $oComputadoras;
private $oMemorias;

// constructor
function Gestion(){
$this->oProcesadores = new Procesadores();
$this->oComputadoras = new Computadoras();
$this->oMemorias = new Memorias();
}
// Metodos

public setProcesadores($procesadores){
$this->oProcesadores->setProcesadores($procesadores);
}
...etc
}

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar