Introdução Linguagem Java

March 29, 2018 | Author: Anonymous QxZdPihd | Category: Programming Language, Compiler, Software, Data Type, Java (Programming Language)


Comments



Description

ProgramaçãoOrientada 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. D e Para byte short char int long float double byte ----- 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 if (expressão){ bloco de comandos }else{ bloco de comandos } determinada condição for satisfeita.  A estrutura if ... else permite expressar duas alternativas de execução, uma delas executa caso a condição seja verdadeira e a outra quando a condição não for satisfeita.  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 switch (expressão){ case constante1: bloco decomandos; break; case constante2: bloco decomandos; break; ••• default: bloco decomandos; }  O comando switch faz o teste da expressão de seleção contra os valores das constantes indicados nas cláusulas case, até que um valor verdadeiro seja obtido.  Se nenhum dos testes produzir um resultado verdadeiro, são executados os comandos do bloco default.  O comando break é utilizado para forçar a saída do switch. Comando for for (inicialização; condição; incremento){ bloco de comandos; }  O comando for é usado 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){ bloco de comandos; }  como dito anteriormente no comando for, o 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; }while (condição); da condição de controle é feito no fim do 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 b) four c) FROM d) main e) MAIN f) nome g) novo_nome h) $nome i) _nome j) 123nome k) contador l) para m) ENQUANTO n) 123 o) new p) table q) PEN 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. 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. public class Carro { String placa; String corLataria; String corParachoque; String aro; public void trocarMarcha(){ } public void ligar(){ } public void acelerar(){ } } Figura 34: Representação de uma classe Fonte: Elaboração da autora 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. public class Carro { String placa; String corLataria; String corParachoque; String aro; 6. Métodos Métodos são as ações realizadas pelos objetos. Eles podem nome tipo Modificador de acesso Palavra obrigatória para indicar a criação de uma classe. Nome da classe escolhido pelo programador. Por padrão, utiliza-se sempre a primeira letra em maiúscula. Conjunto de características dos objetos da Classe Carro 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. public void trocarMarcha(){ } public boolean estaLigado (){ returntrue; } public void frear (int intensidade){ } 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 Método sem retorno e sem parâmetros Método com retorno do tipo boolean, sem parâmetros. O uso da palavra-chave return é obrigatório em métodos com retorno. Método sem retorno e com parâmetro. Este método necessita da informação da intensidade da velocidade para ser executado. 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. 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"; } } 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 Declaração da variável c1 do tipo Carro. Cria um objeto na memória Definindo valores para os atributos do Carro criado c1. 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 { String placa; String corLataria; String corParachoque; String aro; public Carro (){ } public Carro (String placa, String corLataria){ this.placa = placa; this.corLataria = corLataria; } public Carro (String aro){ this.aro = aro; corParachoque = "preto"; } A - Construtor sem corpo e sem parâmetros.Quando um construtor não é declarado explicitamente, o compilador cria um construtor similar a este. B - Construtor contendo os parâmetros placa e cor da lataria. Ao usar este construtor, no momento da criação do objeto devem ser informados a placa e a cor da lataria do objeto criado. C - Construtor com o parâmetro aro. No momento da construção deve ser informado, o aro do objeto. No corpo do método também é inicializado o atributo cor do parachoque. Os objetos criados utilizando este construtor, são inicializados com a cor do parachoque preto. A palavra this é usada para referenciar métodos ou atributos do objeto que está sendo usado. public class Principal { public static void main(String[] args) { Carro c1 = newCarro(); Carro c2 = newCarro("JLM 2343", "vermelho"); Carro c3 = newCarro("16"); } } 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. Objeto criado usando o construtor A. Objeto criado usando o construtor B. Objeto criado usando o construtor C. package br.com.senai.exemplo.pacote; public class Pac { } import br.com.senai.exemplo.pacote.Pacote; public class TestePacote { 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. Definição do pacote em que a classe se encontra. Importação do pacote para o uso da classe Pac 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 { private String placa; private String corLataria; private String corParachoque; private String aro; public void setPlaca (String placa){ this.placa = placa; } public String getPlaca (){ returnthis.placa; } 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 /> Método que atribui um valor para a variável placa. Na chamada do método é indicado o valor que a placa terá. Método que retorna o valor de um atributo. Nesse caso, o método deve retornar uma string. 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. 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. Animal 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á. 13. Escreva uma classe chamada Pessoa com os atributos: nome (tipo String), sexo (tipo char), idade (tipo int). Escreva agora outra classe chamada Amigo, que é uma pessoa (estende da classe Pessoa) de quem sabemos o dia de seu aniversário, atributo diaDoAniversario (tipo String). Use encapsulamento e forneça construtor padrão e construtor usando todos os atributos para as duas classes. Faça uma classe teste para criar um amigo e imprimir o nome e a data de nascimento do mesmo. 14. Escreva as seguintes classes: a) Uma classe Pessoa com atributos nome (tipo String) e sobrenome (tipo String). Use encapsulamento. A classe Pessoa ainda deve ter o seguinte método: Assinatura String getNomeCompleto() Efeito Retorna a concatenação do atributo nome com o atributo sobrenome Além disso, a classe deve possuir um construtor sem parâmetros e outro construtor que recebe como parâmetros o nome e o sobrenome da pessoa e armazena respectivamente nos atributos nome e sobrenome. b) Uma subclasse de Pessoa, chamada Funcionario. A classe Funcionario deve ter os atributos matricula (tipo int) e salario (tipo double). Use encapsulamento. Considere a seguinte regra no método modificador setSalario: Assinatura void setSalario(int valor) Efeito Atribui ao atributo salário o valor recebido como parâmetro desde que este valor não seja negativo. Caso seja negativo, não faz nada. Todo funcionario recebe seu salário em duas parcelas, sendo 60% na primeira parcela e 40% na segunda parcela. Assim, escreva os métodos: Assinatura double getSalarioPrimeiraParcela() Efeito Retorna o valor da primeira parcela do salário (60%) Assinatura double getSalarioSegundaParcela() Efeito Retorna o valor da segunda parcela do salário (40%) c) Uma subclasse de Funcionario, chamada Professor. Todo professor recebe seu salário em uma única parcela. Assim, deve-se sobrescrever os métodos getSalarioPrimeiraParcela e getSalarioSegundaParcela. Assinatura double getSalarioPrimeiraParcela() Efeito Retorna o valor integral do salário do professor Assinatura double getSalarioSegundaParcela() Efeito Retorna o valor zero. d) Uma classe Programa que, no método main, instancia os seguintes objetos: Nome da variável: pessoa1 (tipo Pessoa) nome: João sobrenome: Medeiros Nome da variável: pessoa2 (tipo Funcionario) nome: Leonardo sobrenome: Messias salario: 1000.00 Nome da variável: pessoa3 (tipo Professor) nome: Antônio sobrenome: Silva salario: 1500.00 Depois disso, executa as seguintes operações na seguinte ordem: - Imprime o retorno do método getNomeCompleto para os 3 objetos. - Imprime o retorno dos métodos getSalarioPrimeiraParcela e getSalarioSegundaParcela para os objetos pessoa2 e pessoa3. 15. Escreva uma classe Conta com atributo saldo (tipo double) e os seguintes métodos Assinatura void depositar(double valor) Efeito Acrescentar o valor recebido como parâmetro ao atributo saldo Assinatura void sacar(double valor) Efeito Subtrair o valor recebido como parâmetro do atributo saldo O atributo saldo pode ser negativo. Escreva uma subclasse de Conta chamada Poupanca. A classe Poupanca deve ter um atributo chamado diaRendimento do tipo int que armazena o dia do mês em que ocorre o rendimento da poupança. Use encapsulamento nas duas classes. Forneça construtor que recebe valores para os atributos correspondentes para as duas classes. O atributo saldo da classe Poupanca não pode ser negativo. Use esta regra no método modificador do atributo saldo (método setSaldo): Assinatura void setSaldo(double valor) Efeito Atribui ao atributo saldo o valor recebido como parâmetro desde que este valor não seja negativo. Caso seja negativo, não faz nada. Aplique esta mesma regra e redefina (por sobreposição) o método sacar para a classe Poupanca: Assinatura void sacar(double valor) Efeito Subtrair o valor recebido como parâmetro do atributo saldo desde que este valor não seja negativo. Caso seja negativo, não faz nada. Escreva um programa com um método main que cria um objeto do tipo Conta e outro objeto do tipo Poupanca. Em seguida realiza um depósito na conta no valor de 10000 e depois um saque de 15000 da conta e um depósito na poupança no valor de 15000. Depois realize um saque de 20000 na poupança e imprima o saldo da conta e da poupança. 16. Escreva as seguintes classes: Uma classe Equipamento com o atributo ligado (tipo boolean) e com os métodos: Assinatura void liga() Efeito Torna o atributo ligado true Assinatura void desliga() Efeito Torna atributo ligado false Use encapsulamento. Uma classe EquipamentoSonoro que herda as características de Equipamento e que possui os atributos volume (tipo int) e stereo (tipo boolean). Use encapsulamento. A classe deve possuir os métodos: Assinatura void mono() Efeito Torna o atributo stereo falso Assinatura void stereo() Efeito Torna o atributo stereo verdadeiro Assinatura void liga() Efeito Sobrescreve o método liga da superclasse. Este método deve chamar o método liga da superclasse e ajustar o atributo volume para 5 17. Quais são as regras para a utilização de sobrescrita de método? Forneça um exemplo em código Java. 18. Quais são as regras para a utilização de sobrecarga de método? Forneça um exemplo em código Java. 19. Em um sistema de folha de pagamento de uma empresa, que calcula o salário dos funcionários, dois tipos de funcionários são considerados: funcionários horistas e funcionários mensalistas. Todo funcionário possui nome e sobrenome. Os funcionários horistas possuem como atributos o salarioPorHora (que guarda o salário por hora) e o numeroHoras (que guarda o número de horas que o horista trabalhou). Os funcionários mensalistas possuem o valor do salário armazenado no atributo salMensal. Caso o funcionário mensalista tenha faltado algum dia de trabalho, os dias não trabalhados implicam em perda de 2 % no valor total do salário por cada um dos dias não trabalhados (veja se é necessário criar um atributo para isso). - A superclasse Funcionário possui o seguinte atributo: private static int numFunc, que armazena o número de funcionários instanciados. Esse atributo é incrementado no construtor e decrementado no método “finalize” da classe. - A superclasse Funcionário deve implementar os métodos: clone e equals (que são herdados da classe Object) para que seja possível realizar um clone de um objeto funcionário e também comparar um funcionário com outro. - O cálculo do valor do salário do funcionário horista é: nº de horas trabalhadas * salário por hora. - O cálculo do valor do salário do mensalista é o valor do seu atributo salMensal. Um novo cálculo do valor do salário do mensalista deve ser feito caso existam dias não trabalhados, conforme explicado anteriormente. - As subclasses devem usar pelo menos um método sobrescrito. Os outros métodos devem ser identificados e implementados de acordo com a sua modelagem. Desenvolver um sistema orientado a objetos para implementar o sistema de folha de pagamento de uma empresa, implementando a classe Funcionário, as subclasses identificadas por você e o teste da classe. Criar um pacote Java (package). O pacote deve ter o seguinte nome: pacote.folha. Nesse pacote devem estar as classes Funcionário e subclasses que você implementar. As classes do pacote devem ser “arquivadas” em um arquivo .jar com o seu nome: nomeDoAlunofolha.jar (que também deve ser entregue). O teste da classe (main Java) deve realizar as seguintes tarefas em ordem: - mostrar o número de funcionários existentes; - deve instanciar dois funcionários horistas; - deve instanciar dois funcionários mensalistas; - deve mostrar o valor do salário de cada um dos funcionários; - deve mostrar nome e sobrenome de cada funcionário instanciado; - deve comparar dois funcionários; REFERÊNCIAS BIBLIOGRÁFICAS CAELUM. Disponível em: < http://www.caelum.com.br/apostila-java-orientacao- objetos/>. Acesso em: 21 jan. 2013. JAVA STARTER. Disponível em: <http://www.t2ti.com/curso/video/java/basico/java_starter.php> Acesso em: 19 jan. 2013. LUZ, Diego. Linguagens de programação, qual devo escolher? Disponível em: < http://webinsider.uol.com.br/2009/09/16/linguagens-sao-linguagens-mas-qual- devo-escolher/>. Acesso em 22 jan. 2013. PAMPLONA, Vitor Fernando. Tutorial Java 2: características básicas. Disponível em: <http://javafree.uol.com.br/artigo/871496/Tutorial-Java-2-Caracteristicas -Basicas.html>. Acesso em: 20 jan. 2013.
Copyright © 2024 DOKUMEN.SITE Inc.