Associacao, Agregacao e Composicao

<< Click to Display Table of Contents >>

Navigation:  Objetos >

Associacao, Agregacao e Composicao

Previous pageReturn to chapter overviewNext page

 

Principal.php

 

require __DIR__ . '/classes/autoload.php';
 
// ASSOCIACAO DE OBJETOS
// cria o objeto Endereco por fora e passa para o objeto Empresa
 
// cria o objeto endereco para adicionar a empresa
$end = new classes\model\Endereco("Rua do Centro""Floripa"22);
 
$emp = new classes\model\Empresa();
$emp->inicializar("Microsoft"$end);
 
echo $emp->getEndereco()->getCidade();
 
// AGREGACAO DE OBJETOS
// objeto Produto é acumulado dentro de uma matriz dentro do Empresa
// 
// trabalhando com os produtos
$prod1 = new classes\model\Produto("DVD Heróico"1000.123);
$prod2 = new classes\model\Produto("DVD Dramativo"1.999);
 
$emp->addProdutos($prod1);
$emp->addProdutos($prod2);
 
// percorre os produtos da empresa
foreach ($emp->getProdutos() as $prod) {
    echo "<p>{$prod->getNome()}</p>";
}
 
// COMPOSICAO DE OBJETOS
// objeto Usuario é criado dentro da classe Empresa
 
$emp->addFuncionarios("Junior""junior@com");
$emp->addFuncionarios("Maria""maria@com");
$emp->addFuncionarios("José""jose@com");
 
// percorre os usuarios da empresa
foreach ($emp->getFuncionarios() as $user) {
    echo "<p>{$user->getNome()}</p>";
}
 
var_dump($emp);

 

SAIDA DO VAR_DUMP

 

Floripa

DVD Heróico

DVD Dramativo

Junior

Maria

José

D:\xampp\htdocs\netbeans\aqui.php:40:
object(classes\model\Empresa)[3]
  private 'nome' => string 'Microsoft' (length=9)
  private 'endereco' =>
    object(classes\model\Endereco)[2]
      private 'rua' => string 'Rua do Centro' (length=13)
      private 'cidade' => string 'Floripa' (length=7)
      private 'numero' => int 22
  private 'produtos' =>
    array (size=2)
      0 =>
        object(classes\model\Produto)[4]
          private 'nome' => string 'DVD Heróico' (length=12)
          private 'preco' => string '1.000,12' (length=8)
      1 =>
        object(classes\model\Produto)[5]
          private 'nome' => string 'DVD Dramativo' (length=13)
          private 'preco' => string '2,00' (length=4)
  private 'funcionarios' =>
    array (size=3)
      0 =>
        object(classes\model\Usuario)[6]
          private 'nome' => string 'Junior' (length=6)
          private 'email' => string 'junior@com' (length=10)
      1 =>
        object(classes\model\Usuario)[7]
          private 'nome' => string 'Maria' (length=5)
          private 'email' => string 'maria@com' (length=9)
      2 =>
        object(classes\model\Usuario)[8]
          private 'nome' => string 'José' (length=5)
          private 'email' => string 'jose@com' (length=8)

 

Endereco.php

 

namespace classes\model;
 
class Endereco {    
    private $rua;
    private $cidade;
    private $numero;
    
    public function __construct($rua$cidade$numero) {
        $this->rua = $rua;
        $this->cidade = $cidade;
        $this->numero = $numero;
    }
    
    public function getRua() {
        return $this->rua;
    }
 
    public function getCidade() {
        return $this->cidade;
    }
 
    public function getNumero() {
        return $this->numero;
    }
 
    public function setRua($rua) {
        $this->rua = $rua;
    }
 
    public function setCidade($cidade) {
        $this->cidade = $cidade;
    }
 
    public function setNumero($numero) {
        $this->numero = $numero;
    }
}

 

Empresa.php

 

namespace classes\model;
 
class Empresa {
    
    private $nome;
    
    // os comentários abaixo não são apenas comentários, servem para IDE encontrar o objeto
    /**
     * @var \classes\model\Endereco
     */
    private $endereco;
    private $produtos;
    private $funcionarios;
    
    public function inicializar($nomeEndereco $endereco) {
        $this->nome = $nome;
        $this->endereco = $endereco;
    }
    
    // os comentários abaixo não são apenas comentários, servem para IDE encontrar o objeto
    /**
     * @return \classes\model\Endereco
     */
    public function getEndereco(): Endereco {
        return $this->endereco;
    }
        
    public function getNome() {
        return $this->nome;
    }
 
    // os comentários abaixo não são apenas comentários, servem para IDE encontrar o objeto
    /**
     * @return array
     */
    public function getProdutos() {
        return $this->produtos;
    }
 
    // os comentários abaixo não são apenas comentários, servem para IDE encontrar o objeto
    /**
     * @return array
     */
    public function getFuncionarios() {
        return $this->funcionarios;
    }
 
    public function setNome($nome) {
        $this->nome = $nome;
    }
 
    public function addProdutos(Produto $produtos) {
        // adiciona numa matriz
        $this->produtos[] = $produtos;
    }
 
    public function addFuncionarios($nome$email) {
        $this->funcionarios[] = new Usuario($nome$email);
    }
}

 

Produto.php

 

namespace classes\model;
 
class Produto {
 
    private $nome;
    private $preco;
 
    public function __construct($nome$preco) {
        $this->nome = $nome;
        $this->preco = number_format($preco2","".");
    }
    
    public function getNome() {
        return $this->nome;
    }
 
    public function getPreco() {
        return $this->preco;
    }
}

 

Usuario.php

 

namespace classes\model;
 
class Usuario {
 
    private $nome;
    private $email;
 
    public function __construct($nome$email) {
        $this->nome = $nome;
        $this->email = $email;
    }
 
    public function getNome() {
        return $this->nome;
    }
 
    public function getEmail() {
        return $this->email;
    }
}