You are on page 1of 10

5.

Orientação a Objetos Java é uma linguagem orientada a objetos e, com isso, não é possível desenvolver nenhum programa sem seguir tal paradigma. Um sistema orientado a objetos é composto por um conjunto de classes e objetos bem definidos que interagem entre si, de modo a gerar o resultado esperado. 5.1 O que é? O avanço das tecnologias na área de análise, projeto, desenvolvimento e qualidade de software permite que aplicações mais flexíveis e poderosas sejam construídas. A necessidade de integrar estas aplicações criou uma nova metodologia de análise e desenvolvimento: a Orientação à Objetos. A Orientação à Objetos modela o mundo real com classes e instâncias. Cada classe é a estrutura de uma variável, ou seja, um tipo de dado. Nela, são declarados atributos e métodos que poderão ser executados ou acessados nas instâncias da mesma classe. As classes possuem uma função muito importante na modelagem orientada a objetos, elas dividem o problema, modularizam a aplicação e baixam o nível de acoplamento do software. Variáveis de uma classe são chamadas de instâncias de classe. Por exemplo: Se existe uma classe Pessoa existe a instância (variável) pessoa que é do tipo Pessoa. Um Objeto, ou instância, é uma entidade cujas informações podem incluir desde suas características até suas atividades, ou seja, uma abstração de um domínio de um problema. Abaixo há uma série de definições sobre a arquitetura de orientação a objetos em Java.

        

Pacote: Conjunto de classes e demais arquivos que possuem interesses comuns ou atuam com dependências entre si. Fisicamente são pastas do sistema operacional. Instância, objeto: Uma variável do tipo de uma classe. Construtor: Responsável por iniciar a criação e inicialização de uma instância de classe. Método: Funções referenciados aquela classe. Modificador de acesso: Descreve que outras classes podem ter acesso a classe que está se criando. Também é usado para indicar que uma classe pode ser acessada de fora de seu pacote. Hierarquia de classes: Um grupo de classes que estão relacionadas por herança. Superclasse: É a classe que é estendida por uma determinada classe. Subclasse: É a classe que estende determinada classe. Classe base: A classe de determinada hierarquia que é uma superclasse de todas as outras classes. A classe? pai de todas? 5.2 Criando a primeira classe Nesta apostila já foram criadas várias classes demonstrando outras funcionalidades da linguagem. Nos exemplos anteriores todo o código que continha um public class declarava uma classe. Porém, os exemplos anteriores tinham propósitos de explicar cada tópico, e portanto não faziam muito sentido. Neste exemplo, será construído uma classe Pessoa, que manterá os dados e as ações relativas aos dados de pessoa.

1. public class Pessoa { 2. String nome; 3. Date nascimento; 4. double dinheiroNaCarteira; 5.

8. 1. para que a classe possa ser instanciada. formatador. // Date e de um Date para um String. 13. 10. invocado quando ocorre a criação de um Objeto. Não é necessário definição de atributos. new SimpleDateFormat("dd/MM/yyyy"). } A classe pública Pessoa acima possui três variáveis. } public Pessoa(String nome. 18. sem parâmetros. 12.nascimento = nasc. 16. dinheiroNaCarteira. para ter essa proteção cria-se um construtor privado que não recebe parâmetro e também não possui corpo. 6. 17. 11. 9. 10. 18. O construtor é um método sem retorno. } public void gastar(double valor) { dinheiroNaCarteira -= valor. É construído para evitar que o Java crie o construtor default. // Inclui R$ 1000 na carteira da 16. 13. pVitor = new Pessoa("Vitor Fernando Pamplona".nome = nome. Esta classe pessoa só pode ser criada passando dois parâmetros: o nome e a data de nascimento. mesmo que sem nenhum método. A declaração abaixo é válida. this. pVitor. 11. o java criaria um construtor padrão. public class GerenciadorDePessoas { 2. 9. nascimento. 19. dois métodos: gastar (double valor) e receber (double valor). // Cria um outro objeto de pessoa. Esses atributos serão criados a cada nova instância de Pessoa que existir no sistema. o João . SimpleDateFormat formatador = 7. 4. Se este método não existisse. Pessoa pVitor. 15. // Cria uma classe que formata datas. Algumas classes precisam evitar ser instanciadas. public static void main(String args[]) { 3. construtor ou atributo: public class NãoFazNada { } O código abaixo usa a classe Pessoa como um exemplo de aplicação Orientada a Objetos. também chamados de atributos de instância: nome. o javac compila corretamente e pode-se criá-la na aplicação. métodos ou construtores para que uma classe possa ser compilada. Há. 8. Entre eles existe a definição de um construtor: public Pessoa (String nome. 14. // Vitor Recebeu 1000 reais 15. // É capaz de formatar de String para uma 5.receber(1000.6.parse("07/11/1983")). // pessoa p criada na linha anterior 17. } public void receber(double valor) { dinheiroNaCarteira += valor. 12. Eles retiram e incluem dinheiro na carteira da Pessoa respectivamente. 7. Date nasc) { this. 14.00). Date nasc). // Cria um Objeto de Pessoa. também.

7. 17.00).3 Modificadores Em Java existem uma série de palavras-chave que se comportam como modificadores de classes. } Pessoa pJoão = new Pessoa("João da Silva". 5. Primeiramente é criado um formatador de datas para que se possa converter uma data formatada em String em um tipo Date do Java.. é criado a variável. 26.00. 11. Na linha abaixo é invocado o método receber da classe Pessoa passando como parâmetro o double 1000. usa o comando new para criar uma instância. ou melhor. antes do retorno de um método ou antes da declaração de um atributo. Esta instância já é inicializada com o nome Vitor Fernando Pamplona e a data de nascimento 07 / 11 / 1983. como qualquer outra criação de objeto. CONSTANTE. 5. 22. 10. 2. 6. 4.parse("18/02/1970")). Acesso pela classe Acesso pelo pacote Acesso pelo pacote Não aplicável. Abaixo segue uma tabela com todos os modificadores de acesso do Java. 12. portanto o valor que ali se encontra é null. 25. 9. 13. 18.4 Métodos Um método em Java é uma sub-rotina semelhante as funções de C e Pascal. A Sintaxe de um método é a seguinte: . Palavra-chave public private protected default abstract final static native transient synchonized Em uma classe Em um m étodo Em um atributo Acesso total Não aplicável Acesso total Acesso total. Na linha seguinte. // João recebeu R$ 500 e gastou R$ 100 pJoão. Esta variável ainda não está criada. existe a declaração da variável pVitor que é da classe Pessoa. 23. 5.00). 20. 14. } 27. 24. a instância da classe Pessoa. com escopo do método. Os métodos têm um retorno e podem conter parâmetros. 8. 15. Após. 16. A ordem de declaração dos modificadores não importa.gastar(100. Acesso pela classe Não aplicável Cache Não aplicável Acesso pela classe Acesso pelo pacote Acesso pelo pacote Deve ser sobrescrito Não aplicável Somente pacote Não instância Sem herança Não aplicável Não aplicável Não pode ser sobrescrito Acesso pela classe Indica código nativo Não aplicável Não aplicável Não aplicável Sem acesso simultâneo. 3. por exemplo. Um modificador pode ser utilizado antes da palavra class.20.receber(500. 19. 21. 21. métodos e atributos. Alguns desses modificadores já foram usados nesta apostila como a palavra-chave public. formatador. Este formatador é uma instância da classe SimpleDateFormat e. pJoão. 1.

io e é muito utilizada em aplicações corporativas. 5. Uma interface não pode possuir atributos de instância e nem métodos com implementação. transformada em um conjunto de bits para serem armazenados ou transmitidos. 4. public void gastar(double valor) { // Corpo 3. O modificador estático declara que o método terá um determinado tipo de comportamento dentro do programa orientado a objetos.]) { 2. [modif] <retorno> <nome> ([<tipo param>]. Se for variável primitiva o valor da variável é passada no parâmetro e pode ser alterada a vontade dentro da função que nada sofrerá a variável externa. Quando uma classe implementa Serializable ela não precisa implementar nenhum método definido na interface. . O uso de interfaces é semelhante ao de classes como mostrado abaixo. como acontece em C ou em um local prédeterminado como em Pascal.5 Interfaces Interfaces foram concebidas para criar um modelo de implementação aumentando o baixo acoplamento entre determinadas partes de um software. public void imprimir(). pode ser void. Com objetos o que muda é que o valor passado no parâmetro da função é a referência para o objeto. Buscando o exemplo da classe pessoa: 1. Muitas vezes as interfaces representam ações ou papéis para as classes. podem ser declaradas em qualquer lugar. que precede o nome do método e a lista de parâmetros. } 4. Na declaração de um método os modificadores precedem o tipo de retorno. O corpo do método é colocado entre chaves. Em Java todos os argumentos são passados por valor. vistos na seção anterior. O tipo de retorno de um método pode ser primitivo ou de referência.1. mas pode possuir atributos de estáticos (de classe) e cabeçalhos de métodos que deverão ser desenvolvidos nas classes que implementarão a interface. ou seja.. se um objeto for alterado dentro da função. //<modif> <ret> <nome> <parametro> 2. A serialização de uma instância armazena todos os seus dados e consegue criar um objeto semelhante na desserialização. dinheiroNaCarteira -= valor. mas com esta ação o programador indica ao java que a classe pode ser serializada. 1. ou seja. ao contrário. } O corpo do método pode conter declarações de variáveis e comandos. ou como no método main. não retorna nada. public interface Impressao { 2. As variáveis não ficam restritas a declaração somente antes dos comandos. o objeto externo também será alterado. antes de informar o tipo de retorno.. exceto nas instruções objeto = null. <corpo do método> 3.[. 3. } Ao declarar um método é possível adicionar modificadores. Um exemplo comum de interface é a Serializable que se encontra dentro do pacote java. Não existe passagem por referência.

15. } } public class Bicicleta extends Veículo { Veículo { . porém não pode ser instanciada. visto que não há limite para quantidade de classes em implementação. 6. Uma classe abstrata é usada para manter alguma programação nas classes ? Pai ?. } } public class Documento implements Impressao { private String número. 6. private String marca. usa-se a palavra-chave implements seguida do nome da interface. Essas duas classes foram obrigadas a implementar o método public void imprimir () definido na interface.5. 1. 13. 2. 11. com a exceção que ela pode conter implementações. 5.print("Pessoa: " + nome). 8. public void imprimir() { Impressora imp = new Impressora("LPT1"). . 8. 5. 16. 9.. } private void acelerar() { . 18.. imp.. Para implementar uma interface.... 20. public void imprimir() { Impressora imp = new Impressora("LPT1"). É correto afirmar que as classes ganharam um papel. 16.print("Documento: " + número). // sets e gets public abstract void andar(). 19. 21. public class Pessoa implements Impressao { private String nome. . } public class Carro extends public void andar() { acelerar(). 15. Para ser utilizada como instância. 14. uma classe abstrata deve ser estendida por uma classe não abstrata.. 10.. 19. 9. 12. imp. 21. 7. private String modelo. 7. 3.6 Abstract Class Uma classe abstrata é quase uma interface. 14. 13. 17. 20. Se isso não acontecesse o javac. 18. public abstract class Veículo{ private String nome. 12. o compilador do java. 4. .. e estão aptas a executar todos os ítens necessários para realizar tal tarefa. 23. } } No exemplo acima é possível identificar uma interface Impressão que é implementada pela classe Pessoa e pela classe Documento.. 10. 11. ou interfaces. . 22. 17. não permitiria a compilação das classes. uma ação de impressão.

lançar(numero). } Como é possível observar no exemplo acima. 10. caso contrário retorna o resultado do cálculo da classe Pai. . como em C. mas com assinaturas diferentes. 27. Para criar uma extensão de qualquer classe.. 25. A solução deste problema é trabalhar com interfaces. você pode necessitar chamar apenas uma parte do método passando uma instância do argumento do objeto. na maioria dos casos torna-se redundante o uso em todas as variáveis da palavra this. 6. Portanto. 16. O Java não permite a herança múltipla. Ambas implementam a sua maneira de andar. } } public class Filho extends Pai { private int numero.. 9. 23. 3. 15. } } A classe Pai possui um método lançar retornando um inteiro. } private void pedalar() { . Por isso. 14. portanto não é possível estender de duas ou mais classes. ou seja. Por exemplo: 1. 4.numero. 12. 24. . } public void andar() { pedalar(). no caso o método andar (). Por exemplo. A this é utilizada para referenciar variáveis ou métodos da instância atual e o super é utilizada para associar a métodos da classe ? pai ?. de instância. 5. e ela ganhou esta característica por conter métodos abstratos. foram criadas duas classes estendendo Veículo: Carro e Bicicleta. 13. Este é um excelente exemplo de polimorfismo e sobrescrita de métodos que veremos a seguir.. se for zero. 8. Por este motivo. public int lançar(int numero) { if (numero == 0) { return this. 28.7 this e super Estas duas palavras-chave da linguagem são aplicadas a métodos não estáticos. Existem casos em se faz necessário o uso da palavra this. public class Pai { public int lançar(int numero) { return 6 \% numero. 5. 11. 5. 2.8 Sobrescrita e Sobrecarga O Java permite que você tenha métodos com o mesmo nome. // Chave o lançar da classe pai.. (Chamar um classe de forma localizada). 7. retorna um número predefinido como atributo na classe Filho. // retorna o atributo da classe } super. usa-se a palavra-chave extends. A classe filho. 29. a classe Veículo não pode ser instanciada por ser abstrata. O Java associa automaticamente a todas as variáveis e métodos referenciados com a palavra this.. que estende de Pai foi criada para tratar uma divisão por zero que poderá ocorrer na classe Pai. 26.22.

O interpretador determinará qual método deve ser invocado pelo tipo de parâmetro passado.9 Cast ou conversão de Objetos O cast ou a conversão de objetos em java é realizada de duas maneiras. } } O método public int lançar (int numero) existe na classe filha e na pai. . 13. . 9. O inverso deste caso ocorre quando tem-se um objeto ? pai ? e sabe-se que ele é uma instância de determinada classe ? filho ?. 4. . 1... Esta forma é a explícita. 3. pois não necessita de nenhum recurso para ser efetuado. a chamada deverá coincidir com tipos de dados da lista de parâmetros de algum dos métodos. No exemplo. a sobrescrita acontece quando um método existe em uma classe ? pai ? e é reescrito na classe ? filha ? para alterar o comportamento.. 11. // Chama o lançar da classe pai. } } public class Filho extends Pai { public int lançar(int numero) { if (numero == 0) { return this. 12. 3.numero.. o interpretador chamará o método pai... o objeto filho é declarado como uma instância de Pai. toda a classe ? filha ? pode ser associada a uma declaração de class ou interface ? pai ?. 1. Quando você escreve o código para chamar um desses métodos. via a palavra chave super. 6. Esta é a forma implícita. . pois é necessário informar ao compilador. qual a classe que deseja-se fazer o cast. 5. 7. 2. // retorna o atributo da classe } super.lançar (numero).. Pai objeto = new Filho(). } 3. ... } 5. o método pai não seria invocado. de acordo com a conversão de tipos primitivos: implícito e explícito. Os trecho abaixo é válido para uma compilação Java.. como no exemplo abaixo: 1.. 2. public void print( float f ) { . public void print( int i ) { .lançar(numero). 8.. 14. public void print( String s) { . Primeiramente. Caso não houver o comando super. Diferente da sobrecarga. e. o primeiro a ser invocado é o Filho. public class Pai { public int lançar(int numero) { return 6 \% numero. 5.. } 4.isto chama-se sobrecarga. 2. 10.. Como um exemplo abaixo está o código desenvolvido na seção this e super. A assinatura do método deve ser igual na classe ? pai ? e na classe ? filha ?.

8. que foi declarado como Pai mas é possível saber que ele é um Filho. 3. é chamada uma função write usando sobrecarga de métodos. . 4. 7... a instância de Collection é testada para verificar se é um List ou um Set. No exemplo. 5. 5. Basicamente existem três tipos de exceções que são herdadas de Throwable:    Error: Exceção grave que normalmente não pode ser tratado. } . Por exemplo: 1. . 7. Na linha seguinte. 3..9. 5. porém não precisam ser tratadas com throws ou com try catch Em Java pode-se escolher onde se quer tratar a exceção. No exemplo. Pai objeto = new Filho(). usa-se a instrução: 1. public void write(Collection c) { if (c instanceof List) write((List) c). 6 Tratamento de Exceções As exceções em Java são classes que herdam de java. 9. 3. De acordo com o valor dela. 2. 2.1. try { <comandos> } catch (<Exceção>) { <comandos> } catch (<Outra Exceção>) { <comandos> } finally { <comandos> } . 5. .lang.. 8. 6. Podem ser tratadas.. Filho objFilho = (Filho)objeto. mas é criado uma instância de Filho. Se for para tratar no mesmo método que ela ocorreu. o objeto é declarado como sendo instância de Pai. 4. é associado a uma variável declarada como Filho o valor de objeto. como falhas físicas e condições anormais de funcionamento.. RuntimeException: São exceções que podem ser lançadas durante a execução da JVM.1 Operador instanceof O operador instanceof é utilizado para casts explícitos que não se tem conhecimento da classe real do objeto.. 6. Exception: Exceções genéricas que devem ser tratadas utilizando declarações throws ou criar o tratamento para a exceção com try catch. 2.. 4..Throwable.. else write((Set) c). .

. mas se ocorrer aparecerá o erro para o usuário. } 10. 4. . Como a java. ..sql. // throws SQLException 6. try { 4. como seu nome já fala. porém. abreTransação().A instrução try. public void salvaObjeto(Cliente c) { 3.IllegalArgumentException herda de RunTimeException ela não precisa ser tratada.) values (. as vezes. } 1. 9. e assim continua até que a exceção seja simplesmente lançada na tela para o usuário. 1.. Ao ocorrer qualquer erro a JVM passará o controle para um dos catch.getMessage()).1 Instrução throws As classes que herdam de Exception precisam ser mapeadas como possibilidade de erro no código Java.. public void incluiNoBanco(Cliente c) throws SQLException { 2.execute("INSERT INTO CLIENTE (.SQLException é utilizada para tratamento nas exceções de SQL quanto conecta-se a um banco de dados. Se a JVM não encontrar um catch apropriado e se houver uma cláusula finally ela é executada.. 5. o compilador obriga que a função salvaObjeto trate a exceção SQLException.. 6. } catch (SQLException e) { 8. a classe java. commitTransação(). 6. é necessário que essa execução seja tratada no método que chamou este.. Por exemplo. coloca-se a instrução throws na assinatura do método afirmando para o compilador que os métodos que chamarem este devem tratar SQLException obrigatoriamente. incluiNoBanco(c). caso contrário o programa não compila. No exemplo abaixo o parâmetro nome da função setNome necessita estar preenchido e ser diferente de.. o que mais se apropriar para a exceção lançada. public void setNome(String nome) { . Caso isso não aconteça é lançada uma exceção da classe IllegalArgumentException. 2. Quem controla essa obrigatoriedade é o compilador. Neste caso.. Esta classe precisa ser obrigatoriamente testada. Para tratá-la pode-se usar a instrução try no mesmo método.. 3.lang. . banco.)"). } No exemplo.. tenta executar um bloco de comandos.out. " + e. 5.. se não houver um finally o Java repassa a exceção para o método que chamou este.. 7. 1.2 Lançando uma exceção Para lançar uma exceção usa-se a instrução throw.println("Erro ao salvar um cliente. diferente de throws visto na seção anterior. System.

throw new IllegalArgumentException("Nome deve ser preenchido"). if (nome == null || nome. this.2.nome = nome. Se quiser continuar a aprender sobre java.equals("")) { 3. leia os tutoriais para certificação de SCJP do Kuesley nos links abaixo: Tutoriais para Certificação Java . 6. Espero que tenham gostado do tutorial. pois deu um trabalhão para escrever isso tudo! hehe. 4. } 5. } É isso aí.