Classes Busquei em algumas fontes o que representa uma classe em orientação a objetos."Uma classe é o modelo ou esquema a partir do qual os objetos são criados"; Java Core Volume 1, página 52."Uma classe é definida pelo o usuário pelas especificações(características e comportamentos) que a identificam. É possível dizer que uma classe é um molde que será usado para construir objetos que representam elementos da vida real. Classe = características + comportamento."; Apostila Academia Java módulo AJ2, página 10Como vocês podem observar, a classe é um modelo, e é desse modelo que vão sair os objetos. Um grande exemplo que tem no livro do Deitel,na apostila da Caelum também, é de uma planta de uma casa ou prédio, o certo é você construir sua casa ou prédio a partir de um modelo ou planta, a classe seria a planta ou modelo para construir a casa e o objeto seria a casa construída, é mais ou menos essa analogia, Um outro exemplo bastante interessante que que tem na apostila da Caelum é de uma receita de bolo, você não vai comer a receita de bolo, você vai comer o objeto que é o bolo, e da receita são criados centenas de bolos a partir dessa receita(classe), e todos os bolos criados(instanciados) podem até ser idênticos, do mesmo tipo, mas são objetos diferentes, você vai criar um bolo1, bolo2, bolo3 e assim por diante, como mostra figura abaixo. As classes são formadas por características(atributos) e comportamentos, ações(métodos), você deve pensar de uma forma abstrata, mas o que é abstração?"Abstração consiste no ato de focalizar nos aspectos essenciais inerentes a uma entidade e ignorar propriedades "acidentais." Em termos de desenvolvimento de sistemas, isto significa concentrar-se no que um objeto é e faz antes de se decidir como ele será implementado. O uso de abstração preserva a liberdade para tomar decisões de desenvolvimento ou de implementação apenas quando há um melhor entendimento do problema a ser resolvido."Resumindo você deve pensar de forma simplificada, como você vai querer o seu objeto, que característica ou atributo você quer que ele tenha, que ações ou comportamento você quer que ele faça.Falando assim pode paracer um pouco complicado logo no inicio, mas um bom exercício é você ver os objetos e tentar fazer uma abstração deles, como vamos fazer agora com o carro.A primeira coisa que você deve-se perguntar é, o que este objeto tem? No nosso caso o que um carro tem?Quantidade de portas;Tamanho;Cor;Marca;Ano de fabricação;Modelo;Preço;Quantidade de marchas;Entre outros atributos, como vocês podem perceber os atributos por convenção são substantivos.Agora vamos pensar nas ações dele, faça a pergunta, o que ele vai fazer?AcelerarFrearBuzinarTrocar as marchas;Limpar os vidros;Ligar a Lanterna;Entre outras ações, como vocês podem perceber as ações(métodos) por convenção são verbos, já que verbo implica uma ação. Passada a teoria, vamos mostrar como criamos uma classe em Java. Para isso precisamos utilizar a palavra reservada class em seguida vem o nome da classe e seu corpo, e dentro dele é onde você faz a declaração dos atributos e métodos.Sintaxe para declarar uma classseclass NomeDaClasse{ }Exemplo:class Carro{
//declaração de atributos e métodos
} Segundo a postila da Academia Java, os nomes da classe seguem um padrão como mostrado abaixo:Iniciar os nome das com lestras maiúsculas.Separar nomes de classes compostos por duas ou mais palavras com um caractere maiúsculo.exemplo: class NomeDaClasse{
//declaração de atributos e métodos
} Então como ficaria nossa classe carro com os atributos e métodos.class Carro{
int quantidadeDePortas;
int tamanho;
String cor;
String marca;
int anoDeFabricacao;
String modelo;
double preco;
int velocidade;
boolean lanterna;
int[] marchas;
// Método para construir o carro.
void construirOCarro(int quantidadePortas,int tam,
String marcaDoCarro,
String corDoCarro,
int anofabricacao,
String model,double precoDoCarro,
int qtdMarchas){
quantidadeDePortas = quantidadePortas;
tamanho = tam;
marca = marcaDoCarro;
cor = corDoCarro;
anoDeFabricacao = anofabricacao;
modelo = model;
preco = precoDoCarro;
marchas = new int[qtdMarchas];
}
void acelerar(){
velocidade++;
}
void frear(){
velocidade--;
}
void buzinar(){
//instrução para fazer barulho
}
boolean ligarLanterna(boolean verdadeiroOuFalso){
return lanterna = verdadeiroOuFalso;
}
void trocarMarcha(int marchaEscolhida){
System.out.println(marchas[marchaEscolhida]);
}
void imprimaCarro(){
System.out.println("Marca: "+marca);
System.out.println("Modelo: "+modelo);
System.out.println("quantidade de portas: "+quantidadeDePortas);
System.out.println("tamanho: "+tamanho+" m");
System.out.println("Cor: "+cor);
System.out.println("Ano de fabricação: "+anoDeFabricacao);
System.out.println("Preço: R$ "+preco);
}
} Beleza construímos nossa classe carro, nosso modelo, e agora o que vamos fazer com ela? ObjetosComo já mencionamos no tópico acima, o objeto é a criação da classe, ou uma instância da classe que a criamos. Para criar um objeto você deve utilizar o operador new. Para isso eu vou criar um classe chamada TesteCarro para justamente testarmos, mostrar como fazemos a declaração e instanciação de um objeto.public class TesteCarro {
public static void main(String[] args) {
//Aqui estou declarando e instanciando o meu objeto carro1;
Carro carro1 = new Carro();
//Aqui estou declarando uma variável de referência do Tipo Carro;
Carro carro2;
//Aqui eu estou instanciando(criando) o objeto da Classe carro, e
//o alocando no Heap;
carro2 = new Carro();
System.out.println("Carro1");
carro1.imprimaCarro();
System.out.println("");
System.out.println("Carro2");
carro2.imprimaCarro();
}
} Olhem o código compilado.Eles iniciaram com os valores padrões. Vai ter um post só com a explicação só de métodos futuramente, enquanto isso vou ter que utiliza-lo sem explicar.Leem este trecho do livro do Java Core"Todos os objetos que são instâncias da mesma classe compartilham uma semelhança de família suportando o mesmo comportamento. O comportamento de um objeto é definido pelos métodos que você pode chamar.Em seguida, cada objeto armazena informações sobre com que ele atualmente se parece. Isso é o estado do objeto. O estado do um objeto pode mudar ao longo do tempo, mas não espontaneamente. Uma mudança no estado de um objeto precisa ser uma consequência das chamadas de método. "Java Core página 53.O estado dos nossos dois objetos é o padrão, são valores iniciais, e como mudar este estado então? Para isso que eu criei o método construirOCarro(), como o texto acima descreve, você precisa de um método para mudar de estado, você até pode acessar os dados(atributos) do objeto diretamente, mas isso seria um erro, seria uma quebra de encapsulamento(outro tópico que vou explicar futuramente).Como fazemos então?Vamos chamar o método construirOCarro() e passar os parâmetros que ele pede. como mostrado no código abaixo.public class TesteCarro {
public static void main(String[] args) {
Carro carro1 = new Carro();
Carro carro2;
carro2 = new Carro();
//Construindo o carro 1, passando parâmetros para criação do objeto
carro1.construirOCarro(2, 7, "Ferrari", "Amarelo",
2013, "XXFFWW13" , 1000000, 7);
//Construindo o carro 2, passando parâmetros para criação do objeto
carro2.construirOCarro(4, 5, "Fiat", "Prata",
2013, "Uno", 35000, 6);
System.out.println("Carro1");
carro1.imprimaCarro();
System.out.println("");
System.out.println("Carro2");
carro2.imprimaCarro();
}
} Olhem o código compilado:Agora sim, instanciamos o nossos objetos e atribuímos valores a eles.Olha como ficou nossos objetos no Heap. Enfim terminamos mais um post até a próxima. Fontes:http://www.dca.fee.unicamp.br/cursos/POOCPP/node6.html - AbstraçãoCore Java - Volume I, Autores: Cornell, Gary; Horstmann, Cay S. Apostila Academia Java.http://www.caelum.com.br/apostilas/#FJ-11 - Para baixar a apostila