1 / 30

Introdução à Programação

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

Download Presentation

Introdução à Programação

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introdução à Programação Um enfoque orientado a construção de modelos em programas baseados em objetos Gustavo Motta Departamento de Informática - UFPB

  2. 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, internet, jogos, bancos de dados, realidade virtual, telefonia (C) 2008 Gustavo Motta

  3. Programa fonte Máquina virtual (MV) Java Interpretação bytecodes Código de máquina Compilação Compilador Java Código objeto Java bytecodes 3. Classes, objetos & Cia. em Java • Java • Processamento de programas (C) 2008 Gustavo Motta

  4. 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 programas objeto Java multiplataforma (C) 2008 Gustavo Motta

  5. Programa fonte Java Compilador Interpretador Interpretador Interpretador Linux 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 (C) 2008 Gustavo Motta

  6. Editar o código fonte de uma classe Java Corrigir erros Corrigir erros Lista de erros de encontrados em tempo deexecução Lista de erros em tempo de compilação falhas Compilar sucesso falhas Executa programa na MV Java Código objeto 3. Classes, objetos & Cia. em Java • Java • Processamento de programas – Ciclo básico (C) 2008 Gustavo Motta

  7. Editores de programas Java Compilador Javac Depurador Java Outras ferramentas Compilador “on-the-fly” APIs MáquinaVirtualJava class Java JRE 3. Classes, objetos & Cia. em Java • Java • Plataformas de desenvolvimento e de execução • Java 2 SDK (Software Development Kit) • Compilador Java • Documentação das classes das bibliotecas básicas • API (Application Programming Interface) básica da plataforma Java • Depurador Java • Auxilia a entender o funcionamento passo-a-passo de um programa visando detectar erros em tempo de execução • Java 2 JRE (Java Runtime Environment) • Máquina Virtual Java – interpretador • Java API • Coleção de 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) • 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 e Java JRE (C) 2008 Gustavo Motta

  8. 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

  9. 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

  10. 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 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 abstract boolean break byte case catchchar class const continue default dodouble else extends false final finallyfloat for goto if implements importinstanceof int interface long native newnull package private protected public returnshort static strictfp super switch synchronizedthis throw throws transient true tryvoid volatile while (C) 2008 Gustavo Motta

  11. /** * 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’ Nome da classe Início do corpo da classe Corpo da classe Fim do corpo da classe 3. Classes, objetos & Cia. em Java • Estrutura básica de classes em Java • Caracteres maiúsculos e minúsculos são diferentes • As palavras Class, ClAss, ClaSs e class são distintas • Somente a última opção pode ser usada para declarar uma classe • As outras provocam erros em tempo de compilação • O corpo da classe é delimitado pelos caracteres abre chave { e fecha chave } • Todo trecho delimitado por abre chave { e fecha chave } define um bloco de programa • A cada caractere { que abre um bloco, deve haver um correspondente } para fechá-lo • Não existem regras especiais para o espaçamento vertical ou horizontal, mas o bom estilo de programação facilita o entendimento e a modificação de programas (C) 2008 Gustavo Motta

  12. 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: Contas_a_Pagar, Contas_a_Receber • Devem 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 classe seguido da extensão .java (C) 2008 Gustavo Motta

  13. Início do bloco de comentário Fim do bloco de comentário Início do comentário de linha única 3. Classes, objetos & Cia. em Java • Estrutura básica de classes em Java • Comentários • Texto escrito pelo programador para documentar o programa fonte, mas que é ignorado pelo compilador, podendo ser • Numa única linha, iniciado a partir de duas barras inclinadas // e finalizado ao término da linha • Útil para comentários breves junto ao código que fica à esquerda • Bloco de comentário, com múltiplas linhas, delimitado pelo conjunto de caracteres /*bloco de comentário*/ • Tudo entre /* e */ é considerado comentário pelo compilador, sendo, portanto, ignorado /** * 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

  14. Cabeçalho da operação especial main Início do corpo da operação Início do corpo da operação 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 { publicstaticvoid main(String[] args) { System.out.println("Alo Mundo!"); //Mostra o texto entreaspas. } } (C) 2008 Gustavo Motta

  15. 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

  16. 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 • Não podem existir métodos isolados! (C) 2008 Gustavo Motta

  17. Comando de inicialização da variável (opcional) Declaração de variável de instância (ou campo da classe) Tipo da variável declarada Terminador da declaração de variável Tipo de retorno da operação Cabeçalho da operação Nome da variável declarada Nome da operação Lista de parâmetros da operação() indica lista vazia Corpo da operação Declaração de operação 3. Classes, objetos & Cia. em Java • Declaração de operações • Estilo • Nomes de operações refletem ações que são efetuadas sobre o estado de um objeto, portanto • Devem ser verbos na voz imperativa ou então no infinitivo • Recomenda-se que comecem com caracteres minúsculos • Após a primeira palavra, as seguintes devem começar com o primeiro caractere maiúsculo • Exemplo: apagarRegistroDeNota, incluiNotaAluno, etc. • Exemplo • Implementação em Java do modelo de Lampada visto em sala de aula /** * A classe 'Lampada' implementa um modelo para * controlar o acendimento-apagamento de uma lâmpada. */ class Lampada { /** * Variável do tipo lógico que indica o estado da lâmpada, isto é, * se ela está acessa ou apagada. Inicialmente ela está apagada. */ boolean aceso = false; /** * A operação 'apaga' apaga a lâmpada * alterando o seu estado para apagado. */ void apaga() { aceso = false; //Apaga a lâmpada } ... • O tipo void indica que a operação nãoretorna nenhum valor quando executada • Ela apenas consulta ou modifica o estado do objeto! • Void em inglês significa “vazio”, “nulo” • Logo, o tipo void é um tipo que não tem nenhum valor, sendo formado peloconjunto vazio É uma variável de instância (ou campoda classe) porque é declarada em algum lugar dentro do corpo da classe, mas nãodentro do corpo de uma operação! (C) 2008 Gustavo Motta

  18. Tipo de retorno da operação  de void 3. Classes, objetos & Cia. em Java ... /** * A operação 'acende' acende a lâmpada * alterando o seu estado para aceso. */ void acende() { aceso = true; //Acende a lâmpada } /** * A operação ‘estaApagada’ retorna o valor verdadeiro (true) * se a lâmpada estiver apagada, isto é, * o valor da variável ‘aceso’ for falso (false). Caso contrário, * a operação retorna falso (false) porque a lâmpada está acesa. */ booleanestaApagada() {if (aceso == false) {returntrue; } else { // caso em que a lâmpada está acesa, isto é, ‘aceso == true’ returnfalse; } }} //Fim da classe lâmpada • Declaração de operações • Neste caso, a operação deve ter em seu corpo a palavra-chave return seguida de um valor ou variável com mesmo tipo que o tipo de retorno da operação • No caso específico da operação ‘estaApagada’, o tipo do valor de retorno é boolean • A execução do return resulta no encerramento da execução da operação • Operações com tipo de retorno void não precisam de um return, mas podem usá-lo para encerrar arbitrariamente a execução a sua execução • No caso, o return não precisa ser seguido de valor ou variável, pois não retorna nada, apenas encerra a operação (C) 2008 Gustavo Motta

  19. 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 • Quando declarada sem inicialização, o seu valor default é nulo, isto é, não está apontando – referenciando – nenhum objeto • A declaração de referência anterior é equivalente a seguinte declaração • 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 objeto existente Lampada lamp1; Lampada lamp1 = null; (C) 2008 Gustavo Motta

  20. Memória 1 aceso aceso aceso lamp2 lamp1 aceso lamp1 aceso lamp2 false true 2 false null true false 4 2 2 3 4 3. Classes, objetos & Cia. em Java • Agora, tanto lamp1, quanto lamp2 estão apontando (referenciando) para um mesmo objeto, na posição 2 de memória • O objeto na posição 2 também pode ser manipulado através da referência lamp2 • Ou seja, o valor armazenado em lamp1 corresponde ao endereço de memória do objeto recém criado • Agora, quando manipulamos lamp1, estamos, de fato, manipulando o objeto armazenado na posição de memória 2, isto é, o objeto referenciado por lamp1 • Referências e criação de objetos • Criação de objetos • Objetos são criados (instanciados) com o uso do operador new • new tem a capacidade de criar um objeto com base numa classe existente • Objetos podem ser criados na própria classe que o define, por exemplo, na operação main, caso exista • A execução da operação acende() provoca um erro porque não há objeto referenciado por lamp1 • Antes, é preciso criar um objeto para atribuí-lo a lamp1  Lampada lamp1 = null; lamp1.acende(); lamp1 = new Lampada(); lamp1.acende(); Lampada lamp2 = lamp1; lamp2.apaga(); lamp2 = new Lampada(); lamp2.acende(); (C) 2008 Gustavo Motta

  21. 3. Classes, objetos & Cia. em Java /** * A classe 'CriadorDeLampadas' cria objetos que * são instâncias da classe 'Lampada' para * demonstrar como manipulá-los e também * para testar a implementação da classe * 'Lampada' */ class CriadorDeLampadas { public static void main(String[] args) { Lampada lamp1 = new Lampada(), lamp2 = new Lampada(); System.out.println(); lamp2.acende(); //Acende a lâmpada 2 System.out.print("lamp2 esta apagada? "); System.out.println(lamp2.estaApagada()); System.out.println(); System.out.print("lamp1 esta apagada? "); System.out.println(lamp1.estaApagada()); System.out.println(); ... ... lamp1.acende(); //Acende a lâmpada 1 System.out.print("lamp1 esta apagada? "); System.out.println(lamp1.estaApagada()); System.out.println(); lamp1.apaga(); //Apaga a lâmpada 1 System.out.print("lamp1 esta apagada? "); System.out.println(lamp1.estaApagada()); System.out.println(); lamp2.apaga(); //Apaga a lâmpada 2 System.out.print("lamp2 esta apagada? "); System.out.println(lamp2.estaApagada()); System.out.println(); } } //Fim da classe 'CriadorDeLampadas‘ • Interagindo com objetos • Uma vez declarada uma classe, é recomendável definir uma outra classe para testar sua funcionalidade • Por exemplo, para classe Lampada, pode-se definir a classe CriadorDeLampadas (C) 2008 Gustavo Motta

  22. 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 retornaSaldo(); (C) 2008 Gustavo Motta

  23. 3. Classes, objetos & Cia. em Java • Modificadores de acesso • Tipos • 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

  24. 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

  25. 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

  26. 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

  27. 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 valor do saldo, do limite ou do bônus para cometer uma fraude, por exemplo. (C) 2008 Gustavo Motta

  28. 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

  29. 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

  30. 3. Classes, objetos & Cia. em Java 200 600 350 100 0 saldo saldo saldo saldo saldo Memória 10000 10000 10000 10000 10000 limite limite limite limite limite 100 1000 600 1150 0 bonus bonus bonus bonus bonus 1 2 3 4 • Modificadores de acesso • Exemplo • Cartão de crédito simplificado • Considere uma outra classe qualquer que usa a classe CartaoDeCredito • Tal tentativa de acesso provoca um erro em tempo de compilação porque a variável bonus foi declarada como privada (private), só podendo ser acessada, portanto, dentro da classe onde foi declarada, ou seja, a classe CartaoDeCredito • O mesmo vale para as outras variáveis ou operações declaradas como privadas • Recomendação • Toda variável ou operação de uma classe que não precise ser pública deve ser declarada como privada • O objetivo é evitar a violação das regras especificadas para a classe CartaoDeCredito cartao = new CartaoDeCredito(); cartao.compra(100); cartao.compra(500); cartao.paga(400);  cartao.compra(150); cartao.bonus = 20000 (C) 2008 Gustavo Motta

More Related