Introdução à Programação Um enfoque orientado a construção de modelos em programas baseados em objetos Gustavo Motta Departamento de Informática - UFPB 3. Classes, objetos & Cia. em Java ► Java Linguagem de programação concorrente de propósito geral, baseada em classes e orientada a objetos ► Especificamente projetada para ser o mais independente possível de ambientes e hardware e software Portável – tanto o código-fonte, quanto o código objeto, desde que haja compilador e máquina virtual Java disponíveis, respectivamente, no ambiente operacional escolhido ► Linux, Windows, PDAs, etc. ► Robustez – gerência automática de memória, tratamento erros eficaz em tempo de execução ► Sem custos de licenciamento ► Grande variedade de bibliotecas para diversas áreas de aplicação Interfaces gráficas,(C) internet, jogos, bancos de dados, realidade2 2008 Gustavo Motta virtual, telefonia 3. Classes, objetos & Cia. em Java ► Java Processamento de programas Programa fonte Máquina virtual (MV) Java Interpretação Compilação Compilador Java Código objeto (C) Java 2008 Gustavo Motta bytecodes 3 3. Classes, objetos & Cia. em Java ► Java Processamento de programas ► Compilador Java Traduz um programa fonte em Java num código objeto expresso numa linguagem intermediária denominada de Java bytecodes ► Arquivos .Java sempre são os arquivos de programas em código fonte de classes Java ► Arquivos .Class sempre são os arquivos de programas em bytecode Java resultante da compilação de código fonte de classes Java Após uma compilação bem sucedida, o programa objeto resultante pode ser executado sucessivas vezes pelo interpretador da máquina virtual Java ► Máquina Virtual Java Interpreta as instruções expressas em Java bytecodes e as traduz e executa como instruções de máquina do ambiente operacional local real Java bytecodes podem ser executados em qualquer ambiente onde haja uma máquina virtual Java disponível, independente do local onde o código fonte foi compilado A disponibilidade de MV Java em múltiplas plataformas torna os programas4 (C) 2008 Gustavo Motta objeto Java multiplataforma 3. Classes, objetos & Cia. em Java ► Java Processamento de programas ► Plataforma é o ambiente de hardware e software no qual um programa é executado ► Ilustração de um programa Java executado em múltiplas plataformas Programa fonte Java Compilador Interpretador (C) 2008 Gustavo Motta Interpretador Linux Interpretador 5 3. Classes, objetos & Cia. em Java ► Java Processamento de programas – Ciclo básico Editar o código fonte de uma classe Java Corrigir erros Lista de erros em tempo de compilação falhas Compilar sucesso Código objeto (C) 2008 Gustavo Motta Corrigir erros Lista de erros de encontrados em tempo de execução falhas Executa programa na MV Java 6 3. Classes, objetos & Cia. em Java ► Java Plataformas de desenvolvimento e de execução ► Java 2 SDK (Software Development Kit) Compilador Java Editores de programas Java Documentação das classes das bibliotecas básicas ► API (Application Interface) básica da plataforma Java Compilador Javac Programming Depurador Java Outras ferramentas Depurador Java Compilador ► Auxilia a entender o funcionamento passo-a-passo de um programa “on-the-fly” visando detectar erros em tempo de execução ► Java APIs 2 Máquina JRE (Java Runtime Environment) Máquina VirtualVirtual Java – interpretador JavaJava API ► Coleção de class componentes de software prontos para uso GUI – Graphical User Interface, funções matemáticas, comunicação, etc. ► Composta de classes afins agrupadas em pacotes Java (Java Packages) Java JRE Isola a execução do programa objeto Java (Java bytecode) da plataforma de hardware ► Acesse http://java.sun.com/javase/6/download.jsp para baixar o ambiente das plataformas Java SDK (C) 2008 Gustavo Mottae Java JRE 7 3. Classes, objetos & Cia. em Java ► Java Categorias de software em Java ► Classes para representação de modelos Usadas para representar, em linguagem de programação, modelos e abstrações de dados Não podem ser executadas diretamente ► Classes como conjuntos de operações, mas sem estado Atuam como bibliotecas de operações afins que não compartilham um estado, como as funções matemáticas de trigonometria ► Aplicações Java Podem ser executadas diretamente em uma máquina virtual após a compilação ► Applets Java Aplicação Java que pode ser embutida em páginas HTML para serem carregados e executados via Internet Mais informações ► http://java.sun.com/docs/books/tutorial/index.html (C) 2008 Gustavo Motta 8 3. Classes, objetos & Cia. em Java ► Estrutura básica de classes em Java /** * A menor classe em Java não precisa de * variáveis, nem de operações, embora possa ser * compilada. */ class MenorClasseEmJava { /* Corpo da classe, onde se definem variáveis e operações */ } //Fim da declaração da classe ‘MenorClasseEmJava’ (C) 2008 Gustavo Motta 9 3. Classes, objetos & Cia. em Java ► Estrutura básica de classes em Java Uma classe é declarada com a palavra-reservada class seguida do nome da classe e de seu corpo entre chaves class NomeDaClasse { ... } ► Regras abstract char double float instanceof null short this void para nomes de classes Não podem conter espaços Deve ser iniciado por uma letra ou ‘_’ ou ‘$’ Recomenda-se não utilizar acentos Pode conter números Não pode ser uma palavra reservada da linguagem Java abaixo boolean class else for int package static throw volatile break const extends goto interface private strictfp throws while byte continue false if long protected super (C) 2008 Gustavo Motta transient case default final implements native public switch true catch do finally import new return synchronized try 10 3. Classes, objetos & Cia. em Java ► Estrutura básica de classes em Java Caracteres maiúsculos e minúsculos são diferentes Corpo da classe /** ► As palavras Class, ClAss, ClaSs e class são distintas * A menor classe em Java não precisa de Somentenem a última opção pode serembora usada para declarar * variáveis, de operações, possa ser uma classe * compilada. As outras provocam erros em tempo de compilação Nome classe */ Início doda corpo da classe O corpo da classe é delimitado pelos caracteres abre class chaveMenorClasseEmJava { e fecha chave {} ► Todo delimitado chave { e fecha /* Corpotrecho da classe, ondepor se abre definem variáveis e chave } define um bloco de programa operações */ Fim Adocada corpocaractere da classe{ que abre um bloco, deve haver um correspondente } para fechá-lo } //Fim da declaração da classe ‘MenorClasseEmJava’ Não existem regras especiais para o espaçamento vertical ou horizontal, mas o bom estilo de programação (C) 2008 Gustavo Motta 11 facilita o entendimento e a modificação de programas 3. Classes, objetos & Cia. em Java ► Estrutura básica de classes em Java Estilo para nomes de classes ► As palavras que formam o nome devem iniciar com caracteres maiúsculos Exemplos: Lampada, ContaCorrente, RegistroAcademico, NotaFiscalDeSupermercado, Figura Excepcionalmente pode-se usar o caractere ‘_’ ► Exemplos: ► Devem Contas_a_Pagar, Contas_a_Receber preferencialmente ser substantivos ►O nome da classe em Java deve corresponder ao nome do arquivo texto onde é gravada Cada classe em Java deve ser gravada num arquivo separado cujo nome é o nome da(C)classe seguido da extensão .java 2008 Gustavo Motta 12 3. Classes, objetos & Cia. em Java ► Estrutura básica de classes em Java /** Comentários * * * */ A menor classe em Java não precisa de ► Texto escrito pelo para documentar variáveis, nem de programador operações, embora possa sero programa compilada. fonte, mas que é ignorado pelo compilador, ser Início do blocopodendo de comentário do de bloco comentário Numa única linha, iniciado aFim partir duasdebarras inclinadas // e finalizado ao término da class MenorClasseEmJava { linha ► Útil para comentários breves junto ao código que fica à /* Corpo da classe, onde se definem variáveis e esquerda operações */ Bloco de comentário, com múltiplas linhas, delimitado pelo de caracteres /* bloco‘MenorClasseEmJava’ de comentário */ } //Fim conjunto da declaração da classe ► Tudo entre /* e */ é considerado comentário pelo Início do comentário de linha única compilador, sendo, portanto, ignorado (C) 2008 Gustavo Motta 13 3. Classes, objetos & Cia. em Java ► Estrutura básica de classes em Java Exemplo de classe executável diretamente ► Aplicação Java /** * A classe 'AloMundo' implementa uma aplicação * Java que simplesmente imprime na saída * padrão (console) o texto 'Alô Mundo!' */ class AloMundo { Cabeçalho da operação especial main Início do corpo da operação public static void main(String[] args) { System.out.println("Alo Mundo!"); //Mostra o texto entre aspas. } } Início do corpo da operação (C) 2008 Gustavo Motta 14 3. Classes, objetos & Cia. em Java ► Estrutura básica de classes em Java Exemplo de classe executável diretamente ► Aplicação Java Caracteriza-se por possuir a operação especial (método) main ► Sempre que a MV Java executa uma aplicação, ela procura automaticamente a operação especial main para executar ► Caso a operação main não esteja declarada, um erro em tempo de execução é gerado pela MV Java O significado das palavras reservadas public, static e void e do parâmetro args será definido mais adiante (C) 2008 Gustavo Motta 15 3. Classes, objetos & Cia. em Java ► Declaração de operações Operações executam ações sobre o estado de um objeto ► São também denominadas de métodos em Java ► Nomes de operações seguem as mesmas regras de nomes de classes Não podem conter espaços Deve ser iniciado por uma letra ou ‘_’ ou ‘$’ Recomenda-se não utilizar acentos Pode conter números Não pode ser uma palavra reservada da linguagem Java ► Métodos (operações) não podem ser criados dentro de outras operações, nem fora do corpo da classe à que pertencem (C) 2008 Gustavo Motta Não podem existir métodos isolados! 16 3. Classes, objetos & Cia. em Java ► Declaração de operações /** Estilo * A classe 'Lampada' implementa um modelo para • O tipo void indica que a operação não * controlar o acendimento-apagamento de uma lâmpada. ► Nomes de operações refletem ações que são efetuadas sobre */ retorna nenhum valor quando executada Comando de inicialização da variável (opcional) o estado de um objeto, portanto Declaração de variável de instância (ou campo da classe) Tipo da class Lampada { variável declarada Devem ser verbos na voz imperativa ou então no infinitivo /** uma variável de instância (ou campo •ÉEla apenas consulta ou modifica o estado * Variável do tipo lógico que indica com o estado da lâmpada, isto é, ► Recomenda-se que comecem caracteres minúsculos da classe) porque é declarada em algum do objeto! * se ela está acessa ou apagada. Inicialmente ela está apagada. lugar Após a dentro primeira do palavra, seguintes começar com o */ corpoasda classe,devem mas não caractere maiúsculo boolean aceso primeiro = false; Terminador da declaração de variável do corpo uma operação! •dentro Voidda em inglês de significa “vazio”, “nulo” TipoCabeçalho de retorno da operação operação ► Exemplo: apagarRegistroDeNota, incluiNotaAluno, Nome da variável declarada /** Nome da operação etc. * A operação 'apaga' apaga a lâmpada Lista de parâmetros da operação • Logo, o tipo void é um tipo que não * alterando o seu estado para apagado.() indica lista vazia Exemplo */ tem nenhum valor, sendo formado pelo void apaga() { ► Implementação em Java do modelo de Lampada visto em sala conjunto vazio aceso = false; //Apaga a lâmpada de aula Corpo da operação } (C) 2008 Gustavo Motta 17 ... Declaração de operação 3. Classes, objetos & Cia. em Java ... /** • Neste caso, a operação deve ter em seu corpo a palavra► * A operação 'acende' acende a lâmpada chave return de um valor ou variável com * alterando o seu estadoseguida para aceso. */ mesmo tipo que o tipo de retorno da operação void acende() { aceso = true; //Acende a lâmpada • No caso específico da operação ‘estaApagada’, o tipo do } Declaração de operações valor de retorno é boolean Tipo de retorno da operação de void /** • A execução do return resulta no encerramento da * A operação ‘estaApagada’ retorna o valor verdadeiro (true) * se a lâmpada estiver apagada, isto é, execução da operação * o valor da variável ‘aceso’ for falso (false). Caso contrário, * a operação retorna falso (false) porque a lâmpada está acesa. • Operações com tipo de retorno void não precisam de um */ return, mas{ podem usá-lo para encerrar arbitrariamente boolean estaApagada() if (acesoa == false) a{sua execução execução return true; • No caso, o return não precisa ser seguido de valor ou } variável, poisanão retornaestá nada,acesa, apenasisto encerra operação else { // caso em que lâmpada é, a‘aceso == true’ return false; } (C) 2008 Gustavo Motta 18 } } //Fim da classe lâmpada 3. Classes, objetos & Cia. em Java ► Referências e criação de objetos Referência ► Variável cujo conteúdo (valor) é um endereço de uma posição de memória onde reside um objeto, ou então o valor nulo – null em Java Lampada lamp1; declarada sem inicialização, o seu valor default é nulo, isto é, não está apontando – referenciando – nenhum objeto ► Quando ►A declaração de referência anterior é equivalente a seguinte declaração Lampada lamp1 = null; ► Qualquer tentativa de uso de uma referência apontando para null resulta num erro Antes, deve-se inicializar a referência com o endereço de um (C) 2008 Gustavo Motta 19 objeto existente 3. Classes, objetos & Cia. em Java quantoem lamp2 estão apontando • •OuAgora, seja, otanto valorlamp1, armazenado lamp1 corresponde ao ► Referências edecriação de objetos • endereço A (referenciando) execução da operação acende() provoca erro 2 de parado um mesmo objeto, na um posição memória objeto recém criado porque não há manipulamos objeto referenciado lamp1 de fato, memória • Agora, quando lamp1,por estamos, Criação de objetos • •manipulando Antes, é preciso criar um objeto para a lamp1 O objeto 2 também pode ser manipulado oposição objeto armazenado na atribuí-lo posição de memórianew ► Objetos sãona criados (instanciados) com o uso do operador referência lamp2 por lamp1 2, através isto é, oda objeto referenciado new tem a capacidade de criar um objeto com base numa classe existente Memória Objetos podem ser criados na própria classe que o define, 2 1 lamp1 null Lampada lamp1 = null; por exemplo, na operação main, caso exista lamp1.acende(); lamp1 = new Lampada(); 2 aceso false true lamp1.acende(); 3 lamp2 lamp2 42 4 aceso false true Lampada lamp2 = lamp1; lamp2.apaga(); lamp2 = new Lampada(); lamp2.acende(); (C) 2008 Gustavo Motta 20 3. Classes, objetos & Cia. em Java /** ... * A lamp1.acende(); classe 'CriadorDeLampadas' //Acende criaa objetos lâmpada que 1 * são System.out.print("lamp1 instâncias da classe 'Lampada' esta apagada? para "); * demonstrar System.out.println(lamp1.estaApagada()); como manipulá-los e também ►para * System.out.println(); testar a implementação da classe * 'Lampada' lamp1.apaga(); Uma vez declarada uma aclasse, */ //Apaga lâmpada é1 recomendável definir System.out.print("lamp1 estatestar apagada? uma outra classe para sua"); funcionalidade classSystem.out.println(lamp1.estaApagada()); CriadorDeLampadas { ► Por exemplo, para classe Lampada, pode-se definir a classe System.out.println(); CriadorDeLampadas public static void main(String[] args) { lamp2.apaga(); //Apaga a lâmpada 2 Lampada System.out.print("lamp2 lamp1 = new Lampada(), esta apagada? "); System.out.println(lamp2.estaApagada()); lamp2 = new Lampada(); System.out.println(); System.out.println(); } lamp2.acende(); //Acende a lâmpada 2 } //Fim System.out.print("lamp2 da classe 'CriadorDeLampadas‘ esta apagada? "); System.out.println(lamp2.estaApagada()); System.out.println(); Interagindo com objetos System.out.print("lamp1 esta apagada? "); System.out.println(lamp1.estaApagada()); (C) 2008 Gustavo Motta System.out.println(); ... 21 3. Classes, objetos & Cia. em Java ► Modificadores de acesso Permitem que se controle a visibilidade externa das variáveis e operações de um objeto Tipos ► public Uma variável ou operação declarada como pública pode ser acessada no ambiente externo à classe onde está declarada ► public int saldo = 0; ► public int retornaSaldo(); ► private Uma variável ou operação declarada como privada não pode ser acessada no ambiente externo à classe onde está declarada, ou seja, só pode ser acessada dentro da própria classe ► private int saldo = 0; ► private int(C) retornaSaldo(); 2008 Gustavo Motta 22 3. Classes, objetos & Cia. em Java ► Modificadores Tipos de acesso ► protected Uma variável ou operação declarada como protegida pode ser acessada no ambiente externo à classe onde está declarada, desde que o acesso seja feito a partir de uma classe declarada no mesmo diretório que esta ou quando herdada por outra classe ► protected int saldo = 0; ► protected int retornaSaldo(); ► default (quando omitido, isto é, não especificado) Uma variável ou operação declarada sem modificador de acesso (ou seja, o modificador de acesso default) pode ser acessada no ambiente externo à classe onde está declarada, desde que o acesso seja feito a partir de uma classe declarada no mesmo diretório que esta ► int saldo = 0; ► int retornaSaldo(); (C) 2008 Gustavo Motta 23 3. Classes, objetos & Cia. em Java ► Modificadores de acesso Exemplo ► Considere o seguinte problema: um cartão de crédito simplificado Representar um cartão de crédito que mantém informações sobre o saldo do cartão, seu limite máximo e o total de pontos de bônus, que poderão ser trocados posteriormente por prêmios No cartão poderão ser realizadas operações de compra (aumento do saldo) e de pagamento do cartão (dedução no saldo) O limite do cartão é fixado em 10.000 A cada compra realizada, o valor da compra é adicionado ao saldo, desde que não ultrapasse o limite do cartão (C) 2008 Gustavo Motta 24 3. Classes, objetos & Cia. em Java ► Modificadores de acesso Exemplo ► Considere o seguinte problema: um cartão de crédito simplificado Cada real de compras vale um ponto de bônus, sendo portanto, o valor comprado adicionado ao total de pontos de bônus A cada pagamento realizado, o valor do pagamento é deduzido do saldo. Cada real pago vale um ponto de bônus, sendo portanto, o valor pago adicionado ao total de pontos de bônus O total de bônus é limitado ao limite de crédito, ou seja, 10.000 pontos (C) 2008 Gustavo Motta 25 3. Classes, objetos & Cia. em Java ► Modificadores de acesso Exemplo ► Considere o seguinte problema: um cartão de crédito simplificado Deve-se ter operações para retornar o saldo do cartão e o total de bônus Os valores do saldo e o total de pontos de bônus somente podem ser alterados através das operações para compra e pagamento ► Nenhum usuário de objetos da classe “CartaoDeCredito” pode alterar diretamente o saldo ou o total de pontos do bônus (C) 2008 Gustavo Motta 26 3. Classes, objetos & Cia. em Java ► Modificadores de acesso Exemplo ► Cartão de crédito simplificado – propriedade essenciais Nome da classe: CartaoDeCredito Estado ► Três variáveis do tipo inteiro para representar o saldo, o limite e o total de pontos de bônus do cartão private int saldo = 0; private int limite = 10000; private int bonus = 0; ► São privadas porque somente podem ser acessadas/modificadas dentro da classe, através de suas operações, que respeitam as regras de limite de crédito e de pontuação de bônus ► Caso contrário, alguém, que não a classe, poderia modificar diretamente o(C)valor do saldo, do limite ou do bônus para 2008 Gustavo Motta 27 cometer uma fraude, por exemplo. 3. Classes, objetos & Cia. em Java ► Modificadores de acesso Exemplo ► Cartão de crédito simplificado – propriedade essenciais Comportamento ► Determinado pela execução das seguintes operações – apenas os cabeçalhos são mostrados public void compra(int valor) public void paga(int valor) public int retornaSaldo() public int retornaBonus() ►e pela operação auxiliar abaixo private void creditaBonus(int valor) (C) 2008 Gustavo Motta 28 3. Classes, objetos & Cia. em Java ► Modificadores de acesso Exemplo ► Cartão de crédito simplificado As operações que foram declaradas como públicas respeitam as regras estipuladas para o cartão de crédito. Mais do que isso, devem ser visíveis, isto é, poder ser acessada externamente à classe para que possamos dispor de sua funcionalidade essencial A operação creditaBonus foi definida como privada porque é utilizada internamente na classe, para auxiliar na implementação das operações compra e paga ► Caso fosse definida como pública, seria possível alterar o valor do total de bonus sem precisar efetuar uma compra ou um pagamento, violando, portanto, as regras especificadas para o cartão de crédito (C) 2008 Gustavo Motta 29 3. Classes, objetos & Cia. em Java ► Modificadores de acesso • Tal tentativa de acesso provoca um erro em tempo de Exemplo compilação porque a variável bonus foi declarada como ►privada Cartão de crédito simplificado (private), só podendo ser acessada, portanto, dentro da classeuma ondeoutra foi declarada, ou seja, aque classe Considere classe qualquer usa a classe CartaoDeCredito CartaoDeCredito • O mesmo vale para as outras variáveis ou operaçõesMemória como CartaoDeCredito cartaovariável = newprivadas CartaoDeCredito(); •declaradas Toda ou operação de uma •Recomendação saldo classe que não precise ser limite 1 pública cartao.paga(400); deve ser declarada como privada bonus cartao.compra(150); • O objetivo é evitar a violação das cartao.bonus = 20000 cartao.compra(100); cartao.compra(500); 100 600 200 350 0 10000 1000 1150 100 600 0 2 regras especificadas para a classe 3 4 (C) 2008 Gustavo Motta 30