Prévia do material em texto
PROGRAMAÇÃO CODING (MOBILE) Unidade 2 Programação Java CEO DAVID LIRA STEPHEN BARROS Diretora Editorial ALESSANDRA FERREIRA Gerente Editorial LAURA KRISTINA FRANCO DOS SANTOS Projeto Gráfico TIAGO DA ROCHA Autoria LUIZ FERNANDO CORCINI 4 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 A U TO RI A Luiz Fernando Corcini Olá. Sou graduado em Engenharia Eletrônica, com especialização em Administração de TI; mestre em Educação e Novas Tecnologias; e doutorando em Sistemas Tutores Inteligentes. Tenho experiência técnico-profissional na área de desenvolvimento e gestão da produção de softwares nas áreas de Gerenciamento de Processos Empresariais e uso os recursos disponibilizados pela web há mais de 20 anos. Sou professor universitário há mais de 15 anos e já publiquei vários livros técnicos sobre assuntos voltados a área de informática. Sou apaixonado pelo que faço e adoro transmitir minha experiência de vida àqueles que estão iniciando em suas profissões. Por isso, fui convidado pela Editora Telesapiens a integrar seu elenco de autores independentes. Estou muito feliz em poder ajudar você nesta fase de muito estudo e trabalho. Conte comigo! 5PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 ÍC O N ESEsses ícones aparecerão em sua trilha de aprendizagem nos seguintes casos: OBJETIVO No início do desenvolvimento de uma nova competência. DEFINIÇÃO Caso haja a necessidade de apresentar um novo conceito. NOTA Quando são necessárias observações ou complementações. IMPORTANTE Se as observações escritas tiverem que ser priorizadas. EXPLICANDO MELHOR Se algo precisar ser melhor explicado ou detalhado. VOCÊ SABIA? Se existirem curiosidades e indagações lúdicas sobre o tema em estudo. SAIBA MAIS Existência de textos, referências bibliográficas e links para aprofundar seu conhecimento. ACESSE Se for preciso acessar sites para fazer downloads, assistir vídeos, ler textos ou ouvir podcasts. REFLITA Se houver a necessidade de chamar a atenção sobre algo a ser refletido ou discutido. RESUMINDO Quando for preciso fazer um resumo cumulativo das últimas abordagens. ATIVIDADES Quando alguma atividade de autoaprendizagem for aplicada. TESTANDO Quando uma competência é concluída e questões são explicadas. 6 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 SU M Á RI O Java básico ............................................................................... 10 O primeiro projeto Java ....................................................................................10 A primeira classe Java .........................................................................14 Estrutura básica da linguagem Java................................................................20 Estrutura de um programa Java .......................................................21 Identificadores .....................................................................................23 Palavras reservadas ............................................................................25 Variáveis ................................................................................................25 Tipos de dados simples .....................................................................27 Tipos de dados compostos ...............................................................30 Conversão de tipos .............................................................................31 Escopo de variável ..............................................................................34 Modificadores de acesso ...................................................................35 Operadores ..........................................................................................41 Estrutura de controle de seleção ........................................... 48 Comando if ..........................................................................................................48 Comando if-else ..................................................................................................49 Condições mais elaboradas .............................................................................50 O comando switch ..............................................................................................51 Estrutura de controle de repetição ................................................................53 Controlando loops .............................................................................................56 7PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Classes em Java........................................................................ 60 Introdução ...........................................................................................................60 Métodos ...............................................................................................................60 Classes .................................................................................................................64 Polimorfismo, interface e classes abstratas......................... 75 Polimorfismo .......................................................................................................75 Interface ..............................................................................................................81 Declarando uma interface .................................................................81 Classes abstratas ...............................................................................................83 8 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 A PR ES EN TA ÇÃ O Seja bem-vindo (a) à Unidade 2 da disciplina de Programação Coding Mobile. Nesta unidade, abordaremos os conceitos fundamentais de programação Java necessários para que você possa desenvolver aplicativos nesta linguagem. Vale ressaltar que, apesar de o foco da disciplina ser a programação para dispositivos móveis, os conceitos apresentados serão úteis mesmo para programação Java em qualquer ambiente. O conteúdo está dividido em quatro módulos. No primeiro, apresentamos a sintaxe das instruções básicas do Java para a manipulação de variáveis e outros recursos elementares da linguagem. No segundo, estudaremos as estruturas de controle e repetição de fluxo. No terceiro, aprenderemos como trabalhar com classes em Java. Finalmente, no quarto, abordaremos conceitos fundamentais da programação orientada a objetos, como polimorfismo, classes abstratas e interfaces. É claro que há muito mais a aprender, mas o aprofundamento de cada um desses conhecimentos pode ser feito acessando os links indicados durante o texto, no tópico “Saiba Mais”. Vamos começar? Excelente estudo para você! 9PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 O BJ ET IV O S Olá. Seja muito bem-vindo à Unidade 2. Nosso objetivo é auxiliar você no desenvolvimento das seguintes competências profissionais até o término desta etapa de estudos: 1. Reconhecer a sintaxe das instruções básicas do Java para manipulação de variáveis e outros recursos elementares da linguagem. 2. Explicar as estruturas de controle e repetição de fluxo de código na linguagem Java. 3. Aplicar os conceitos de programação orientada a objetos na linguagem Java, com foco nas classes de objetos. 4. Identificar e aplicar os conceitos de polimorfismo, classes abstratas e interfaces na linguagem Java. Vamos, então, rumo ao conhecimento. Bons estudos! 10 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Java básico OBJETIVO Ao término deste capítulo, você será capaz de entender como funciona a sintaxe básica da linguagem de Programação Java. E então? Motivado para desenvolver esta competência? Então vamos lá. Avante! IMPORTANTE Salientamos que os conceitos apresentados podem sofrer algumas modificações devido a atualizações. Apesar de o foco desta disciplina ser programação para aplicativos móveis, o conteúdo apresentado nesta unidade serve como base em programaçãoVerifique os links e livros indicados nas referências bibliográficas, com destaque para os livros de Deitel (2003) e Mattos (2007). 86 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 RESUMINDO E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir tudo o que vimos. Você deve ter aprendido sobre o polimorfismo, a interface e as classes abstratas, bem como aprendeu como declarar uma interface. 87PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 RE FE RÊ N CI A S AMAR, R. Android. Hardware.com.br, 2009. Disponível em: www. hardware.com.br/livros/smartphones/android.html. Acesso em: 08 dez. 2023. CLARO, D.; SOBRAL, J. Programação em JAVA. Florianópolis: Copyleft Pearson Education, 2008. Disponível em: http://www. faeterj-rio.edu.br/downloads/bbv/0031.pdf. Acesso em: 08 dez. 2023. CORDEIRO, F. Android Aprendiz: o guia definitivo para tornar-se um desenvolvedor android profissional e independente. 5. ed. [S. l.]: AndroidPro, 2017. Disponível em: https://www.studocu.com/pt-br/ document/universidade-federal-do-rio-grande-do-sul/introducao- a-programacao/ebook-android-aprendiz-novo/5540556. Acesso em: 08 dez. 2023. DALL’OGLIO, P. PHP: programando com orientação a objetos. São Paulo: Novatec Editora, 2016. DEITEL, H.; DEITEI, P. Java: como programar. Porto Alegre: Bookman, 2003. ESCOPO. In: Dicionário Priberam da Língua Portuguesa. Lisboa: Priberam Informática, S.A., 2023. Disponível em: https:// dicionario.priberam.org/pesquisar/escopo#:~:text=Limite%20 ou%20abrangência%20de%20uma,da%20campanha).%20 ...&text=alvo%20%7C%20n.%20m.%20%7C%20adj.,%7C%20adj. Acesso em: 23 jan. 2024. GOSLING, J.; McGILTON, H. The Java language environment. Mountain View, California, EUA: Sun Microsystems, Inc, 1995. MATTOS, E. Programação de softwares em Java. São Paulo: Digerati Books, 2007. ORACLE. About the Java technology. Oracle, 2018. Disponível em: https://docs.oracle.com/javase/tutorial/getStarted/intro/ definition.html. Acesso em: 08 dez. 2023. Java básico O primeiro projeto Java A primeira classe Java Estrutura básica da linguagem Java Estrutura de um programa Java Identificadores Palavras reservadas Variáveis Tipos de dados simples Tipos de dados compostos Conversão de tipos Escopo de variável Modificadores de acesso Operadores Estrutura de controle de seleção Comando if Comando if-else Condições mais elaboradas O comando switch Estrutura de controle de repetição Controlando loops Classes em Java Introdução Métodos Classes Polimorfismo, interface e classes abstratas Polimorfismo Interface Declarando uma interface Classes abstratasem linguagem Java de maneira geral. Nossa estratégia aqui será criar pequenos projetos e explorar e aprofundar os conhecimentos básicos da sintaxe da linguagem um pouco em cada um deles. Vamos, então, para o nosso primeiro projeto! O primeiro projeto Java Para este primeiro projeto, abra o Eclipse (IDE Integrated Development Environment), ou seja, “Ambiente de Desenvolvimento Integrado”, e crie o seguinte workspace: c:\java\Projeto_01, como mostrado na imagem a seguir. 11PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.1 – Definição do workspace do primeiro projeto Java Fonte: Elaborada pela autoria (2023). IMPORTANTE O espaço de trabalho (workspace) é o local (diretório) em que serão gravados todos os arquivos necessários para que seu projeto funcione adequadamente. Logo que você clicar no botão Launch, o espaço de trabalho será criado na pasta “c:\java\Projeto_01”, e o IDE Eclipse será aberto, exatamente como mostrado na imagem a seguir. Repare que do lado esquerdo do IDE está o Package Explorer (marcado com o número 1), cuja função é apresentar lista de classes, bibliotecas e demais arquivos (resources) que serão necessários no seu projeto. O centro da IDE (marcado com o número 2) é o espaço em que o código em linguagem Java será digitado. 12 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.2 – IDE Eclipse Fonte: Elaborada pela autoria (2023). Em seguida, clique em menu File -> New -> Project, e o assistente vai criar um novo projeto que será apresentado, como mostra a imagem a seguir. Imagem 2.3 – Criando projeto Java Fonte: Elaborada pela autoria (2023). 13PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Selecione a opção Java Project, como mostrado na imagem anterior e clique Next. Uma nova tela será apresentada. Imagem 2.4 – Nomeando o projeto Fonte: Elaborada pela autoria (2023). Em sequência, digite um nome para o seu projeto – “Exe1” – e clique em Finish. A parte da IDE relativa ao Package Explorer deve ficar como mostra a imagem a seguir. Imagem 2.5 – Package Explorer no projeto Exe1 Fonte: Elaborada pela autoria (2023). 14 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Note que seu projeto Exe1 foi criado e tem duas subpastas: • A pasta “src” é o local onde serão incluídas as classes desenvolvidas para o seu projeto. O termo “src” é a abreviação da palavra source, que significa “fonte”, isto é, dentro dessa pasta serão gravadas as classes (código- fonte) do seu projeto. • Dentro da pasta “JRE System Library” estão as bibliotecas de classes que, como descrito anteriormente, permitem que sua máquina rode o código Java no sistema operacional escolhido. Como você pode reparar, a pasta “src” está vazia, ou seja, seu projeto também o está. Nosso próximo passo é criar a primeira classe desse projeto. A primeira classe Java Agora siga os seguintes passos: • Clique no menu File -> New -> Package, para criar o primeiro pacote (pasta) onde vamos inserir a primeira classe no seu projeto. Digite: “exercicio1” para o nome do pacote, como mostra a imagem a seguir: 15PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.6 – Criando o primeiro pacote para o projeto Fonte: Elaborada pela autoria (2023). Clique em Finish, e seu projeto deve ficar como o mostrado na sequência: Imagem 2.7 – Novo pacote criado Fonte: Elaborada pela autoria (2023). 16 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Dentro do pacote “exercicio1”, ficarão as classes que iremos criar. Então, vamos criar nossa primeira classe, finalmente. • Clique no menu File -> New -> Class, para criar a primeira classe do nosso projeto, como mostra a imagem a seguir. Imagem 2.8 – Criando a primeira classe Fonte: Elaborada pela autoria (2023). 17PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Note que o Pacote (Package) já está definido como “exercicio1”, pois é dentro dele que a classe será criada. Agora siga os seguintes passos: • • Digite o nome para a classe: “Principal”; • • Marque a opção: “public static void main(String[] args), como mostrado na imagem anterior; • • Deixe o restante como está e clique Finish. A classe “Principal” será criada dentro do pacote “exercicio1” e o Eclipse deve mostrar algo parecido com a imagem a seguir: Imagem 2.9 – Primeira classe criada Fonte: Elaborada pela autoria (2023). Observe na imagem anterior (imagem 2.9) o Package Explorer, no qual podemos visualizar a classe “Principal.java” dentro do pacote “exercicio1”, que está localizado na pasta “src” do projeto “Exe1”, conforme definido anteriormente. No centro, veremos o conteúdo da classe “Principal.java”, que será utilizada para inserir o código necessário para o nosso primeiro projeto em Java. A imagem a seguir fornece detalhes sobre o conteúdo da classe “Principal.java”, para uma análise mais aprofundada. 18 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.10 – Classe “Principal.Java” Fonte: Elaborada pela autoria (2023). A linha 1 define que a classe “Principal.java” está dentro do pacote “exercicio1”. A linha 3 inicia a declaração da classe “Principal.java”. O termo public define que a classe “Principal.java” é pública. Classes, atributos e métodos podem ser declarados como public, protected ou private. Veremos mais detalhes sobre esses modificadores de acesso nas próximas páginas deste material. IMPORTANTE Uma classe deve sempre iniciar com abre chaves “{” e finalizar com fecha chaves “}”. Mais detalhes sobre as classes em Java serão vistos nas próximas páginas deste material. Nas linhas 5 a 9, um bloco de comentário é apresentado. Sempre que for necessário fazer um comentário em bloco sobre o código, deve-se utilizar o comando “/*” para iniciar o bloco de comentário e “*/” para finalizá-lo. Digite seu nome e a data de hoje dentro do bloco de comentário. É boa prática descrever qual a função da classe que está a ser implementada. Alguns programadores iniciantes concluem que inserir comentários dentro do código Java é perda de tempo, porém programadores 19PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 profissionais utilizam esse recurso, que facilita a leitura do código, em caso de alteração ou atualização, principalmente quando se precisa alterar ou corrigir algo que foi feito por outro programador. Nas linhas 10 a 13 está declarado o método main, especial da classe. Ele sempre será o primeiro método a ser executado num programa Java, isto é, serve como ponto de partida para a execução do projeto. Da mesma forma que as classes, cada método declarado deve sempre iniciar com abre chaves “{“ e será finalizado com fecha chaves “}”. Note que não existe nenhum código dentro dele, apenas um comentário em linha. Os comentários em linha sempre são iniciados com o comando “//”; Dessa forma, digite o seguinte código dentro do método main: Imagem 2.11 – Primeiro código em Java Fonte: Elaborada pela autoria (2023). 20 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Na imagem anterior (imagem 2.11), o comando: “System. out.println(...);” é responsável por mostrar o texto que está entre parênteses. Nesse caso: “Meu primeiro código Java”, no console do IDE. Para executar o programa Java, clique no botão Run, mostrado na imagem 2.11. O programa Java deve ser compilado, gerando bytecodes e interpretado pela JVM, gerando o resultado no Console, como mostrado na sequência (imagem 2.12). Imagem 2.12 – Resultado da execução do primeiro projeto Java Fonte: Elaborada pela autoria (2023). Se você conseguiu o mesmo resultado que foi apresentado na imagem anterior, parabéns! O primeiro passo está dado! Até o momento não estamos trabalhando com um projeto JavaAndroid, mas com um projeto Java simples (desktop), pois o objetivo desta unidade é apresentar a linguagem Java para que você possa implementar projetos em dispositivos móveis. IMPORTANTE A Linguagem Java diferencia letras maiúsculas de letras minúsculas. Preste atenção em como você declara e usa as variáveis em seu programa, assim evita perdertempo. Estrutura básica da linguagem Java A linguagem de programação Java é concorrente, baseada em classes, orientada a objetos e de propósito geral (Mattos, 2007, 21PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 p. 30). Dessa definição, podem-se relacionar alguns conceitos importantes, relacionados no quadro a seguir. Quadro 2.1 – Estrutura básica da linguagem Java Item Descrição Programação Concorrente Programação que permite fazer uso simultâneo (concorrente) de várias tarefas computacionais. Programação Baseada em Classes Programação que tem como base os protótipos (classes) identificados num determinado cenário. Programação Orientada a Objetos Programação que utiliza as potencialidades da orientação a objetos, tais como herança, polimorfismo, encapsulamento, entre outros. Linguagem de Propósito Geral Linguagem que pode ser utilizada para implementar uma solução para qualquer cenário. Fonte: Elaborado pela autoria com base em Mattos (2007). Estrutura de um programa Java Para o desenvolvimento dos exercícios deste material, será adotada a seguinte estrutura para um programa Java básico: • Projeto – todo programa Java deve fazer parte de um projeto; • Pacote – cada projeto deve ter um ou mais pacotes. Cada pacote (Package) serve para organizar/separar as classes com funções semelhantes. • Classes – cada pacote deve ter uma ou mais classes. • Variáveis – cada classe pode ter uma ou mais variáveis. • Atributos – cada classe pode ter um ou mais atributos. 22 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 • Métodos – cada classe pode ter um ou mais métodos. Para reforçar o entendimento do que foi exposto até o momento, vamos treinar. Siga os seguintes passos: • Abra o Projeto Exe1, criado no item anterior. • Crie outro pacote, chamado: “exercicio2”. • Dentro deste novo pacote, crie uma classe “Principal”, contendo o método main. • Na Classe Principal, insira um comentário com o seu nome e a data de hoje. • Dentro do método main, digite um código para mostrar no console a seguinte frase: “Inicio do Exercicio2”. Seguindo os mesmos passos apresentados no item anterior, a tela do Eclipse deve ficar como mostrado na imagem a seguir: 23PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.13 – Exemplo: implementando a Classe Java Fonte: Elaborada pela autoria (2023). Identificadores Dentro de um programa existem variáveis, constantes, classes, objetos, dentre outros elementos. Para cada um desses elementos é necessário definir um nome. Este é chamado de identificador. Imagem 2.14 – Exemplo de identificador int x; x = 0; Fonte: Elaborada pela autoria (2023). 24 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 No código apresentado foi definida uma variável de nome “x”, que recebe o valor 0 (zero). Então, para esse caso, “x” é o identificador de uma variável do tipo int (inteiro). Para definir o nome de identificadores é necessário seguir algumas regras: • Acentuação deve ser evitada; • Letras maiúsculas são diferenciadas de letras minúsculas; • Não pode haver espaços em branco; • Deve-se iniciar com uma letra ou caractere “_”; • Pode conter número a partir do segundo caractere; • Não pode conter caracteres de pontuação ou especiais, tais como: “#”, “@”, “&”, “?”, “!”, “:” etc.; • Não pode ser uma palavra reservada (Veja no item 1.2.4). O quadro a seguir exemplifica identificadores válidos e inválidos. Quadro 2.2 – Exemplos de identificadores válidos e inválidos Identificadores Válidos Identificadores Inválidos Num_Cliente Num Cliente Cliente !Cliente A10 10A Funcionario float Fonte: Elaborado pela autoria (2023). No quadro anterior, float é uma palavra reservada da linguagem Java para identificar um tipo de dado. 25PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Palavras reservadas As palavras reservadas são utilizadas pelo sistema como palavras-chave e não podem ser utilizadas como identificadores. Quadro 2.3 – Exemplos de palavras reservadas abstract Default if private this boolean Do implements protected throw break Double import public throws byte Else instanceof return transient case Extends int short try goto continue new for Const while Switch native float Class catch Final interface Static void char Finally long super volatile package synchronized strictfp Fonte: Elaborado pela autoria (2023). Não precisa decorar essas palavras reservadas. Durante o aprendizado, você perceberá quando uma delas aparecer. Mas em seu programa nunca utilize qualquer uma dessas palavras para dar nome a variáveis, classes, objetos ou qualquer elemento definido pelo usuário. IMPORTANTE Todas as palavras são escritas em letras minúsculas. Variáveis Quando um programa é desenvolvido, normalmente deve atender a uma ou mais necessidades do mundo real e, para tanto, precisa modelar essa realidade o mais possível próximo da 26 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 exatidão. Assim, para que o programa modele apropriadamente a realidade, seus elementos (variáveis, métodos, classes, objetos etc.) devem estar definidos com o tipo adequado de dado. Imagine que exista a necessidade de montar um programa para somar dois números. Uma análise rápida permite perceber que é necessário definir três variáveis: uma para o primeiro número, outra para o segundo número e uma terceira variável para armazenar a soma dos dois primeiros números. Então, no programa Java, devem ser definidas três variáveis, mas estas precisam ter seus tipos também definidos para que o programa se assemelhe ao máximo da realidade em questão. Essas variáveis não podem ser do tipo texto, pois este não pode ser somado. Também não podem ser do tipo inteiro, porque, com certeza, em algum momento será necessário somar números com casas decimais. Então, essas variáveis devem ser definidas como números reais, isto é, que podem armazenar números positivos e negativos e com casas decimais, se necessário. A imagem a seguir mostra o segmento de código para executar a soma em questão. Imagem 2.15 – Bloco de código para somar dois números float x; float y; float z; x = 10; y = 2; z = x + y; Fonte: Elaborada pela autoria (2023). Como mostra o exemplo anterior, cada variável definida num programa Java será armazenada num local da memória e deverá estar associada a um tipo de dado, para seu correto uso. A 27PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 linguagem Java permite a definição de dois tipos básicos de dados para as variáveis, quais sejam: simples e composto. Vamos a eles. Tipos de dados simples São dados que não podem ser divididos em tipos primitivos. Quadro 2.4 – Tipos de dados simples • INTEIROS Nome Descrição Tamanho byte Armazena valores entre -128 e +127 08 bits short Armazena valores entre -32.768 e +32.767 16 bits int Armazena valores entre -2.147.483.648 e +2.147.483.647 32 bits long Armazena valores entre -9.223.372.036.854.775.808 e +9.223.372.036.854.775.807 64 bits • PONTO FLUTUANTE Nome Descrição Tamanho float Armazena valores com precisão de 6 dígitos depois da vírgula. 32 bits double Armazena valores com precisão de 14 dígitos depois da vírgula 64 bits • BOOLEANO Nome Descrição Tamanho bool Armazena os valores lógicos true e false • CARACTERE Nome Descrição Tamanho char Armazena um único caractere 16 bits Fonte: Elaborado pela autoria (2023). Para se definir uma variável com um tipo de dados simples, use a seguinte sintaxe: . 28 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.16 – Declaração de valoração de variáveis de tipos de dados simples int var1; var1 = 3; double Valor; Valor = 10.34; boolean Retorno; Retorno = false; char Sexo; Sexo = ‘M’; Fonte: Elaborada pela autoria (2023). Veja a seguir como definir mais de uma variável do mesmo tipo. Imagem 2.17 – Declaração de variáveis do mesmo tipo int var1, var2, var3; var1 = 3; var2 = 1; var3 = 2; //ou int var4; int var5; int var6;var4 = 5; var5 = 6; var6 = 4; Fonte: Elaborada pela autoria (2023). Pode-se também definir um valor inicial para a variável quando ela é declarada, veja o exemplo: 29PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.18 – Declaração e valoração de variáveis int var8 = 10; //ou int var9; var9 = 10; Fonte: Elaborada pela autoria (2023). Imagine que precisamos desenvolver um programa que faça a soma de dois números inteiros e apresente o resultado no console. Para resolver essa questão, devemos seguir os seguintes passos: • Para o projeto Exe1, no pacote exercicio2; • Dentro do método “main”, defina três variáveis do tipo inteiro, com os seguintes nomes: Num1, Num2 e Result; • Atribua valores inteiros às variáveis Num1 e Num2 e realize a operação de soma das duas, armazenando o resultado na variável “Result”; • Mostre o seguinte resultado no console: “O resultado da soma é: ...”. No lugar dos três pontos, deve estar o valor armazenado em “Result”. Imagem 2.19 – Exemplo de código para somar dois números inteiros Fonte: Elaborada pela autoria (2023). 30 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Melhorando o código: com a ajuda de comentários, pode- se facilitar a compreensão do código anterior, da seguinte maneira: Imagem 2.20 – Exemplo de código com comentários Fonte: Elaborada pela autoria (2023). Agora, salve o projeto e execute-o. O resultado apresentado no console deve ser o seguinte. Imagem 2.21 – Resultado da execução de código Fonte: Elaborada pela autoria (2023). É importante notar que a atividade faz apenas a soma de números inteiros. Caso seja colocado um valor não inteiro para algumas das variáveis, um erro será gerado, mostrando que o tipo de variável definido (int) não suporta um valor que não seja inteiro. Tipos de dados compostos Dados compostos são aqueles que não estão entre os oito tipos primitivos (simples) de dados. Todos os tipos compostos são 31PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 classes. As variáveis do tipo composto podem armazenar um dos seguintes valores: • Uma referência nula: “null”; • Uma referência para qualquer objeto cuja classe seja compatível com o tipo da variável. Armazenar uma referência para qualquer objeto significa que a variável não armazena o valor que é atribuído a ela, mas é um “ponteiro” que aponta para o endereço onde está aquela instância de classe (objeto). É este endereço que tem o valor desejado. “String” e “Arrays” são os tipos de dados compostos mais comuns. Os objetos definidos pelo usuário também são do tipo referência. Veremos esses conceitos com mais detalhes no decorrer deste material. Conversão de tipos Durante o desenvolvimento do programa, pode haver a necessidade de trocar (mudar) o tipo de dado de uma variável para outro tipo. Essa troca é chamada de “conversão de tipos” ou “casting”, em inglês, e tem a seguinte sintaxe: Imagem 2.22 – Sintaxe casting () ou () Fonte: Elaborada pela autoria (2023). Nesse exemplo, a variável “x” é do tipo inteiro e tem o valor 10 como conteúdo. Declara-se, então, uma variável “b”, do tipo byte, e faz-se uma conversão de tipo (casting) para atribuir o conteúdo da variável “x” para a variável “b”. 32 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.23 – Sintaxe casting 2 int x = 10; byte b; b = (byte) x; Fonte: Elaborada pela autoria (2023). Exemplo utilizando expressão: Imagem 2.24 – Sintaxe casting 3 int x, y; x = 10; y = 6; byte b; b = (byte) x + y; Fonte: Elaborada pela autoria (2023). Algumas conversões podem causar perda de informação. Isso acontece quando se quer, por exemplo, converter uma variável do tipo double para int, como é mostrado a seguir: Imagem 2.25 – Sintaxe casting 4 double PI = 3.141642; int i; i = (int) PI Fonte: Elaborada pela autoria (2023). Imagine o seguinte cenário: precisamos montar um bloco de código que declare uma variável do tipo double com valor igual a 12,34 e outra variável do tipo int. Por um motivo qualquer, é necessário fazer a atribuição do valor da variável do tipo double para a variável do tipo int, usando conversão de tipos, sendo necessário apresentar o resultado no console. Para resolver esse problema, crie um novo pacote no projeto Exe1, chamado de exercicio3 e, 33PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 dentro dele, crie uma nova classe chamada “Conversão de tipos”. Não se esqueça de que a classe precisa conter o método main. O código segue o exemplo mostrado na imagem a seguir. Imagem 2.26 – Exemplo de conversão de tipos Fonte: Elaborada pela autoria (2023). Repare que o valor 12,34 poderia ser definido como float, e não como double, porém o Java não aceita a atribuição de valores do tipo float em variáveis. Pesquise por que isso acontece. Salve a classe e execute-a. O resultado apresentado deve ser o número “12”. Perceba que a conversão de tipo double para int teve como consequência a perda de informação! 34 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Escopo de variável Segundo o Dicionário Priberam de Língua Portuguesa, “escopo” significa o “limite ou abrangência de uma operação” (Escopo, on-line, 2024). Sendo assim, quando se trata de escopo de variáveis em um código Java, é necessário perceber que uma variável pode não ser válida em todo o programa, mas, sim, apenas dentro de uma classe ou método, ou, ainda, que a variável pode ser válida apenas dentro de um bloco de código dentro de um método. É importante destacar também que uma variável declarada em Java deve estar numa das três categorias apresentadas no quadro a seguir. Quadro 2.5 – Categorias das variáveis Categoria Descrição Atributo Quando a variável é declarada como atributo de uma classe. Também são chamadas de variáveis de instância. O conteúdo de um atributo é válido (escopo) apenas dentro daquela instância de classe; Local Quando a variável é declarada dentro de um método ou dentro de um bloco de código definido dentro de um método. O conteúdo de uma variável Local é válido (escopo) dentro do método ou dentro do bloco de código ao qual pertence; De Classe Quando a variável tem seu valor associado à própria classe, isto é, seu valor é considerado (escopo) em todas as instâncias daquela classe. As variáveis de classe são definidas utilizando a palavra-chave static; Fonte: Elaborado pela autoria (2023). O código a seguir mostra a declaração de variáveis nas categorias apresentadas na imagem anterior. 35PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.27 – Exemplo de declaração de categorias de variáveis Fonte: Elaborada pela autoria (2023). Modificadores de acesso No que diz respeito às variáveis declaradas como (categoria) “atributo”, em geral, podem ser definidas como atributos públicos (public), privados (private) ou protegidos (protected). Um atributo declarado como público pode ser acessado diretamente por outras classes que instanciarem aquela que tem esse tipo de atributo. Isso não ocorre no caso de atributos privados, que não ficam acessíveis. Por sua vez, os que são declarados como protegidos só podem ser acessados por subclasses e/ou classes que estejam no mesmo pacote. Atributos públicos Atributos do tipo public podem ser acessados por todas as classes. Para verificar essa afirmação, crie um novo pacote, dentro do projeto Exe1, chamado de exercicio4. Dentro desse pacote, crie uma classe chamada Mod_Publico (que não deve conter o método main). O código deve ser como o apresentado na imagem a seguir: 36 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.28 – Exemplo de classe com atributo do tipo público Fonte: Elaborada pela autoria (2023). Crie no mesmo pacote uma outra classe, chamada “Principal” (que deve conter o método main). O código deve ser o mostrado na imagem a seguir. Imagem 2.29 – Exemplo de acesso com atributo do tipo público Fonte: Elaborada pela autoria (2023). 37PROGRAMAÇÃO CODING (MOBILE) Uni da de 2 Repare que, no exemplo anterior, o atributo da classe Mod_publico pode ser acessado diretamente, bastando para isso instanciar a classe. Atributos privados Atributos do tipo “private” não pode ser acessado diretamente por todas as classes. Para verificar essa afirmação, siga os seguintes passos: 1. Dentro do pacote exercicio4, crie uma classe chamada Mod_Privado (que não deve conter o método “main”). O código deve ser como o apresentado na imagem a seguir. Imagem 2.30 – Exemplo de classe com atributo do tipo privado Fonte: Elaborada pela autoria (2023). 2. Na classe “Principal”, criada no exemplo anterior, modifique o código para que fique como mostrado na imagem a seguir: 38 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.31 – Exemplo de acesso ao tributo do tipo público e ao privado Fonte: Elaborada pela autoria (2023). IMPORTANTE No exemplo anterior, não foi possível acessar o atributo do tipo privado. Para fazê-lo, é necessário utilizar os métodos getters e setters. • Getters: métodos que permitem capturar os valores dos atributos privados. • Setters: métodos que permitem definir os valores para os atributos privados. 39PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Neste exemplo, vamos criar uma nova classe que tenha atributos do tipo privado, mas que também tenham métodos getters e setters. Sendo assim, no mesmo pacote, crie uma classe chamada “Mod_Privado2”, com o seguinte conteúdo: Imagem 2.32 – Classes com atributos privados e métodos getters e setters Fonte: Elaborada pela autoria (2023). Modifique o conteúdo da classe principal, para ficar como mostrado na imagem a seguir. 40 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.33 – Exemplo de acesso ao atributo do tipo privado com métodos getters e setters Fonte: Elaborada pela autoria (2023). 41PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Operadores A linguagem Java disponibiliza seis tipos de operadores. Neste tópico, vamos apresentar, descrever e verificar como utilizar cada um deles. Operadores aritméticos Quadro 2.6 – Operadores aritméticos Operador Descrição + Soma - Subtração * Multiplicação / Divisão Fonte: Elaborado pela autoria (2023). A regra de precedência dos operadores aritméticos obedece à regra (de precedência) definida pela matemática básica, com relação a operações aritméticas. Operadores de atribuição Para a tabela a seguir, considere que a variável x tenha sido declarada com valor inicial igual a 12. Tabela 2.1 – Operadores de atribuição Operador Exemplo de Código Explicação da Operação Valor final de x = x = 4; x = 4; 4 += x += 4; x = x + 4; 16 –= x –= 4; x = x - 4; 8 *= x *= 4; x = x * 4; 48 /= x /= 4; x = x / 4; 3 %= x %= 4; x = x % 4; 0 Fonte: Elaborada pela autoria (2023). 42 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Crie um novo pacote no projeto Exe1, chamado de exercicio5, dentro do qual crie uma nova classe clamada Operadores1 (que deve conter o método main. Dentro do método main, siga as seguintes instruções (sem utilizar operadores de atribuição): 1. Declare uma variável do tipo inteiro; 2. Atribua o valor 10 a essa variável; 3. Some 3 e armazene o resultado nela mesma; 4. Subtraia 1 e armazene o resultado nela mesma; 5. Divida por 2 e armazene o resultado nela mesma; 6. Multiplique por 7 e armazene o resultado nela mesma; 7. Mostre o resultado no console. Caso você tenha seguido exatamente como informado, seu código deve estar igual ao mostrado na imagem a seguir. Imagem 2.34 – Exemplo de código usando operadores aritméticos Fonte: Elaborada pela autoria (2023). 43PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 O valor apresentado no console deve ser: 42. Crie uma nova classe chamada Operadores2 que realize os mesmos passos do exemplo anterior. Desta vez, porém, utilize apenas operadores de atribuição. Seu código deve ficar assim: Imagem 2.35 – Exemplo de código com uso de operadores de atribuição Fonte: Elaborada pela autoria (2023). O valor apresentado no console deve ser: 42. Operadores de incremento e decremento Para a tabela a seguir, considere que a variável “x” tenha sido declarada com o valor inicial igual a 2 e a variável “y”, com valor inicial igual a 0. 44 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Tabela 2.2 – Operadores de incremento e decremento Operador Exemplo de Código Explicação da Operação Valor final de x e y Pré-incremento ++ y = ++x; Primeiro incrementa e depois atribui. x = 3 y = 3 Pós-incremento ++ y = x++; Primeiro atribui e depois incrementa. x = 3 y = 2 Pré-decremento -- y = --x; Primeiro decrementa e depois atribui. x = 1 y = 1 Pós-decremento -- y = x--; Primeiro atribui e depois decrementa. x = 1 y = 2 Fonte: Elaborada pela autoria (2023). Crie uma nova classe, chamada Operadores3, e siga os seguintes passos. 1. Declare duas variáveis (a e b) do tipo inteiro; 2. Atribua o valor 10 para a variável a e 0 para a variável b; 3. Mostre o valor das duas variáveis no console; 4. Faça um pré-incremento na variável b e atribua o valor de b em a; 5. Mostre o valor das duas variáveis no console; 6. Faça um pós-decremento na variável b e atribua o valor de b em a; 7. Mostre o valor das duas variáveis no console. Seu código deve ficar assim: 45PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.36 – Exemplo de uso de operadores de incremento e decremento Fonte: Elaborada pela autoria (2023). Operadores relacionais Para a tabela a seguir, considere que as variáveis “x” e “y” foram declaradas com valores iniciais iguais a 13 e 5, respectivamente. Tabela 2.3 – Operadores relacionais Operador Discrição Exemplo Resultado == Igual (x == y) Falso != Diferente (x != Y) Verdadeiro Maior que (x > Y) Verdadeiro = Maior ou igual a (x >= Y) Verdadeiro Fonte: Elaborada pela autoria (2023). Operadores booleanos Para a tabela a seguir, considere que as variáveis “x” e “y” foram declaradas com valores iniciais iguais a 13 e 5, respectivamente. 46 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Tabela 2.4 – Operadores booleanos Operador Discrição Exemplo Resultado && E (x == 13) && (y > 5) Falso || OU (x == 13) || (y > 5) Verdadeiro ! Não !(y = ?:; Fonte: Elaborada pela autoria (2023). Imagine o seguinte bloco de código: Imagem 2.38 – Exemplo de bloco int num1 = 11; int num2 = 12; int num3; num1 = (num1 > num2)?num1:num2; Fonte: Elaborada pela autoria (2023). Se o resultado da condição “(num1>num2)” for verdadeiro, a variável num3 recebe o valor de num1; caso contrário, num3 recebe o valor de num2. 47PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 RESUMINDO E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir tudo o que vimos. Neste subtítulo, você aprendeu sobre o Java Básico. Aqui, você viu sobre o Primeiro Projeto Java, sobre a Primeira Classe Java, bem como sobre a Estrutura básica da linguagem Java. 48 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Estrutura de controle de seleção OBJETIVO Ao término deste capítulo, você será capaz de entender como funciona a sintaxe básica da estrutura de controle de seleção da linguagem Java. E então? Motivado para desenvolver esta competência? Então vamos lá. Avante! Comando if O controle de seleção if (que significa “se”) permite ao programador definir se um bloco de código será ou não executado, dependendo do resultado de um teste, que pode ser verdadeiro ou falso. Caso seja verdadeiro, o bloco de código é executado; caso contrário, não será executado. Imagem 2.39– Sintaxe if if (teste) { Bloco de Código; } Fonte: Elaborada pela autoria (2023). O teste é uma condição booleana, isto é, qualquer expressão que retorne como resultado os valores “true” ou “false”. Imagem 2.40 – Resultado if int idade = 15; if (idade ) { case valor1: bloco de código que deve ser executado se a variável tiver valor = valor1; break; case valor2: bloco de código que deve ser executado se a variável tiver valor = valor1; break; case valorN: bloco de código que deve ser executado se a variável tiver valor = valorN; break; default: bloco de código que deve se a variável não encontrar nenhuma correspondência nos cases acima; break; } Fonte: Elaborada pela autoria (2023). IMPORTANTE Os cases não podem testar valores booleanos, por isso, a linguagem Java não vai conseguir entender o que deve ser deito caso seja digitada a seguinte linha de comando: “case valor1 >10”. 53PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.44 – Exemplo case valor1 > 10 int i = 3; swicth (i) { case 1: System.out.println(“i é igual a 1”); break; case 2: System.out.println(“i é igual a 2”); break; default: System.out.println(“i é diferente de 1 e diferente de 2”); break; } Fonte: Elaborada pela autoria (2023). Estrutura de controle de repetição While O comando while (que significa “enquanto”) permite que um bloco de código seja repetido um número definido de vezes durante a execução do programa. Para controlar quantas vezes o bloco de código deve ser repetido, utiliza-se uma condição (teste). Por definição, enquanto o resultado do teste for verdadeiro, o bloco de código deve ter sua execução repetida. A sintaxe para o comando while é a seguinte: 54 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.45 – Sintaxe while While (condição) { Bloco de código que deve ser executado enquanto a condição for verdadeira. } EXEMPLO int idade = 15; while (idade2.47 – Incremento for (int i = 0; i 50 && i { Bloco de código que deve ser executado quando este método foi chamado. } Fonte: Elaborada pela autoria (2023). Onde: • O termo public define que o método pode ser acessado por outras classes que instanciarem a classe que contém esse método. Se desejar tornar esse método inacessível para outras classes, é necessário substituir o termo public por private. • O tipo de retorno informa ao programa que tipo de dado o método vai retornar quando for executado. Pode-se utilizar qualquer um dos tipos primitivos ou compostos (também chamados de tipos de referência). Caso o método não precise ter retorno, utiliza-se o termo void. Se o método tiver algum tipo de retorno, a última linha a ser executada é o comando return acompanhado da variável que armazena o valor a ser retornado. • Para o nome do método, utiliza-se qualquer identificador válido que ainda não tenha sido utilizado para declarar outros elementos nessa mesma classe. O nome do método deve sempre ser seguido por abre e fecha parênteses “()”, caso não tenha parâmetros. Caso contrário, os parâmetros devem ser declarados entre os parênteses. 62 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Para este exemplo, crie um novo pacote, chamado de exercicio6. Dentro dele, crie uma classe chamada de Principal (que deve conter o método main). O conteúdo dessa classe deve ser o seguinte: Imagem 2.51 – Exemplo de chamada de método Fonte: Elaborada pela autoria (2023). Explicando o exemplo citado: 1. Quando o programa é executado, o primeiro método a ser chamado quando é o método main (linha 12), conforme já dito anteriormente neste material. 2. Dentro do método main, três variáveis são declaradas (linhas 13 a 15) e têm seus tipos e valores definido. São elas: a, b e c. 63PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 3. Na linha 16 existe uma chamada ao método soma, passando como parâmetros as variáveis a e b. 4. A execução do programa passa para a linha 5, em que o método soma (que foi chamado na linha 16) recebe os dois parâmetros, “X” e “Y”. Isso quer dizer que apenas dentro do método soma() a variável “a” será chamada de “X” e a variável “b”, de “Y”. 5. O método soma() executa a operação de adição das suas duas variáveis e armazena o resultado na variável “resultado” (linhas 8). A última linha do método soma (linha 9) faz o retorno da soma das variáveis (return resultado). 6. A execução do programa retorna para a linha 16, na qual o resultado da soma é atribuído à variável c, dentro do método main. 7. Na linha seguinte (linha 17), o programa executa um comando para mostrar no console o resultado calculado pelo método soma. Como segundo exemplo de chamada de método, implemente nos métodos subtração, multiplicação e divisão para as mesmas variáveis a e b e teste o resultado do programa. Seu código deve ficar assim: 64 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.52 – Exemplo 2 de estrutura de métodos Fonte: Elaborada pela autoria (2023). Classes Como foi verificado anteriormente neste material, a Programação Java é baseada em classes. Isso quer dizer que toda 65PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 a estrutura da programação Java está baseada no envio e no recebimento de mensagens entre as classes, ou seja, uma classe chama a outra por meio de métodos. Para melhor entendimento do que seja uma classe e de como podemos criá-las utilizando a linguagem Java, imagine a classe CALCULADORA especificada na imagem. Imagem 2.53 – Calculadora Calculadora double resultado double Soma(double X,double Y) double Subtr(double X, double Y) double Multipl(double X, double Y) double Divisao(double X, double Y) Fonte: Elaborada pela autoria (2023). Repare que essa classe tem apenas um atributo, chamado “resultado”, e tem quatro métodos, um para cada operação matemática básica. Para implementar essa classe, siga os seguintes passos: 1. Crie um novo pacote (package), chamado “Calculadora”, e uma classe principal (com o método main) dentro dele. A imagem a seguir mostra como deve ficar o Package Explorer do seu projeto. Imagem 2.54 – Pacote calculadora Fonte: Elaborada pela autoria (2023). 66 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Não apague os outros pacotes (exercicio1 e exercicio2), pois é muito interessante que você tenha um histórico da sua evolução em programação Java, mas nosso foco agora será o Pacote Calculadora. 2. Agora, crie uma nova classe, chamada “calc”, dentro do pacote Calculadora. Mas nesta classe NÃO marque a opção: “public static void main(String[] args)”. O Package Explorer deve ficar assim: Imagem 2.55 – Pacote calculadora com duas classes Fonte: Elaborada pela autoria (2023). 3. Clique duas vezes sobre a classe principal.java e o “Eclipse” exibirá a seguinte tela: Imagem 2.56 – Pacote Principal Java – com o método main Fonte: Elaborada pela autoria (2023). 67PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Repare que essa classe tem o método “public static void main(String[ ] args)”. Como você deve ter percebido, o nome do método é simplesmente “main” e tem como atributo o array do tipo String, chamado “args”. 4. Clique duas vezes sobre a classe calc.java e o Eclipse deve mostrar a seguinte tela: Imagem 2.57 – Classe Calc – sem o método MAIN Fonte: Elaborada pela autoria (2023). Repare que a classe “Calc” não deve ter o método main, o qual só deve estar presente na classe principal do pacote. Para implementar o exemplo, nosso trabalho consiste em traduzir o “desenho” representado na classe calculadora para dentro do código Java – classe “Calc”. Imagem 2.58 – Classe calculadora Calculadora double resultado double Soma(double X, double Y) double Subtr(double X, double Y) double Multipl(double X, double Y) double Divisao(double X, double Y) Fonte: Elaborada pela autoria (2023). Vamos demonstrar passo a passo a implementação da classe calculadora: 68 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 1. Acrescente um bloco de comentário padrão e declare o atributo na classe “calc”: Imagem 2.59 – Exemplo parte I Fonte: Elaborada pela autoria (2023). 2. Acrescente os métodos descritos na imagem a seguir na classe “calc”. 69PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.60 – Exemplo – Parte II Fonte: Elaborada pela autoria (2023). Note que o código apresentado deve apresentar quatro indicações de erros. Para identificar o motivo da indicação de erro, pare o ponteiro do mouse sobre cada um dos erros e verifique os respectivos motivos. O erro deve ser como mostrado na imagem a seguir. 70 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.61 – Identificação do erro de código Fonte: Elaborada pela autoria (2023). Note que o problema está no fato de que nós escrevemos um método que deveria retornar uma variável do tipo double, e não escrevemos a linha de código para que esse retorno seja feito. Dessa forma, a própria IDE apresenta opções para corrigir o problema: podemos adicionar o comando return ou mudar o tipo de retorno do método para void. Para nosso caso, a solução mais adequada é inserir o comando return. O nosso código fica, então, como mostrado na imagem a seguir: Imagem 2.62 – Código corrigido Fonte: Elaborada pela autoria (2023). 71PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 A partir de agora, o que falta é apenas inserir as funcionalidades para cada método. IMPORTANTE Para o método divisão(), é preciso verificar primeiro se o denominador é diferente de zero, a fim de evitar erro do programa em tempo de execução, pois, como você deve saber, não existe resultado para a divisão por zero. Imagem 2.63 – Métodos implementados na Classe Calc Fonte: Elaborada pela autoria (2023). 72 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Neste ponto do exemplo, o código da classe “calc” já está pronto, pois o atributo e os métodos já estão corretamente declarados e implementados. Resta agora implementar a classe main, para que esta instancie a classe “Calc” e faça a chamada dos métodos (envie as mensagens para a classe). Para que a classe main envie uma mensagem, chamando o método soma() da classe “calc”, a classe main deve primeiro instanciar a classe “calc”, como mostrado na imagem a seguir: Imagem 2.64 – Classe principal a instanciar a Classe Calc Fonte: Elaborada pela autoria (2023). Note que, para se instanciar uma classe, isto é, criar um objeto, deve-se usar a seguinte notação: = new (); Onde. • Tem a mesma função que o utilizado nos tópicos anteriores, neste material; • É o nome que o programador dará para o objeto que está sendo criado; • É uma palavra reservada que informa ao programa que o programador está criando uma nova instância de uma classe; 73PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 • É o nome que o programador deu para a classe que ele está querendo instanciar. Sempre deve ser seguido de abre e fecha parênteses “()”. Para o caso em estudo, a linha de código que instancia a classe “calc” é a seguinte: Calc C = new Calc(). A partir dessa linha, o programa entende que existe um objeto chamado “C” que foi instanciado a partir da classe “Calc”. Em seguida, utilizamos o objeto “C” para chamar os métodos da classe à qual ele faz referência. Execute o programa e você verá que o resultado da soma será apresentado no console. Agora, siga os mesmos procedimentos apresentados para o processo de soma de duas variáveis e implemente os códigos para que o método main da classe principal execute subtração, multiplicação e divisão. Imagine que precisamos criar um novo método, chamado “média()”, na classe “calc”, para calcular a média entre dois números inteiros. Lembre-se de que esse método deve receber dois parâmetros do tipo especificado. O código deve ficar mais ou menos assim: Imagem 2.65 – Método média() Fonte: Elaborada pela autoria (2023). Agora, faça uma chamada ao método “media()”, a partir do método main da classe principal. 74 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.66 – Inserindo a chamada ao método Média() na classe main Fonte: Elaborada pela autoria (2023). RESUMINDO E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo desse tópico, vamos resumir tudo o que vimos. Aqui, você aprendeu sobre a classe Java. Além disso, você viu uma parte da introdução sobre o tema, seus métodos, bem como suas classes. Esperamos que você tenha gostado do conteúdo apresentado. 75PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Polimorfismo, interface e classes abstratas OBJETIVO Ao término desse capítulo, você será capaz de entender como funcionam o polimorfismo, a interface e as classes abertas na linguagem de programação Java. E então? Motivado para desenvolver esta competência? Então vamos lá. Avante! Polimorfismo O polimorfismo ocorre quando o programa é implementado de maneira que “o mesmo método” pode responder de diferentes formas. Trata-se da capacidade da implementação de operações de maneira diferente da definida originalmente na classe base. Dall’Oglio (2016) destaca ainda que: O significado da palavra polimorfismo nos remete a “muitas formas”. Polimorfismo em orientação a objetos é o princípio que permite que classes derivadas de uma mesma superclasse tenham métodos iguais (com a mesma nomenclatura e os mesmos parâmetros), mas comportamentos diferentes, redefinidos em cada uma das classes-filhas. (Dall’oglio, 2016) Seguindo essa ideia, usaremos aqui o mesmo exemplo que trabalhamos comPHP. Isso permite a você perceber as similaridades e as diferenças entre as duas linguagens de programação para tratar este conceito. Imagine o cenário representado pelo diagrama abaixo. 76 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.67 – Representação gráfica da herança de duas classes Conta Agencia Conta Saldo Registrar_Conta(Ag, Cta, S) Depositar(Valor) Sacar(Valor) Conta_Poupanca Sacar(Valor) Fonte: Elaborada pela autoria (2023). Primeiro, vamos implementar a classe Conta. Para implementar essa classe, crie um novo pacote no projeto Exe01, chamado exercicio7. Dentro desse pacote, crie uma classe Conta sem o método main, declare os atributos e implemente os métodos, de acordo com a imagem a seguir. O seu código deve ficar mais ou menos assim: 77PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.68 – Classe Conta Fonte: Elaborada pela autoria (2023). Agora que temos a classe Conta, crie uma nova, no mesmo pacote “exercicio7”, chamado “ContaPoupança”. Esta deve ser uma subclasse da classe Conta. Ser uma subclasse significa herdar as características e comportamentos da classe-mãe (ou superclasse). 78 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 IMPORTANTE Herança é a propriedade que permite que uma classe (filha ou subclasse) herde atributos (características) e métodos (comportamentos) de outra classe (mãe ou superclasse). Conforme podemos verificar, a subclasse “ContaPoupança” deve conter um método “sacar” com a mesma assinatura (mesmo nome e argumentos) que a classe-mãe (Conta). Para usar a herança, em Java, utiliza-se a palavra reservada extends. A classe (filha) “ContaPoupança” deve ficar mais ou menos assim: Imagem 2.69 – Conta Poupança Fonte: Elaborada pela autoria (2023). Para o conteúdo do método sacar da classe “ContaPoupança”, podemos imaginar que o valor não pode ser maior do que o saldo da conta, verificação que não acontece na classe Conta. Então, nosso código fica mais ou menos assim: 79PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.70 – Classe Conta Poupança Fonte: Elaborada pela autoria (2023). Note que essa classe “ContaPoupança” herda (extends) da classe “Conta”, criada anteriormente. Repare também que a classe-filha “contaPoupanca” tem um método com o mesmo nome (método sacar()) que a classe-mãe “conta”, mas o conteúdo do método sacar na classe-mãe é diferente do conteúdo do método sacar na classe-filha. Para testar o funcionamento das classes “conta” e “contaPoupanca”, crie uma nova classe no mesmo pacote “exercicio7” com o nome de Principal (que deve ter o método main) com o seguinte código: 80 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.71 – Classe Principal Fonte: Elaborada pela autoria (2023). Note que o método Sacar(Valor), apresentado na imagem anterior, verifica se a quantia a ser sacada é maior que o valor do saldo da conta. A resposta apresentada no console deve ser a seguinte: Imagem 2.72 – Resultado da execução do código Fonte: Elaborada pela autoria (2023). 81PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Interface Uma interface é um tipo composto (ou referência) em Java e pode ser considerada uma classe com métodos abstratos. Alguns tutoriais Java, como o site TutorialPoint, consideram que escrever uma interface é similar a escrever uma classe. No entanto, uma classe deve descrever os atributos e os comportamentos de um objeto, e a interface, por sua vez, contém a descrição dos comportamentos que uma classe deve implementar. A lista a seguir apresenta algumas características de uma interface que não podem ser esquecidas quando queremos utilizá- las adequadamente: • Uma interface não pode ser instanciada; • Uma classe não pode herdar (extends) as características ou os comportamentos de uma interface, mas pode implementá-las (implement); • Todos os métodos de uma interface devem ser abstratos; • Uma interface não pode conter atributos instanciáveis; • Uma interface pode herdar (extends) de outra interface. Declarando uma interface Para declarar uma interface, devemos utilizar a palavra- chave “interface”. Imagine que, no exemplo que utilizamos para a classe Conta, quiséssemos fazer algumas modificações, como: fazer com que a Classe Conta não mais contivesse qualquer código, mas apenas a declaração dos métodos (comportamentos) necessários para todos os tipos de contas que nela estivessem baseadas. Nossa Classe Conta ficaria assim: 82 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.73 – Interface Conta Fonte: Elaborada pela autoria (2023). Essa interface Conta foi criada num novo pacote, chamado exercicio8, no mesmo projeto exe01. Se criarmos uma classe que implemente (implements) a interface Conta, deve ser assim: Imagem 2.74 – Classe ContaCorrente Fonte: Elaborada pela autoria (2023). Repare que, ao lado da marcação da linha3, existe um “x” a indicar que ali existe um erro. De pararmos o ponteiro do mouse sobre o “x”, teremos a seguinte informação: Imagem 2.75 – Classe ContaCorrente Fonte: Elaborada pela autoria (2023). 83PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Note que a IDE informa a você que, para que a classe ContaCorrente seja executada sem erros, deve implementar os métodos da classe Conta. Legal, não é?! Isso permite que você crie uma espécie de “contrato” para exigir que os programadores que, porventura, queiram implementar a interface que você criou para um determinado negócio, devam implementar determinados métodos obrigatórios para o correto funcionamento. Classes abstratas Assim como o PHP, a linguagem Java também permite o recurso de utilizar classes estruturais para servir de base para a criação de outras classes mais especializadas. IMPORTANTE Uma classe abstrata não pode ser instanciada diretamente; apenas servir de base para criação de novas classes (Dall’oglio, 2016). Para definir uma classe abstrata em Java, utiliza-se a palavra reservada abstract antes da definição da classe em si. Diferentemente do que acontece com a interface, uma classe qualquer pode herdar as características e os comportamentos da classe abstrata. Contudo, da mesma forma que acontece com a interface, a classe abstrata pode conter métodos abstratos com o intuito de assegurar que as suas classes-filhas implementem todos os métodos necessários para seu correto funcionamento. Como visto no tópico relativo às interfaces, os métodos abstratos têm a função de servir de molde para os métodos da classe-filha (extends) da classe abstrata ou (para o caso das interfaces) de servir de molde para as classes que a implementam (implements). Imagine que você queira transformar a interface Conta numa classe abstrata. Crie um novo pacote, chamado exercicio9 e, dentro dele, crie uma classe, sem o método main. 84 PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Antes de apertar o botão Finish, selecione a opção “abstract”, como mostrado na imagem a seguir: Imagem 2.76 – Criando uma classe abstrata Fonte: Elaborada pela autoria (2023). Dentro da classe Conta, insira o seguinte conteúdo: 85PROGRAMAÇÃO CODING (MOBILE) U ni da de 2 Imagem 2.77 – Classe abstrata Fonte: Elaborada pela autoria (2023). Note que apenas dois métodos são abstratos, o que significa que a classe abstrata conta pode ter a superclasse de uma classe ContaCorrente, por exemplo. Esta subclasse poderá herdar (extends) dos atributos e métodos já implementados na classe Conta e deverá obrigatoriamente implementar o conteúdo dos métodos abstratos “Depositar” e “Sacar”. Fizemos uma longa caminhada e esperamos que este material tenha ajudado você a entender os conceitos básicos da programação em linguagem Java. É claro que existe muito mais a ser estudado, caso você queira se tornar um expert em programação Java, mas nosso intuito aqui não foi esgotar o assunto, e, sim, apresentar o que pensamos serem os conceitos fundamentais.