Ir para conteúdo
Fórum Script Brasil
  • 0

Orientação A Objetos


iSoron

Pergunta

Diz ae gente!

Essa semana, um pessoal andou perguntando sobre como criar uma classe, como usar suas funções, entre outras coisas do tipo. Bem, acredito que não são poucas as pessoas que usam Java e nem sabem o que é orientação a objeto, ou não sabem bem o que ela signica. Pensando nessas pessoas, resolvi condensar os princípios da orientação a objetos nesse post. Lets code! tongue.gif

Orientação a Objetos

Tudo em nossa volta são objetos. Não sei se você parou pra pensar, mas você está olhando para um objeto que chamamos de "Monitor", digitando em um objeto chamado "Teclado", e lendo objetos chamados "Palavras". Tudo em nossa volta são objetos. Então, por que programação seria diferente? Foi pensando assim que se criou a chamada Orientação a Objetos em programação. No começo, ela parece bem complexa, mas, com o tempo, você domina esse poderoso recurso.

Classes

Como eu disse, tudo em nossas vidas são objetos. Você é um objeto! Porém, objetos diferentes desempenham diferentes funções, como iluminar um ambiente (classe das luzes), ou gravar sons (classe dos microfones). Cada classe é um grupo de diferentes objetos que apresentar propriedades semelhantes. Se fossemos definir a classe Carro, poderiamos dizer que ela possui as seguintes propriedades:

1. Todo Carro tem uma cor

2. Todo Carro tem um modelo

3. Todo Carro tem uma velocidade instantanea. No caso, 0 seria parado.

E assim por diante... Como notamos, isso são caracteristicas que todos os carros possuem. Note que dois carros diferentes possuem as caracteristicas "cor" e "modelo", mas isso não significa que os carros tenham mesma cor, ou modelo. A classe só diz que o carro tem uma "cor", mas não a define. A caracteristica "cor" é definida durante a montagem do carro, o que não significa que o dono não possa mudá-la posteriormente, claro. Continuando. Os carros, como a maioria dos objetos, desempenham funções. Por exemplo, um carro pode acelerar, frear, girar, ligar, etc.

Sabemos que todos os carros fazem isso, então podemos dizer que essas caracteristicas pertencem à classe dos Carros. Como vimos, então, toda Classe de objetos possui suas propriedades (ou atributos) e suas funções (ou métodos).

Tudo bem. Nesse momento você deve estar se perguntando o que esse papo de carros e objetos tem a ver com o seu computador e seus programas, certo? Bem, tem mais em comum do que parece! Vamos implementar a classe dos carros em Java!

public class Carro {

	int vel;
	int cor;
	boolean ligado;

	public Carro(int v, int c, boolean l) {
  vel = v;
  cor = c;
  ligado = l;
	}

	public void ligar() {
  ligado = true;
	}
	public void	desligar() {
  vel = 0;

  ligado = false;
	}
	public void acelerar(int deltav) {
  if(ligado)
  	vel = vel + deltav;
	}
}
Se você já tiver criado algum programa em Java, você não deve achar esse daí muito estranho. Vamos ver o que ele representa? Na primeira linha, eu estou definindo a classe "Carro". Depois eu explico o que o "public" representa. Em seguida, vêmos as caracteristicas dos seres pertencentes à classe carro. No caso, os carros possuem uma velocidade, cor e um boleano que diz se ele está ligado ou não. Depois das caracteristicas, vêm os métodos, ou funções dos "Carro"s. O primeiro método, que recebe o nome da própria classe é o "Construtor". O construtor é como a fabrica de automóveis: ele recebe como deve ser o carro (que cor, tipo, etc) e então monta. Observe que, antes do carro ser montado, não podemos usá-lo, obviamente! Então, sempre que se precisa de um carro, é preciso chamar um construtor para criá-lo. Veremos mais tarde como fazer isso. Depois do construtor, vemos alguns métodos, como ligar, desligar, acelerar, etc. Pois bem, geramos nossa classe. Como já disse, não possuímos carro algum, apenas uma caracteristica comum a todos os carros, algo como um manual de instruções, e, com esse manual, podemos fazer quantos carros quisermos, do jeito que quisermos!
[...]
	public static void main(String[] args) {
  
  Carro carro1 = new Carro(10, 2, true);
  Carro carro2 = new Carro(0, 1, false);

  carro1.acelerar(200);
  carro2.ligar();
  carro2.acelerar(100);
  carro1.desligar();

  System.out.println("Velocidade carro 1: " + carro1.vel);
  System.out.println("Velocidade carro 2: " + carro2.vel);

	}
[...]
Vamos analisar o código acima? A primeira vista, parece um total pleonasmo ficar repetindo "Carro carro1 = new Carro..." etc, mas essa linha tem sentido sim. Primeiro declaramos uma variável chamada carro1 do tipo Carro, assim como fariamos com um inteiro ou uma string. Note que o carro ainda não foi construído, apenas declarado! Para resolver isso, invocamos o contrutor: "carro1 = new Carro(10, 2, true)". Agora sim nós temos um carro montado e pronto para usar! A outra linha cria um segundo carro, chamado "carro2". A ação de gerar um carro a partir da classe é o que chamamos de "Instanciação". Isso porque o "carro1" é uma instância da classe Carro, enquanto o "carro2" é também uma instância da classe Carro, embora sejam diferentes. Note que, para acessar as funções de um dos carros, utilizamos um ponto, bem como se quiséssemos acessas as variáveis: "carro1.ligar()" ou "carro1.vel = 10". Um erro comum de quem está começando é fazer "Carro.ligar()". Se você pensar por um tempinho, verá que isso não tem o menor sentido. Afinal, você está tentando fazer a planta de um carro executar uma função! Lembre-se que ela é só um projeto, não um carro! Falando em termos mais técnicos, uma classe seria uma descrição de um tipo de dados. Essa descrição explica detalhadamente os atributos e funções do objeto a ser instanciado. Durante a instância, o computador aloca na memória um espaço suficiente para guardar todos os campos da classe escolhida. Esse espaço na memória pode ser resgatado utilizando o ponteiro (implícito) com o nome por você declarado. No caso, "carro1". obs.: É uma convenção em Java utilizar inicial maiuscula para representar uma classe e inicial minuscula, para as variáveis. Obviamente, isso não é uma regra e não causa nenhum erro de compilação se contrariada, mas é uma má prática de programação. Enfim, se você for do-contra, não siga! Pacotes Provavelmente, durante seus programas, você já utilizou este comando: "import java.*;" Essa linha diz que as classes do pacote atual podem utilizar as classes públicas de um outro pacote. Podemos definir um pacote como um diretório onde estão um conjunto de classes . Se você criar um diretório "\carros\fiat\" e, lá dentro, colocar um arquivo .java contendo a classe Fiat, você não poderá utilizar, inicialmente, a classe Fiat a partir do diretorio "\", por exemplo. Para indicar onde a classe Fiat se encontra, você pode utilizar o seguinte comando: import carros.fiat.*; Note que os pontos representam as barras. Dentro da classe Fiat, você precisa colocar: package carros.fiat; Isso indica que a classe Fiat está dentro do pacote carros.fiat. Quando você estiver digitando os arquivos .java, pode colocar todos em um mesmo diretório. Na hora da compilação, o javac separa as classes de acordo com os "packages". Direitos de Acesso Muito bem, criamos nossas classes e já as colocamos nos devidos pacotes. Porém, nem todas as classes devem ser acessíveis a todo mundo. Digamos, por exemplo, que você está criando um programa para um banco, e nele há a classe Conta, que possui operações para saques e depositos. No seu programa normal, a pessoa deveria entrar com a senha e, se essa for válida, uma instancia de Conta é criada para manipular a conta. Digamos que a classe que verifica a conta seja a classe Autenticador. Agora pensemos na seguinte situação: a classe Conta é pública, ou seja, qualquer classe, de qualquer pacote, pode instanciá-la, mesmo sem passar pelo Autenticador. Isso poderia gerar uma falha de segurança, pois apenas o autenticador pode dizer se a conta é, ou não, correta. Note, então, que a classe Conta está, de alguma forma, ligada ao autenticador, o que indica que os dois devem estar dentro do mesmo arquivo .java. Assim, a melhor forma de fazer é:
(arquivo Autenticador.java)

public class Autenticador {
	[...]
}

class Conta {
	[...]
}

(fim do arquivo)
Note que a classe Autenticador recebeu o nome "public", diferente da classe Conta. Por que isso? Porque somente o Autenticador deve ser acessado externamente. Cada arquivo .java só pode ter uma classe pública, e o nome dessa classe deve ser também o nome do arquivo, lembrando que Java é caso-sensitivo! Da mesma forma que podemos dizer que uma classe é publica ou não, podemos dizer se um atributo ou função dessa classe é publico ou privado. private int velocidade; Voltando ao exemplo do carro, se a velocidade fosse declarada como privado, não poderiamos invocar diretamente a velocidade, e sim criar um método que nos dê o valor, ou que altere:
private int velocidade;

public void setVelocidade(int a) {
	velocidade = a;
}
public int getVelocidade() {
	return a;
}
Mais tarde, então, veja como usaríamos essa classe:
Carro carro1 = new Carro(10,2, true);
carro1.velocidade = 10;     // Errado! Erro de compilação!
int a = carro1.velocidade;  // Errado tb!

carro1.setVelocidade(10);      // Correto!
int a = carro1.getVelocidade() // Correto!

É bom lembrar que as funções get e set precisam ser publicas, ou a variável ficaria inacessível!

Bem, há outros modificadores, como "static", "protected", entre outros. Por serem mais avançados, explicarei em uma outra oportunidade!

E isso é o básico de Orientação a Objetos! Depois escreverei outro Post mais avançado, falando de Polimorfismo, Herança, Interface, Encapsulamento ... nossa! Tem tanta coisa pra falar ainda! Mas deixa pra outra hora, to cansado de escrever! Espero que esse texto seja util e não muito complicado. Qualquer dúvida, só postar.

falou! biggrin.gif

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Kabelera,

Eu pretendo, posteriormente, continuar essa parte de Orientação a Objetos. Falar um pouco de herança, polimorfismo, encapsulamente, etc.

Quem quiser escrever algum tuto desses, basta fazer, postar e me mandar um msg que eu destaco o tópico, beleza?

Podiamos fazer um rodízio disso, tipo um tópico destacado passa um mês e depois sái, pra outro entrar. Aí podiamos ficar com uns 3 simultâneos, pra não encher muito, ou algo assim. biggrin.gif

falou,

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...