Objota O mundo orientado a objetos

Utilizando arrays em classes

Posted on julho 21, 2010

Posted by Rodrigo Ireno

Olá, para quem já tem acompanhado meus artigos sobre php deve ter visto o último arrays e matrizes em php que mostrava como utilizar arrays em php. Neste artigo quero mostrar um exemplo prático com arrays em php em uma classe. Vendo todos os métodos de iteração.

Iteração

Este termo é usado para designar uma busca em um array. Quando digo que se deve iterar por um array, quer dizer que devo percorrer este array até encontrar algum valor ou algo assim. Para iterar por um array é preciso fazer uso de algum tipo de loop. Para não ficar nenhuma dúvida vou demonstrar como iterar por um array com diversos tipos de loop. Tudo isso dentro do paradigma de orientação a objetos.

Teremos neste artigo dois objetos. O objeto contato e o objeto agenda, que não passa de uma lista de contatos. Eis a primeira classe:

Contato


class Contato{
	private $nome;
	private $telefone;
	private $email;

	public function Contato($nome, $telefone, $email){
		$this->nome = $nome;
		$this->telefone = $telefone;
		$this->email = $email;
	}

	public function setNome($novoNome){
		$this->nome = $novoNome;
	}
	public function setTelefone($novoTelefone){
		$this->telefone = $novoTelefone;
	}
	public function setEmail($novoEmail){
		$this->email = $novoEmail;
	}

	public function getNome(){
		return $this->nome;
	}
	public function getTelefone(){
		return $this->telefone;
	}
	public function getEmail(){
		return	$this->email;
	}
}

A classe acima tem por objetivo representar a entidade lógica contato com todos os atributos relevantes ao nosso escopo. Vejamos adiante a classe Agenda:

Agenda


class Agenda{

	// Um array com objetos do tipo Contato
	private $contatos;

	public function Agenda(){
		$contatos = array();
	}

	//Adiciona contatos a lista
	public function addContato($novoObjetoContato){
		$this->contatos[] = $novoObjetoContato;
	}

	//Mostra todos os contatos com foreach
	public function mostraContatos1(){
	 	foreach($this->contatos as $obj){
	 		echo "Nome: {$obj->getNome()}<br/>
	 			  Telefone: {$obj->getTelefone()}<br/>
	 			  Email: {$obj->getEmail()}<br/>
	 			  -----------------<br/>";
	 	}
	}

	//Mostra todos os contatos com for
	public function mostraContatos2(){
	 	for($i=0;$i < count($this->contatos);$i++){
	 		$obj = $this->contatos[$i];

	 		echo "Nome: {$obj->getNome()}<br/>
	 			  Telefone: {$obj->getTelefone()}<br/>
	 			  Email: {$obj->getEmail()}<br/>
	 			  -----------------<br/>";
	 	}
	}

	//Mostra todos os contatos com while
	public function mostraContatos3(){
		$i = 0;
	 	while($i < count($this->contatos)){
	 		$obj = $this->contatos[$i];

	 		echo "Nome: {$obj->getNome()}<br/>
	 			  Telefone: {$obj->getTelefone()}<br/>
	 			  Email: {$obj->getEmail()}<br/>
	 			  -----------------<br/>";
	 		$i++;
	 	}
	}

	//Mostra todos os contatos com 'do while'
	public function mostraContatos4(){
		$i = 0;
	 	do{
	 		$obj = $this->contatos[$i];

	 		echo "Nome: {$obj->getNome()}<br/>
	 			  Telefone: {$obj->getTelefone()}<br/>
	 			  Email: {$obj->getEmail()}<br/>
	 			  -----------------<br/>";
	 		$i++;
	 	}while($i < count($this->contatos));
	}
}


Veja como iteramos pelo array. O foreach sempre itera por todo o array. Já com os outros tipos de loop posso ter mais controle sobre a iteração. Outra observação a fazer é o método nativo do php count() que retorna um número inteiro, referente ao número de elementos dentro do array.

Depois de feitas estas duas classes, vamos juntar tudo isso em um único arquivo php e executar para ver o que acontece. Copie as duas classes e cole uma e depois a outra. Depois das duas classes. Adicione este código, abaixo, (tudo entre tags php, lógico):


$obj = new Agenda();

// Instancio dois contatos
$contato1 = new Contato("Rodrigo","11-2222-5555","rodrigo@objota.com.br");
$contato2 = new Contato("objota","22-5555-1111","objota@objota.com.br");

// adiciono estes a minha lista
$obj->addContato($contato1);
$obj->addContato($contato2);

$obj->mostraContatos4();


Neste código é feita a inicialização do objeto Agenda e adicionados dois contatos. Após isso utilizamos o método mostraContatos() para mostrar todos os contatos já adicionados.

Repare que tão importante quanto utilizar métodos de iteração por arrays, vimos também um bom exemplo de orientação a objetos. Construímos duas classes, sendo que um objeto utiliza o outro. Todos em conjunto formam uma agenda.

obs: O loop mais rápido é o for, só uma dica! 🙂

Teste o arquivo e veja o resultado. Este artigo fica por aqui, até a próxima e bom aprendizado!

No próximo post vamos falar de conexão com o banco de dados! até!

Arrays e Matrizes em php

Posted on julho 17, 2010

Posted by Rodrigo Ireno

Arrays em php

Olá, neste artigo vou falar um pouco sobre array em php. Como utilizá-lo, para que serve e etc. Mas.. o que é um array?

Array é uma coleção de valores armazenada em uma única variável. Até agora vimos que é possível armazenar valores numéricos e caracteres em uma variável. Utilizando um array, é possível armazenar vários tipos de valores em uma única variável. Veja um exemplo abaixo:


<?php

	//Uma variável comum

	$valor = 123;
	$valor = "Objota";

	//Um array

	$valor = array(123,"Objota");

?>

Para recuperar um valor específico do array é preciso fornecer um índice. Este índice geralmente é um valor numérico, porém em arrays associativos, também se usa caracteres. Vejamos o segundo exemplo:


<?php
	//Um array

	$valor = array(123,"Objota");

	//A linha abaixo imprime na tela o valor "123"

	echo $valor[0];

?>

Como pudemos ver no exemplo acima, o índice inicia sua contagem a partir do zero. Como temos dois elementos no array (123 e “Objota”) temos os índices 0 e 1 acessíveis.

Arrays Associativos

Em geral todo array é associativo. No exemplo anterior o índice zero está associado ao primeiro item do array. Por omissão o php considera que o índice é um número, porém é possível declarar como será este índice. Vejamos abaixo.


<?php
	//Sem declarar o nome da chave ou índice

	$valor = array(123,"Objota");

	//Por omissão é determinado um número como índice ou chave

	echo $valor[0];

	//Declarando o nome da chave

	$valor = array("primeiro" => 123, "segundo" => "Objota");

	//Imprime "123" na tela

	echo $valor["primeiro"];

?>

Matrizes com combinações de array

Na própria matemática e em muitos sistemas, e muitos tipos de cálculo é necessário o uso de matrizes. Uma matriz  é um conjunto de linhas e colunas. Vejamos um exemplo abaixo:


<?php
	//Eis um exemplo de um matriz 3x3 (três linhas por três colunas)

	$Matriz = array(array(59,56,47),
			     array(85,57,73),
			     array(15,23,32));

	// A linha abaixo imprime 23 na tela

	//veja a referência, terceira coluna e linha 2

	//Lembrando que a contagem do índice começa do zero!

	// Neste formato o primeiro colchete define a coluna
	// e o segundo colchete define a linha
	echo $Matriz[2][1];

?>

Da mesma forma também é possível fazer isso:

<?php

// Uma matriz associativa
$valor = array(
	'Cor'			=> array( 'Vermelho', 'Branco', 'Prata' ),
	'Capacidade'	=> array( '4GB', '8GB', '16GB' ),
	'Interface'		=> array( 'Windows', 'Mac', 'Linux' ),
);

// Esta linha printa 'Vermelho' na tela
echo $valor['Cor'][0];

//Coluna 'cor' e o ítem zero '0' desta coluna

?>

Bom este foi um tutorial simples e direto para esclarecer como utilizar um array. No próximo artigo faremos uma classe para manipular arrays. Com vários tipos de loop. Dúvidas, fiquem a vontade para postar.

O objeto ArrayList

Posted on junho 29, 2010

Posted by Rodrigo Ireno

Neste artigo vou abordar brevemente o objeto ArrayList. Ele permite fazer uma coleção de valores e/ou objetos, ou seja, ele aceita valores primitivos e objetos. E é estremamente fácil de utilizar, pois não é necessário inicializar ele com um tamanho fixo, ele trabalha com um tamanho variável. Sendo que em qualquer momento você pode adicionar elementos e remover elementos.

Ele porém não faz parte do pacote padrão do java: java.lang...

Sendo assim é necessário fazer a importação de seu pacote, desta forma:

import java.util.ArrayList;

Este comando importa a classe ArrayList que se encontra no pacote java.util. Neste pacote existem outras classes, Como Iterator que pretendo demonstrar seu uso em futuros artigos.

Existe também a possibilidade de importar todo o conteúdo do pacote, porém isso deixa sua aplicação mais pesada:

import java.util.*;

esse comando importa todo o conteúdo do pacote.

Vejamos abaixo uma classe e um trecho de código, para executar:

//Aqui importo o pacote para dentro de minha classe
import java.util.ArrayList;

public class MinhaLista {
    private ArrayList lista;

    public MinhaLista(){
        //Instancio o objeto ArrayList
        lista = new ArrayList();
    }

    public void addItem(String valor){
        //O método add() adiciona um valor ao array, detalhe:
        //isso aumenta o seu tamanho dinamicamente
        lista.add(valor);
    }

    public void removerItem(int indice){
        //Este método remove o objeto que ocupa
        //o indice indicado por parâmetro
        lista.remove(indice);
    }

    public void setItem(int indice, String valor){
        //Este método altera o objeto que o ocupa o índice indicado
        lista.set(indice, valor);
    }

    public String getItem(int indice){
        // O método get() retorna o endereço de memória do objeto
        //que se encontra no índice fornecido por parâmetro
        //Por este motivo é preciso fazer uso de um casting (conversão de tipo)
        //Isso diz ao ArrayList que você quer o objeto e não seu endereço de memória

        return (String) lista.get(indice);
    }

    public void mostrar(){

        //Este é o loop for. Uma estrutura de controle que repete um comando
        //por um numero determinado de vezes

        for(int i=0; i < lista.size();i++){
            String n = (String) lista.get(i);

            //Este método println() recebe uma String como parâmetro
            //e imprime na tela.
            System.out.println(n);
        }
    }
}

Agora fiz uma outra classe para executar a classe MinhaLista. Abaixo temos o uso do método main() que  executa uma aplicação java.

public class TestaMinhaLista {
    public static void main(String[] args){
        MinhaLista obj = new MinhaLista();

        //Adicionando um item ao índice 0
        obj.addItem("Java");

        //Adicionando um item ao índice 1
        obj.addItem("Brasil");

        //Adicionando um item ao índice 3
        obj.addItem("Texto a ser removido");

        //Adicionando um item ao índice 4
        obj.addItem("Programação");

        obj.removerItem(2);

        //Mostro o conteúdo de minha lista
        obj.mostrar();

        System.exit(0); //Este comando encerra a aplicação
    }
}

Para ver este exemplo em funcionamento. Crie dois arquivos, sendo que o nome do arquivo que você criar deve ter exatamente o mesmo nome da classe, ex:

criei um arquivo no JGrasp com o nome de MinhaLista.java e dentro deste arquivo eu coloco a classe MinhaLista, aproveite pois é só copiar e colar. Em seguida clique no botão com símbolo "+" (na cor verde) e isso compila a sua classe .java e será visível a você que surge um arquivo com o mesmo nome do original, porém com uma estenção .class. Faça o mesmo com o arquivo TestaMinhaLista, compile-o e este em especial, por possuir o método main(), irá executar o programa. No JGrasp, visualizando a classe TestaMinhaLista execute o programa com o botão RUN. Veja o que acontece.

Dúvidas, por favor comente.

Arrays em java

Posted on junho 29, 2010

Posted by Rodrigo Ireno

Deixando de lado ( só um pouco) as classes, vamos agora tratar de um elemento muito útil em qualquer linguagem de programação. O array.

Um array e um elemento que existe em praticamente todas as linguegens de programação, que é capaz de armazenar vários valores dentro dele. Sendo possível armazenar diversos valores dentro dele, tembém é preciso um modo de recuperar este falor, que é atravez de um índice.

Algumas linguagens possuem arrays de tamanho fixo e variável, que é o caso do java. Em outras como php o array tem tamanho sempre variável. Bom sendo assim vamos exemplificar como seria o armazenamento de valores dentro de um array, em java.
No java,  elementos não primitivos são objetos e todos os objetos devem ser inicializados com a palavra chave new. Para utilizar um array de tamanho fixo em java é preciso especificar seu tamanho durante a inicialização, veja:


int[] meuArray = new int[16];

 meuArray[0] = 23;
 meuArray[15] = 40;

Tomando nota do código acima, já é possível ter uma idéia de como funciona. Tenho um array de números inteiros, vamos aos detalhes.

Ao instanciar um array de tamanho fixo, é preciso determinar o número exato de elementos que ele poderá suportar. Neste caso o array suporta 16 números inteiros. Para poder referenciar um valor dentro deste array, eu utilizo a chave ou índice do array. É aquele [indice] abre-colchete :  índice  : fecha colchete. Sendo que a contagem dos índices começa a partir do zero, então o primeiro elemento está no índice 0, e o último elemento está no índice 15.

Veja que eu atribui um valor 40 ao índice 15, portanto meuArray[15] retornará a partir de então o valor 40.

Arrays são muito utilizados em conjunto com loops, estruturas de controle que repetem determinado comando. veja um exemplo:


//    Veja um exemplo com o loop for

int[] meuArray = new int[3];

meuArray[0] = 50;
meuArray[1] = 25;
meuArray[2] = 48;

// ou esqueça o feito anterior e faça assim..

int[] meuArray = {50, 25, 48};

// O resultado é o mesmo

for(int i=0; i < meuArray.length;i++){

 System.out.println(meuArray[i]);

}

//    O loop acima itera por todo o array e imprime na tela todo o seu conteudo.

Bom este é o exemplo de array de tamanho fixo, porém o java possui um array de tamanho variável, ou seja, você não precisa determinar um tamanho específico para ele. E é usado justamente quando não se tem certeza do que vem por aí para preencher o array.

Apresento, o ArrayList do  pacote java.util.ArrayList. Como ele faz parte de um pacote não incluso por padrão, ele deve ser importado com o comando import.

Mostrarei um exemplo completo no próximo artigo. desta vez com classes inteiras.

até.