Baixe o app para aproveitar ainda mais
Prévia do material em texto
Desenvolvido por: Michel Adriano Medeiros Aprendendo Java para Certificação Volume 1 Campos e Métodos01 É O PROGRAMADOR QUE CRIA E ORGANIZA OS ELEMENTOS DE TAL FORMA QUE RESULTA EM UM CÓDIGO ÚTIL, IDEAL, PARA OUTROS PROGRAMADORES ENTENDEREM. No Java há dois elementos primários: métodos, muitas vezes chamado de funções ou procedures em outras linguagens, e campos, mais conhecidos como variáveis. Juntos estes elementos são chamados de membros da classe. Variáveis guardam o estado de um programa, e métodos opera o estado. Se há uma mudança importante, a variável irá guardar esta mudança. Isto é tudo que as classes fazem. O Java tem palavras especiais que são as keywords(palavras chaves ou palavras reservadas). A palavra public é uma keyword, significa que ela pode ser utilizada por outras classes. A palavra class é uma keyword, significa que você está definindo uma classe. A palavra Animal é o nome da classe, ela não é uma keyword. Uma classe pode ter qualquer nome desde que não seja um nome de uma keyword. Uma classe Java se parece com isto: public class Animal{ } Vamos adicionar um campo a esta classe. public class Animal{ String name; } A palavra name é o nome da variável. A palavra String é o tipo da variável. Em um tipo String podemos guardar textos, como este: “isto é uma string”. String é também uma classe fornecida pelo Java. Vamos adicionar alguns métodos. Da linha 3 à 5 foi definido um método. Um método é uma operação que pode ser chamada. A palavra public torna este método apto para ser chamado de outras classes. A palavra return, retorna uma resposta que neste caso é uma String, porque name é uma String. Da linha 6 à 8 temos outro método. Este método tem a palavra void, que significa que não haverá retorno de nenhum valor quando este método for chamado. Para chamar este método há a necessidade de passar uma informação que é chamada de parâmetro. Entre parênteses está o parâmetro que precisa ser recebido, é uma String que tem o nome de newName. Uma declaração total de um método é chamada de assinatura do método. Por exemplo: public String getName(). Consegue identificar o tipo do retorno e o parâmetro deste exemplo? public int numberVisitors(int month) O tipo do retorno é um int, o qual é um valor numérico. O tipo do parâmetro também é um int. Campos e Métodos01 Comentários02 O COMENTÁRIO SIMPLES COMEÇA COM DUAS BARRAS. VOCÊ PODE DIGITAR QUALQUER COISA DEPOIS DAS DUAS BARRAS, MAS APENAS EM UMA LINHA. O SEGUNDO É O COMENTÁRIO DE MÚLTIPLAS LINHAS OU DE MÚLTIPLOS COMENTÁRIOS. Outro elemento comum em um código é o comentário. Os comentários não são códigos executáveis, por isto podem ser colocados em qualquer lugar. Comentários podem fazer o seu código ficar mais fácil de ser entendido. Há três tipos de comentários no Java. O primeiro é chamado de comentário simples ou de uma linha. Este comentário começa com /* e termina com */ Não precisa colocar * para cada linha, mas fica mais fácil a leitura. O terceiro é o comentário Javadoc. Este comentário é quase igual ao comentário de múltiplas linhas, a diferença é que este comentário começa com /** e pode-se colocar algumas anotações que são reconhecidas pelo o Javadoc como @author. // comente até o fim da linha /* Agora sim, * posso digitar em mais de uma linha. */ /** * Javadoc é um comentário para documentação * @author Blackzig */ Tente identificar os tipos destes comentários: No tamanduá o comentário é de múltiplas linhas, mesmo que dentro dele tenha comentários simples, tudo é considerado como comentário de múltiplas linhas. No urso é um comentário simples. No gato e cachorro também são comentários simples, não importa o que venha depois das //, tudo é considerado como um comentário simples. No elefante é um comentário de múltiplas linhas, mesmo que esteja apenas em uma linha. No do furão se fosse colocar isto em um código iria gerar um erro de compilação. Preste atenção: /* */ temos um comentário de múltiplas linhas vazio, mas depois veja: * furão * O furão está entre duas *, e isto não é válido como um comentário, deveria estar assim: /* furão */ E por fim depois do furão está assim: / */ falta alguma coisa não acha? Para ficar certo deveria estar desta maneira: /* *//* furão *//* */ Comentários02 /* *// tamanduá */ // urso // // gato // /* cachorro */ /* elefante */ /* */* furão */ */ ❤ Curso Java Para Iniciantes >>> http://bit.ly/java-swing � Curso de Desenvolvimento Web Completo >>> http://bit.ly/2FnB5Sp Classes Versus Arquivos03 VOCÊ PODE COLOCAR DUAS CLASSES NO MESMO ARQUIVO. QUANDO É FEITO ISTO, NO MÁXIMO UMA DAS CLASSES É PERMITIDO SER PÚBLICA. EXEMPLO: Na maioria das vezes, cada classe Java é definida pelo arquivo *.java. Normalmente é pública, que significa que qualquer código pode invocá-la. Curiosamente, Java não requer que a classe seja pública. Se você não sabe ou não lembra as declarações de uma classe visite: http://bit.ly/2FOXbOb. Um exemplo de classe sem declaração. Se você tem uma classe pública o arquivo deve ter o mesmo nome, pegando o exemplo anterior, se você nomear o arquivo para Animal2 o programa não irá compilar. public class Animal{ } public class Animal{ private String name; } class Animal2{ } Escrevendo um Método main()04 Um programa Java começa executando o método main(). Um método main() é uma ponte entre o começo dos processos do Java, o qual manipula a Java Virtual Machine(JVM), e o começo do código do programador. A JVM conversa com o sistema operacional para alocar memória e tempo de CPU, acessos de arquivos e assim por diante. O método main() nos prende neste processo, mantendo o nosso código rodando. Uma simples classe com um método main() se aparece assim: Este código não faz nada útil. Não há outra instrução a não ser o começo (o ponto de partida). Todo código Java deve ter esta instrução, senão não irá fazer compilação do programa. Para compilar este exemplo deve-se fazer a seguinte instrução: javac Zoo.java java Zoo public class Zoo{ public static void main(String[] args){ } } 😍 Deseja criar os seus próprios games? >>> http://bit.ly/gameja Se não aparecer nenhum erro, você conseguiu compilar e executar um programa Java. Se apareceu algum erro, veja se você tem o JDK instalado. Fiz um vídeo mostrando a instalação do JDK http://bit.ly/aula3CJ e outro mostrando a compilação e execução http://bit.ly/aula4CJ. Para compilar um programa você deve ter um arquivo .java. O nome do arquivo deve ser o mesmo da classe. O resultado da compilação será um arquivo bytecode com o mesmo nome, mas com a extensão .class. Bytecode é a instrução para a JVM saber o que deve ser feito. Para executar o programa depois de compilado não se deve colocar nenhuma extensão depois da palavra java, como no exemplo: java Zoo. É errado colocar por exemplo, java Zoo.class ou java Zoo.java. Escrevendo um Método main()04 � Deseja ser um programador full-stack? >>> http://bit.ly/tudosei � Quer aprender a divulgar o seu negócio na internet? >>> http://bit.ly/negocionow Vamos revisar as regras: · Cada arquivo deve ter uma única classe principal, mesmo aqueles que tem mais de uma classe, a principal será a pública. · O nome do arquivo deve ser o mesmo da classe e deve ter extensão .java. Vamos dar uma olhada novamente no método main(). A keyword public é o que chamamos de modificador de acesso(access modifier). Esta declaração expõe o arquivo para que outros o invoque, ou seja, possa ser acessado de qualquer parte do programa. A keyword static permite que o método seja invocado apenas pelo nome da classe, por exemplo, Zoo.main(). Desta maneira o Java não precisa criar um objetopara chamar o método main(). Não sabe o que é um objeto? Veja o artigo http://bit.ly/2FNRIqG. Se o método main() não estiver presente na classe principal do programa, você verá uma mensagem de erro. Se o método main não for static, um erro também será apresentado. Escrevendo um Método main()04 � Curso de PHP Developer >>> bit.ly/phpnow � Curso de Linux >>> http://bit.ly/blacklinux A keyword void representa um tipo de retorno(return type). Um método que não retorna nenhum tipo de dado para o seu invocador. Nós temos no método main() uma lista de parâmetros que é um array do Java o String[] args. Há outras maneiras de escrever este array, String args[] ou String... args; o compilador aceita qualquer um deles. A variável args representa os valores que a lista contém, estes valores podem ser lidos quando a JVM inicia. A variável não precisa chamar args, mas por padrão todos deixam com este nome. Os [] representa o array. Um array é uma lista de tamanho fixa que contém valores do mesmo tipo. A outra representação de um array é o (...) que é chamado de varargs. Agora vamos fazer alguns testes. public class Zoo{ public static void main(String[] args){ System.out.println(args[0]); System.out.println(args[1]); } } args[0] acesse o primeiro elemento de um array. Um array começa a ser contado do zero. Execute o programa: javac Zoo.java java Zoo Bronx Zoo A saída dever ser: Bronx Zoo Escrevendo um Método main()04 � CURSO PYTHON PARA WEB COM FLASK >>> http://bit.ly/zigpython �Android Developer Express >>> http://bit.ly/androiddevexp O programa identificou corretamente as duas palavras passadas como argumento. Os espaços entre elas são utilizados para separar os argumentos. Se precisar de espaço em uma palavra do argumento você precisa usar aspas. javac Zoo.java java Zoo “San Diego” Zoo A saída deve ser: San Diego Zoo Todos os argumentos são tratados como objetos String, mesmo que representem outros tipos. javac Zoo.java java Zoo Zoo 2 A saída deve ser: Zoo 2 O programa espera dois argumentos e se eu passar só um. O que acontece? javac Zoo.java java Zoo Zoo Escrevendo um Método main()04 � Aulas de Javascript >>> http://bit.ly/blackzigjavascript � AULAS GRÁTIS! Android >>> http://bit.ly/androidblack O Java irá ler o primeiro argumento, mas quando for ler o segundo... Gera uma exceção porque não há nada no segundo argumento. Lembrando que para compilar um programa você deve ter instalado na máquina o JDK, mas se for só executar um programa você precisa apenas do JRE, que é o Java padrão que todos instalam na máquina. Para executar um programa Java basta a máquina ter o Java instalado, não importa qual o sistema operacional esta máquina estiver operando já que o programa roda na JVM. Escrevendo um Método main()04 Entendendo as Declarações e Importações de Pacotes 05 A COMPILAÇÃO DO CÓDIGO GERA O SEGUINTE ERRO: O Java tem milhares de classes que já vem inclusas no JDK e outras que desenvolvedores criam que podem ser utilizadas no seu projeto. Com este mundo de classes o java precisa de uma maneira para organizá-las. E o jeito é similar a guardar objetos em uma gaveta. O Java organiza as classes em pacotes (packages em inglês). Imagine se eu te colocasse na frente de várias gavetas e pedisse para você encontrar determinado objeto sem dar nenhuma informação. Seria mais fácil se eu te dissesse o que estou procurando e por exemplo o número da gaveta. Então, o Java também precisa destas informações para saber qual classe você deseja utilizar, para isto ele precisa saber o pacote e a classe. Vamos ver o que acontece se eu tentar compilar este código: public class ImportExample{ public static void main(String[] args){ Random r = new Random(); System.out.println(r.nextInt(10)); } } Entendendo as Declarações e Importações de Pacotes 05 Como você pode ver houve um erro de compilação. A mensagem cannot find symbol nos dá a pista do que aconteceu. Veja que tem uma seta no Random, isto significa que foi esta classe que o compilador não conseguiu encontrar. Lembre-se que você deve dizer ao Java em qual pacote a classe está localizada, e se você analisar o código em nenhum lugar dissemos onde a classe Random pode ser encontrada. Se você compilar este programa e executar a saída será um número entre 0 e 9. Agora o programa compila e executa sem nenhum erro, porque na primeira linha dissemos ao java onde está localizada a classe Random. A palavra import diz ao Java em qual pacote encontra-se a classe que queremos utilizar. E como fazemos isto? Vamos tentar deste jeito: import java.util.Random; public class ImportExample{ public static void main(String[] args){ Random r = new Random(); System.out.println(r.nextInt(10)); } } Wildcards06 Vimos que para fazer as importações de uma classe devemos dizer em que pacote ela encontra-se. Mas se eu quiser importar mais de uma classe, vou ter que importar uma por uma? Não, temos a possibilidade de importarmos todas as classes contida em um pacote. Vamos ao um exemplo: Este é o mesmo código anteriormente apresentado, com a diferença que agora tem um asterisco no import, este asterisco que é chamado de wildcard. Fazendo o import desta maneira não estamos apenas importando a classe Random, mas todas as classes que estão contidas no pacote java.util. O wildcard é uma maneira mais curta de fazer importações de classes, algumas pessoas podem pensar que fazer a importação de todas as classes de um pacote vai deixar o sistema lento. Isto não acontece porque o compilador sabe qual classe o sistema vai utilizar, portanto na compilação ele só importa as classes que precisa. import java.util.*; public class ImportExample{ public static void main(String[] args){ Random r = new Random(); System.out.println(r.nextInt(10)); } } Importações Redundantes07 Por que será que algumas classes no Java não precisam ser importadas? Porque há no pacote do Java chamado java.lang. Este pacote tem um comportamento diferenciado dos outros, ele é importado automaticamente pelo Java. Você pode importá-lo, mas não é preciso. Quantas importações você acha que é redundante no código a seguir? A resposta é três. A linha 1 e 2 são redundantes porque como foi dito o pacote java.lang é importado automaticamente pelo Java. A linha 4 também é redundante porque a classe Random já tinha sido importada com a importação explícita. Importações Redundantes07 public class InputImports{ public void read(Files files){ Paths.get("name"); } } Se você tentar compilar este código aparecerá que o Java não encontrou duas classes, a Files e a Paths. As duas classes encontram-se no mesmo pacote java.nio.file. Como você importaria estas classes? Há duas maneiras, a importação wildcard e a importação explícita. import java.nio.file.*; ou import java.nio.file.Files; import java.nio.file.Paths; Importações que não funcionam: import java.nio.*; //o wildcard só importa classes e não pacotes. import java.nio.*.*;//só é permitido um wildcard import java.nio.file.Paths.*;//wildcard importa classes e não métodos. Outro caso de redundância é importação de classes que estão no mesmo pacote. O Java já sabe que as classes estão no mesmo pacote e por isso não há a necessidade da importação. Vamos ver um exemplo. Conflitos de Nomes08 Se você quiser usar o java.util.Date no código a seguir, como você faria? public class Conflicts{ Date date; //mais códigos } Creio que você já saiba a resposta. import java.util.Date; Os pacotes são importantes para evitar o conflito de classesque tem o mesmo nome. Por exemplo, a classe com o nome Date encontra-se em mais de um pacote no Java. java.util.Date; java.sql.Date; O problema é: e se eu quiser usar os dois Date, como faço? Posso fazer assim? import java.util.*; import java.sql.*; public class Conflicts{ Date date; //mais códigos } Isto irá gerar o seguinte erro: Conflitos de Nomes08 E se eu fizer assim: import java.util.Date; import java.sql.*; public class Conflicts{ Date date; //mais códigos } Agora funciona, porque a importação explícita tem prioridade sobre a importação wildcard. Mais a pergunta persiste. E se eu quiser usar os dois Date? Posso fazer isto? import java.util.Date; import java.sql.Date; public class Conflicts{ Date date; //mais códigos } Isto vai gerar um conflito de nomes e o Java não sabe qual você quer utilizar. Conflitos de Nomes08 Você pode importar um normalmente e utilizar só que o outro terá sempre que ser explícito. import java.util.Date; //importe comum public class Conflicts{ Date date; //não preciso explicita no resto do código java.sql.Date sqlDate; /*importe explicito, toda vez que for utilizar o sqlDate terei que escrever desta maneira*/ //mais códigos } Soluções: public class Conflicts{ java.util.Date date; java.sql.Date sqlDate; //mais códigos } ou explicitar os dois sempre. ❤ Curso Java Para Iniciantes >>> http://bit.ly/java-swing � Curso de Desenvolvimento Web Completo >>> http://bit.ly/2FnB5Sp Criando um Novo Pacote09 Vamos analisar o seguinte código. Local onde está o packageb E:\Java\packageb package packageb; import packagea.ClassA; public class ClassB{ public static void main(String[] args){ ClassA a; System.out.println("Boa"); } } Local onde está o packagea E:\Java\packagea package packagea; public class ClassA{ } O Java que estou utilizando é o 12, se você estiver utilizando o 8 ou um outro, você não vai precisar estar dentro da pasta JDK como eu mostro nos meus exemplos. Faço isto porque o meu JRE está configurando com o 8. Note os locais onde estão localizados os arquivos. Se você tentar compilar o programa irá gerar o seguinte erro: Criando um Novo Pacote09 C:\Arquivos de Programas\java\jdk-12.0.1\bin>javac -d bin E:\Java\packageb\ClassB.java E se eu colocar o packagea dentro do packageb, será que dá certo? Irá gerar o mesmo erro. Se eu apagar o packagea do diretório E:\Java\pacakgeb (voltar como estava antes) e executar o seguinte comando: C:\Arquivos de Programas\java\jdk-12.0.1\bin>javac -d bin E:\Java\packagea\ClassA.java E:\Java\packageb\ClassB.java Vai gerar o seguinte erro: Criando um Novo Pacote09 Para funcionar vamos executar este comando: javac E:\Java\packagea\ClassA.java E:\Java\packageb\ClassB.java Agora sim compila, mas será que executa? Como você pode ver não foi encontrado a classe principal main. Isto porque o comando executado está errado, execute este comando: C:\Arquivos de Programas\java\jdk-12.0.1\bin>java -cp E:\Java packageb.ClassB ou E:\Java>"C:\Arquivos de Programas\java\jdk-12.0.1\bin\java" packageb.ClassB Agora sim o programa será executado. A anotação -cp significa classpath, ou seja, o caminho do arquivo. Note que a execução do programa foi feita fora do packageb, se você for fazer a execução dentro deste pacote irá gerar um erro. Se quiser executar a execução dentro do packageb, você deve tirar a identificação package packageb; no arquivo ClassB.java. ❤ Curso Java Para Iniciantes >>> http://bit.ly/java-swing � Curso de Desenvolvimento Web Completo >>> http://bit.ly/2FnB5Sp Formatação do Código no Exame10 Algumas vezes o exame pode trazer as seguintes características de código. Figura1 Note que o código não começa na linha 1, quando isto acontece você deve supor que os imports já foram feitos para que este código funcione. Pode notar também que para economizar espaço a formatação do código não vai ser organizada, muitas vezes o código vem tudo na mesma linha. Figura 2 Agora veja este código que começa na linha 1, este sim deveria ter os imports mostrado ou a questão dizer que os imports devem ser considerados incluídos. Outra coisa que as vezes não aparece e você deve considerar que há no código é o método main(). Comparando os dois códigos e se a questão fosse: Os códigos da figura 1 e 2 compilam? Na Figura 1 a resposta é sim, porque os imports não devem ser considerados, na Figura 2 a resposta é não, porque os imports devem ser considerados, e em ambas sempre considerar que o método main() existe. Construtores11 Para criar uma instância de classe, basta adicionar new a frente da classe. Por exemplo: Random r = new Random(); Primeiro você escolhe a classe que deseja criar o objeto, no exemplo é a classe Random, e depois de um nome para o objeto, que no caso é r. Para finalizar a criação do objeto você adiciona o new mais o construtor da classe, que no nosso exemplo é Random(). Random() parece um método, porque é seguido de parênteses. Mas na verdade isto é chamado de construtor, é um tipo especial de método que cria um objeto. Vamos criar um construtor: public class Chick{ public Chick(){ System.out.println(“dentro do construtor”); } } Há dois pontos que devemos ver no construtor: o nome do construtor é igual ao nome da classe e não há retorno de tipo, ou seja, o construtor não retorna nada. Pode aparecer algo assim no exame: public void Chick(){} //não é um construtor Quando você ver um método que tem o nome iniciado com letra maiúscula e tem um tipo de retorno, preste atenção. Isto não é um construtor porque há um retorno (void), void também é considerado um tipo de retorno. É um método comum que não serve para criar um objeto (new Chick). O propósito de um construtor é inicializar campos, contundo você pode colocar o código que quiser dentro dele. Outra maneira de inicializar campos é fazer diretamente na linha onde são declarados. Vamos ver um exemplo: Construtores11 public class Chicken { Int numEggs = 0; //inicializado na linha String name; Public Chicken(){ name = “Duke”; //inicializado no construtor } } Para a maioria das classes você não vai precisar colocar nenhum código no construtor e nem declarar, porque o compilador fará isto para você. 😍 Deseja criar os seus próprios games? >>> http://bit.ly/gameja 😍 Viciados em Java https://cursojavanow.com.br/ Lendo e Escrevendo Campos do Objeto12 É possível ler e escrever variáveis de instância diretamente dentro de um chamador. No exemplo, um cisne bota ovos: public class Cisne { int numeroDeOvos; //instanciando a variável public static void main(String[] args){ Cisne mae = new Cisne(); mae.numeroDeOvos = 1; //escrevendo valor para variável System.out.println(mae.numeroDeOvos); //ler variável } } Quando se diz ler uma variável, você vai escutar o termo get. O get foi executado diretamente pela a variável out. Escrever um valor para uma variável é conhecido como set. No exemplo a variável numeroDeOvos recebe o valor 1. Você pode ler e escrever campos diretamente na linha de declaração: public class Name { String first = “Theodore”; String last = “Mouse”; String full = first + last; } Nas linhas das variáveis first e last utiliza a escrita e na linha da variável full utiliza a escrita e leitura. A variável full primeiro lê as variáveis first e last e depois escreve nela. � Desejaser um programador full-stack? >>> http://bit.ly/tudosei Blocos Inicializadores de Instância13 Quando vimos os métodos, vimos que há chaves ({}). O código entre as chaves é chamado de bloco de código. Algumas vezes os blocos de código estão dentro do método. Eles são executados quando o método é chamado. Outra vezes, os blocos de códigos estão fora do método. Estes são chamados de blocos inicializadores de instância. Quantos blocos você vê no exemplo? Quantas instâncias inicializadoras você vê no exemplo? public static void main(String[] args){ {System.out.println(“Penas”);} } {System.out.println(“Nevada”);} Há três blocos de código e uma instância inicializadora. A contagem de blocos é fácil: apenas conte os números de pares das chaves. Se não houver pares de abertura ({) e fechamento de chaves (}), o código não irá compilar. Não importa se as chaves estão dentro do método main(), mesmo assim serão contados. Para contar as instâncias inicializadoras, os blocos que estão dentro de métodos não devem ser contados. No exemplo só há um par de chaves fora do método. Então só há uma instância inicializadora no exemplo. � Quer aprender a divulgar o seu negócio na internet? >>> http://bit.ly/negocionow Ordem da Inicialização14 Quando escrevemos códigos que inicializam campos em múltiplo lugares, temos que saber a ordem de inicialização. Vamos ver algumas regras: O construtor executa depois de todos os campos e blocos inicializadores de instância serem executados. Exemplo: public class Chick { private String name = “Fluffy”; {System.out.println(“valor atribuído ao campo”);} public Chick() { name = “Tiny”; System.out.println(“construtor executado”); } public static void main(String[] args) { Chick chick = new Chick(); System.out.println(chick.name) } } Executando este exemplo a saída é: valor atribuído ao campo construtor executado Tiny Ordem da Inicialização14 Vamos analisar a execução. A execução começa no método main() porque é por onde todo código Java começa. Começamos chamando o construtor Chick. O Java cria um objeto. Primeiro inicializa a variável name com o valor de “Fluffy”. A seguir executa o bloco inicializadora de instância “valor atribuído ao campo”. Depois de todos os campos e blocos inicializadores de instância serem executados, o Java retorna para o construtor. Dentro do construtor a variável name tem o seu valor mudado para “Tiny” e é executado uma saída de mensagem. Agora que o construtor foi executado, a execução retorna para o método main para continuar a execução do código, que no caso é a saída de mensagem com o valor da variável name. A ordem de campos e blocos de código é importante. Você não pode modificar o valor de uma variável antes de inicializá-la. {System.out.println(name);} //não compila private String name = “Fluffy”; Pode ser que apareça questões sobre inicialização na prova. Vamos ver mais um exemplo. Qual será a saída deste código? � Curso de PHP Developer >>> bit.ly/phpnow Ordem da Inicialização14 public class Egg { public Egg() { number = 5; } public static void main(String[] args) { Egg egg = new Egg(); System.out.println(egg.number); } private int number = 3; {number = 4;} } A saída será 5. Campos e blocos são executados primeiro e na ordem, a variável number recebe o valor 3 de depois 4. A seguir o construtor é executado e a variável number recebe o valor 5.
Compartilhar