Repassando a criação de classes

Para continuar a criação do vídeoclub e as explicações sobre a programação orientada a objetos (POO), vamos programar a classe principal, que engloba todas as classes que fomos criando até o momento.A classe principal se chama vídeoclub e modela o comportamento geral do vídeoclub.

Chegado a este ponto seria bom remarcar duas coisas sobre o desenvolvimento de programas orientados a objetos.

  1. A classe principal de um sistema que desejamos modelar em POO costuma chamar-se como o próprio sistema que estamos modelando. Por exemplo, se estivéssemos criando uma biblioteca, a classe principal se chamaria biblioteca. Neste caso, que estamos fazendo um vídeoclub, a classe principal se chamará vídeoclub.
  2. O processo de criação de um programa POO se realiza ao contrário de como fizemos neste manual, começando o desenvolvimento da classe geral e finalizando pelas classes mais específicas. Deste modo, ao criar a classe geral, podemos ir vendo que outros objetos necessitaremos, quais serão seus métodos e propriedades. Neste manual o fizemos ao contrário porque nos facilitava para ir descrevendo as características da POO.

A classe vídeoclub terá como propriedades os suportes em aluguer (filmes ou jogos) e por outra parte, os sócios ou clientes que alugam os produtos. Os métodos da classe vídeoclub serão a inclusão e listagem de suportes em aluguer e de sócios, o aluguer de suportes por parte de clientes.

Nota:Nem é necessário dizer que o vídeoclub que estamos criando está simplificado ao máximo. Está claro que se estivéssemos criando um vídeoclub com o propósito de utilizá-lo em produção, haveria que pensar e desenvolver muitas outras funcionalidades.

Vamos já com o código e suas explicações.

Atributos da classe vídeoclub

public $nome;
private $produtos;
private $num_produtos;
private $socios;
private $num_socios;

O atributo $produtos será um array com os distintos suportes em aluguer. $num_produtos será utilizado para fazer a conta do número de produtos que temos disponíveis. De modo similar, $sócios será um array de clientes y $num_socios dará a conta dos sócios que temos registrados. À parte, nosso vídeoclub terá um nome, que armazenaremos na variável $nome.

Construtor

function __construct($nome){
$this->nome=$nome;
$this->produtos=array();
$this->num_produtos=0;
$this->socios=array();
$this->num_socios=0;
}

Este método inicializará os atributos do objeto que se está construindo. Recebe unicamente o nome do vídeoclub. Como tarefas a serem destacadas estão as inicializações dos arrays de produtos e sócios e a colocação a zero dos contadores que vamos utilizar.

Método incluir_produto()

private function incluir_produto($novo_produto){
$this->produtos[$this->num_produtos]=$novo_produto;
echo “<p>Incluído suporte ” . $this->num_produtos;
$this->num_produtos++;
}

Este método foi declarado como private, porque só queremos que seja chamado desde dentro da classe. Recebe o novo produto que se quer registrar e salvar no array de produtos, na posição marcada pelo atributo num_produtos. A seguir, mostra uma mensagem na tela e por último aumenta em um o atributo num_produtos.

Métodos incluir_dvd(),incluir_fita_video() e incluir_jogo() 

Os três métodos seguintes que vamos ver, instanciam os três produtos com os quais trabalha o vídeoclub e depois os introduzem em array de produtos chamando incluir_produto().

function incluir_dvd($tit,$preço,$idiomas,$tela){
$dvd_novo = new dvd($tit, $this->num_produtos, $preço, $idiomas, $tela);
$this->incluir_produto($dvd_novo);
}

function incluir_fita_video($tit,$preço,$duraçao){
$fita_video_nova = new fita_video($tit, $this->num_produtos, $preço, $duracao);
$this->incluir_produto($fita_video_nova);
}

function incluir_jogo($tit,$preço,$console,$min_j,$max_j){
$juego_novo = new jogo($tit, $this->num_produtos, $preço, $console, $min_j, $max_j);
$this->incluir_produto($jogo_novo);
}

Podemos observar que o número de identificação do suporte, que recebe o construtor das fitas de vídeo, DVDs ou jogos, é gerado por meio do atributo da classe de vídeoclub num_produtos, que salva o número de produtos registrados.

Método incluir_socio()

Este método faz as tarefas de instanciação do sócio novo e sua inclusão no array de sócios.

function incluir_socio($nome,$max_aluguer_concomitante=3){
$socio_novo = new cliente($nome,$this->num_socios,$max_aluguer_concomitante);
$this->socios[$this->num_socios]=$socio_novo;
echo “<p>Incluído socio ” . $this->num_socios;
$this->num_socios++;
}

Recebem os dados do novo sócio: nome e o número máximo de filmes que pode alugar (sendo 3 o valor por padrão). Uma vez instanciado o novo sócio, o introduz no array, na posição marcada pelo atributo num_socios. A seguir mostram uma mensagem na tela e por último aumentam em um os atributos num_produtos ou num_socios.

O número de sócio, que recebe entre outros parâmetros, o construtor da classe sócio é gerado por meio do contador de sócios num_socios, da classe vídeoclub.

Métodos listar_produtos() e listar_socios()

Dois métodos muito similares, que veremos de uma só vez.

function listar_produtos(){
echo “<p>Listagem dos ” . $this->num_produtos . ” produtos disponiveis:”;
for ($i=0;$i<$this->num_produtos;$i++){
echo “<p>”;
$this->productos[$i]->imprime_caracteristicas();
}
}

function listar_socios(){
echo “<p>Listagem de $this->num_socios socios do videoclub:”;
for ($i=0;$i<$this->num_socios;$i++){
echo “<p>”;
$this->socios[$i]->imprime_caracteristicas();
}
}

Estes métodos imprimem uma listagem completa dos sócios e produtos registrados. Simplesmente fazem um recorrido do array de produtos ou de sócios e vão imprimindo suas características.

Método aluga_a_socio()

Realiza as ações necessárias para alugar um produto a um sócio.

function aluga_a_socio($numero_socio,$numero_produto){
if (is_null($this->socios[$numero_socio])){
echo “<p>Nao existe esse socio”;
}elseif(is_null($this->produtos[$numero_produto])){
echo “<p>Nao existe esse suporte”;
}else{
$this->socios[$numero_socio]->aluga($this->produtos[$numero_produto]);
}
}

Este método recebe o identificador do sócio e do produto em aluguer. Antes de proceder, realiza duas comprovações. A primeira para ver se existe um sócio com o número de sócio indicado por parâmetro e a segunda para ver se também existe um produto com o número de produto dado.

Se tudo foi bem, chama o método aluga() do sócio, enviando-lhe o produto que deseja alugar.

Nota:O método aluga() do sócio tem certa complexidade, mas já foi visto quando explicamos a classe sócio. Neste momento, pelo princípio de encapsulação da POO, devemos nos abstrair de sua dificuldade e não prestar atenção porque sabemos que funciona e não nos deve preocupar em como é feito.

Para testar a classe vídeoclub poderíamos utilizar um código como este:
$vc = new videoclub(“A Eliana Video”);

//vou incluir alguns suportes de teste
$vc->incluir_jogo(“Final Fantasy”, 2.5, “Playstation”,1,1);
$vc->incluir_jogo(“GP Motoracer”, 3, “Playstation II”,1,2);
$vc->incluir_dvd(“Os Outros”, 4.5, “Inglês e espanhol”,”16:9″);
$vc->incluir_dvd(“Cidade de Deus”, 3, “Português, inglês e espanhol”,”16:9″);
$vc->incluir_dvd(“Os Flintstones”, 3, “Espanhol”,”16:9″);
$vc->incluir_fita_video(“Os Outros”, 4.5, “115 minutos”);
$vc->incluir_fita_video(“O nome da Rosa”, 1.5, “140 minutos”);

//listo os produtos
$vc->listar_produtos();

//vou criar alguns sócios
$vc->incluir_socio(“José Fuentes”);
$vc->incluir_socio(“Pedro García”,2);

$vc->aluga_a_socio(1,2);
$vc->aluga_a_socio(1,3);
//alugo outra vez o suporte 2 ao sócio 1.
// não deve deixar porque já está alugado
$vc->aluga_a_socio(1,2);
//alugo o suporte 6 ao sócio 1.
//não é possível porque o sócio 1 tem 2 alugueres como máximo
$vc->aluga_a_socio(1,6);

//listo os sócios
$vc->listar_socios();

Se faz um carregamento de dados e uma chamada a todos os métodos que vimos para o vídeoclub. Este código dará como resultado uma saída como a seguinte:

Incluído suporte 0

Incluído suporte 1

Incluído suporte 2

Incluído suporte 3

Incluído suporte 4

Incluído suporte 5

Incluído suporte 6

Listagem dos 7 produtos disponíveis:

Jogo para: Playstation
Final Fantasy
2.5 (IVA não incluído)
Para um jogador

Jogo para: Playstation II
GP Motoracer
3 (IVA não incluído)
De 1 a 2 Jogadores.

Filme em DVD:
Os Outros
4.5 (IVA não incluído)
Inglês e espanhol

Filme em DVD:
Cidade de Deus
3 (IVA não incluído)
Português, inglês e espanhol

Filme em DVD:
Os Flintstones
3 (IVA não incluído)
Espanhol

Filme em VHS:
Os Outros
4.5 (IVA não incluído)
Duração: 115 minutos

Filme em VHS:
O nome da Rosa
1.5 (IVA não incluído)
Duração: 140 minutos

Incluído sócio 0

Incluído sócio 1

Alugado suporte a: Pedro García
Filme em DVD:
Os Outros
4.5 (IVA não incluído)
Inglês e espanhol

Alugado suporte a: Pedro García
Filme em DVD:
Cidade de Deus
3 (IVA não incluído)
Português, inglês e espanhol

O cliente já tem alugado o suporte Os Outros

Este cliente tem 2 elementos alugados. Não pode alugar mais neste vídeoclub até que não devolva algo

Listagem de 2 sócios do vídeoclub:

Cliente 0: José Fuentes
Alugueres atuais: 0

Cliente 1: Pedro García
Alugueres atuais: 2

Até aqui chegou por enquanto o desenvolvimento deste vídeoclub, que não é muito funcional mas esperamos que tenha servido para começar a conhecer as características da programação orientada a objetos.

De agora em diante, seguiremos este manual comentando outras particularidades da POO em PHP 5, que também há que conhecer.

Fonte: http://www.criarweb.com/artigos/repassando-criacao-classes.html

Deixe um comentário