SlideShare ist ein Scribd-Unternehmen logo
1 von 77
Programação
Orientada a
Objetos I

Uma abordagem com
Java


ROSICLEIA FRASSON DE SOUZA
INTRODUÇÃO A LINGUAGEM DE PROGRAMAÇÃO


OBJETIVOS

    compreender o que são programas de computador;
    diferenciar hardware de software;
    conhecer os principais componentes dos computadores e suas
     funcionalidades;
    conhecer a linguagem dos processadores;
    diferenciar tradutores e interpretadores;
    compreender como é feita a escolha de uma linguagem de
     programação;




1. O que são programas de computadores

           Computadores são máquinas capazes de realizar uma infinidade de
tarefas em uma velocidade e precisão muito melhor do que nós humanos.
           Atualmente, eles estão presentes nos mais diversos segmentos:

      indústria;
      negócios;
      telecomunicações;
      medicina;
      e na vida pessoal de bilhões de pessoas.

           Na era em que estamos, seria incogitável viver sem essas poderosas
máquinas. Porém, os computadores não conseguem fazer nada sozinhos, eles
precisam ser orientados para executar qualquer tarefa.
           O conjunto de orientações dadas ao computador, para que o mesmo
execute uma tarefa específica, é chamado de programa de computador ou
software.



 2. Hardware X Software

         O hardware é a parte física do computador. É composta pelos
componentes elétricos, eletrônicos, chips, enfim tudo o que é físico no
computador.
Já o software é o que não é palpável, ou seja, a imensa cadeia de
instruções que faz com que o computador seja uma ferramenta útil.



3. Componentes de um computador




Figura 1: Componentes de um computador
Fonte: TI na net. Disponível em: <http://tinanet2011.blogspot.com.br/2011/04/1-mostre-graficamente-os-
principais.html>. Acesso em 12 jan 2013.




           O hardware de um computador é composto por vários componentes
e cada um tem uma responsabilidade.
           Os componentes de entrada/saída tem a função de comunicar o
computador com o usuário e o usuário com o computador.
           A memória secundária serve para armazenar grandes quantidades de
dados e evitar que estes se percam com o desligamento do computador.
           A CPU (Unidade Central de Processamento) é o cérebro do
computador. Ela é a responsável por organizar todas as funções executadas pelo
mesmo. Cabe a CPU executar as instruções dadas pelos programas de
computador. Para executar os programas, o processador utiliza a memória RAM
para armazenar as informações necessárias a execução dos programas.



4. Linguagem do processador

          O processador é um circuito eletrônico digital. Deste modo, ele
consegue processar informações apenas compostas por bits, ou seja apenas 0 e
1.
          Isto se aplica também as instruções dadas nos softwares. Para que o
processador possa entender, as instruções devem ser passadas em linguagem de
máquina, apenas contendo números binários.
           Os primeiros computadores criados eram programados apenas
utilizando linguagem de máquina. Para inserir as instruções nestes, era
necessário uma grande quantidade de pessoas que percorriam a gigantesca
máquina acionando ou desligando interruptores.
           Era um processo muito demorado e sujeito a muitos erros. Por esse
motivo, surgiram as linguagens de programação, que são mais próximas as
linguagens humanas.



5. Interpretadores e Compiladores

            Para que os processadores possam executar as instruções escritas em
linguagens de programação, é necessário traduzir as instruções para a linguagem
de máquina.A tarefa de conversão é feita por um programa de computador que
recebe as instruções de alto nível e as converte para instruções binárias. Existem
alguns métodos para efetuar o processo de tradução. Os mais conhecidos são
citados abaixo:

       Interpretador: Quando um interpretador é utilizado para efetuar a
       conversão, o mesmo vai percorrendo as instruções e à medida em que vai
       interpretando cada instrução, vai traduzindo para o processador, que
       então executa cada ação correspondente. Em cada execução do
       programa é necessário o uso do interpretador. O uso de um interpretador
       torna a execução do programa mais lenta.
       Compilador: Utilizando um compilador, as instruções das linguagens de
       programação geram um outro código em linguagem de máquina. A
       execução do programa é feita com o arquivo compilado, não sendo mais
       necessário o uso do compilador. A execução de programas compilados é
       mais rápida, porém, o programa deve ser compilado para cada tipo de
       processador e de sistema operacional.




6. Linguagens de programação

           Uma linguagem de programação é um meio padronizado de escrever
instruções para um processador. Existem uma infinidade de linguagens de
programação e cada uma delas, foi construída com um propósito diferente.
           A escolha de uma linguagem de programação deve estar
condicionada ao tipo de problema que se quer resolver. Segundo LUZ (2009), a
escolha de uma linguagem de programação deve ser guiada por alguns
princípios:
                     Partindo do princípio de que uma linguagem deve facilitar a
                     comunicação com outras pessoas e ajudar você a expressar seu
                     conhecimento, vamos entrar no contexto do desenvolvimento de
                     software e colocar em discussão um tema que gera muita confusão,
                     acaba com longas amizades e até destrói casamentos.
                     Qual a melhor linguagem de programação?
                     Achar uma resposta para essa pergunta muitas vezes passa por
                     encontrar todo tipo de argumento para defender a linguagem que
                     você usa – o que pode ser um grande erro se fechar seus olhos para
                     tecnologias que podem torná-lo um programador melhor.
                     O objetivo de uma linguagem de programação é permitir que um
                     programador possa resolver problemas computacionais criando um
                     conjunto de instruções que seguem um determinado padrão, por
                     meio do qual se representam ações executáveis por um computador.
                     Isso pode fazer com que muitos pensem que a melhor linguagem é
                     aquela que permite que um desenvolvedor possa se ?comunicar? da
                     melhor forma com o computador. Outro grande erro. Para isso
                     existem os compiladores.
                     Quem já trabalhou em um projeto razoável, já sofreu com problemas
                     durante a reutilização do código – comentários que não comentam
                     nada, códigos macarrônicos e outros fatores que atrasam qualquer
                     projeto de criação de software.
                     Não existe nada mais estressante para um desenvolvedor do que
                     perder horas, dias, semanas ou meses tentando entender um código
                     que outro programador criou. Com isso você perde muito tempo de
                     desenvolvimento, tentando ler códigos e corrigir bugs e perdendo
                     produtividade.
                     Pensando dessa forma, uma linguagem de programação deve
                     melhorar a comunicação entre desenvolvedores, facilitando a criação
                     de códigos mais limpos, claros e que podem ser lidos facilmente por
                     outro programador a qualquer momento.
                     Portanto ser o mais próximo de uma linguagem humana e intuitiva é
                     uma grande qualidade e deve ser considerada na escolha de uma
                     linguagem para começar a programar.
                     Então para de enrolar e diz logo qual devo escolher!
                     Sinto desapontá-lo, mas essa pergunta não tem uma resposta
                     predefinida, pois depende de alguns fatores que estão totalmente
                     incorporados à relação do programador com a linguagem.
                     Você deve escolher a linguagem que faça de você um programador
                     melhor, que se divirta programando, que aumente sua produtividade
                     e o anime a se aprofundar nos conceitos e na filosofia por trás dela.
                     Mas cuidado para nunca ficar limitado a não conhecer as novas
                     tecnologias que surgirem. É um erro grave que frequentemente
                     acontece no mundo do desenvolvimento de software.
                     Antes de concluir o raciocínio, um exemplo interessante de que a
                     linguagem melhor é a que fornece a possibilidade de se expressar
                     melhor, acontece quando imaginamos um possível bate papo entre
                     um brasileiro e um americano, por exemplo.
                     Muitas pessoas podem achar que o correto é o brasileiro falar inglês,
                     outras acham que o americano é quem deve falar português e alguns
que vai depender se o brasileiro está nos Estados Unidos ou se o
                     americano está no Brasil.
                     Mas a forma como o brasileiro e o americano devem se comunicar é
                     a forma em que ambos consigam se expressar de forma mais
                     adequada e confortável, seja ela falar inglês, português ou tentar
                     uma comunicação por mímica.
                     Portanto, procurem conhecer bem a linguagem que você programa
                     ou está interessado em começar a programar e a comunidade por
                     trás dela. Procure uma linguagem que te possibilite desenvolver seu
                     conhecimento da melhor e menos dolorosa forma possível. Caso
                     você consiga isso, ela é ideal.
                     Na verdade, a linguagem pouco importa. Você, o programador, é
                     quem faz toda a diferença no final das contas.



7. Por que Java?

           Em um curso de desenvolvimento, a escolha de uma linguagem de
programação é um processo bem delicado. Java foi escolhida por atender
alguns requisitos. Dentre eles, pode-se citar:

       Facilidade de aprendizado;
       Versatilidade;
       Popularidade;
       Amplo mercado de trabalho;
       Segurança;
       Inúmeros frameworks;
       Grande aceitação nas companhias;
       Gratuidade e
       Abundância de informações;

           Além disso, os conceitos utilizados em Java ajudam a entender
melhor outras linguagens e tecnologias. O que deve ficar claro é que o
objetivo do Java não é o de construir sistemas pequenos, com um ou dois
desenvolvedores, para estes existem linguagens de programação mais
produtivas como cita CAELUM (2012):
                     O foco da plataforma é outro: aplicações demédio a grande porte,
                     onde o time de desenvolvedores tem váriaspessoas e sempre pode
                     vir amudar e crescer. Não tenha dúvidas que criar a primeira versão
                     de uma aplicaçãousando Java, mesmo utilizando IDEs e ferramentas
                     poderosas, será mais trabalhoso que muitas linguagensscript ou de
                     alta produtividade. Porém, com uma linguagem orientada a objetos e
                     madura como o Java,será extremamente mais fácil e rápido fazer
                     alterações no sistema, desde que você siga as boas práticas
                     erecomendações sobre design orientado a objetos.Além disso, a
                     quantidade enorme de bibliotecas gratuitas para realizar os mais
diversos trabalhos (tais comorelatórios, gráficos, sistemas de busca,
geração de código de barra,manipulação de XML, tocadores de
vídeo,manipuladores de texto, persistência transparente, impressão,
etc) é um ponto fortíssimo para adoção doJava: você pode criar uma
aplicação sofisticada, usando diversos recursos, sem precisar
comprar um componenteespecífico, que costuma ser caro. O
ecossistema do Java é enorme.
Cada linguagem tem seu espaço e seu melhor uso. O uso do Java é
interessante em aplicações que virãoa crescer, em que a legibilidade
do código é importante, onde temos muita conectividade e se há
muitasplataformas      (ambientes     e    sistemas      operacionais)
heterogêneas (Linux, Unix, OSX eWindows misturados).
JAVA


OBJETIVOS

    conhecer a história do Java;
    conhecer as diversas distribuições de Java e a utilidade de cada uma
     delas;
    entender o processo de compilação e execução dos programas em
     Java;
    compreender a diferença entre jdk e jre;
    aprender a instalar o jdk;
    entender o que são APIs Java;
    desenvolver o primeiro programa em Java.




1. Um pouco de história...

            Java foi construída para ser utilizada em pequenos dispositivos
eletrônicos, o que não deu muito certo, pois o projeto era muito avançado
para a época.
            Com a explosão da internet, a Sun viu uma nova luz para o Java.
Remodelou a linguagem que passou a ser utilizada em applets para a internet.
A linguagem foi ficando cada vez mais poderosa e hoje está presente em sites,
portais, internet banking, programas desktop, celulares, cartões de crédito,
blue-rays e até em anéis.
            A parte mais interessante é que a tecnologia Java nasceu com o
intuito de programar pequenos dispositivos, percorreu um longo caminho e a
cada dia está mais presente em dispositivos eletrônicos, o que era o objetivo
inicial.

            PARA SABER MAIS

                  Para conhecer detalhes da história do Java
                   acesse:<http://www.devmedia.com.br/websys.4/webread
                   er.asp?cat=61&revista=easyjavamag_1#a-2982>
2. Distribuições do Java

          Java pode ser encontrada em três distribuições principais, cada
uma com sua finalidade específica:

         Java StandartEdition (JSE): Usada em computadores pessoais e
         ambientes de trabalho. Várias APIs acompanham esta versão e tantas
         outras podem ser baixadas do site da Oracle.
         Java Enterprise Edition (JEE): É a tecnologia Java para aplicativos
         distribuídos em rede em larga escala e aplicativos baseados na web .
         Possui um grande número de APIs voltadas para a segurança da
         aplicação. Usada em servidores, contendo suporte para JSP, XML e
         servlets.
         Java Micro Edition (JME): Usada em dispositivos com recursos
         limitados, como sistemas embarcados e dispositivos móveis. Possui
         APIs bem simples e leves para economizar memória e processamento.




Figura 2: Edições da linguagem Java e seus respectivos alvos de aplicação.
Fonte: FIORESI, Cristiano. Conceitos básicos da plataforma Java e J2ME. Disponível                        em:
<http://www.devmedia.com.br/conceitos-basicos-das-plataformas-java-e-j2me/6484> Acesso em: 12 jan 2013.




           Além das três principais distribuições, também existe o Java Card,
que é uma edição específica para cartões inteligentes, extremamente reduzida.
Nesta tecnologia até a máquina virtual é dividida entre o sistema do cartão e o
sistema operacional do terminal.



3. Compilador e interpretador Java
O processo de tradução da linguagem Java para a linguagem de
máquina é um pouco diferente das outras linguagens de programação. Os
programas Java são compilados e interpretados.
           Após a criação de um programa Java, um compilador transforma o
programa em uma linguagem intermediária, como pode ser visto na figura 3,
chamada de bytecodes. O bytecode é independente de plataforma.Todas as
vezes que o programa é executado, a JVM (Java Virtual Machine) lê o arquivo
com a extensão .class que está em bytecode e o interpreta para o processador.




Figura 3: Processo de criação e execução de um programa Java
Fonte: MELO, Mario. Minicurso Java Básico




            Com o uso da máquina virtual, o programa fica independente de
sistema operacional e de plataforma. Uma máquina virtual é muito mais ampla
do que um interpretador. Uma máquina virtual é uma espécie de computador de
mentira, tem tudo o que um computador tem: gerenciamento de memória,
thread, pilha de execução.
            Nas primeiras versões do Java, o processo de interpretação feito pela
JVM era lento, o que tornava um problema para a linguagem. Na versão 1.2
surgiu o Compilador Just In Time ou Compilador JIT. O compilador JIT trabalha
em conjunto com o interpretador Java. O interpretador verifica quais trechos de
código são executados mais vezes e pede que o compilador JIT os compile,
convertendo o bytecode na linguagem de máquina do processador que está
executando o programa. O JIT também possui informações relativas ao ambiente
em que está executando, como quantidade de usuários simultâneos e memória
disponível. Com essas informações a JVM muda a estratégia de compilação em
busca de um melhor desempenho.
4. JSE

                A JSE é o segmento base da plataforma Java. O JSE possui duas
divisões:

          JRE: ambiente de execução Java para quem quer apenas executar
          programas em Java. É composta pela JVM e as APIs Java, que é uma
          coleção de softwares prontos, que incluem desde estruturas para a
          manipulação de arquivos até a construção de aplicativos gráficos.
          JDK: é o conjunto de ferramentas necessárias para o desenvolvimento de
          programas Java. É composto pela JRE, javac (compilador), jar
          (empacotador) e o javadoc (documentação)

             Na figura 4 é possível observar as APIs que compõem a plataforma
Java e as ferramentas que acompanham o kit de desenvolvimento (jdk).




Figura 4: Arquitetura JSE
Fonte: PAMPLONA, Vitor Fernando. O que é Java. Disponível em: <http://javafree.uol.com.br/artigo/871498/Tutorial-
Java-O-que-e-Java.html> Acesso em 12 jan 2013.




5. Instalando o ambiente de desenvolvimento

           Para iniciar o desenvolvimento em Java é necessário ter o jdk
instalado. Abaixo segue um passo-a-passo para a instalação no sistema
operacional windows.
Passo 1: Acessar o site da Oracle
Acesse o endereço:
<http://www.oracle.com/technetwork/java/javase/downloads/index.html> e
clique no link correspondente ao JDK 7.




Figura 5: Instalação jdk
Fonte: Elaboração da autora




Passo 2: A página será redirecionada.
Clique em aceitar os termos da licença e escolha a versão compatível com o
sistema operacional. Neste caso, o Windows 64 bits.
Figura 6: Instalação do jdk
Fonte: Elaboração da autora




Passo 3: A página será redirecionada.
Abrirá uma janela semelhante a figura abaixo, para a confirmação do download.
Clique em Download.




Figura 7: Instalação do jdk
Fonte: Elaboração da autora



Passo 4: Escolha o local onde o arquivo será salvo.
Escolha o local e clique em Salvar.
Figura 8: Instalação do jdk
Fonte: Elaboração da autora



Passo 5: O download será iniciado.
Aguarde a conclusão do download.




Figura 9: Instalação do jdk
Fonte: Elaboração da autora



Passo 6: Instalação
Dê um duplo clique no instalador e a janela abaixo deverá ser exibida.
Clique em Next.
Figura 10: Instalação do jdk
Fonte: Elaboração da autora



Deve aparecer a próxima janela do instalador.




Figura 11: Instalação do jdk
Fonte: Elaboração da autora



O botão Change permite alterar o local de instalação.
Clique em Next.
Deve iniciar o processo de instalação
Figura 12: Instalação do jdk
Fonte: Elaboração da autora




O instalador pede a confirmação do destino da instalação.
Clique em Next.




Figura 13: Instalação do jdk
Fonte: Elaboração da autora



Deve aparecer a janela abaixo.
Figura 14: Instalação do jdk
Fonte: Elaboração da autora



Após concluir o processo de instalação, a janela abaixo será exibida.
Clique em Close.




Figura 15: Instalação do jdk
Fonte: Elaboração da autora




6. Bibliotecas de classes do Java

            Os programas Java são formados por classes. As classes contém
métodos que executam tarefas e retornam informações quando as mesmas são
concluídas. É possível criar tudo que é necessário para construir um programa
Java, porém Java traz consigo inúmeras classes prontas, que realizam as mais
variadas tarefas. Essas classes são chamadas de APIs. Deste modo, existem dois
aspectos para aprender o mundo Java. O primeiro deles, é compreender os
princípios e sintaxe da linguagem para desenvolver classes e o segundo conhecer
as APIs Java e aprender como usá-las.

7. Primeiro programa em Java

            Além de ter o jdk instalado, é necessário ter um editor de texto. Abra
qualquer editor de texto e digite o texto mostrado na figura 16.A princípio, não
se preocupe em entender tudo o que está escrito. Logo abaixo o código será
explicado linha a linha. Vale lembrar que o Java é case sensitive, então cuidado
para não trocar letras maiúsculas e minúsculas. Essa troca pode gerar um erro no
momento da compilação.




Figura 16: Primeiro programa em Java
Fonte: Elaboração da autora

            Salve o arquivo dentro da pasta Programas, contida no C: com o
nome PrimeiroPrograma.java. Vale ressaltar que os programas em Java devem
ser salvos com omesmo nome da classe.

            O programa já está salvo. Como já visto no tópico 3 deste capítulo, os
programas Java são compilados e interpretados. Portanto, o próximo passo é
compilar o código. Para compilar o programa é necessário solicitar ao compilador
do Java chamado javac, que gere o bytecode correspondente ao código Java.
Para fazê-lo abra o terminal do Windows e vá até o diretório em que o programa
está salvo.
Figura 17: Acessando o prompt de comando
Fonte: Elaboração da autora

           Digite o comando javacPrimeiroPrograma.java no prompt de
comando. Se não ocorrer nenhum erro, deve aparecer no diretório onde está
salvo o arquivo java, um arquivo PrimeiroPrograma.class. O arquivo .class é o
arquivo que contêm o bytecode do código fonte.
           O próximo passo é fazer com que a JVM interprete o bytecode e
execute o programa. Para executar o programa no prompt de comando digite
javaPrimeiroPrograma. Deve aparecer na tela a seguinte mensagem: Este é meu
primeiro programa em Java!.




Figura 18: Execução do programa Java pelo prompt de comando
Fonte: Elaboração da autora

               A seguir está descrito o que faz cada linha do código:

          A linha 1 cria uma classe (palavra-chave class) pública (palavra-chave
          public) chamada PrimeiroPrograma;
Na linha 3 está o método main, que é o ponto de partida de qualquer
       programa java, é onde o programa é de fato iniciado. A função main
       precisa ser pública (palavra-chave public), estática (palavra-chave static),
       sem tipo de retorno (palavra-chave void) e precisa conter um parâmetro
       array do tipo String (Stringargs[]).
       A linha 5 indica que o que está escrito entre os parênteses deve aparecer
       na tela.


            PARA SABER MAIS

                  Para mais informações sobre PATH e CLASSPATH
                   acesse:<http://devjava.wordpress.com/2010/01/11/java_h
                   ome-classpath-e-path-o-que-so-isso-para-que-servem-e-
                   como-configura-los/>
                  Para entender um pouco mais sobre jdk e jre acesse:
                   <http://www.devmedia.com.br/alo-mundo-entendendo-o-
                   java-de-uma-forma-diferente/24032>



PARA FIXAR

1. Qual a diferença entre jdk e jre?

2. Crie uma classe Java que imprima o texto: "Consegui concluir meu primeiro
programa em Java".
IDE


OBJETIVOS

         entender a funcionalidade das IDEs;
         conhecer as principais IDEs para desenvolvimento Java;
         visualizar os passos para a instalação da IDE Netbeans;
         conhecer as principais funcionalidades da ferramenta.



1. IDEs

            Como visto no capítulo anterior, o processo de criar programas em
Java usando o bloco de notas e o prompt de comando é um processo bem
dispendioso. Para deixar o processo de desenvolvimento mais produtivo, existem
programas específicos, chamados de IDEs (Ambiente de Desenvolvimento
Integrado).
            Uma IDE é um software que tem como objetivo maximizar a
produtividade em uma ferramenta única. Alguns recursos que as IDEs possuem:
       Editor de código: Escrita rápida de código, auto completar,
       gerenciamento de importações, dicas para correção e geração de código.
       Depurador: Facilidade na busca por erros no código através da análise
       cuidadosa de cada passo executado pelo software.
       Compilador: Geração de código de máquina a partir do código fonte
       automaticamente.
       Deploy: Publicação da aplicação, geração de executáveis.
       Código limpo e automatizado: Facilidadeno entendimento do projeto por
       todos os envolvidos.
       JVM: Processo de interpretação de bytecodes automático.



2. Principais IDEs para o desenvolvimento Java

            Existem uma infinidade de IDEs para o Java, abaixo segue as
características de algumas delas.
       JDeveloper: O JDeveloper é uma ferramenta da Oracle que tem como
       principal característica a cobertura de todo o ciclo de desenvolvimento:
       análise, codificação, manutenção, otimização e implantação. Esta
       ferramenta é pouco flexível e seu uso é recomendado quando o software
for produzido usando toda a arquitetura com produtos Oracle.
         Eclipse: Poderosíssima IDE de desenvolvimento, leve, rápido
         configurávelcom inúmeros plug-ins. Deixa a desejar no desenvolvimento
         de telas para desktop.
         Netbeans: Juntamente com o Eclipse, uma das IDEs mais utilizadas pela
         comunidade de desenvolvimento. Tem editor de GUI nativo.Gera muito
         código automático, não editável.



3. Netbeans

             Neste curso, vamos optar pela IDE Netbeans, por ter um melhor
suporte para desenvolvimento Desktop. O Netbeans é uma ferramenta gratuita e
tem suporte para desenvolvimento nas linguagens C, C++, Groovy, PHP e Java.
             O    download    da     ferramenta   pode     ser    feito   em:
<http://netbeans.org/downloads/index.html>. Abrindo a página correspondente
será visualizada uma tela como na figura abaixo:




Figura 19: Download do Netbeans
Fonte: Elaboração da autora

           Inicialmente, os softwares desenvolvidos, terão o padrão Desktop,
deste modo, baixar a versão correspondente a Java SE é suficiente. Clicando em
Download, será aberta uma janela para a escolha do local onde o instalador será
salvo como mostra a figura abaixo.
Figura 20: Download do Netbeans
Fonte: Elaboração da autora

            Após a escolha do local onde ficará salvo o instalador clique em
salvar. O download será iniciado. Dê um duplo clique sobre o instalador. A janela
do mesmo será aberta.




Figura 21: Instalação do Netbeans
Fonte: Elaboração da autora

           Na janela abaixo, clicando em personalizar é possível escolher os
pacotes que serão instalados. Após ter efetuado a escolha, clique em próximo.
Figura 22: Instalação do Netbeans
Fonte: Elaboração da autora

          Na janela seguinte, é necessário aceitar o contrato de licença. Clique
em próximo.




Figura 23: Instalação do Netbeans
Fonte: Elaboração da autora




           A próxima janela é sobre o framework JUnit. O JUnit é uma
ferramenta usada para testes. Neste momento não será necessário instalar a
mesma. Clique em não instalar JUnit. Clique em próximo.
Figura 24: Instalação do Netbeans
Fonte: Elaboração da autora



          Na próxima tela serão solicitados o local para a instalação e o local
onde o jdk se encontra. Depois de preencher essas afirmações, clique em
próximo.




Figura 25: Instalação do Netbeans
Fonte: Elaboração da autora
Na próxima tela é mostrado um resumo das configurações da
instalação. Clique em instalar.




Figura 26: Instalação do Netbeans
Fonte: Elaboração da autora



                A tela do progresso da instalação será mostrada.




Figura 27: Instalação do Netbeans
Fonte: Elaboração da autora
Quando a instalação for concluída, a tela abaixo será mostrada. Clique em
finalizar.




Figura 28: Instalação do Netbeans
Fonte: Elaboração da autora




4. Funcionalidades do Netbeans

                As principais funcionalidades do Netbeans são:

          Autocompletar: Pressionando as teclas CTRL + Espaço, uma caixa de
          seleção será aberta, com opções para preenche o código faltante.
          Gerenciar importações: O Netbeans varre o código do editor de texto
          constantemente e avisa imediatamente a ocorrência de classes não
          importadas ou instruções importadas não utilizadas. Nos casos de não
          importação de classes, uma marca de erro é exibida e para importações
          não utilizadas uma advertência.
          Dicas para corrigir código: Para os erros mais comuns de código, o
          Netbeans enumera possíveis maneiras de corrigir os mesmos.
          Formatar código: Pressionando ALT + SHIFT + F, o Netbeans formata o
          código da classe.
          Dobramento de código: No editor de código, é possível contrair e
          expandir blocos de código. Com este recurso, é possível deixar as partes
          de código que se está trabalhando mais visível.
Gerar códigos: Pressionando as teclas ALT + INSERT é possível gerar
construtores e métodos de acesso.
Code templates: São pedaços de código que podem ser acessados por
atalhos. Existem alguns disponíveis no Netbeans e estão citados abaixo.
Eles devem ser acessados juntamente com a tecla TAB.
    o sout: Atalho para




   o psvm: Atalho para o método main;




   o for: Atalho para




   o St:




   o if:




Teclas de atalho:
   o ALT + F1: pesquisarjavadoc;
   o CTRL + E: excluir a linha atual;
   o F5: iniciar depuração do projeto principal;
   o SHIFT + F6: executar projeto principal;
   o ALT+ ENTER: exibir dica.
SINTAXE DA LINGUAGEM JAVA



OBJETIVOS

    entender a utilização do ponto-e-vírgula, espaços em branco e o padrão
     case-sensitive presente na linguagem Java;
    conhecer as palavras reservadas;
    aprender a utilizar os tipos primitivos de dados;
    compreender os casts implícitos e explícitos entre tipos numéricos;
    entender o uso de Strings em Java;
    aprender como se declaram as variáveis e constantes em Java;
    compreender a diferença de alocação na memória entre os tipos
     primitivos e as variáveis de referência;
    conhecer o GarbageCollector;
    conhecer os operadores básicos, lógicos, aritméticos, incremento e
     decremento e de atribuição;
    aprender a sintaxe das estruturas de controle e repetição da linguagem
     Java;
    diferenciar os tipos de comentários e a utilidade de cada um.



1. Ponto-e-vírgula, blocos, espaços em branco e case-sensitive

            Java é uma linguagem de formato livre, ou seja, não existem regras
especiais para o espaçamento vertical ou para a identação horizontal. Porém,
para uma melhor legibilidade do código, é interessante usar espaços, tabulações
e novas linhas. Em Java, espaços em branco podem ser usados sem restrições.

            Um bloco é formado por uma ou mais instruções agrupadas entre
chaves indicando que formam uma só unidade. O uso de chaves em Java indica a
presença de um bloco, ondea abertura da chave indica o início do bloco e o
fechamento da chave, o fim do bloco. Os blocos podem ser organizados em
estruturas aninhadas infinitamente.

            Uma instrução é composta por uma ou mais linhas terminadas com
um ponto-e-vírgula. No fim de cada instrução, indispensavelmente deve ser
usado o sinal de pontuação ponto-e-vírgula. A quebra de linha não separa
instruções.

            O Java é uma linguagem case-sensitive, ou seja, diferencia maiúsculas
de minúsculas. Portanto, escrever letra e LETRA é diferente para o Java.



2. Palavras reservadas

            O Java possui uma lista de palavras que possuem um significado
especial para o compilador. Essas palavras não podem ser usadas na declaração
de classes, métodos e variáveis. A tabela 1 lista estas palavras.

abstract            assert                 boolean      break     byte        case

catch               char                   class        const     continue    default

Do                  double                 else         enum      extends     false

final               finally                float        for       goto        if

implements import                          instanceof   int       interface   long

native              new                    null         package   private     protected

public              return                 short        static    strictpf    super

switch              synchronized this                   throw     throws      transient

Try                 void                   volatile     while
Tabela 1: Palavras reservadas Java
Fonte: Elaboração da autora.




3. Tipos primitivos de dados




Figura 29: Declaração de tipos primitivos em Java
Fonte: Elaboração da autora
Existem somente oito tipos primitivos de dados em Java, todo o resto
é objeto. Tipos primitivos fazem parte da linguagem e não são instâncias de
outras classes. A declaração dos tipos primitivos pode ser vista na figura 29. Os
seus nomes são palavras reservadas.



3.1 Tipo boolean

           O tipo boolean é o tipo mais simples encontrado em Java. Uma
variável booleana pode conter apenas dois valores: true ou false, que
representam os valores verdadeiro e falso, respectivamente. O valor padrão do
tipo boolean é false.



3.2 Tipo char

            O tipo char representa um único caracter em Java. Caracteres em
Java são representados usando o conjunto de caracteres Unicode, usando dois
bytes por caracter. Esta representação de caracteres permite a representação
em várias línguas simultaneamente.

            Alguns caracteres são considerados especiais – se tentarmos imprimir
esses caracteres ao invés de imprimir um caracternormal, uma ação especial
ocorrerá. É o caso, por exemplo do número 7 que corresponde ao som bell.

                Existem ainda os caracteres de controle, mostrados na tabela 2.

Caracter        Descrição

”              aspa dupla

’              aspa simples

n              nova linha

t              Tabulação

              Barra

r              Enter
Tabela 2: Caracteres de controle
Fonte: Elaboração da autora
3.3 Tipos numéricos

Classificação               Tipo           Descrição

Inteiro                     byte           Variáveis do tipo byte podem representar valores
                                           inteiros com 8 bits de precisão, ou seja, valores
                                           entre -128 a 127.

                            short          Variáveis do tipo short podem representar valores
                                           inteiros com 16 bits de precisão, ou seja, valores
                                           entre -32768 a 32767.

                            int            Variáveis do tipo int podem representar valores
                                           inteiros com 32 bits de precisão, ou seja, valores
                                           entre -2147483648 a 2147483647.

                            long           Variáveis do tipo long podem armazenar valores
                                           inteiros com 64 bits de precisão, ou seja, valores
                                           entre          -9223372036854775808              a
                                           9223372036854775807.

Ponto Flutuante             float          Variáveis do tipo float podem armazenar valores
                                           em ponto flutuante com 32 bits de precisão, na
                                           faixa de - 1.40239846E-45 a 3.40282347E + 38 (9
                                           dígitos significativos de precisão).

                            double         Variáveis do tipo double podem armazenar
                                           valores em ponto flutuante com 64 bits de
                                           precisão, na faixa de - 4.94065645841246544E-
                                           324 a 1.79769313486231570E + 308 (18 dígitos
                                           significativos de precisão).
Tabela 3: Tipos primitivos numéricos em Java
Fonte: Elaboração da autora

            Ao escolher um tipo de dado para ser usado, o programador deve
estar atento a faixa de valores que o campo pode vir a ocupar.

            Para representar valores decimais em Java, utilizamos o ponto ao
invés da vírgula.



4. Conversão entre tipos primitivos
Figura 30: Casts implícitos e explícitos
Fonte: Elaboração da autora

          Valores de tipos numéricos podem ser transformados em outros
tipos numéricos de duas formas:

           Implicitamente: A JVM transforma em tempo de execução, quando acha
           conveniente, tipos restritos em tipos com maior amplitude, ou seja, uma
           variável pode receber valores de variáveis de tipos com tamanho menor
           do que a mesma foi declarada. . Nenhuma informação é perdida (Figura
           30).
           Através de uma operação chamada casting ou conversão explícita. Para
           efetuar a conversão explícita, basta colocar o tipo de dado para o qual se
           deseja converter entre parênteses antes da expressão a ser convertida.
           Neste caso, o programador estará se responsabilizando por possíveis
           perdas de valores (Figura 30).

                  Na tabela abaixo, estão relacionados todos os casts possíveis na
linguagem Java.

      Para     byte        short           char        int            long          float          double

byte    De       -----      implícito      (char)      implícito      implícito      implícito     implícito

short           (byte)         -----       (char)      implícito      implícito      implícito     implícito

char            (byte)       (short)         -----     implícito      implícito      implícito     implícito

int             (byte)       (short)       (char)            -----    implícito      implícito     implícito

long            (byte)       (short)       (char)         (int)          -----       implícito     implícito

float           (byte)       (short)       (char)         (int)         (long)          -----      implícito

double          (byte)       (short)       (char)         (int)         (long)        (float)         -----
Tabela 4 :Casts possíveis na linguagem Java
Fonte: CAELUM. Java e orientação a objetos. Disponível em: < http://www.caelum.com.br/apostila-java-orientacao-
objetos/> Acesso em 14 jan 2013.




5. String

            Em Java não existe um tipo primitivo para se trabalhar com textos.
Para fazer uso dos mesmos é necessário utilizar a classe String presente no Java
desde a primeira versão. Por ser uma classe amplamente usada, ela não precisa
ser instanciada, sua atribuição é composta por uma sequência de caracteres
delimitados por aspas duplas.



6. Declaração de variáveis

           Variáveis são espaços na memória onde podemos guardar
informações. Cada valor é convertido para binário e então pode ser alocado na
memória.Praticamente todos os programas usam variáveis. E como o próprio
nome diz, elas podem ter o valor modificado durante a execução do programa.
As variáveis possuem tipos diferentes, dependendo da informação a ser
armazenada.

          No Java, para declarar uma variável é necessário especificar o tipo,
dar um nome a ela e preferencialmente inicializá-la.

           Os nomes de variáveis ou identificadores possuem algumas regras
para que o compilador identifique como válido:
Os nomes de variáveis em Java devem ser inicializados por uma letra, um
       cifrão ou por undescore;
       Após o primeiro caracter, vale qualquer combinação de números, letras e
       caracteres;
       Os identificadores não podem ter o nome igual ao de uma palavra
       reservada.



7. Diferença entre tipos primitivos e variáveis de referência

              As variáveis primitivas guardam o real conteúdo da variável. Uma
variável de tipo primitivo pode armazenar exatamente um valor de seu tipo
declarado por vez, quando outro valor for atribuído a essa variável, seu valor
inicial será substituído.

            As variáveis de referência são as variáveis que apontam para um
objeto, ou seja,guardam um endereço de memória para um objeto criado.Desta
forma, quando um outro valor é atribuído para a variável, uma nova posição de
memória aloca o novo valor e a referência aponta para a nova posição de
memória. O tamanho alocado para uma variável de referência é sempre fixo,
pois se trata de um endereço de memória que mostra como chegar ao objeto.



8. GarbageCollector

           Quando referências são criadas, espaço em memória é alocado a
elas. Quando não as utiliza mais, este espaço precisa ser liberado.

                             Em Java, isto é responsabilidade do
                   GarbageCollector. Este mecanismo verifica os espaços de
                   memória sem referência e os limpa para um melhor
                   aproveitamento.

                              O coletor de lixo em Java faz isso
automaticamente, ou seja, o programador não precisa se preocupar com isso.



9. Constantes

           Uma constante em Java recebe um valor que não pode ser
modificado. Para criar uma constante em Java é utilizado o modificador final.
Uma vez que a variável for definida como constante, é obrigatório, a inicialização
da mesma.



Convenções de Código

      Métodos, atributos e variáveis: Devem ser declarados com letras
       minúsculas. Caso seja nome composto, a primeira letra de cada
       palavra, exceto a primeira, deve ser escrita em maiúscula. Ex: nome,
       meuNome.
      Constantes: Devem ser usadas letras maiúsculas na declaração. Em
       casos de palavras compostas, as palavras devem ser divididas usando o
       undescore.




10.Operadores básicos



.      Referência a método, função ou atributo de um objeto.

,      Separador de identificadores.

;      Finalizador de declarações e comandos.

[]     Declarador de vetores e delimitador de índices.

{}     Separador de blocos.

()     Lista de parâmetros.

=      Operador de atribuição.
Tabela 5: Operadores básicos da linguagem Java
Fonte: Elaboração da autora




11. Operadores lógicos



>        Maior

>=       Maior ou igual
<        Menor

<=       Menor ou igual

==       Igual

!=       Diferente

&&       E

||       Ou
Tabela 6: Operadores lógicos
Fonte: Elaboração da autora




12. Operadores aritméticos

            Na tabela 1, estão apresentados os operadores aritméticos
disponíveis em Java.



+        Soma

-        Subtração

/        Divisão

*        Multiplicação

%        Módulo (resto da divisão)
Tabela 7: Operadores lógicos
Fonte: Elaboração da autora




13. Incremento e decremento

          Os operadores de incremento e decremento são operadores que
atuam sobre uma única variável numérica, aumentando ou diminuindo ou seu
valor.

          incremento: adicionar o valor de uma unidade ao valor atual. O operador
          de incremento é o sinal de ++;
          decremento: diminuir uma unidade do valor atual. O operador de
          decremento é o --;

                Os operadores de incremento e decremento podem ser posicionados
imediatamente antes ou imediatamente após o nome da variável. Vale ressaltar
que esses operadores funcionam de forma diferente dependendo da posição em
relação a variável. Se o operador for colocado antes, a variável é incrementada
no momento da sua avaliação. Caso contrário, a variável é incrementada após a
sua avaliação. Maiores detalhes podem ser vistos na tabela abaixo:

Operador          Exemplo            Significado

++                ++x                Incrementa a variável e depois usa.

                  x++                Usa a variável e depois incrementa.

--                --x                Decrementa a variável e depois usa.

                  x--                Usa a variável e depois decrementa.
Tabela 8: Operadores de incremento e decremento
Fonte: Elaboração da autora




14. Operadores de atribuição

            Para efetuar uma operação aritmética seguida da atribuição do valor
de retorno a variável que continha o primeiro termo da operação, pode ser
utilizada uma notação compacta. Segue abaixo a mesma:

Operador                                Exemplo                    Expressão equivalente

+=                                      x += y                     x=x+y

-=                                      x -= y                     x=x-y

*=                                      x *= y                     x=x*y

/=                                      x /= y                     x=x/y

%=                                      x%=y                       x=x%y
Tabela 9: Operadores de atribuição
Fonte: Elaboração da autora




15. Estruturas de controle e repetição

                                                   Instrução if

Comando if... else                          A estrutura if permite especificar um
                                             comando ou um bloco de comandos que
                                             devem ser executados quando uma
determinada condição for satisfeita.
                                A estrutura if ... else permite expressar duas
if (expressão){                  alternativas de execução, uma delas executa
bloco de comandos                caso a condição seja verdadeira e a outra
}else{                           quando a condição não for satisfeita.
bloco de comandos               Quando houver apenas um comando dentro
}                                do bloco if ou do bloco else, não é necessário
                                 o uso das chaves.
                                Quando houver comandos if aninhados, cada
                                 else está relacionado ao if que estiver dentro
                                 do mesmo bloco que ele.




                                   Instrução switch

Comando switch                        O comando switch faz o teste da
switch (expressão){                    expressão de seleção contra os valores
case constante1:                       das constantes indicados nas cláusulas
bloco decomandos;                      case, até que um valor verdadeiro seja
break;                                 obtido.
case constante2:                      Se nenhum dos testes produzir um
bloco decomandos;                      resultado verdadeiro, são executados
break;                                 os comandos do bloco default.
•••                                   O comando break é utilizado para
default:                               forçar a saída do switch.
bloco decomandos;
}




                                     Comando for

for (inicialização; condição; incremento){        O comando for é usado
bloco de comandos;                                 quando     é    necessário
}                                                  repetir um trecho de
                                                   código diversas vezes.
                                                  o comando for permite
                                                   expressar         iterações
                                                   combinando             uma
                                                   expressão de inicialização,
                                                   um teste de condição e
                                                   uma      expressão       de
incremento.
                                          inicialização: comando de
                                           atribuição que define o
                                           valor inicial da variável
                                           que controla o número de
                                           repetições.
                                          condição:        expressão
                                           relacional que define até
                                           quando as iterações serão
                                           executadas.
                                          incremento:      expressão
                                           que define como a variável
                                           de controle do laço deve
                                           variar ( pode aumentar ou
                                           diminuir).
                                          o teste da condição do
                                           controle é feito no início
                                           do laço, o que significa
                                           que se já for falsa os
                                           comandos dentro do laço
                                           não serão executados.




                       Comando while

while (condição){      como dito anteriormente no comando for, o
bloco de comandos;      comando while também é utilizado para
}                       repetir um trecho de código diversas vezes.
                       pode ser qualquer expressão ou valor que
                        resulte em um verdadeiro ou falso.
                       o laço while é executado enquanto a
                        condição for verdadeira.
                       o teste da condição do controle é feito no
                        início do laço, o que significa que se já for
                        falsa os comandos dentro do laço não serão
                        executados.




                     Comando do ...while

do{                     Similar ao comando while, porém, o teste
bloco de comandos;                           da condição de controle é feito no fim do
           }while (condição);                           laço, o que significa que os comandos
                                                        dentro do laço são executados pelo menos
                                                        uma vez.
           Tabela: Estruturas de controle e repetição
           Fonte: Elaboração da autora




           15. Comandos break e continue

                       Os comandos break e continue são estruturas auxiliares dos fluxos de
           repetição. O comando break paralisa a execução de um loop inteiro e o comando
           continue para somente a interação atual.



           16. Comentários

                     Comentário é a parte do código ignorada pelo compilador. É utilizado
           para deixar o código mais inteligível. Java possui três tipos diferentes de
           comentário:

                     Comentário de uma linha: O uso de barra dupla marca o início do
                     comentário que se estende até o fim da linha.
                     Comentário de várias linhas: Os delimitadores /* e */ indicam início e fim
                     de um comentário e podem conter várias linhas.
                     Comentário javadoc: É utilizado para gerar a documentação javadoc e é
                     delimitado pelas sequências de símbolos /** e */. Para gerar o javadoc é
                     necessário que o comentário esteja localizado imediatamente antes da
                     classe, atributo ou método documentado.



                      O código apresentado nas figuras 31 exemplifica os comandos vistos
           neste capítulo.


public class SintaxeJava {
      public static void main(String[] args) {

            /*
             *Declaraçãodavariávelidade do tipointeirocom o valor inicial 5
             *atribuído.
            */
            int idade = 6;
/* Usodaestruturacondicionalif.
 * Nesteexemplo, a condição a sersatisfeita é que a idadesejamaior
 * ouigual a 6.
 */
if ( idade >= 6){

      /*
        * O comando switch recebeumavariável, no casoabaixoidade e abre
        * umblocodedados. Dentrodesseblocoestãoos cases.
        * Cada case recebeum valor único e apósosdoispontosdecada case
        * estáainstruçãoquedeveserexecutadacaso a condiçãosejasatis-
        * feita. O comando break é utilizadoparaforçar a saída do switch.
        * O comando default pegaqualquerresultadoquenãoestejadefinido
      * no case.
        */
      switch (idade){
      case 6:
             System.out.println ("Aluno deveria estar no primeiro ano");
             break;
      case 7:
             System.out.println ("Aluno deveria estar no segundo ano");
             break;
      case 8:
             System.out.println("Aluno deveria estar no terceiro ano");
             break;
      case 9:
             System.out.println("Aluno deveria estar no quarto ano");
             break;
      default:
             System.out.println("Não deveria estar frequentando o primário");
      }
}

/*
  * O comando for é utilizadoemlaçoscontados.
  * A primeirainstruçãodeclara e atribui o valor inicial a variávelde
  * controle.
  * A segundainstruçãocontempla a condiçãodecontrole do laço.
  * A terceiracondição define como a variávelde controle do laço deve
  * variar
  */
for ( int i = 0; i<=6; i++){
       System.out.println("O valor da variável i é: " + i);
}
int j = 0;

/*
 * O laço while é executado enquanto a expressão condicional for
 * verdadeira.
 */
while ( j < 6){
      if ( j == 3){
             /*
              *O comando continue para a interação atual. Desta forma quando
              *j for igual a 3, o valor de j não será impresso.
              */
break;
                                  }
                                  System.out.println("O valor de j é: " + j);
                                  j ++;
                       }
            }
 }


Figura 31: Código exemplificando a sintaxe Java (Parte I)
Fonte: Elaboração da autora




                     PARA FIXAR

                     1.Quais dos identificadores abaixo, podem ser usados como nomes de variáveis
                     em Java? Quais não podem e porquê?
                     a) for                                  j) 123nome
                     b) four                                 k) contador
                     c) FROM                                 l) para
                     d) main                                 m) ENQUANTO
                     e) MAIN                                 n) 123
                     f) nome                                 o) new
                     g) novo_nome                            p) table
                     h) $nome                                q) PEN
                     i) _nome                                r) dia-e-noite

                     2. Escolha o tipo de dado mais adequado para representar:
                     a) O número de cidades do Brasil.
                     b) A população mundial.
                     c) Nome do cachorro da minha colega.
                     d) Um número sorteado na Mega Sena.
                     e) Estado de uma lâmpada (acesa ou apagada).
                     f) O peso do seu colega.
                     g) O sexo de uma pessoa.

                     3. O que acontece se você dividir um número inteiro por 0? E por 0.0?

                     4. Determine se cada um dos seguintes itens é verdadeiro ou falso. Se falso
                     explique por quê.
                     a) Todas as variáveis em Java devem ser atribuídas a um tipo quando são
                     declaradas.
                     b) O Java considera que as variáveis nome e NOME são idênticas.
                     c) O operador resto (%) pode ser utilizado apenas com operandos inteiros.
                     d) Os seguintes são todos nomes de variável inválidos: _123, a23, 12a, $12.

                     5. Implemente uma calculadora que resolva as quatro operações (+, -, * e /), que
receba como entrada dois números reais.

6. Imprima a soma de 1 até 1000.

7. Imprima todos os múltiplos de 3, entre 1 e 100.

8. Receba como entrada um número e um expoente. Calcule este número
elevado ao expoente. Faça três versões deste programa:
       Use uma declaração while para resolver este problema;
       Use uma declaração do-while para resolver este problema;
       Use uma declaração for para resolver este problema.

9. (IADES 2011 PG/DF - Analista Jurídico - Analista de Sistemas) Analise o código
fonte em Java a seguir e assinale a alternativa que apresenta o resultado da
execução do programa.

import java.io.*;
public class Calculadora {
    public static void main(String [] args) {
         int a, b, c;
         a = 5;
         b = 3;
         c = a++ + ++b;

    System.out.println("Valores = " + a + b + c);
    }
}

a) Valores = 16
b) Valores = 548
c) Valores = 18
d) Valores = 649
e) Valores = 19

10. (Cesgranrio - 2009 CBM - Negócios em TI)

publicclass Main {
      publicstaticvoid main(String[] args) {
             int x = 0;
             int y = 1;
             int z = 8;
             while (x < z) {
                   while (y > z) {
                          x++;
                          y--;
                   }
                   y += ++x;
             }
             x += y;
             System.out.println(x);
      }
}
Qual será a saída do programa Java mostrado acima?
a) 8
b) 24
c) 25
d) 42
e)43


11. (Cesgranrio - 2012 CHESF - Analista de sistema)Considere o trecho de código
que corresponde ao método principal de uma classe em linguagem Java.

publicclass Main {
      publicstaticvoid main(String[] args) {
             int n = 1;
             int x = 0;
             int i;
             while (n < 10) {
                    if (n % 2 != 0) {
                          for (i = 3; i * i <= n; i += 2) {
                                 if (n % i == 0)
                                       break;
                          }
                          if (i < n) {
                                 x++;
                          }
                    }
                    n++;
             }
             System.out.println(x);
      }
}

Qual o resultado produzido por esse método quando ele é corretamente
executado?
(A) 0
(B) 1
(C) 2
(D) 3
(E) 5


12. (Cesgranrio - 2011 PETROBRAS - Técnico de Informática Júnior)Qual a
instrução Java em que o valor da variável x será 13após o loop ter executado 5
vezes?
a)for (int x=3; x<12; x+=2){
        ++count;
  }

b)for (int x=1; x<12; x+=5){
++count;
}

c) for (int x=5; x>12; x-=2){
         ++count;
}

d) x = 1;
while (x < 13){
        ++x;
}

e) x = 5;
while (x < 12){
        ++x;
}
PROGRAMAÇÃO ORIENTADA A OBJETOS



OBJETIVOS

     diferenciar programação estruturada de programação orientada a
      objetos;
     entender os princípios da POO;
     distinguir objetos de classes;
     definir atributos e métodos;
     compreender o que são instâncias de classes;
     construir construtores;
     organizar classes e pacotes.



1. Programação estruturada X programação orientada à objetos




Diferença entre programação estruturada e programação orientada a objetos
Fonte: http://www.webfinal.com.br/blog/wp-content/uploads/2010/07/sextanet2.png




          A programação estruturada é baseada em funções e dados. Os
procedimentos inseridos em blocos estruturados comunicam-se com outros
procedimentos por meio da passagem de dados.

            A programação orientada a objetos simula o mundo real dentro do
computador. Nela, os problemas são resolvidos com a criação e interação de
diferentes objetos. Os objetos comunicam-se através de mensagens.
2. Princípios da programação orientada a objetos

           A programação orientada a objetos foi criada com o intuito de
aproximar o mundo real do virtual. Para isso, um programa é visto como um
conjunto de objetos que executam tarefas específicas e se comunicam através de
mensagens em busca de um objetivo comum.

            De uma maneira geral, os objetos são compostos por dados e
instruções para processar estes dados.

           Na POO, o desenvolvedor é responsável por moldar os objetos e
explicar para os mesmos como será feita a comunicação. Esses moldes de
objetos são chamados de classes.

            A programação orientada a objetos está sedimentada em quatro
pilares: encapsulamento, herança, composição e polimorfismo.




Figura 32: Pilares da orientação a objetos
Fonte:       BEZERRA,        Adriano.      Programação     orientada     a      objetos.     Disponível   em:
<http://www.metropoledigital.ufrn.br/aulas/disciplinas/poo/aula_01.html> Acesso em 15 jan 2013.

                Benefícios da programação orientada a objetos:

          Modularidade: um objeto criado pode ser passado por todo o sistema;
          Encapsulamento: os detalhes da implementação ficam ocultos, quem usa
          determinado objeto não precisa saber como seus métodos estão
          implementados;
          Reuso: após a implementação o objeto pode ser usado em todo o
          programas e até mesmo em outros programas.
          Manutenibilidade: a manutenção é realizada somente dentro do objeto
          que deve ser alterado, não influenciando nas demais partes do código.
3. Objetos

         Objeto é qualquer entidade do mundo real que possui atributos e
comportamentos, como por exemplo, casa, carro, escola, computador, cachorro.

            Todo objeto possui características próprias, que são comumente
chamadas de atributos. Os atributos são o que diferem dois objetos
semelhantes. Tomando como exemplo o cachorro, o que diferencia dois deles éa
raça, o peso, a cor do pelo, o peso, ou seja, os atributos que eles possuem.

           Além de possuírem atributos, os objetos também possuem
comportamentos. Os comportamentos geralmente são verbos e representam as
ações que o objeto pode realizar. Um objeto cachorro, por exemplo, pode
comer, correr e latir.

           A figura 34 ilustra três diferentes objetos do tipo cachorro: Bob,
Scooby e Rex. Os cachorros ilustrados possuem os métodos andar, falar, comer,
pegar osso e dormir.




Figura 33: Exemplos de objetos.
Fonte: PALMEIRA, Thiago Vinícius Varallo. Introdução a programação orientada a objetos em Java. Disponível em:
<http://www.devmedia.com.br/introducao-a-programacao-orientada-a-objetos-em-java/26452>. Acesso em 15 jan.
2013.
4. Classes

                       Uma classe em Java é a especificação para a criação de um objeto.
             Uma classe descreve as propriedades e funcionalidades que um objeto terá.
             Desta forma, os atributos e métodos que os objetos têm são declarados na
             classe.

                        A figura 34 mostra a representação de uma classe pela UML e pelo
             código Java.




                                                       public class Carro {

                                                               String   placa;
                                                               String   corLataria;
                                                               String   corParachoque;
                                                               String   aro;

Figura 34: Representação de uma classe                         public void trocarMarcha(){
Fonte: Elaboração da autora                                    }

                                                               public void ligar(){
                                                               }

                                                               public void acelerar(){
                                                               }
                                                       }


                         A figura 34 especifica um novo tipo, Carro. Na especificação (classe)
             foi definido que um objeto do tipo Carro deve conter necessariamente os
             atributos placa, cor da lataria, cor do para-choque e aro.

                         Em Java, uma classe é definida utilizando a palavra chave class. Após
             a palavra chave class, deve seguir o nome da classe, que deve ser um
             identificador válido. A definição da classe pode conter também um modificador.
             No exemplo acima, foi utilizado o modificador public. Outros modificadores
             usados na definição de classes são o abstract e o final.
Após a declaração da classe aparecem os atributos e os métodos que
            serão detalhados a seguir.



            5. Atributos

                       Os atributos são as características de um objeto.

                        A declaração de um atributo deve conter necessariamente um tipo e
            um nome. O tipo pode ser um dos tipos primitivos Java ou o nome de uma
            classe. O nome dever ser um identificador válido da linguagem Java.

                       Um atributo pode conter um modificador de acesso, que será
            descrito mais adiante e pode ser inicializado no ato de sua construção.



                                  Palavra                      Nome da classe escolhido
                                  obrigatória para             pelo programador. Por
                                  indicar a criação            padrão, utiliza-se sempre a
Modificador                       de uma classe.               primeira letra em maiúscula.
de acesso


            public class Carro {

     tipo          String              placa;                                       nome

                   String              corLataria;
                   String              corParachoque;
                   String              aro;
                                           Conjunto de características dos objetos da
                                           Classe Carro




            6. Métodos

                       Métodos são as ações realizadas pelos objetos. Eles podem
manipular atributos de objetos para os quais os métodos foram definidos. Os
 métodos também podem definir e manipular variáveis locais.

           Cada método é especificado por uma assinatura. A assinatura de um
 método é composta pelo modificador (não obrigatório), tipo de retorno e o
 nome do método que deve ser um identificador válido. Os métodos também
 podem receber parâmetros por valor através da lista de argumentos.

            Os métodos podem ter retorno ou não. Para métodos sem retorno
 usa-se a palavra chave void. Para os métodos com retorno, usa-se o tipo de
 retorno, que pode ser um valor primitivo ou uma classe Java.

           O fato de um método possuir retorno ou não, altera o encerramento
 da execução. Quando um método não tem valor de retorno, a execução é
 encerrada quando o bloco do corpo do método chega ao final. Já quando o
 método possui valor de retornoa execução é encerrada através do comando
 return.

            Os métodos podem receber argumentos representados por uma lista
 de parâmetros separados por vírgula, onde para cada parâmetro é indicado o
 tipo e o nome.
                                                Método sem retorno e sem
                                                parâmetros
public void trocarMarcha(){

}
                                     Método com retorno do tipo boolean, sem
public boolean estaLigado (){        parâmetros. O uso da palavra-chave return é
      returntrue;
                                     obrigatório em métodos com retorno.
}

public void frear (int intensidade){
                                              Método sem retorno e com parâmetro.
}
                                              Este método necessita da informação
                                              da intensidade da velocidade para ser
                                              executado.


 6.1. O método main

           O método main é utilizado pela JVM para inicializar a execução do
 programa.Segundo RICARTE (2001):

                      O método main é um método associado a classe e não a um objeto
                      específico da classe – assim ele é definido como método estático.
                      Adicionalmente, deve ser um método público para permitir sua
execução a partir da máquina virtual Java. Não tem valor de retorno,
                       mas recebe como argumentoum arranjo de strings que corresponde
                       aos parâmetros que podem ser passados para a aplicação a partir da
                       linha de comando.




7. Instâncias de classes

          Uma classe é a especificação de um objeto. Porém para ser criado,
um objeto precisa ser instanciado. Quando um objeto é criado, ele adquire
espaço em memória para armazenar seu estado e um conjunto de operações
podem ser aplicadas ao mesmo.

           Abaixo, segue exemplo com a criação de um objeto carro.


       Declaração da
       variável c1 do                   Cria um objeto na
       tipo Carro.                      memória

public class Principal {

       public static void main(String[] args) {

              Carro c1 = new Carro();

              c1.aro = "18";
              c1.corLataria = "prata";
              c1.corParachoque = "prata";
              c1.placa = "MHZ 1521";
       }
}     Definindo valores para os atributos
      do Carro criado c1.



8. Construtores

           A função do construtor é iniciar a construção de um objeto. O mesmo
é invocado toda vez que a palavra new é utilizada.

           O construtor possui o mesmo nome da classe e não tem nenhum tipo
de retorno. Ele pode conter parâmetros.

                   Toda classe deve ter um construtor definido. Se o construtor não
        estiver explicitamente declarado, o compilador cria um construtor default, ou
        seja, um construtor sem parâmetros e o corpo vazio.

                    No momento em que o programador cria um construtor, o
        construtor default deixa de ser criado automaticamente. Portanto, é necessário
        declarar o construtor default, se a utilização domesmo for necessária.

                   Podem ser declarados diversos construtores em uma mesma classe,
        desde que a assinatura dos mesmos forem diferentes, ou seja, vários
        construtores com argumentos diferentes.


public class Carro {                                  A - Construtor sem corpo e sem
                                                      parâmetros.Quando um construtor
                                                      não é declarado explicitamente, o
    String     placa;                                 compilador cria um construtor
    String     corLataria;                            similar a este.
    String     corParachoque;
    String     aro;                               B - Construtor contendo os parâmetros
                                                  placa e cor da lataria. Ao usar este
    public Carro (){                              construtor, no momento da criação do
                                                  objeto devem ser informados a placa e
                                                  a cor da lataria do objeto criado.
    }

    public Carro (String placa, String corLataria){
        this.placa = placa;
        this.corLataria = corLataria;
    }

    public Carro (String aro){                            C - Construtor com o
                                                          parâmetro aro. No momento
        this.aro = aro;
                                                          da construção deve ser
        corParachoque = "preto";                          informado, o aro do objeto. No
    }                                                     corpo do método também é
                                                          inicializado o atributo cor do
                                                          parachoque. Os objetos
            A palavra this é usada para
                                                          criados utilizando este
            referenciar métodos ou
                                                          construtor, são inicializados
            atributos do objeto que está
                                                          com a cor do parachoque
            sendo usado.
                                                          preto.
public class Principal {


    public static void main(String[] args) {
                                                                 Objeto criado usando o
                                                                 construtor A.
           Carro c1 = newCarro();

           Carro c2 = newCarro("JLM 2343", "vermelho");
                                                                       Objeto criado
           Carro c3 = newCarro("16");                                  usando o
                         Objeto criado usando o                        construtor B.
    }                    construtor C.
}

        9. Pacotes

                    Os pacotes servem para organizar as classes de acordo com suas
        funcionalidades. Um pacote é um diretório onde está armazenada uma ou mais
        classes.A palavra chave package define em qual pacote se encontra a classe.

                    Para utilizar classes de um pacote é usada a palavra chave import.A
        utilização do import só é necessária, caso a classes que está utilizando as
        funcionalidades da outra classe esteja em pacote diferente.

                   O pacote java.lang é automaticamente importado pelo Java. É o
        único pacote que contém esta característica.

                    As principais classes que fazem parte deste pacote são: Math, Object,
        String, System.
package br.com.senai.exemplo.pacote;

public class Pac {                        Definição do pacote em que a
                                          classe se encontra.
}




import br.com.senai.exemplo.pacote.Pacote;
                                                      Importação do
public class TestePacote {
                                                      pacote para o uso da
                                                      classe Pac
       Pac p1 = new Pac();

}



PARA FIXAR

1. O que é uma classe e para que serve?

2. Escreva um modelo para representar um livro que está à venda em uma
livraria. Que dados devem ser representados por este modelo?

3. Escreva uma classe “EntradaDeCinema” com a seguinte estrutura (dados):
        Data dataDoFilme
        float horário
        int sala
        float valor
E com as seguintes ações (métodos):
Construtor: com a finalidade de inicializar todos os atributos.
CalculaDesconto: que deve receber como parâmetro a data de nascimento do
cliente (do tipo Data) e caso seja menor de 12 anos, deve ser dado um desconto
de 50% no valor normal.
CalculaDesconto: que deve receber como parâmetro a data de nascimento do
cliente (do tipo Data) e o número de sua carteira de estudante (do tipo int). Se o
estudante tiver idade entre 12 e 15 anos, deve ser dado um desconto de 40%, de
16 a 20 um desconto de 30% e mais que 20 anos um desconto de 20% no valor
normal.
CalculaDescontoHorário: esse método deve dar um desconto de 10% sobre o
valor aferido após todas as outras opções de desconto, caso o horário do filme
seja antes das 16 horas.
toString(): que deve imprimir todos os dados do ingresso.
Desenvolva uma aplicação que leia os dados necessários para instanciar e
imprimir o ingresso para clientes normais, menores de 12 anos e estudantes.
ENCAPSULAMENTO



OBJETIVOS

    entender o conceito de encapsulamento;
    conhecer os modificadores de acesso;
    utilizar os métodos getter e setter.



1. Encapsulamento

           O encapsulamento isola as partes do programa. Apenas o mínimo
necessário deve ser revelado. Deve ser suficiente conhecer a especificação do
método, sem saber como a funcionalidade que ele executa foi implementada.

          O encapsulamento torna possível a idéia de abstração da
programação orientada a objetos.

          A orientação a objetos recomenda que os objetos devem ser
manipulados somente através dos métodos públicos do objeto, dos quais apenas
a assinatura deve ser revelada. Os atributos não devem ser revelados
externamente, exceto em caso de serem constantes.



2. Modificadores de acesso

          Para tornar possível o encapsulamento, se faz necessário, o uso dos
modificadores de acesso. Em Java, os principais modificadores de acesso são:

       public: membro acessível a qualquer objeto;
       protected: membro acessível as subclasses e aos objetos do mesmo
       pacote;
       default: quando não for definido nenhum modificar o membro fica
       acessível apenas as classes do mesmo pacote;
       private: não pode ser acessado por nenhum outro objeto.

            Normalmente na constituição das classes, os métodos são públicos e
os atributos são privados.
public class Carro {

       String placa;
       String corLataria;
       String corParachoque;

     String aro; //modificador default: acesso
somente as classes do mesmo pacote

     public double velocidade; //modificador
público: acesso a todas as classes

     protected int ano; //modificador protegido:
acesso as classes do mesmo pacote
                       // e as subclasses

     private String marca; //modificador privado:
nenhum acesso externo é permitido.




3. Gets e sets

           Quando é usado o modificador de acesso private em um atributo,
não é possível acessá-lo em outra classe. Para alterar ou recuperar o valor do
mesmo, é necessário escrever dois métodos de acesso, um que retorna o valor e
outro que muda o valor.

          A convenção para estes métodos é colocar a palavra get ou set antes
do nome do produto.

          O método set é usado para modificar algum atributo. Os métodos
sets não retornam nenhum valor, portanto são métodos void. Porém, eles
devem receber obrigatoriamente um argumento, que será o valor atribuído ao
campo.

           O método get é usado para retornar algum atributo. Os métodos
gets obrigatoriamente possuem retorno de valor. Porém, eles não possuem
nenhum argumento.
public class Carro {
                                                     Método que atribui um
                                                     valor para a variável
    private   String    placa;                       placa. Na chamada do
    private   String    corLataria;                  método é indicado o valor
    private   String    corParachoque;               que a placa terá.
    private   String    aro;

    public void setPlaca (String placa){
        this.placa = placa;
    }
                                                    Método que retorna o
    public String getPlaca (){                      valor de um atributo.
        returnthis.placa;                           Nesse caso, o método
    }                                               deve retornar uma
                                                    string.


public class Principal {


    public static void main(String[] args) {

        Carro c1 = newCarro();

        c1.setPlaca("TRW 2345");

        System.out.println(c1.getPlaca());

    }
}


              PARA SABER MAIS

                   Como não aprender Java e orientação a objetos: getters e
                    setters. Disponível em:<http://blog.caelum.com.br/nao-
                    aprender-oo-getters-e-setters />
4. Sobrecarga de métodos

           Métodos sobrecarregados são métodos com o mesmo nome, porém
com assinaturas diferentes.

          O compilador, a partir da análise dos tipos de argumentos dos
métodos determina qual o método deve ser executado.



5. Agregação e composição

             A agregação é uma relação entre os objetos em que um objeto
contém uma lista de outros objetos. Na agregação, os objetos contidos podem
existir fora do contexto do objeto que os contém. Por exemplo, pneu e carro.
Um pneu existe sem o carro.

           Composição é o mecanismo que permite o uso de uma ou várias
classes para compor uma outra classe.Na composição, os objetos contidos não
fazem sentido fora do contexto do objeto que os contém. Por exemplo, pedido e
item. Um item não existe fora do pedido.



PARA FIXAR
O exercício 1 foi retirado do curso Java Starter e deve respeitar o uso do
encapsulamento. Disponível em:
<http://www.t2ti.com/curso/video/java/basico/java_starter.php>

1. De acordo com os conceitos apresentados:
a) Implemente uma classe Pessoa com os seguintes atributos: nome, idade e cpf;
b) Utilizando a classe implementada na letra a, crie um programa que instancie 2
pessoas com todos os atributos e imprima os valores;
c) Implemente uma classe que represente uma sala de aula, esta sala pode ter o
máximo de 10 alunos, se extrapolar este limite deve ser impressa uma
mensagem avisando que o número máximo de alunos foi atingido;
d) Implemente uma classe de Endereço com os seguintes atributos: estado,
cidade, rua, cep e telefone;
e) Adicione a classe Pessoa um atributo de endereço utilizando a classe
desenvolvida no ítem d;
f) Implemente um método construtor para a classe Pessoa de forma que uma
instância desta classe seja criada apenas se possui nome, idade e cpf;
g) Implemente uma classe que simule um cadastro de pessoal. Esta classe deve
armazenar até 100 pessoas (utilize a classe Pessoa) com seus respectivos
endereços. Essa classe deve ter os seguintes comportamentos: permitir o
cadastramento e exclusão de pessoas do cadastro;
2. Escreva uma classe que represente um pais. Um pais tem como atributos o seu
nome e a sua dimensão em Km2 e uma lista de países com os quais ele faz
fronteira. Represente a classe e forneça os seus membros a seguir:
a) Construtor que inicialize o nome e a dimensão do país;
b) Métodos de acesso (get) para a propriedade dimensão do país;
c) Um método que permita verificar se dois países são iguais. Dois países são
iguais se tiverem o mesmo nome e a mesma capital. A assinatura deste método
deve ser:public boolean equals(Pais outro);
d) Um método que informe se um outro país é seu limítrofe (faz fronteira);
e) Um método que receba um outro país como parâmetro e retorne uma lista de
vizinhos comuns aos dois países.
Obs: Considere que um país tem no máximo 40 outros países com os quais faz
fronteira.
f) Escreva uma classe continente. Um continente possui um nome e um conjunto
de países, que dele fazem parte. Desenvolva um método que forneça a dimensão
total do continente.

3. Um avião é representado pelo seu prefixo, pelo nome do seu modelo, pelo
nome do seu fabricante, pela quantidade de assentos e pela quantidade de
assentos ocupados.
Escreva uma classe que represente um avião e desenvolva um método que
informe qual o prefixo da aeronave.
Um aeroporto é representado pelo seu código e seu nome (ex.: SSA: Salvador,
BSB: Brasília. etc), por um status que informa se ele é um aeroporto
internacional ou não, uma lista de outros aeroportos para os quais partam vôos
diretos à partir dele e uma lista de outros aeroportos de onde venham vôos para
ele. Além disto possui uma lista de aviões que estão atualmente no pátio.
Escreva uma classe que contemple os atributos apresentados e mais os seguintes
membros:
a) Um construtor que inicialize o código do aeroporto e seu nome.
b) Métodos que verifiquem e alterem a situação relativa ao fato do aeroporto ser
internacional ou não.
c) Um método que verifique e informe se um aeroporto é igual a ele:
        public boolean equals (Aeroporto aeroporto)
        Dois aeroportos são iguais se o seu código for coincidente.
d) Um método que receba um prefixo de avião como parâmetro e informe se a
aeronave está pousada nele.
e) Um método que receba um outro aeroporto como parâmetro e verifique se
existe alguma forma de se chegar nele. Para isto, o aeroporto deve verificar se
ele possui vôo partindo para o aeroporto desejado, e caso não saia, se existe
alguma forma de chegar nele à partir dos aeroportos de onde sai
        public boolean possuiRota(Aeroporto aeroporto)
Obs: A quantidade máxima de aeronaves que um aeroporto pode ter em
       terra é igual a 100 e a quantidade máxima de outros aeroportos com os
       quais o aeroporto pode ter linhas saindo e chegando é 100.

4. Nas duas tabelas abaixo estão inseridos os códigos de duas classes Java: a
classe Carro e a classe Principal. Explique o que cada linha de código representa.

  package br.com.senai.exemplo.modelo;

  public class Carro {

        //Atributos
        private String cor;


        private String modelo;

        private double velocidadeAtual;


        private double velocidadeMaxima;



        public Carro() {

        }

        public Carro(String cor, String modelo, double velocidadeAtual,
                     double velocidadeMaxima) {
              this.cor = cor;
              this.modelo = modelo;
              this.velocidadeAtual = velocidadeAtual;
              this.velocidadeMaxima = velocidadeMaxima;
        }

        public String getCor() {
              return cor;
        }

        public void setCor(String cor) {
              this.cor = cor;
        }

        public String getModelo() {
              return modelo;
        }

        public void setModelo(String modelo) {
              this.modelo = modelo;
        }
public double getVelocidadeMaxima() {
           return velocidadeMaxima;
     }

     public void setVelocidadeMaxima(double velocidadeMaxima) {
           this.velocidadeMaxima = velocidadeMaxima;
     }

     public double getVelocidadeAtual() {
           return velocidadeAtual;
     }

     public void setVelocidadeAtual(double velocidadeAtual) {
            this.velocidadeAtual = velocidadeAtual;
     }

     public void liga(){
           System.out.println("O carro está ligado");
     }

      public void acelera (double quantidade){
            double velocidadeNova = this.velocidadeAtual +
quantidade;
            this.velocidadeAtual = velocidadeNova;
      }

}
HERANÇA E POLIMORFISMO



OBJETIVOS

    compreender o uso da herança;
    usar a sobrescrita de métodos;
    entender o conceito de polimorfismo.



1. Herança

           A herança é um dos pilares da programação orientada a objetos que
permite a criação de novas classes a partir de outras já existentes, ou seja, uma
classe pode derivar de outra classe. As novas classes são chamadas de subclasses
e as classes já existentes que deram origem as subclasses são chamadas de
superclasses.

           O mecanismo de herança viabiliza o reuso de código. Para fazer uso
da herança é usada a palavra-chave extends, seguida do nome da superclasse.

           Para referenciar os métodos da superclasse é utilizada a palavra-
chave super.

           A herança em Java também pode ocorrer implicitamente, é o que
ocorre com a superclasse Object. Todas as classes criadas em Java estendem
implicitamente de Object.
import java.awt.Image;

public class Animal {

     private Image foto;
     private double peso;
     private String comida;

     public void comer(){
     }

     public void dormir(){
     }

     public void movimentar(){
     }

     public void fazerBarulho(){
     }

}




public class Cachorro extends Animal {
}




public class Coruja extends Animal {
     public void voar(){
     }

     public void botar(){
     }
}




public class Galinha extends Animal {
     public void voar(){
     }
public void botar(){
       }
}



2. Sobrescrita de métodos

          A sobrescrita de métodos é o mecanismo que permite a alteração do
comportamento de uma superclasse pelas suas subclasses, ou seja, a sobrescrita
de um método é uma nova implementação para o mesmo.

          A sobrescrita de um método ocorre somente se a assinatura do
mesmo permanece intacta, isto é, o tipo de retorno e os parâmetros devem ser
os mesmos.

          O modificador final não permite que o método seja sobrescrito. Este
modificador também pode ser usado na definição da classe para impedir que a
mesma seja estendida.



3. Polimorfismo

            O polimorfismo em Java é o mecanismo que garante que classes
derivadas de uma mesma superclasse invoquem métodos com a mesma
identificação, mas com comportamentos distintos.



PARA FIXAR

Os exercícios 1 e 2 foram retirados do curso Java Starter disponível em:
<http://www.t2ti.com/curso/video/java/basico/java_starter.php>

1. A partir dos conceitos apresentados:

a) Crie uma hierarquia de classes em Java com os atributos e comportamentos
descritos abaixo. Distribua as características de forma que tudo o que for comum
a todos os animais fique na classe Animal.
Animal




cachorro                   cavalo                     preguiça
possui nome                possui nome                possui nome
possui idade               possui idade               possui idade
deve emitir som            deve emitir som            deve emitir som
deve correr                deve correr                devesubir em árvores

b) Implemente um programa que crie os três tipos de animais definidos no item
anterior e invoque o método que emite o som de maneira polimórfica, isto é,
independente do tipo de animal.
c) Implemente uma classe Veterinário que contenha um método examinar( ),
cujo parâmetro de entrada é um Animal, quando o animal for examinado deve
emitir um som, passe os três animais como parâmetro.
d) Crie uma classe Zoológico com 10 jaulas (utilize um array), coloque em cada
jaula um animal diferente, percorra cada jaula e emita o som do animal
correspondente.

2. Resolva a seguinte situação utilizando os conceitos aprendidos.
a) Uma empresa quer manter o registro da vida acadêmica de todos os
funcionários, o modelo deve contemplar o registro das seguintes informações,
de forma incremental.
        Para o funcionário que não estudou, apenas o nome e o código funcional;
        Para o funcionário que concluiu o ensino básico, a escola;
        Para o funcionário que concluiu o ensino médio, a escola;
        Para o funcionário que concluiu a graduação, a universidade.
b) Estenda o modelo de forma que todo funcionário possua uma renda básica de
R$ 1000,00 e:
        Com a conclusão do ensino básico a renda total é a renda básica
        acrescida de 10%;
        Com a conclusão do ensino médio a renda total é a renda básica
        acrescida de 50%;
        Com a conclusão do ensino superior a renda total é a renda básica
        acrescida de 100%;
c) Crie um programa que simule uma empresa com 10 funcionários, utilize um
array, sendo que a escolaridade dos funcionários é distribuída da seguinte forma:
40% do ensino básico, 40% do ensino médio e 20% superior. Calcule os custos da
empresa com salários totais e por nível de escolaridade.
3. (FCC - TRT 20ª REGIÃO/2010 - Tecnologia da Informação) Considere o código
JAVA abaixo:

public class Carro extends Veiculos {

      private String categoria;

      public void setCategoria(String categoria) {
          this.modelo = categoria;
      }

      public String getCategoria() {
          return this.categoria;
      }
}
Em relação ao código acima, é correto afirmar que:
A) A palavra reservada extends indica que Carro é uma superclasse e Veiculo é
um objeto.
B) A classe Carro irá herdar atributos e métodos da classe Veiculo que não
estejam com o modificador protected.
C) Todas as classes que herdarem a classe Carro terão o atributo modelo.
D) A palavra reservada extends indica que Carro e Veiculo são classes de mesmo
nível.
E) A classe Carro irá herdar atributos e métodos da classe Veiculo que não
estejam com o modificador private.


4. (ESAF - ANA/2009 - Analista Desenvolvimento de Sistemas)Em Java, para que
um método de uma superclasse não seja sobrescrito em suas subclasses, aplica-
se o modificador :
A) static.
B) public.
C) final.
D) protected.
E) abstract.


5. (ESAF - ANA/2009 - Analista Desenvolvimento de Sistemas) Se, na superclasse,
um método é declarado protected, o(s) modificador(es) aplicável(is) na
sobrescrita do método é(são):
A) private.
B) private e protected.
C) “default”.
D) protected, “default” e public.
E) protected e public.


6. class Prova{
       public int a;
       Prova(int _a){
            a = _a;
       }

       public void acrescenta(int n){
            a += n;
       }

       public void acrescenta(){
            a++;
       }
}

class SubProva extends Prova{
     private int b;
     SubProva(int umb, int uma){
          super(uma);
          b = umb;
     }

       public void acrescenta(int n){
            b = b + n + 2;
       }

       public static void main (String args[ ]) {
            SubProva s = new SubProva(2,5);
            Prova p = new Prova(2);
            s.acrescenta(3);
            p.acrescenta();
            System.out.println(s.b+s.a);
            System.out.println(p.a);
            s.acrescenta();
            System.out.println(" "+s.b+p.a+s.a) ;
       }
}
7. (COSEAC/UFF - Dataprev/2008 - Analista - Desenvolvimento de Sistemas) Com
relação às duas classes anteriores pode-se dizer que:
A) existe sobrecarga no método main;
B) existe sobrecarga no método SubProva;
C) existe sobrecarga no método Prova;
D) existe sobrecarga no método acrescenta;
E) não existe sobrecarga;

8. (ESAF 2009 ANA - Analista de Sistemas) Se, na superclasse, um método é
declarado protected, o(s) modificador(es) aplicável(is) na sobrescrita do método
é(são):
a) private.
b)private e protected.
c) "default".
d) protected, “default" e public.
e) protected e public.


9. (ESAF 2008 CGU - AFC-TI) Na linguagem de programação Java, pode-se definir
a visibilidade dos métodos e atributos. Com relação a essa característica, é
correto afirmar que:

a) métodos declarados como public em uma superclasse, quando herdados,
precisam ser protected em todas as subclasses dessa classe.
b) métodos declarados como protected em uma superclasse, quando herdados,
precisam ser protected ou public nas subclasses dessa classe.
c) o nível de acesso protected é mais restritivo do que o nível de acesso default.
d) métodos declarados como public só podem ser acessados a partir dos
métodos       da    própria     classe    ou      de    classes     derivadas.
e) métodos declarados como default só podem ser acessados a partir dos
métodos da própria classe.

10. O que é herança?

11. O que é herança múltipla? O Java suporta herança múltipla?

12. Um animal contém um nome, comprimento, número de patas (o padrão é 4),
uma cor, ambiente e uma velocidade (em m/s).
Um peixe é um animal, tem 0 patas, o seu ambiente é o mar (padrão), cor
cinzenta (padrão). Além disso, o peixe tem como características: barbatanas e
cauda;
Um mamífero é um animal, o seu ambiente é a terra (padrão);
Um urso é um mamífero, cor castanho e o seu alimento preferido é o mel.

Codifique as classes animal, peixe e mamífero.
Para a classe animal, codifique os métodos:
 Animal (String nome, String cor, String ambiente, int comprimento, float
     velocidade, int patas);
    void alteraNome (String nome);
    void alteraComprimento(int comprimento);
    void alteraPatas (int patas);
    void alteraCor (String cor);
    void alteraAmbiente (String ambiente);
    void alteraVelocidade (float velocidade);
    void dados(); //imprime os dados do animal;

E os seus atributos são:
     String nome;
     int comprimento;
     int patas;
     String cor;
     String ambiente;
     float velocidade;

Para a classe Peixe, codifique:
    Peixe (String nome, String caracteristica, int comprimento, float
        velocidade);
    void alteraCaracteristica (String caracteristica);
    String caracteristica ( ); //retorna a característica de um determinado
        peixe;
    void dados ( ); //imprimir na tela todos os dados;

Para a classe Mamifero, codifique:
    Mamifero ( String nome, String cor, String alimento, int comprimento,
        float velocidade, int patas);
    void alteraAlimento (String alimento);
    String alimento ( ); //retorna o alimento de um determinado urso
    void dados ( ); imprimir na tela todos os dados;

Por último, crie um arquivo de teste de forma a ter um jardim zoológico com os
seguintes animais: camelo, tubarao, urso-do-canadá.
Introdução a linguagem java
Introdução a linguagem java
Introdução a linguagem java
Introdução a linguagem java
Introdução a linguagem java

Weitere ähnliche Inhalte

Was ist angesagt?

Aula 04 barramentos de expansão
Aula 04   barramentos de expansãoAula 04   barramentos de expansão
Aula 04 barramentos de expansãoMarcos Basilio
 
Apostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o VisualgApostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o VisualgRegis Magalhães
 
Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)
Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)
Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)Leinylson Fontinele
 
Placas de expansão
Placas de expansãoPlacas de expansão
Placas de expansãoAndré Lopes
 
2009 1 - sistemas operacionais - aula 8 - memoria
2009 1 - sistemas operacionais - aula 8 - memoria2009 1 - sistemas operacionais - aula 8 - memoria
2009 1 - sistemas operacionais - aula 8 - memoriaComputação Depressão
 
Arquitetura de um computador
Arquitetura de um computadorArquitetura de um computador
Arquitetura de um computadorFilipe Duarte
 
SSD - Solid State Drive
SSD - Solid State DriveSSD - Solid State Drive
SSD - Solid State DriveVagner Leal
 
Aula07 - Arquitetura e Manutenção de Computadores
Aula07 - Arquitetura e Manutenção de ComputadoresAula07 - Arquitetura e Manutenção de Computadores
Aula07 - Arquitetura e Manutenção de ComputadoresJorge Ávila Miranda
 
Sistemas operativos 10º
Sistemas operativos 10ºSistemas operativos 10º
Sistemas operativos 10ºteacherpereira
 
Aula 06 barramentos e recursos onboard
Aula 06 barramentos e recursos onboardAula 06 barramentos e recursos onboard
Aula 06 barramentos e recursos onboardAlexandrino Sitoe
 
Aula 01 - UML e Padrões de Projeto
Aula 01 - UML e Padrões de ProjetoAula 01 - UML e Padrões de Projeto
Aula 01 - UML e Padrões de ProjetoVinícius de Paula
 
Apostila 6 gerência de memória
Apostila 6   gerência de memóriaApostila 6   gerência de memória
Apostila 6 gerência de memóriaPaulo Fonseca
 

Was ist angesagt? (20)

Aula 04 barramentos de expansão
Aula 04   barramentos de expansãoAula 04   barramentos de expansão
Aula 04 barramentos de expansão
 
Modelo de von neumann
Modelo de von neumannModelo de von neumann
Modelo de von neumann
 
Apostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o VisualgApostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o Visualg
 
Arquitetura de-computadores-apostila-avançada completa
Arquitetura de-computadores-apostila-avançada completaArquitetura de-computadores-apostila-avançada completa
Arquitetura de-computadores-apostila-avançada completa
 
Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)
Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)
Sistemas Operacionais - Aula 02 (Visão geral de sistemas operacionais)
 
Placas de expansão
Placas de expansãoPlacas de expansão
Placas de expansão
 
2009 1 - sistemas operacionais - aula 8 - memoria
2009 1 - sistemas operacionais - aula 8 - memoria2009 1 - sistemas operacionais - aula 8 - memoria
2009 1 - sistemas operacionais - aula 8 - memoria
 
Arquitetura de um computador
Arquitetura de um computadorArquitetura de um computador
Arquitetura de um computador
 
UFCD 0781 - Análise de Sistemas de Informação.pptx
UFCD 0781 - Análise de Sistemas de Informação.pptxUFCD 0781 - Análise de Sistemas de Informação.pptx
UFCD 0781 - Análise de Sistemas de Informação.pptx
 
Aula 12 - Processador
Aula 12 - ProcessadorAula 12 - Processador
Aula 12 - Processador
 
SSD - Solid State Drive
SSD - Solid State DriveSSD - Solid State Drive
SSD - Solid State Drive
 
Memórias
MemóriasMemórias
Memórias
 
Historia Sistema Operacional Linux
Historia Sistema Operacional LinuxHistoria Sistema Operacional Linux
Historia Sistema Operacional Linux
 
Aula07 - Arquitetura e Manutenção de Computadores
Aula07 - Arquitetura e Manutenção de ComputadoresAula07 - Arquitetura e Manutenção de Computadores
Aula07 - Arquitetura e Manutenção de Computadores
 
Sistemas operativos 10º
Sistemas operativos 10ºSistemas operativos 10º
Sistemas operativos 10º
 
Memória RAM
Memória RAMMemória RAM
Memória RAM
 
Aula 5 bios
Aula 5 biosAula 5 bios
Aula 5 bios
 
Aula 06 barramentos e recursos onboard
Aula 06 barramentos e recursos onboardAula 06 barramentos e recursos onboard
Aula 06 barramentos e recursos onboard
 
Aula 01 - UML e Padrões de Projeto
Aula 01 - UML e Padrões de ProjetoAula 01 - UML e Padrões de Projeto
Aula 01 - UML e Padrões de Projeto
 
Apostila 6 gerência de memória
Apostila 6   gerência de memóriaApostila 6   gerência de memória
Apostila 6 gerência de memória
 

Andere mochten auch

Maratona de programação 2009. Exercícios para Iniciantes.
Maratona de programação 2009. Exercícios para Iniciantes.Maratona de programação 2009. Exercícios para Iniciantes.
Maratona de programação 2009. Exercícios para Iniciantes.Rayan Teixeira
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetosdanielrpgj30
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratosMaurício Linhares
 
Exercicios java2016 - resolvidos
Exercicios java2016 - resolvidosExercicios java2016 - resolvidos
Exercicios java2016 - resolvidosHelda Matos
 
Java interface gráfica swing
Java   interface gráfica swingJava   interface gráfica swing
Java interface gráfica swingArmando Daniel
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação12anogolega
 
Lógica de programação construção de algoritmos e estrutura de dados
Lógica de programação   construção de algoritmos e estrutura de dadosLógica de programação   construção de algoritmos e estrutura de dados
Lógica de programação construção de algoritmos e estrutura de dadospronatecvja
 
Aula 4 - Teste de mesa
Aula 4 - Teste de mesaAula 4 - Teste de mesa
Aula 4 - Teste de mesaPacc UAB
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVACristiano Almeida
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoMarconi Rodrigues
 
Algoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso CompletoAlgoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso Completothomasdacosta
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Valmon Gaudencio
 
Aula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e ProgramaçãoAula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e ProgramaçãoAislan Rafael
 

Andere mochten auch (20)

Maratona de programação 2009. Exercícios para Iniciantes.
Maratona de programação 2009. Exercícios para Iniciantes.Maratona de programação 2009. Exercícios para Iniciantes.
Maratona de programação 2009. Exercícios para Iniciantes.
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetos
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratos
 
Fundamentos Java - 01
Fundamentos Java - 01Fundamentos Java - 01
Fundamentos Java - 01
 
Aula 1a.ppt
Aula 1a.pptAula 1a.ppt
Aula 1a.ppt
 
Aula 3.ppt
Aula 3.pptAula 3.ppt
Aula 3.ppt
 
Exercicios java2016 - resolvidos
Exercicios java2016 - resolvidosExercicios java2016 - resolvidos
Exercicios java2016 - resolvidos
 
Java interface gráfica swing
Java   interface gráfica swingJava   interface gráfica swing
Java interface gráfica swing
 
Etapas da programação
Etapas da programaçãoEtapas da programação
Etapas da programação
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Exercicios java básico
Exercicios java básicoExercicios java básico
Exercicios java básico
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação
 
Lógica de programação construção de algoritmos e estrutura de dados
Lógica de programação   construção de algoritmos e estrutura de dadosLógica de programação   construção de algoritmos e estrutura de dados
Lógica de programação construção de algoritmos e estrutura de dados
 
Aula 4 - Teste de mesa
Aula 4 - Teste de mesaAula 4 - Teste de mesa
Aula 4 - Teste de mesa
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Algoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso CompletoAlgoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso Completo
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
Aula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e ProgramaçãoAula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e Programação
 

Ähnlich wie Introdução a linguagem java

Aula de C para Linux
Aula de C para LinuxAula de C para Linux
Aula de C para LinuxChris x-MS
 
C a linguagem de programação
C   a linguagem de programaçãoC   a linguagem de programação
C a linguagem de programaçãoAndrei Bastos
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 
Programação 1
Programação 1Programação 1
Programação 1essa
 
Trabalho linguagem python
Trabalho linguagem  pythonTrabalho linguagem  python
Trabalho linguagem pythonBruno Maspoli
 
Desenvolvimento de Jogos
Desenvolvimento de JogosDesenvolvimento de Jogos
Desenvolvimento de JogosKelvinSalton
 
Linguagen..
Linguagen..Linguagen..
Linguagen..essa
 
criação e hospedagem de sites.pptx
criação e hospedagem de sites.pptxcriação e hospedagem de sites.pptx
criação e hospedagem de sites.pptxQualquercoisa22
 
Introdução á programação - 1ª parte
Introdução á programação - 1ª parteIntrodução á programação - 1ª parte
Introdução á programação - 1ª parteLuis Fernandes
 
Uma Introdução a Programação em JavaScript
Uma Introdução a Programação em JavaScriptUma Introdução a Programação em JavaScript
Uma Introdução a Programação em JavaScriptdapalma14
 
Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)
Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)
Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)Leinylson Fontinele
 
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Gabriel Rubens
 
Algoritmia para o site do 10gi marcelo e ricardo
Algoritmia para o site do 10gi marcelo e ricardoAlgoritmia para o site do 10gi marcelo e ricardo
Algoritmia para o site do 10gi marcelo e ricardozedaesquina98
 

Ähnlich wie Introdução a linguagem java (20)

Aula de C para Linux
Aula de C para LinuxAula de C para Linux
Aula de C para Linux
 
C a linguagem de programação
C   a linguagem de programaçãoC   a linguagem de programação
C a linguagem de programação
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Programação 1
Programação 1Programação 1
Programação 1
 
Trabalho linguagem python
Trabalho linguagem  pythonTrabalho linguagem  python
Trabalho linguagem python
 
Cap02
Cap02Cap02
Cap02
 
Cap02
Cap02Cap02
Cap02
 
Cap02
Cap02Cap02
Cap02
 
Desenvolvimento de Jogos
Desenvolvimento de JogosDesenvolvimento de Jogos
Desenvolvimento de Jogos
 
Linguagen..
Linguagen..Linguagen..
Linguagen..
 
criação e hospedagem de sites.pptx
criação e hospedagem de sites.pptxcriação e hospedagem de sites.pptx
criação e hospedagem de sites.pptx
 
Introdução á programação - 1ª parte
Introdução á programação - 1ª parteIntrodução á programação - 1ª parte
Introdução á programação - 1ª parte
 
Uma Introdução a Programação em JavaScript
Uma Introdução a Programação em JavaScriptUma Introdução a Programação em JavaScript
Uma Introdução a Programação em JavaScript
 
Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)
Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)
Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)
 
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
 
Comparativo do uso de linguagens de programação e geradores de código no dese...
Comparativo do uso de linguagens de programação e geradores de código no dese...Comparativo do uso de linguagens de programação e geradores de código no dese...
Comparativo do uso de linguagens de programação e geradores de código no dese...
 
TDC 2015 - Torne-se um programador melhor
TDC 2015 - Torne-se um  programador melhorTDC 2015 - Torne-se um  programador melhor
TDC 2015 - Torne-se um programador melhor
 
O que é ser um bom programador?
O que é ser um bom programador?O que é ser um bom programador?
O que é ser um bom programador?
 
Algoritmia para o site do 10gi marcelo e ricardo
Algoritmia para o site do 10gi marcelo e ricardoAlgoritmia para o site do 10gi marcelo e ricardo
Algoritmia para o site do 10gi marcelo e ricardo
 

Introdução a linguagem java

  • 1. Programação Orientada a Objetos I Uma abordagem com Java ROSICLEIA FRASSON DE SOUZA
  • 2. INTRODUÇÃO A LINGUAGEM DE PROGRAMAÇÃO OBJETIVOS  compreender o que são programas de computador;  diferenciar hardware de software;  conhecer os principais componentes dos computadores e suas funcionalidades;  conhecer a linguagem dos processadores;  diferenciar tradutores e interpretadores;  compreender como é feita a escolha de uma linguagem de programação; 1. O que são programas de computadores Computadores são máquinas capazes de realizar uma infinidade de tarefas em uma velocidade e precisão muito melhor do que nós humanos. Atualmente, eles estão presentes nos mais diversos segmentos: indústria; negócios; telecomunicações; medicina; e na vida pessoal de bilhões de pessoas. Na era em que estamos, seria incogitável viver sem essas poderosas máquinas. Porém, os computadores não conseguem fazer nada sozinhos, eles precisam ser orientados para executar qualquer tarefa. O conjunto de orientações dadas ao computador, para que o mesmo execute uma tarefa específica, é chamado de programa de computador ou software. 2. Hardware X Software O hardware é a parte física do computador. É composta pelos componentes elétricos, eletrônicos, chips, enfim tudo o que é físico no computador.
  • 3. Já o software é o que não é palpável, ou seja, a imensa cadeia de instruções que faz com que o computador seja uma ferramenta útil. 3. Componentes de um computador Figura 1: Componentes de um computador Fonte: TI na net. Disponível em: <http://tinanet2011.blogspot.com.br/2011/04/1-mostre-graficamente-os- principais.html>. Acesso em 12 jan 2013. O hardware de um computador é composto por vários componentes e cada um tem uma responsabilidade. Os componentes de entrada/saída tem a função de comunicar o computador com o usuário e o usuário com o computador. A memória secundária serve para armazenar grandes quantidades de dados e evitar que estes se percam com o desligamento do computador. A CPU (Unidade Central de Processamento) é o cérebro do computador. Ela é a responsável por organizar todas as funções executadas pelo mesmo. Cabe a CPU executar as instruções dadas pelos programas de computador. Para executar os programas, o processador utiliza a memória RAM para armazenar as informações necessárias a execução dos programas. 4. Linguagem do processador O processador é um circuito eletrônico digital. Deste modo, ele consegue processar informações apenas compostas por bits, ou seja apenas 0 e 1. Isto se aplica também as instruções dadas nos softwares. Para que o processador possa entender, as instruções devem ser passadas em linguagem de
  • 4. máquina, apenas contendo números binários. Os primeiros computadores criados eram programados apenas utilizando linguagem de máquina. Para inserir as instruções nestes, era necessário uma grande quantidade de pessoas que percorriam a gigantesca máquina acionando ou desligando interruptores. Era um processo muito demorado e sujeito a muitos erros. Por esse motivo, surgiram as linguagens de programação, que são mais próximas as linguagens humanas. 5. Interpretadores e Compiladores Para que os processadores possam executar as instruções escritas em linguagens de programação, é necessário traduzir as instruções para a linguagem de máquina.A tarefa de conversão é feita por um programa de computador que recebe as instruções de alto nível e as converte para instruções binárias. Existem alguns métodos para efetuar o processo de tradução. Os mais conhecidos são citados abaixo: Interpretador: Quando um interpretador é utilizado para efetuar a conversão, o mesmo vai percorrendo as instruções e à medida em que vai interpretando cada instrução, vai traduzindo para o processador, que então executa cada ação correspondente. Em cada execução do programa é necessário o uso do interpretador. O uso de um interpretador torna a execução do programa mais lenta. Compilador: Utilizando um compilador, as instruções das linguagens de programação geram um outro código em linguagem de máquina. A execução do programa é feita com o arquivo compilado, não sendo mais necessário o uso do compilador. A execução de programas compilados é mais rápida, porém, o programa deve ser compilado para cada tipo de processador e de sistema operacional. 6. Linguagens de programação Uma linguagem de programação é um meio padronizado de escrever instruções para um processador. Existem uma infinidade de linguagens de programação e cada uma delas, foi construída com um propósito diferente. A escolha de uma linguagem de programação deve estar
  • 5. condicionada ao tipo de problema que se quer resolver. Segundo LUZ (2009), a escolha de uma linguagem de programação deve ser guiada por alguns princípios: Partindo do princípio de que uma linguagem deve facilitar a comunicação com outras pessoas e ajudar você a expressar seu conhecimento, vamos entrar no contexto do desenvolvimento de software e colocar em discussão um tema que gera muita confusão, acaba com longas amizades e até destrói casamentos. Qual a melhor linguagem de programação? Achar uma resposta para essa pergunta muitas vezes passa por encontrar todo tipo de argumento para defender a linguagem que você usa – o que pode ser um grande erro se fechar seus olhos para tecnologias que podem torná-lo um programador melhor. O objetivo de uma linguagem de programação é permitir que um programador possa resolver problemas computacionais criando um conjunto de instruções que seguem um determinado padrão, por meio do qual se representam ações executáveis por um computador. Isso pode fazer com que muitos pensem que a melhor linguagem é aquela que permite que um desenvolvedor possa se ?comunicar? da melhor forma com o computador. Outro grande erro. Para isso existem os compiladores. Quem já trabalhou em um projeto razoável, já sofreu com problemas durante a reutilização do código – comentários que não comentam nada, códigos macarrônicos e outros fatores que atrasam qualquer projeto de criação de software. Não existe nada mais estressante para um desenvolvedor do que perder horas, dias, semanas ou meses tentando entender um código que outro programador criou. Com isso você perde muito tempo de desenvolvimento, tentando ler códigos e corrigir bugs e perdendo produtividade. Pensando dessa forma, uma linguagem de programação deve melhorar a comunicação entre desenvolvedores, facilitando a criação de códigos mais limpos, claros e que podem ser lidos facilmente por outro programador a qualquer momento. Portanto ser o mais próximo de uma linguagem humana e intuitiva é uma grande qualidade e deve ser considerada na escolha de uma linguagem para começar a programar. Então para de enrolar e diz logo qual devo escolher! Sinto desapontá-lo, mas essa pergunta não tem uma resposta predefinida, pois depende de alguns fatores que estão totalmente incorporados à relação do programador com a linguagem. Você deve escolher a linguagem que faça de você um programador melhor, que se divirta programando, que aumente sua produtividade e o anime a se aprofundar nos conceitos e na filosofia por trás dela. Mas cuidado para nunca ficar limitado a não conhecer as novas tecnologias que surgirem. É um erro grave que frequentemente acontece no mundo do desenvolvimento de software. Antes de concluir o raciocínio, um exemplo interessante de que a linguagem melhor é a que fornece a possibilidade de se expressar melhor, acontece quando imaginamos um possível bate papo entre um brasileiro e um americano, por exemplo. Muitas pessoas podem achar que o correto é o brasileiro falar inglês, outras acham que o americano é quem deve falar português e alguns
  • 6. que vai depender se o brasileiro está nos Estados Unidos ou se o americano está no Brasil. Mas a forma como o brasileiro e o americano devem se comunicar é a forma em que ambos consigam se expressar de forma mais adequada e confortável, seja ela falar inglês, português ou tentar uma comunicação por mímica. Portanto, procurem conhecer bem a linguagem que você programa ou está interessado em começar a programar e a comunidade por trás dela. Procure uma linguagem que te possibilite desenvolver seu conhecimento da melhor e menos dolorosa forma possível. Caso você consiga isso, ela é ideal. Na verdade, a linguagem pouco importa. Você, o programador, é quem faz toda a diferença no final das contas. 7. Por que Java? Em um curso de desenvolvimento, a escolha de uma linguagem de programação é um processo bem delicado. Java foi escolhida por atender alguns requisitos. Dentre eles, pode-se citar: Facilidade de aprendizado; Versatilidade; Popularidade; Amplo mercado de trabalho; Segurança; Inúmeros frameworks; Grande aceitação nas companhias; Gratuidade e Abundância de informações; Além disso, os conceitos utilizados em Java ajudam a entender melhor outras linguagens e tecnologias. O que deve ficar claro é que o objetivo do Java não é o de construir sistemas pequenos, com um ou dois desenvolvedores, para estes existem linguagens de programação mais produtivas como cita CAELUM (2012): O foco da plataforma é outro: aplicações demédio a grande porte, onde o time de desenvolvedores tem váriaspessoas e sempre pode vir amudar e crescer. Não tenha dúvidas que criar a primeira versão de uma aplicaçãousando Java, mesmo utilizando IDEs e ferramentas poderosas, será mais trabalhoso que muitas linguagensscript ou de alta produtividade. Porém, com uma linguagem orientada a objetos e madura como o Java,será extremamente mais fácil e rápido fazer alterações no sistema, desde que você siga as boas práticas erecomendações sobre design orientado a objetos.Além disso, a quantidade enorme de bibliotecas gratuitas para realizar os mais
  • 7. diversos trabalhos (tais comorelatórios, gráficos, sistemas de busca, geração de código de barra,manipulação de XML, tocadores de vídeo,manipuladores de texto, persistência transparente, impressão, etc) é um ponto fortíssimo para adoção doJava: você pode criar uma aplicação sofisticada, usando diversos recursos, sem precisar comprar um componenteespecífico, que costuma ser caro. O ecossistema do Java é enorme. Cada linguagem tem seu espaço e seu melhor uso. O uso do Java é interessante em aplicações que virãoa crescer, em que a legibilidade do código é importante, onde temos muita conectividade e se há muitasplataformas (ambientes e sistemas operacionais) heterogêneas (Linux, Unix, OSX eWindows misturados).
  • 8. JAVA OBJETIVOS  conhecer a história do Java;  conhecer as diversas distribuições de Java e a utilidade de cada uma delas;  entender o processo de compilação e execução dos programas em Java;  compreender a diferença entre jdk e jre;  aprender a instalar o jdk;  entender o que são APIs Java;  desenvolver o primeiro programa em Java. 1. Um pouco de história... Java foi construída para ser utilizada em pequenos dispositivos eletrônicos, o que não deu muito certo, pois o projeto era muito avançado para a época. Com a explosão da internet, a Sun viu uma nova luz para o Java. Remodelou a linguagem que passou a ser utilizada em applets para a internet. A linguagem foi ficando cada vez mais poderosa e hoje está presente em sites, portais, internet banking, programas desktop, celulares, cartões de crédito, blue-rays e até em anéis. A parte mais interessante é que a tecnologia Java nasceu com o intuito de programar pequenos dispositivos, percorreu um longo caminho e a cada dia está mais presente em dispositivos eletrônicos, o que era o objetivo inicial. PARA SABER MAIS  Para conhecer detalhes da história do Java acesse:<http://www.devmedia.com.br/websys.4/webread er.asp?cat=61&revista=easyjavamag_1#a-2982>
  • 9. 2. Distribuições do Java Java pode ser encontrada em três distribuições principais, cada uma com sua finalidade específica: Java StandartEdition (JSE): Usada em computadores pessoais e ambientes de trabalho. Várias APIs acompanham esta versão e tantas outras podem ser baixadas do site da Oracle. Java Enterprise Edition (JEE): É a tecnologia Java para aplicativos distribuídos em rede em larga escala e aplicativos baseados na web . Possui um grande número de APIs voltadas para a segurança da aplicação. Usada em servidores, contendo suporte para JSP, XML e servlets. Java Micro Edition (JME): Usada em dispositivos com recursos limitados, como sistemas embarcados e dispositivos móveis. Possui APIs bem simples e leves para economizar memória e processamento. Figura 2: Edições da linguagem Java e seus respectivos alvos de aplicação. Fonte: FIORESI, Cristiano. Conceitos básicos da plataforma Java e J2ME. Disponível em: <http://www.devmedia.com.br/conceitos-basicos-das-plataformas-java-e-j2me/6484> Acesso em: 12 jan 2013. Além das três principais distribuições, também existe o Java Card, que é uma edição específica para cartões inteligentes, extremamente reduzida. Nesta tecnologia até a máquina virtual é dividida entre o sistema do cartão e o sistema operacional do terminal. 3. Compilador e interpretador Java
  • 10. O processo de tradução da linguagem Java para a linguagem de máquina é um pouco diferente das outras linguagens de programação. Os programas Java são compilados e interpretados. Após a criação de um programa Java, um compilador transforma o programa em uma linguagem intermediária, como pode ser visto na figura 3, chamada de bytecodes. O bytecode é independente de plataforma.Todas as vezes que o programa é executado, a JVM (Java Virtual Machine) lê o arquivo com a extensão .class que está em bytecode e o interpreta para o processador. Figura 3: Processo de criação e execução de um programa Java Fonte: MELO, Mario. Minicurso Java Básico Com o uso da máquina virtual, o programa fica independente de sistema operacional e de plataforma. Uma máquina virtual é muito mais ampla do que um interpretador. Uma máquina virtual é uma espécie de computador de mentira, tem tudo o que um computador tem: gerenciamento de memória, thread, pilha de execução. Nas primeiras versões do Java, o processo de interpretação feito pela JVM era lento, o que tornava um problema para a linguagem. Na versão 1.2 surgiu o Compilador Just In Time ou Compilador JIT. O compilador JIT trabalha em conjunto com o interpretador Java. O interpretador verifica quais trechos de código são executados mais vezes e pede que o compilador JIT os compile, convertendo o bytecode na linguagem de máquina do processador que está executando o programa. O JIT também possui informações relativas ao ambiente em que está executando, como quantidade de usuários simultâneos e memória disponível. Com essas informações a JVM muda a estratégia de compilação em busca de um melhor desempenho.
  • 11. 4. JSE A JSE é o segmento base da plataforma Java. O JSE possui duas divisões: JRE: ambiente de execução Java para quem quer apenas executar programas em Java. É composta pela JVM e as APIs Java, que é uma coleção de softwares prontos, que incluem desde estruturas para a manipulação de arquivos até a construção de aplicativos gráficos. JDK: é o conjunto de ferramentas necessárias para o desenvolvimento de programas Java. É composto pela JRE, javac (compilador), jar (empacotador) e o javadoc (documentação) Na figura 4 é possível observar as APIs que compõem a plataforma Java e as ferramentas que acompanham o kit de desenvolvimento (jdk). Figura 4: Arquitetura JSE Fonte: PAMPLONA, Vitor Fernando. O que é Java. Disponível em: <http://javafree.uol.com.br/artigo/871498/Tutorial- Java-O-que-e-Java.html> Acesso em 12 jan 2013. 5. Instalando o ambiente de desenvolvimento Para iniciar o desenvolvimento em Java é necessário ter o jdk instalado. Abaixo segue um passo-a-passo para a instalação no sistema operacional windows. Passo 1: Acessar o site da Oracle
  • 12. Acesse o endereço: <http://www.oracle.com/technetwork/java/javase/downloads/index.html> e clique no link correspondente ao JDK 7. Figura 5: Instalação jdk Fonte: Elaboração da autora Passo 2: A página será redirecionada. Clique em aceitar os termos da licença e escolha a versão compatível com o sistema operacional. Neste caso, o Windows 64 bits.
  • 13. Figura 6: Instalação do jdk Fonte: Elaboração da autora Passo 3: A página será redirecionada. Abrirá uma janela semelhante a figura abaixo, para a confirmação do download. Clique em Download. Figura 7: Instalação do jdk Fonte: Elaboração da autora Passo 4: Escolha o local onde o arquivo será salvo. Escolha o local e clique em Salvar.
  • 14. Figura 8: Instalação do jdk Fonte: Elaboração da autora Passo 5: O download será iniciado. Aguarde a conclusão do download. Figura 9: Instalação do jdk Fonte: Elaboração da autora Passo 6: Instalação Dê um duplo clique no instalador e a janela abaixo deverá ser exibida. Clique em Next.
  • 15. Figura 10: Instalação do jdk Fonte: Elaboração da autora Deve aparecer a próxima janela do instalador. Figura 11: Instalação do jdk Fonte: Elaboração da autora O botão Change permite alterar o local de instalação. Clique em Next. Deve iniciar o processo de instalação
  • 16. Figura 12: Instalação do jdk Fonte: Elaboração da autora O instalador pede a confirmação do destino da instalação. Clique em Next. Figura 13: Instalação do jdk Fonte: Elaboração da autora Deve aparecer a janela abaixo.
  • 17. Figura 14: Instalação do jdk Fonte: Elaboração da autora Após concluir o processo de instalação, a janela abaixo será exibida. Clique em Close. Figura 15: Instalação do jdk Fonte: Elaboração da autora 6. Bibliotecas de classes do Java Os programas Java são formados por classes. As classes contém métodos que executam tarefas e retornam informações quando as mesmas são concluídas. É possível criar tudo que é necessário para construir um programa Java, porém Java traz consigo inúmeras classes prontas, que realizam as mais variadas tarefas. Essas classes são chamadas de APIs. Deste modo, existem dois aspectos para aprender o mundo Java. O primeiro deles, é compreender os
  • 18. princípios e sintaxe da linguagem para desenvolver classes e o segundo conhecer as APIs Java e aprender como usá-las. 7. Primeiro programa em Java Além de ter o jdk instalado, é necessário ter um editor de texto. Abra qualquer editor de texto e digite o texto mostrado na figura 16.A princípio, não se preocupe em entender tudo o que está escrito. Logo abaixo o código será explicado linha a linha. Vale lembrar que o Java é case sensitive, então cuidado para não trocar letras maiúsculas e minúsculas. Essa troca pode gerar um erro no momento da compilação. Figura 16: Primeiro programa em Java Fonte: Elaboração da autora Salve o arquivo dentro da pasta Programas, contida no C: com o nome PrimeiroPrograma.java. Vale ressaltar que os programas em Java devem ser salvos com omesmo nome da classe. O programa já está salvo. Como já visto no tópico 3 deste capítulo, os programas Java são compilados e interpretados. Portanto, o próximo passo é compilar o código. Para compilar o programa é necessário solicitar ao compilador do Java chamado javac, que gere o bytecode correspondente ao código Java. Para fazê-lo abra o terminal do Windows e vá até o diretório em que o programa está salvo.
  • 19. Figura 17: Acessando o prompt de comando Fonte: Elaboração da autora Digite o comando javacPrimeiroPrograma.java no prompt de comando. Se não ocorrer nenhum erro, deve aparecer no diretório onde está salvo o arquivo java, um arquivo PrimeiroPrograma.class. O arquivo .class é o arquivo que contêm o bytecode do código fonte. O próximo passo é fazer com que a JVM interprete o bytecode e execute o programa. Para executar o programa no prompt de comando digite javaPrimeiroPrograma. Deve aparecer na tela a seguinte mensagem: Este é meu primeiro programa em Java!. Figura 18: Execução do programa Java pelo prompt de comando Fonte: Elaboração da autora A seguir está descrito o que faz cada linha do código: A linha 1 cria uma classe (palavra-chave class) pública (palavra-chave public) chamada PrimeiroPrograma;
  • 20. Na linha 3 está o método main, que é o ponto de partida de qualquer programa java, é onde o programa é de fato iniciado. A função main precisa ser pública (palavra-chave public), estática (palavra-chave static), sem tipo de retorno (palavra-chave void) e precisa conter um parâmetro array do tipo String (Stringargs[]). A linha 5 indica que o que está escrito entre os parênteses deve aparecer na tela. PARA SABER MAIS  Para mais informações sobre PATH e CLASSPATH acesse:<http://devjava.wordpress.com/2010/01/11/java_h ome-classpath-e-path-o-que-so-isso-para-que-servem-e- como-configura-los/>  Para entender um pouco mais sobre jdk e jre acesse: <http://www.devmedia.com.br/alo-mundo-entendendo-o- java-de-uma-forma-diferente/24032> PARA FIXAR 1. Qual a diferença entre jdk e jre? 2. Crie uma classe Java que imprima o texto: "Consegui concluir meu primeiro programa em Java".
  • 21. IDE OBJETIVOS  entender a funcionalidade das IDEs;  conhecer as principais IDEs para desenvolvimento Java;  visualizar os passos para a instalação da IDE Netbeans;  conhecer as principais funcionalidades da ferramenta. 1. IDEs Como visto no capítulo anterior, o processo de criar programas em Java usando o bloco de notas e o prompt de comando é um processo bem dispendioso. Para deixar o processo de desenvolvimento mais produtivo, existem programas específicos, chamados de IDEs (Ambiente de Desenvolvimento Integrado). Uma IDE é um software que tem como objetivo maximizar a produtividade em uma ferramenta única. Alguns recursos que as IDEs possuem: Editor de código: Escrita rápida de código, auto completar, gerenciamento de importações, dicas para correção e geração de código. Depurador: Facilidade na busca por erros no código através da análise cuidadosa de cada passo executado pelo software. Compilador: Geração de código de máquina a partir do código fonte automaticamente. Deploy: Publicação da aplicação, geração de executáveis. Código limpo e automatizado: Facilidadeno entendimento do projeto por todos os envolvidos. JVM: Processo de interpretação de bytecodes automático. 2. Principais IDEs para o desenvolvimento Java Existem uma infinidade de IDEs para o Java, abaixo segue as características de algumas delas. JDeveloper: O JDeveloper é uma ferramenta da Oracle que tem como principal característica a cobertura de todo o ciclo de desenvolvimento: análise, codificação, manutenção, otimização e implantação. Esta ferramenta é pouco flexível e seu uso é recomendado quando o software
  • 22. for produzido usando toda a arquitetura com produtos Oracle. Eclipse: Poderosíssima IDE de desenvolvimento, leve, rápido configurávelcom inúmeros plug-ins. Deixa a desejar no desenvolvimento de telas para desktop. Netbeans: Juntamente com o Eclipse, uma das IDEs mais utilizadas pela comunidade de desenvolvimento. Tem editor de GUI nativo.Gera muito código automático, não editável. 3. Netbeans Neste curso, vamos optar pela IDE Netbeans, por ter um melhor suporte para desenvolvimento Desktop. O Netbeans é uma ferramenta gratuita e tem suporte para desenvolvimento nas linguagens C, C++, Groovy, PHP e Java. O download da ferramenta pode ser feito em: <http://netbeans.org/downloads/index.html>. Abrindo a página correspondente será visualizada uma tela como na figura abaixo: Figura 19: Download do Netbeans Fonte: Elaboração da autora Inicialmente, os softwares desenvolvidos, terão o padrão Desktop, deste modo, baixar a versão correspondente a Java SE é suficiente. Clicando em Download, será aberta uma janela para a escolha do local onde o instalador será salvo como mostra a figura abaixo.
  • 23. Figura 20: Download do Netbeans Fonte: Elaboração da autora Após a escolha do local onde ficará salvo o instalador clique em salvar. O download será iniciado. Dê um duplo clique sobre o instalador. A janela do mesmo será aberta. Figura 21: Instalação do Netbeans Fonte: Elaboração da autora Na janela abaixo, clicando em personalizar é possível escolher os pacotes que serão instalados. Após ter efetuado a escolha, clique em próximo.
  • 24. Figura 22: Instalação do Netbeans Fonte: Elaboração da autora Na janela seguinte, é necessário aceitar o contrato de licença. Clique em próximo. Figura 23: Instalação do Netbeans Fonte: Elaboração da autora A próxima janela é sobre o framework JUnit. O JUnit é uma ferramenta usada para testes. Neste momento não será necessário instalar a mesma. Clique em não instalar JUnit. Clique em próximo.
  • 25. Figura 24: Instalação do Netbeans Fonte: Elaboração da autora Na próxima tela serão solicitados o local para a instalação e o local onde o jdk se encontra. Depois de preencher essas afirmações, clique em próximo. Figura 25: Instalação do Netbeans Fonte: Elaboração da autora
  • 26. Na próxima tela é mostrado um resumo das configurações da instalação. Clique em instalar. Figura 26: Instalação do Netbeans Fonte: Elaboração da autora A tela do progresso da instalação será mostrada. Figura 27: Instalação do Netbeans Fonte: Elaboração da autora
  • 27. Quando a instalação for concluída, a tela abaixo será mostrada. Clique em finalizar. Figura 28: Instalação do Netbeans Fonte: Elaboração da autora 4. Funcionalidades do Netbeans As principais funcionalidades do Netbeans são: Autocompletar: Pressionando as teclas CTRL + Espaço, uma caixa de seleção será aberta, com opções para preenche o código faltante. Gerenciar importações: O Netbeans varre o código do editor de texto constantemente e avisa imediatamente a ocorrência de classes não importadas ou instruções importadas não utilizadas. Nos casos de não importação de classes, uma marca de erro é exibida e para importações não utilizadas uma advertência. Dicas para corrigir código: Para os erros mais comuns de código, o Netbeans enumera possíveis maneiras de corrigir os mesmos. Formatar código: Pressionando ALT + SHIFT + F, o Netbeans formata o código da classe. Dobramento de código: No editor de código, é possível contrair e expandir blocos de código. Com este recurso, é possível deixar as partes de código que se está trabalhando mais visível.
  • 28. Gerar códigos: Pressionando as teclas ALT + INSERT é possível gerar construtores e métodos de acesso. Code templates: São pedaços de código que podem ser acessados por atalhos. Existem alguns disponíveis no Netbeans e estão citados abaixo. Eles devem ser acessados juntamente com a tecla TAB. o sout: Atalho para o psvm: Atalho para o método main; o for: Atalho para o St: o if: Teclas de atalho: o ALT + F1: pesquisarjavadoc; o CTRL + E: excluir a linha atual; o F5: iniciar depuração do projeto principal; o SHIFT + F6: executar projeto principal; o ALT+ ENTER: exibir dica.
  • 29. SINTAXE DA LINGUAGEM JAVA OBJETIVOS  entender a utilização do ponto-e-vírgula, espaços em branco e o padrão case-sensitive presente na linguagem Java;  conhecer as palavras reservadas;  aprender a utilizar os tipos primitivos de dados;  compreender os casts implícitos e explícitos entre tipos numéricos;  entender o uso de Strings em Java;  aprender como se declaram as variáveis e constantes em Java;  compreender a diferença de alocação na memória entre os tipos primitivos e as variáveis de referência;  conhecer o GarbageCollector;  conhecer os operadores básicos, lógicos, aritméticos, incremento e decremento e de atribuição;  aprender a sintaxe das estruturas de controle e repetição da linguagem Java;  diferenciar os tipos de comentários e a utilidade de cada um. 1. Ponto-e-vírgula, blocos, espaços em branco e case-sensitive Java é uma linguagem de formato livre, ou seja, não existem regras especiais para o espaçamento vertical ou para a identação horizontal. Porém, para uma melhor legibilidade do código, é interessante usar espaços, tabulações e novas linhas. Em Java, espaços em branco podem ser usados sem restrições. Um bloco é formado por uma ou mais instruções agrupadas entre chaves indicando que formam uma só unidade. O uso de chaves em Java indica a presença de um bloco, ondea abertura da chave indica o início do bloco e o fechamento da chave, o fim do bloco. Os blocos podem ser organizados em estruturas aninhadas infinitamente. Uma instrução é composta por uma ou mais linhas terminadas com um ponto-e-vírgula. No fim de cada instrução, indispensavelmente deve ser usado o sinal de pontuação ponto-e-vírgula. A quebra de linha não separa instruções. O Java é uma linguagem case-sensitive, ou seja, diferencia maiúsculas
  • 30. de minúsculas. Portanto, escrever letra e LETRA é diferente para o Java. 2. Palavras reservadas O Java possui uma lista de palavras que possuem um significado especial para o compilador. Essas palavras não podem ser usadas na declaração de classes, métodos e variáveis. A tabela 1 lista estas palavras. abstract assert boolean break byte case catch char class const continue default Do double else enum extends false final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static strictpf super switch synchronized this throw throws transient Try void volatile while Tabela 1: Palavras reservadas Java Fonte: Elaboração da autora. 3. Tipos primitivos de dados Figura 29: Declaração de tipos primitivos em Java Fonte: Elaboração da autora
  • 31. Existem somente oito tipos primitivos de dados em Java, todo o resto é objeto. Tipos primitivos fazem parte da linguagem e não são instâncias de outras classes. A declaração dos tipos primitivos pode ser vista na figura 29. Os seus nomes são palavras reservadas. 3.1 Tipo boolean O tipo boolean é o tipo mais simples encontrado em Java. Uma variável booleana pode conter apenas dois valores: true ou false, que representam os valores verdadeiro e falso, respectivamente. O valor padrão do tipo boolean é false. 3.2 Tipo char O tipo char representa um único caracter em Java. Caracteres em Java são representados usando o conjunto de caracteres Unicode, usando dois bytes por caracter. Esta representação de caracteres permite a representação em várias línguas simultaneamente. Alguns caracteres são considerados especiais – se tentarmos imprimir esses caracteres ao invés de imprimir um caracternormal, uma ação especial ocorrerá. É o caso, por exemplo do número 7 que corresponde ao som bell. Existem ainda os caracteres de controle, mostrados na tabela 2. Caracter Descrição ” aspa dupla ’ aspa simples n nova linha t Tabulação Barra r Enter Tabela 2: Caracteres de controle Fonte: Elaboração da autora
  • 32. 3.3 Tipos numéricos Classificação Tipo Descrição Inteiro byte Variáveis do tipo byte podem representar valores inteiros com 8 bits de precisão, ou seja, valores entre -128 a 127. short Variáveis do tipo short podem representar valores inteiros com 16 bits de precisão, ou seja, valores entre -32768 a 32767. int Variáveis do tipo int podem representar valores inteiros com 32 bits de precisão, ou seja, valores entre -2147483648 a 2147483647. long Variáveis do tipo long podem armazenar valores inteiros com 64 bits de precisão, ou seja, valores entre -9223372036854775808 a 9223372036854775807. Ponto Flutuante float Variáveis do tipo float podem armazenar valores em ponto flutuante com 32 bits de precisão, na faixa de - 1.40239846E-45 a 3.40282347E + 38 (9 dígitos significativos de precisão). double Variáveis do tipo double podem armazenar valores em ponto flutuante com 64 bits de precisão, na faixa de - 4.94065645841246544E- 324 a 1.79769313486231570E + 308 (18 dígitos significativos de precisão). Tabela 3: Tipos primitivos numéricos em Java Fonte: Elaboração da autora Ao escolher um tipo de dado para ser usado, o programador deve estar atento a faixa de valores que o campo pode vir a ocupar. Para representar valores decimais em Java, utilizamos o ponto ao invés da vírgula. 4. Conversão entre tipos primitivos
  • 33. Figura 30: Casts implícitos e explícitos Fonte: Elaboração da autora Valores de tipos numéricos podem ser transformados em outros tipos numéricos de duas formas: Implicitamente: A JVM transforma em tempo de execução, quando acha conveniente, tipos restritos em tipos com maior amplitude, ou seja, uma variável pode receber valores de variáveis de tipos com tamanho menor do que a mesma foi declarada. . Nenhuma informação é perdida (Figura 30). Através de uma operação chamada casting ou conversão explícita. Para efetuar a conversão explícita, basta colocar o tipo de dado para o qual se deseja converter entre parênteses antes da expressão a ser convertida. Neste caso, o programador estará se responsabilizando por possíveis perdas de valores (Figura 30). Na tabela abaixo, estão relacionados todos os casts possíveis na
  • 34. linguagem Java. Para byte short char int long float double byte De ----- implícito (char) implícito implícito implícito implícito short (byte) ----- (char) implícito implícito implícito implícito char (byte) (short) ----- implícito implícito implícito implícito int (byte) (short) (char) ----- implícito implícito implícito long (byte) (short) (char) (int) ----- implícito implícito float (byte) (short) (char) (int) (long) ----- implícito double (byte) (short) (char) (int) (long) (float) ----- Tabela 4 :Casts possíveis na linguagem Java Fonte: CAELUM. Java e orientação a objetos. Disponível em: < http://www.caelum.com.br/apostila-java-orientacao- objetos/> Acesso em 14 jan 2013. 5. String Em Java não existe um tipo primitivo para se trabalhar com textos. Para fazer uso dos mesmos é necessário utilizar a classe String presente no Java desde a primeira versão. Por ser uma classe amplamente usada, ela não precisa ser instanciada, sua atribuição é composta por uma sequência de caracteres delimitados por aspas duplas. 6. Declaração de variáveis Variáveis são espaços na memória onde podemos guardar informações. Cada valor é convertido para binário e então pode ser alocado na memória.Praticamente todos os programas usam variáveis. E como o próprio nome diz, elas podem ter o valor modificado durante a execução do programa. As variáveis possuem tipos diferentes, dependendo da informação a ser armazenada. No Java, para declarar uma variável é necessário especificar o tipo, dar um nome a ela e preferencialmente inicializá-la. Os nomes de variáveis ou identificadores possuem algumas regras para que o compilador identifique como válido:
  • 35. Os nomes de variáveis em Java devem ser inicializados por uma letra, um cifrão ou por undescore; Após o primeiro caracter, vale qualquer combinação de números, letras e caracteres; Os identificadores não podem ter o nome igual ao de uma palavra reservada. 7. Diferença entre tipos primitivos e variáveis de referência As variáveis primitivas guardam o real conteúdo da variável. Uma variável de tipo primitivo pode armazenar exatamente um valor de seu tipo declarado por vez, quando outro valor for atribuído a essa variável, seu valor inicial será substituído. As variáveis de referência são as variáveis que apontam para um objeto, ou seja,guardam um endereço de memória para um objeto criado.Desta forma, quando um outro valor é atribuído para a variável, uma nova posição de memória aloca o novo valor e a referência aponta para a nova posição de memória. O tamanho alocado para uma variável de referência é sempre fixo, pois se trata de um endereço de memória que mostra como chegar ao objeto. 8. GarbageCollector Quando referências são criadas, espaço em memória é alocado a elas. Quando não as utiliza mais, este espaço precisa ser liberado. Em Java, isto é responsabilidade do GarbageCollector. Este mecanismo verifica os espaços de memória sem referência e os limpa para um melhor aproveitamento. O coletor de lixo em Java faz isso automaticamente, ou seja, o programador não precisa se preocupar com isso. 9. Constantes Uma constante em Java recebe um valor que não pode ser modificado. Para criar uma constante em Java é utilizado o modificador final.
  • 36. Uma vez que a variável for definida como constante, é obrigatório, a inicialização da mesma. Convenções de Código  Métodos, atributos e variáveis: Devem ser declarados com letras minúsculas. Caso seja nome composto, a primeira letra de cada palavra, exceto a primeira, deve ser escrita em maiúscula. Ex: nome, meuNome.  Constantes: Devem ser usadas letras maiúsculas na declaração. Em casos de palavras compostas, as palavras devem ser divididas usando o undescore. 10.Operadores básicos . Referência a método, função ou atributo de um objeto. , Separador de identificadores. ; Finalizador de declarações e comandos. [] Declarador de vetores e delimitador de índices. {} Separador de blocos. () Lista de parâmetros. = Operador de atribuição. Tabela 5: Operadores básicos da linguagem Java Fonte: Elaboração da autora 11. Operadores lógicos > Maior >= Maior ou igual
  • 37. < Menor <= Menor ou igual == Igual != Diferente && E || Ou Tabela 6: Operadores lógicos Fonte: Elaboração da autora 12. Operadores aritméticos Na tabela 1, estão apresentados os operadores aritméticos disponíveis em Java. + Soma - Subtração / Divisão * Multiplicação % Módulo (resto da divisão) Tabela 7: Operadores lógicos Fonte: Elaboração da autora 13. Incremento e decremento Os operadores de incremento e decremento são operadores que atuam sobre uma única variável numérica, aumentando ou diminuindo ou seu valor. incremento: adicionar o valor de uma unidade ao valor atual. O operador de incremento é o sinal de ++; decremento: diminuir uma unidade do valor atual. O operador de decremento é o --; Os operadores de incremento e decremento podem ser posicionados
  • 38. imediatamente antes ou imediatamente após o nome da variável. Vale ressaltar que esses operadores funcionam de forma diferente dependendo da posição em relação a variável. Se o operador for colocado antes, a variável é incrementada no momento da sua avaliação. Caso contrário, a variável é incrementada após a sua avaliação. Maiores detalhes podem ser vistos na tabela abaixo: Operador Exemplo Significado ++ ++x Incrementa a variável e depois usa. x++ Usa a variável e depois incrementa. -- --x Decrementa a variável e depois usa. x-- Usa a variável e depois decrementa. Tabela 8: Operadores de incremento e decremento Fonte: Elaboração da autora 14. Operadores de atribuição Para efetuar uma operação aritmética seguida da atribuição do valor de retorno a variável que continha o primeiro termo da operação, pode ser utilizada uma notação compacta. Segue abaixo a mesma: Operador Exemplo Expressão equivalente += x += y x=x+y -= x -= y x=x-y *= x *= y x=x*y /= x /= y x=x/y %= x%=y x=x%y Tabela 9: Operadores de atribuição Fonte: Elaboração da autora 15. Estruturas de controle e repetição Instrução if Comando if... else  A estrutura if permite especificar um comando ou um bloco de comandos que devem ser executados quando uma
  • 39. determinada condição for satisfeita.  A estrutura if ... else permite expressar duas if (expressão){ alternativas de execução, uma delas executa bloco de comandos caso a condição seja verdadeira e a outra }else{ quando a condição não for satisfeita. bloco de comandos  Quando houver apenas um comando dentro } do bloco if ou do bloco else, não é necessário o uso das chaves.  Quando houver comandos if aninhados, cada else está relacionado ao if que estiver dentro do mesmo bloco que ele. Instrução switch Comando switch  O comando switch faz o teste da switch (expressão){ expressão de seleção contra os valores case constante1: das constantes indicados nas cláusulas bloco decomandos; case, até que um valor verdadeiro seja break; obtido. case constante2:  Se nenhum dos testes produzir um bloco decomandos; resultado verdadeiro, são executados break; os comandos do bloco default. •••  O comando break é utilizado para default: forçar a saída do switch. bloco decomandos; } Comando for for (inicialização; condição; incremento){  O comando for é usado bloco de comandos; quando é necessário } repetir um trecho de código diversas vezes.  o comando for permite expressar iterações combinando uma expressão de inicialização, um teste de condição e uma expressão de
  • 40. incremento.  inicialização: comando de atribuição que define o valor inicial da variável que controla o número de repetições.  condição: expressão relacional que define até quando as iterações serão executadas.  incremento: expressão que define como a variável de controle do laço deve variar ( pode aumentar ou diminuir).  o teste da condição do controle é feito no início do laço, o que significa que se já for falsa os comandos dentro do laço não serão executados. Comando while while (condição){  como dito anteriormente no comando for, o bloco de comandos; comando while também é utilizado para } repetir um trecho de código diversas vezes.  pode ser qualquer expressão ou valor que resulte em um verdadeiro ou falso.  o laço while é executado enquanto a condição for verdadeira.  o teste da condição do controle é feito no início do laço, o que significa que se já for falsa os comandos dentro do laço não serão executados. Comando do ...while do{  Similar ao comando while, porém, o teste
  • 41. bloco de comandos; da condição de controle é feito no fim do }while (condição); laço, o que significa que os comandos dentro do laço são executados pelo menos uma vez. Tabela: Estruturas de controle e repetição Fonte: Elaboração da autora 15. Comandos break e continue Os comandos break e continue são estruturas auxiliares dos fluxos de repetição. O comando break paralisa a execução de um loop inteiro e o comando continue para somente a interação atual. 16. Comentários Comentário é a parte do código ignorada pelo compilador. É utilizado para deixar o código mais inteligível. Java possui três tipos diferentes de comentário: Comentário de uma linha: O uso de barra dupla marca o início do comentário que se estende até o fim da linha. Comentário de várias linhas: Os delimitadores /* e */ indicam início e fim de um comentário e podem conter várias linhas. Comentário javadoc: É utilizado para gerar a documentação javadoc e é delimitado pelas sequências de símbolos /** e */. Para gerar o javadoc é necessário que o comentário esteja localizado imediatamente antes da classe, atributo ou método documentado. O código apresentado nas figuras 31 exemplifica os comandos vistos neste capítulo. public class SintaxeJava { public static void main(String[] args) { /* *Declaraçãodavariávelidade do tipointeirocom o valor inicial 5 *atribuído. */ int idade = 6;
  • 42. /* Usodaestruturacondicionalif. * Nesteexemplo, a condição a sersatisfeita é que a idadesejamaior * ouigual a 6. */ if ( idade >= 6){ /* * O comando switch recebeumavariável, no casoabaixoidade e abre * umblocodedados. Dentrodesseblocoestãoos cases. * Cada case recebeum valor único e apósosdoispontosdecada case * estáainstruçãoquedeveserexecutadacaso a condiçãosejasatis- * feita. O comando break é utilizadoparaforçar a saída do switch. * O comando default pegaqualquerresultadoquenãoestejadefinido * no case. */ switch (idade){ case 6: System.out.println ("Aluno deveria estar no primeiro ano"); break; case 7: System.out.println ("Aluno deveria estar no segundo ano"); break; case 8: System.out.println("Aluno deveria estar no terceiro ano"); break; case 9: System.out.println("Aluno deveria estar no quarto ano"); break; default: System.out.println("Não deveria estar frequentando o primário"); } } /* * O comando for é utilizadoemlaçoscontados. * A primeirainstruçãodeclara e atribui o valor inicial a variávelde * controle. * A segundainstruçãocontempla a condiçãodecontrole do laço. * A terceiracondição define como a variávelde controle do laço deve * variar */ for ( int i = 0; i<=6; i++){ System.out.println("O valor da variável i é: " + i); } int j = 0; /* * O laço while é executado enquanto a expressão condicional for * verdadeira. */ while ( j < 6){ if ( j == 3){ /* *O comando continue para a interação atual. Desta forma quando *j for igual a 3, o valor de j não será impresso. */
  • 43. break; } System.out.println("O valor de j é: " + j); j ++; } } } Figura 31: Código exemplificando a sintaxe Java (Parte I) Fonte: Elaboração da autora PARA FIXAR 1.Quais dos identificadores abaixo, podem ser usados como nomes de variáveis em Java? Quais não podem e porquê? a) for j) 123nome b) four k) contador c) FROM l) para d) main m) ENQUANTO e) MAIN n) 123 f) nome o) new g) novo_nome p) table h) $nome q) PEN i) _nome r) dia-e-noite 2. Escolha o tipo de dado mais adequado para representar: a) O número de cidades do Brasil. b) A população mundial. c) Nome do cachorro da minha colega. d) Um número sorteado na Mega Sena. e) Estado de uma lâmpada (acesa ou apagada). f) O peso do seu colega. g) O sexo de uma pessoa. 3. O que acontece se você dividir um número inteiro por 0? E por 0.0? 4. Determine se cada um dos seguintes itens é verdadeiro ou falso. Se falso explique por quê. a) Todas as variáveis em Java devem ser atribuídas a um tipo quando são declaradas. b) O Java considera que as variáveis nome e NOME são idênticas. c) O operador resto (%) pode ser utilizado apenas com operandos inteiros. d) Os seguintes são todos nomes de variável inválidos: _123, a23, 12a, $12. 5. Implemente uma calculadora que resolva as quatro operações (+, -, * e /), que
  • 44. receba como entrada dois números reais. 6. Imprima a soma de 1 até 1000. 7. Imprima todos os múltiplos de 3, entre 1 e 100. 8. Receba como entrada um número e um expoente. Calcule este número elevado ao expoente. Faça três versões deste programa: Use uma declaração while para resolver este problema; Use uma declaração do-while para resolver este problema; Use uma declaração for para resolver este problema. 9. (IADES 2011 PG/DF - Analista Jurídico - Analista de Sistemas) Analise o código fonte em Java a seguir e assinale a alternativa que apresenta o resultado da execução do programa. import java.io.*; public class Calculadora { public static void main(String [] args) { int a, b, c; a = 5; b = 3; c = a++ + ++b; System.out.println("Valores = " + a + b + c); } } a) Valores = 16 b) Valores = 548 c) Valores = 18 d) Valores = 649 e) Valores = 19 10. (Cesgranrio - 2009 CBM - Negócios em TI) publicclass Main { publicstaticvoid main(String[] args) { int x = 0; int y = 1; int z = 8; while (x < z) { while (y > z) { x++; y--; } y += ++x; } x += y; System.out.println(x); }
  • 45. } Qual será a saída do programa Java mostrado acima? a) 8 b) 24 c) 25 d) 42 e)43 11. (Cesgranrio - 2012 CHESF - Analista de sistema)Considere o trecho de código que corresponde ao método principal de uma classe em linguagem Java. publicclass Main { publicstaticvoid main(String[] args) { int n = 1; int x = 0; int i; while (n < 10) { if (n % 2 != 0) { for (i = 3; i * i <= n; i += 2) { if (n % i == 0) break; } if (i < n) { x++; } } n++; } System.out.println(x); } } Qual o resultado produzido por esse método quando ele é corretamente executado? (A) 0 (B) 1 (C) 2 (D) 3 (E) 5 12. (Cesgranrio - 2011 PETROBRAS - Técnico de Informática Júnior)Qual a instrução Java em que o valor da variável x será 13após o loop ter executado 5 vezes? a)for (int x=3; x<12; x+=2){ ++count; } b)for (int x=1; x<12; x+=5){
  • 46. ++count; } c) for (int x=5; x>12; x-=2){ ++count; } d) x = 1; while (x < 13){ ++x; } e) x = 5; while (x < 12){ ++x; }
  • 47. PROGRAMAÇÃO ORIENTADA A OBJETOS OBJETIVOS  diferenciar programação estruturada de programação orientada a objetos;  entender os princípios da POO;  distinguir objetos de classes;  definir atributos e métodos;  compreender o que são instâncias de classes;  construir construtores;  organizar classes e pacotes. 1. Programação estruturada X programação orientada à objetos Diferença entre programação estruturada e programação orientada a objetos Fonte: http://www.webfinal.com.br/blog/wp-content/uploads/2010/07/sextanet2.png A programação estruturada é baseada em funções e dados. Os procedimentos inseridos em blocos estruturados comunicam-se com outros procedimentos por meio da passagem de dados. A programação orientada a objetos simula o mundo real dentro do computador. Nela, os problemas são resolvidos com a criação e interação de diferentes objetos. Os objetos comunicam-se através de mensagens.
  • 48. 2. Princípios da programação orientada a objetos A programação orientada a objetos foi criada com o intuito de aproximar o mundo real do virtual. Para isso, um programa é visto como um conjunto de objetos que executam tarefas específicas e se comunicam através de mensagens em busca de um objetivo comum. De uma maneira geral, os objetos são compostos por dados e instruções para processar estes dados. Na POO, o desenvolvedor é responsável por moldar os objetos e explicar para os mesmos como será feita a comunicação. Esses moldes de objetos são chamados de classes. A programação orientada a objetos está sedimentada em quatro pilares: encapsulamento, herança, composição e polimorfismo. Figura 32: Pilares da orientação a objetos Fonte: BEZERRA, Adriano. Programação orientada a objetos. Disponível em: <http://www.metropoledigital.ufrn.br/aulas/disciplinas/poo/aula_01.html> Acesso em 15 jan 2013. Benefícios da programação orientada a objetos: Modularidade: um objeto criado pode ser passado por todo o sistema; Encapsulamento: os detalhes da implementação ficam ocultos, quem usa determinado objeto não precisa saber como seus métodos estão implementados; Reuso: após a implementação o objeto pode ser usado em todo o programas e até mesmo em outros programas. Manutenibilidade: a manutenção é realizada somente dentro do objeto que deve ser alterado, não influenciando nas demais partes do código.
  • 49. 3. Objetos Objeto é qualquer entidade do mundo real que possui atributos e comportamentos, como por exemplo, casa, carro, escola, computador, cachorro. Todo objeto possui características próprias, que são comumente chamadas de atributos. Os atributos são o que diferem dois objetos semelhantes. Tomando como exemplo o cachorro, o que diferencia dois deles éa raça, o peso, a cor do pelo, o peso, ou seja, os atributos que eles possuem. Além de possuírem atributos, os objetos também possuem comportamentos. Os comportamentos geralmente são verbos e representam as ações que o objeto pode realizar. Um objeto cachorro, por exemplo, pode comer, correr e latir. A figura 34 ilustra três diferentes objetos do tipo cachorro: Bob, Scooby e Rex. Os cachorros ilustrados possuem os métodos andar, falar, comer, pegar osso e dormir. Figura 33: Exemplos de objetos. Fonte: PALMEIRA, Thiago Vinícius Varallo. Introdução a programação orientada a objetos em Java. Disponível em: <http://www.devmedia.com.br/introducao-a-programacao-orientada-a-objetos-em-java/26452>. Acesso em 15 jan. 2013.
  • 50. 4. Classes Uma classe em Java é a especificação para a criação de um objeto. Uma classe descreve as propriedades e funcionalidades que um objeto terá. Desta forma, os atributos e métodos que os objetos têm são declarados na classe. A figura 34 mostra a representação de uma classe pela UML e pelo código Java. public class Carro { String placa; String corLataria; String corParachoque; String aro; Figura 34: Representação de uma classe public void trocarMarcha(){ Fonte: Elaboração da autora } public void ligar(){ } public void acelerar(){ } } A figura 34 especifica um novo tipo, Carro. Na especificação (classe) foi definido que um objeto do tipo Carro deve conter necessariamente os atributos placa, cor da lataria, cor do para-choque e aro. Em Java, uma classe é definida utilizando a palavra chave class. Após a palavra chave class, deve seguir o nome da classe, que deve ser um identificador válido. A definição da classe pode conter também um modificador. No exemplo acima, foi utilizado o modificador public. Outros modificadores usados na definição de classes são o abstract e o final.
  • 51. Após a declaração da classe aparecem os atributos e os métodos que serão detalhados a seguir. 5. Atributos Os atributos são as características de um objeto. A declaração de um atributo deve conter necessariamente um tipo e um nome. O tipo pode ser um dos tipos primitivos Java ou o nome de uma classe. O nome dever ser um identificador válido da linguagem Java. Um atributo pode conter um modificador de acesso, que será descrito mais adiante e pode ser inicializado no ato de sua construção. Palavra Nome da classe escolhido obrigatória para pelo programador. Por indicar a criação padrão, utiliza-se sempre a Modificador de uma classe. primeira letra em maiúscula. de acesso public class Carro { tipo String placa; nome String corLataria; String corParachoque; String aro; Conjunto de características dos objetos da Classe Carro 6. Métodos Métodos são as ações realizadas pelos objetos. Eles podem
  • 52. manipular atributos de objetos para os quais os métodos foram definidos. Os métodos também podem definir e manipular variáveis locais. Cada método é especificado por uma assinatura. A assinatura de um método é composta pelo modificador (não obrigatório), tipo de retorno e o nome do método que deve ser um identificador válido. Os métodos também podem receber parâmetros por valor através da lista de argumentos. Os métodos podem ter retorno ou não. Para métodos sem retorno usa-se a palavra chave void. Para os métodos com retorno, usa-se o tipo de retorno, que pode ser um valor primitivo ou uma classe Java. O fato de um método possuir retorno ou não, altera o encerramento da execução. Quando um método não tem valor de retorno, a execução é encerrada quando o bloco do corpo do método chega ao final. Já quando o método possui valor de retornoa execução é encerrada através do comando return. Os métodos podem receber argumentos representados por uma lista de parâmetros separados por vírgula, onde para cada parâmetro é indicado o tipo e o nome. Método sem retorno e sem parâmetros public void trocarMarcha(){ } Método com retorno do tipo boolean, sem public boolean estaLigado (){ parâmetros. O uso da palavra-chave return é returntrue; obrigatório em métodos com retorno. } public void frear (int intensidade){ Método sem retorno e com parâmetro. } Este método necessita da informação da intensidade da velocidade para ser executado. 6.1. O método main O método main é utilizado pela JVM para inicializar a execução do programa.Segundo RICARTE (2001): O método main é um método associado a classe e não a um objeto específico da classe – assim ele é definido como método estático. Adicionalmente, deve ser um método público para permitir sua
  • 53. execução a partir da máquina virtual Java. Não tem valor de retorno, mas recebe como argumentoum arranjo de strings que corresponde aos parâmetros que podem ser passados para a aplicação a partir da linha de comando. 7. Instâncias de classes Uma classe é a especificação de um objeto. Porém para ser criado, um objeto precisa ser instanciado. Quando um objeto é criado, ele adquire espaço em memória para armazenar seu estado e um conjunto de operações podem ser aplicadas ao mesmo. Abaixo, segue exemplo com a criação de um objeto carro. Declaração da variável c1 do Cria um objeto na tipo Carro. memória public class Principal { public static void main(String[] args) { Carro c1 = new Carro(); c1.aro = "18"; c1.corLataria = "prata"; c1.corParachoque = "prata"; c1.placa = "MHZ 1521"; } } Definindo valores para os atributos do Carro criado c1. 8. Construtores A função do construtor é iniciar a construção de um objeto. O mesmo é invocado toda vez que a palavra new é utilizada. O construtor possui o mesmo nome da classe e não tem nenhum tipo
  • 54. de retorno. Ele pode conter parâmetros. Toda classe deve ter um construtor definido. Se o construtor não estiver explicitamente declarado, o compilador cria um construtor default, ou seja, um construtor sem parâmetros e o corpo vazio. No momento em que o programador cria um construtor, o construtor default deixa de ser criado automaticamente. Portanto, é necessário declarar o construtor default, se a utilização domesmo for necessária. Podem ser declarados diversos construtores em uma mesma classe, desde que a assinatura dos mesmos forem diferentes, ou seja, vários construtores com argumentos diferentes. public class Carro { A - Construtor sem corpo e sem parâmetros.Quando um construtor não é declarado explicitamente, o String placa; compilador cria um construtor String corLataria; similar a este. String corParachoque; String aro; B - Construtor contendo os parâmetros placa e cor da lataria. Ao usar este public Carro (){ construtor, no momento da criação do objeto devem ser informados a placa e a cor da lataria do objeto criado. } public Carro (String placa, String corLataria){ this.placa = placa; this.corLataria = corLataria; } public Carro (String aro){ C - Construtor com o parâmetro aro. No momento this.aro = aro; da construção deve ser corParachoque = "preto"; informado, o aro do objeto. No } corpo do método também é inicializado o atributo cor do parachoque. Os objetos A palavra this é usada para criados utilizando este referenciar métodos ou construtor, são inicializados atributos do objeto que está com a cor do parachoque sendo usado. preto.
  • 55. public class Principal { public static void main(String[] args) { Objeto criado usando o construtor A. Carro c1 = newCarro(); Carro c2 = newCarro("JLM 2343", "vermelho"); Objeto criado Carro c3 = newCarro("16"); usando o Objeto criado usando o construtor B. } construtor C. } 9. Pacotes Os pacotes servem para organizar as classes de acordo com suas funcionalidades. Um pacote é um diretório onde está armazenada uma ou mais classes.A palavra chave package define em qual pacote se encontra a classe. Para utilizar classes de um pacote é usada a palavra chave import.A utilização do import só é necessária, caso a classes que está utilizando as funcionalidades da outra classe esteja em pacote diferente. O pacote java.lang é automaticamente importado pelo Java. É o único pacote que contém esta característica. As principais classes que fazem parte deste pacote são: Math, Object, String, System.
  • 56. package br.com.senai.exemplo.pacote; public class Pac { Definição do pacote em que a classe se encontra. } import br.com.senai.exemplo.pacote.Pacote; Importação do public class TestePacote { pacote para o uso da classe Pac Pac p1 = new Pac(); } PARA FIXAR 1. O que é uma classe e para que serve? 2. Escreva um modelo para representar um livro que está à venda em uma livraria. Que dados devem ser representados por este modelo? 3. Escreva uma classe “EntradaDeCinema” com a seguinte estrutura (dados): Data dataDoFilme float horário int sala float valor E com as seguintes ações (métodos): Construtor: com a finalidade de inicializar todos os atributos. CalculaDesconto: que deve receber como parâmetro a data de nascimento do cliente (do tipo Data) e caso seja menor de 12 anos, deve ser dado um desconto de 50% no valor normal. CalculaDesconto: que deve receber como parâmetro a data de nascimento do cliente (do tipo Data) e o número de sua carteira de estudante (do tipo int). Se o estudante tiver idade entre 12 e 15 anos, deve ser dado um desconto de 40%, de 16 a 20 um desconto de 30% e mais que 20 anos um desconto de 20% no valor normal.
  • 57. CalculaDescontoHorário: esse método deve dar um desconto de 10% sobre o valor aferido após todas as outras opções de desconto, caso o horário do filme seja antes das 16 horas. toString(): que deve imprimir todos os dados do ingresso. Desenvolva uma aplicação que leia os dados necessários para instanciar e imprimir o ingresso para clientes normais, menores de 12 anos e estudantes.
  • 58. ENCAPSULAMENTO OBJETIVOS  entender o conceito de encapsulamento;  conhecer os modificadores de acesso;  utilizar os métodos getter e setter. 1. Encapsulamento O encapsulamento isola as partes do programa. Apenas o mínimo necessário deve ser revelado. Deve ser suficiente conhecer a especificação do método, sem saber como a funcionalidade que ele executa foi implementada. O encapsulamento torna possível a idéia de abstração da programação orientada a objetos. A orientação a objetos recomenda que os objetos devem ser manipulados somente através dos métodos públicos do objeto, dos quais apenas a assinatura deve ser revelada. Os atributos não devem ser revelados externamente, exceto em caso de serem constantes. 2. Modificadores de acesso Para tornar possível o encapsulamento, se faz necessário, o uso dos modificadores de acesso. Em Java, os principais modificadores de acesso são: public: membro acessível a qualquer objeto; protected: membro acessível as subclasses e aos objetos do mesmo pacote; default: quando não for definido nenhum modificar o membro fica acessível apenas as classes do mesmo pacote; private: não pode ser acessado por nenhum outro objeto. Normalmente na constituição das classes, os métodos são públicos e os atributos são privados.
  • 59. public class Carro { String placa; String corLataria; String corParachoque; String aro; //modificador default: acesso somente as classes do mesmo pacote public double velocidade; //modificador público: acesso a todas as classes protected int ano; //modificador protegido: acesso as classes do mesmo pacote // e as subclasses private String marca; //modificador privado: nenhum acesso externo é permitido. 3. Gets e sets Quando é usado o modificador de acesso private em um atributo, não é possível acessá-lo em outra classe. Para alterar ou recuperar o valor do mesmo, é necessário escrever dois métodos de acesso, um que retorna o valor e outro que muda o valor. A convenção para estes métodos é colocar a palavra get ou set antes do nome do produto. O método set é usado para modificar algum atributo. Os métodos sets não retornam nenhum valor, portanto são métodos void. Porém, eles devem receber obrigatoriamente um argumento, que será o valor atribuído ao campo. O método get é usado para retornar algum atributo. Os métodos gets obrigatoriamente possuem retorno de valor. Porém, eles não possuem nenhum argumento.
  • 60. public class Carro { Método que atribui um valor para a variável private String placa; placa. Na chamada do private String corLataria; método é indicado o valor private String corParachoque; que a placa terá. private String aro; public void setPlaca (String placa){ this.placa = placa; } Método que retorna o public String getPlaca (){ valor de um atributo. returnthis.placa; Nesse caso, o método } deve retornar uma string. public class Principal { public static void main(String[] args) { Carro c1 = newCarro(); c1.setPlaca("TRW 2345"); System.out.println(c1.getPlaca()); } } PARA SABER MAIS  Como não aprender Java e orientação a objetos: getters e setters. Disponível em:<http://blog.caelum.com.br/nao- aprender-oo-getters-e-setters />
  • 61. 4. Sobrecarga de métodos Métodos sobrecarregados são métodos com o mesmo nome, porém com assinaturas diferentes. O compilador, a partir da análise dos tipos de argumentos dos métodos determina qual o método deve ser executado. 5. Agregação e composição A agregação é uma relação entre os objetos em que um objeto contém uma lista de outros objetos. Na agregação, os objetos contidos podem existir fora do contexto do objeto que os contém. Por exemplo, pneu e carro. Um pneu existe sem o carro. Composição é o mecanismo que permite o uso de uma ou várias classes para compor uma outra classe.Na composição, os objetos contidos não fazem sentido fora do contexto do objeto que os contém. Por exemplo, pedido e item. Um item não existe fora do pedido. PARA FIXAR O exercício 1 foi retirado do curso Java Starter e deve respeitar o uso do encapsulamento. Disponível em: <http://www.t2ti.com/curso/video/java/basico/java_starter.php> 1. De acordo com os conceitos apresentados: a) Implemente uma classe Pessoa com os seguintes atributos: nome, idade e cpf; b) Utilizando a classe implementada na letra a, crie um programa que instancie 2 pessoas com todos os atributos e imprima os valores; c) Implemente uma classe que represente uma sala de aula, esta sala pode ter o máximo de 10 alunos, se extrapolar este limite deve ser impressa uma mensagem avisando que o número máximo de alunos foi atingido; d) Implemente uma classe de Endereço com os seguintes atributos: estado, cidade, rua, cep e telefone; e) Adicione a classe Pessoa um atributo de endereço utilizando a classe desenvolvida no ítem d; f) Implemente um método construtor para a classe Pessoa de forma que uma instância desta classe seja criada apenas se possui nome, idade e cpf; g) Implemente uma classe que simule um cadastro de pessoal. Esta classe deve armazenar até 100 pessoas (utilize a classe Pessoa) com seus respectivos endereços. Essa classe deve ter os seguintes comportamentos: permitir o cadastramento e exclusão de pessoas do cadastro;
  • 62. 2. Escreva uma classe que represente um pais. Um pais tem como atributos o seu nome e a sua dimensão em Km2 e uma lista de países com os quais ele faz fronteira. Represente a classe e forneça os seus membros a seguir: a) Construtor que inicialize o nome e a dimensão do país; b) Métodos de acesso (get) para a propriedade dimensão do país; c) Um método que permita verificar se dois países são iguais. Dois países são iguais se tiverem o mesmo nome e a mesma capital. A assinatura deste método deve ser:public boolean equals(Pais outro); d) Um método que informe se um outro país é seu limítrofe (faz fronteira); e) Um método que receba um outro país como parâmetro e retorne uma lista de vizinhos comuns aos dois países. Obs: Considere que um país tem no máximo 40 outros países com os quais faz fronteira. f) Escreva uma classe continente. Um continente possui um nome e um conjunto de países, que dele fazem parte. Desenvolva um método que forneça a dimensão total do continente. 3. Um avião é representado pelo seu prefixo, pelo nome do seu modelo, pelo nome do seu fabricante, pela quantidade de assentos e pela quantidade de assentos ocupados. Escreva uma classe que represente um avião e desenvolva um método que informe qual o prefixo da aeronave. Um aeroporto é representado pelo seu código e seu nome (ex.: SSA: Salvador, BSB: Brasília. etc), por um status que informa se ele é um aeroporto internacional ou não, uma lista de outros aeroportos para os quais partam vôos diretos à partir dele e uma lista de outros aeroportos de onde venham vôos para ele. Além disto possui uma lista de aviões que estão atualmente no pátio. Escreva uma classe que contemple os atributos apresentados e mais os seguintes membros: a) Um construtor que inicialize o código do aeroporto e seu nome. b) Métodos que verifiquem e alterem a situação relativa ao fato do aeroporto ser internacional ou não. c) Um método que verifique e informe se um aeroporto é igual a ele: public boolean equals (Aeroporto aeroporto) Dois aeroportos são iguais se o seu código for coincidente. d) Um método que receba um prefixo de avião como parâmetro e informe se a aeronave está pousada nele. e) Um método que receba um outro aeroporto como parâmetro e verifique se existe alguma forma de se chegar nele. Para isto, o aeroporto deve verificar se ele possui vôo partindo para o aeroporto desejado, e caso não saia, se existe alguma forma de chegar nele à partir dos aeroportos de onde sai public boolean possuiRota(Aeroporto aeroporto)
  • 63. Obs: A quantidade máxima de aeronaves que um aeroporto pode ter em terra é igual a 100 e a quantidade máxima de outros aeroportos com os quais o aeroporto pode ter linhas saindo e chegando é 100. 4. Nas duas tabelas abaixo estão inseridos os códigos de duas classes Java: a classe Carro e a classe Principal. Explique o que cada linha de código representa. package br.com.senai.exemplo.modelo; public class Carro { //Atributos private String cor; private String modelo; private double velocidadeAtual; private double velocidadeMaxima; public Carro() { } public Carro(String cor, String modelo, double velocidadeAtual, double velocidadeMaxima) { this.cor = cor; this.modelo = modelo; this.velocidadeAtual = velocidadeAtual; this.velocidadeMaxima = velocidadeMaxima; } public String getCor() { return cor; } public void setCor(String cor) { this.cor = cor; } public String getModelo() { return modelo; } public void setModelo(String modelo) { this.modelo = modelo; }
  • 64. public double getVelocidadeMaxima() { return velocidadeMaxima; } public void setVelocidadeMaxima(double velocidadeMaxima) { this.velocidadeMaxima = velocidadeMaxima; } public double getVelocidadeAtual() { return velocidadeAtual; } public void setVelocidadeAtual(double velocidadeAtual) { this.velocidadeAtual = velocidadeAtual; } public void liga(){ System.out.println("O carro está ligado"); } public void acelera (double quantidade){ double velocidadeNova = this.velocidadeAtual + quantidade; this.velocidadeAtual = velocidadeNova; } }
  • 65. HERANÇA E POLIMORFISMO OBJETIVOS  compreender o uso da herança;  usar a sobrescrita de métodos;  entender o conceito de polimorfismo. 1. Herança A herança é um dos pilares da programação orientada a objetos que permite a criação de novas classes a partir de outras já existentes, ou seja, uma classe pode derivar de outra classe. As novas classes são chamadas de subclasses e as classes já existentes que deram origem as subclasses são chamadas de superclasses. O mecanismo de herança viabiliza o reuso de código. Para fazer uso da herança é usada a palavra-chave extends, seguida do nome da superclasse. Para referenciar os métodos da superclasse é utilizada a palavra- chave super. A herança em Java também pode ocorrer implicitamente, é o que ocorre com a superclasse Object. Todas as classes criadas em Java estendem implicitamente de Object.
  • 66. import java.awt.Image; public class Animal { private Image foto; private double peso; private String comida; public void comer(){ } public void dormir(){ } public void movimentar(){ } public void fazerBarulho(){ } } public class Cachorro extends Animal { } public class Coruja extends Animal { public void voar(){ } public void botar(){ } } public class Galinha extends Animal { public void voar(){ }
  • 67. public void botar(){ } } 2. Sobrescrita de métodos A sobrescrita de métodos é o mecanismo que permite a alteração do comportamento de uma superclasse pelas suas subclasses, ou seja, a sobrescrita de um método é uma nova implementação para o mesmo. A sobrescrita de um método ocorre somente se a assinatura do mesmo permanece intacta, isto é, o tipo de retorno e os parâmetros devem ser os mesmos. O modificador final não permite que o método seja sobrescrito. Este modificador também pode ser usado na definição da classe para impedir que a mesma seja estendida. 3. Polimorfismo O polimorfismo em Java é o mecanismo que garante que classes derivadas de uma mesma superclasse invoquem métodos com a mesma identificação, mas com comportamentos distintos. PARA FIXAR Os exercícios 1 e 2 foram retirados do curso Java Starter disponível em: <http://www.t2ti.com/curso/video/java/basico/java_starter.php> 1. A partir dos conceitos apresentados: a) Crie uma hierarquia de classes em Java com os atributos e comportamentos descritos abaixo. Distribua as características de forma que tudo o que for comum a todos os animais fique na classe Animal.
  • 68. Animal cachorro cavalo preguiça possui nome possui nome possui nome possui idade possui idade possui idade deve emitir som deve emitir som deve emitir som deve correr deve correr devesubir em árvores b) Implemente um programa que crie os três tipos de animais definidos no item anterior e invoque o método que emite o som de maneira polimórfica, isto é, independente do tipo de animal. c) Implemente uma classe Veterinário que contenha um método examinar( ), cujo parâmetro de entrada é um Animal, quando o animal for examinado deve emitir um som, passe os três animais como parâmetro. d) Crie uma classe Zoológico com 10 jaulas (utilize um array), coloque em cada jaula um animal diferente, percorra cada jaula e emita o som do animal correspondente. 2. Resolva a seguinte situação utilizando os conceitos aprendidos. a) Uma empresa quer manter o registro da vida acadêmica de todos os funcionários, o modelo deve contemplar o registro das seguintes informações, de forma incremental. Para o funcionário que não estudou, apenas o nome e o código funcional; Para o funcionário que concluiu o ensino básico, a escola; Para o funcionário que concluiu o ensino médio, a escola; Para o funcionário que concluiu a graduação, a universidade. b) Estenda o modelo de forma que todo funcionário possua uma renda básica de R$ 1000,00 e: Com a conclusão do ensino básico a renda total é a renda básica acrescida de 10%; Com a conclusão do ensino médio a renda total é a renda básica acrescida de 50%; Com a conclusão do ensino superior a renda total é a renda básica acrescida de 100%; c) Crie um programa que simule uma empresa com 10 funcionários, utilize um array, sendo que a escolaridade dos funcionários é distribuída da seguinte forma: 40% do ensino básico, 40% do ensino médio e 20% superior. Calcule os custos da empresa com salários totais e por nível de escolaridade.
  • 69. 3. (FCC - TRT 20ª REGIÃO/2010 - Tecnologia da Informação) Considere o código JAVA abaixo: public class Carro extends Veiculos { private String categoria; public void setCategoria(String categoria) { this.modelo = categoria; } public String getCategoria() { return this.categoria; } } Em relação ao código acima, é correto afirmar que: A) A palavra reservada extends indica que Carro é uma superclasse e Veiculo é um objeto. B) A classe Carro irá herdar atributos e métodos da classe Veiculo que não estejam com o modificador protected. C) Todas as classes que herdarem a classe Carro terão o atributo modelo. D) A palavra reservada extends indica que Carro e Veiculo são classes de mesmo nível. E) A classe Carro irá herdar atributos e métodos da classe Veiculo que não estejam com o modificador private. 4. (ESAF - ANA/2009 - Analista Desenvolvimento de Sistemas)Em Java, para que um método de uma superclasse não seja sobrescrito em suas subclasses, aplica- se o modificador : A) static. B) public. C) final. D) protected. E) abstract. 5. (ESAF - ANA/2009 - Analista Desenvolvimento de Sistemas) Se, na superclasse, um método é declarado protected, o(s) modificador(es) aplicável(is) na sobrescrita do método é(são): A) private. B) private e protected. C) “default”. D) protected, “default” e public.
  • 70. E) protected e public. 6. class Prova{ public int a; Prova(int _a){ a = _a; } public void acrescenta(int n){ a += n; } public void acrescenta(){ a++; } } class SubProva extends Prova{ private int b; SubProva(int umb, int uma){ super(uma); b = umb; } public void acrescenta(int n){ b = b + n + 2; } public static void main (String args[ ]) { SubProva s = new SubProva(2,5); Prova p = new Prova(2); s.acrescenta(3); p.acrescenta(); System.out.println(s.b+s.a); System.out.println(p.a); s.acrescenta(); System.out.println(" "+s.b+p.a+s.a) ; } }
  • 71. 7. (COSEAC/UFF - Dataprev/2008 - Analista - Desenvolvimento de Sistemas) Com relação às duas classes anteriores pode-se dizer que: A) existe sobrecarga no método main; B) existe sobrecarga no método SubProva; C) existe sobrecarga no método Prova; D) existe sobrecarga no método acrescenta; E) não existe sobrecarga; 8. (ESAF 2009 ANA - Analista de Sistemas) Se, na superclasse, um método é declarado protected, o(s) modificador(es) aplicável(is) na sobrescrita do método é(são): a) private. b)private e protected. c) "default". d) protected, “default" e public. e) protected e public. 9. (ESAF 2008 CGU - AFC-TI) Na linguagem de programação Java, pode-se definir a visibilidade dos métodos e atributos. Com relação a essa característica, é correto afirmar que: a) métodos declarados como public em uma superclasse, quando herdados, precisam ser protected em todas as subclasses dessa classe. b) métodos declarados como protected em uma superclasse, quando herdados, precisam ser protected ou public nas subclasses dessa classe. c) o nível de acesso protected é mais restritivo do que o nível de acesso default. d) métodos declarados como public só podem ser acessados a partir dos métodos da própria classe ou de classes derivadas. e) métodos declarados como default só podem ser acessados a partir dos métodos da própria classe. 10. O que é herança? 11. O que é herança múltipla? O Java suporta herança múltipla? 12. Um animal contém um nome, comprimento, número de patas (o padrão é 4), uma cor, ambiente e uma velocidade (em m/s). Um peixe é um animal, tem 0 patas, o seu ambiente é o mar (padrão), cor cinzenta (padrão). Além disso, o peixe tem como características: barbatanas e cauda; Um mamífero é um animal, o seu ambiente é a terra (padrão); Um urso é um mamífero, cor castanho e o seu alimento preferido é o mel. Codifique as classes animal, peixe e mamífero. Para a classe animal, codifique os métodos:
  • 72.  Animal (String nome, String cor, String ambiente, int comprimento, float velocidade, int patas);  void alteraNome (String nome);  void alteraComprimento(int comprimento);  void alteraPatas (int patas);  void alteraCor (String cor);  void alteraAmbiente (String ambiente);  void alteraVelocidade (float velocidade);  void dados(); //imprime os dados do animal; E os seus atributos são:  String nome;  int comprimento;  int patas;  String cor;  String ambiente;  float velocidade; Para a classe Peixe, codifique:  Peixe (String nome, String caracteristica, int comprimento, float velocidade);  void alteraCaracteristica (String caracteristica);  String caracteristica ( ); //retorna a característica de um determinado peixe;  void dados ( ); //imprimir na tela todos os dados; Para a classe Mamifero, codifique:  Mamifero ( String nome, String cor, String alimento, int comprimento, float velocidade, int patas);  void alteraAlimento (String alimento);  String alimento ( ); //retorna o alimento de um determinado urso  void dados ( ); imprimir na tela todos os dados; Por último, crie um arquivo de teste de forma a ter um jardim zoológico com os seguintes animais: camelo, tubarao, urso-do-canadá.