programação_orientada_objetoii

Upload: coringa13

Post on 05-Jul-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/16/2019 Programação_Orientada_ObjetoII

    1/110

  • 8/16/2019 Programação_Orientada_ObjetoII

    2/110

    Curso Técnico em Informáca

    Programação Orientada a Objetos II

  • 8/16/2019 Programação_Orientada_ObjetoII

    3/110

    Robson Braga de AndradePresidente da Confederação Nacional da Indústria

    Rafael LucchesiDiretor do Departamento Nacional do SENAI

    Regina Maria de Fáma TorresDiretora de Operações do Departamento Nacional do SENAI

    Alcantaro Corrêa

    Presidente da Federação da Indústria do Estado de Santa Catarina

    Sérgio Roberto ArrudaDiretor Regional do SENAI/SC

    Antônio José CarradoreDiretor de Educação e Tecnologia do SENAI/SC

    Marco Antônio DociaDiretor de Desenvolvimento Organizacional do SENAI/SC

  • 8/16/2019 Programação_Orientada_ObjetoII

    4/110

    Confederação Nacional da Indústria

    Serviço Nacional de Aprendizagem Industrial

    Curso Técnico em Informáca

    Programação Orientada a Objetos II

    Diogo Vinícius Winck

    Florianópolis/SC2011

  • 8/16/2019 Programação_Orientada_ObjetoII

    5/110

    É proibida a reprodução total ou parcial deste material por qualquer meio ou sistema sem o prévio consenmentodo editor.

    Autor

    Diogo Vinícius WinckFotograas

    Banco de Imagens SENAI/SChp://www.sxc.hu/hp://oce.microso.com/en-us/ images/hp://www.morguele.com/hp://www.bancodemidia.cni.org.br/

     

    SENAI/SC — Serviço Nacional de Aprendizagem IndustrialRodovia Admar Gonzaga, 2.765 - Itacorubi - Florianópolis/SCCEP: 88034-001Fone: (48) 0800 48 12 12www.sc.senai.br

  • 8/16/2019 Programação_Orientada_ObjetoII

    6/110

    Prefácio

     Você faz parte da maior instituição de educação prossional do estado.Uma rede de Educação e Tecnologia, formada por 35 unidades conecta-das e estrategicamente instaladas em todas as regiões de Santa Catarina.

    No SENAI, o conhecimento a mais é realidade. A proximidade com asnecessidades da indústria, a infraestrutura de primeira linha e as aulasteóricas, e realmente práticas, são a essência de um modelo de Educaçãopor Competências que possibilita ao aluno adquirir conhecimentos, de-senvolver habilidade e garantir seu espaço no mercado de trabalho.

    Com acesso livre a uma eciente estrutura laboratorial, com o que existe

    de mais moderno no mundo da tecnologia, você está construindo o seufuturo prossional em uma instituição que, desde 1954, se preocupa emoferecer um modelo de educação atual e de qualidade.

    Estruturado com o objetivo de atualizar constantemente os métodos deensino-aprendizagem da instituição, o Programa Educação em Movi-mento promove a discussão, a revisão e o aprimoramento dos processosde educação do SENAI. Buscando manter o alinhamento com as neces-sidades do mercado, ampliar as possibilidades do processo educacional,oferecer recursos didáticos de excelência e consolidar o modelo de Edu-cação por Competências, em todos os seus cursos.

    É nesse contexto que este livro foi produzido e chega às suas mãos. Todos os materiais didáticos do SENAI Santa Catarina são produçõescolaborativas dos professores mais qualicados e experientes, e contamcom ambiente virtual, mini-aulas e apresentações, muitas com anima-ções, tornando a aula mais interativa e atraente.

    Mais de 1,6 milhões de alunos já escolheram o SENAI. Você faz partedeste universo. Seja bem-vindo e aproveite por completo a Indústriado Conhecimento.

  • 8/16/2019 Programação_Orientada_ObjetoII

    7/110

  • 8/16/2019 Programação_Orientada_ObjetoII

    8/110

    Sumário

    Conteúdo Formavo  9 

    Apresentação  11

    12 Unidade de estudo 1

    Java Básico

    Seção 1 - O que é Java?

    Seção 2 - Tipos de distribui-ções JAVA

    Seção 3 - Alô SENAI!

    Seção 4 - O que aconteceu?

    Seção 5 - Variável

    Seção 6 - Tipos primivos dedados

    Seção 7 - Promoção e casng

    Seção 8 - Operadores arit-mécos

    Seção 9 - Controle de uxo

    Seção 10 - Escopo de variável

    Seção 11 - Usando a documentação do Java

    32 Unidade de estudo 2

    Revendo aOrientação a

    Objetos

    Seção 1 - Orientação aobjetos: classes, objetos einstâncias

    Seção 2 - Atributos, métodos, interface, estadose comportamento

    Seção 3 - Os três pilares daorientação a objetos

    Seção 4 - Estudo de caso: Ta-magotchi  com personalidade

    Seção 5 - Visibilidade

    13

    16

    16

    19

    19

    21

    22

    25

    25

    29

    30

    Seção 6 - Estudo de caso:sistema de cliente

    Seção 7 - Javabeans

    42 Unidade de estudo 3

    Avançando no Java

    Seção 1 - String

    Seção 2 - Array

    Seção 3 - Construtor

    Seção 4 - Final e stac

    Seção 5 - Estudo de caso:relação de clientes

    Seção 6 - Tratamento deexceções

    Seção 7 - Estudo de caso:objetos de calcular

    Seção 8 - Ulizando pacotes

    58 Unidade de estudo 4AWT e Swing

    Seção 1 - Visão geral

    Seção 2 - Alô SENAI!

    Seção 3 - Containers e geren-ciadores de layout 

    Seção 4 - Eventos

    Seção 5 - Estudo de caso:

    objetos de calcular

    68 Unidade de estudo 5

    Arquivos

    Seção 1 - Visão geral

    Seção 2 - Manipulandoarquivos

    Seção 3 - Estudo de caso:editor de texto

    82 Unidade de estudo 6

    Collecons

    Seção 1 - Visão geral

    86 Unidade de estudo 7

    JDBC

    Seção 1 - Visão geral

    Seção 2 - Interfaces do JDBC

    94 Unidade de estudo 8

    Apêndice 1 -Preparando oAmbiente deTrabalho

    Seção 1 - Instalando JDK eNetBeans

    Seção 2 - Instalando o PostgresSQL

    100 Unidade de estudo 9

    Apêndice 2- Padrões deCodicação

    Seção 1 - Classes, interfacese pacotes

    Seção 2 - Nomeandoatributos e variáveis

    Seção 3 - Métodos

    Seção 4 - Endentação, co-mentários, blocos de código,espaços e linhas brancas

    Finalizando 104 

    Referências  106 

    33

    33

    34

    34

    37

    38

    41

    43

    45

    47

    48

    50

    52

    54

    57

    83

    87

    88

    59

    59

    63

    64

    64

    69

    69

    76

    95

    97

    101

    102

    103

    103

  • 8/16/2019 Programação_Orientada_ObjetoII

    9/110

    8 CURSOS TÉCNICOS SENAI

  • 8/16/2019 Programação_Orientada_ObjetoII

    10/110

    Conteúdo Formativo

    9PROGRAMAÇÃO ORIENTADA A OBJETOS II

    Carga horária da dedicação

    Carga horária: 150 horas

    Competências

    Analisar e implementar os recursos avançados da programação orientada a obje-tos para solução de problemas computacionais.

    Conhecimentos

    ▪ Orientação a objetos: classes, objetos e instâncias.

    ▪ Comentários.

    ▪ Composição, agregação.

     ▪ Construtores.

     ▪ Encapsulamento.

     ▪ Herança.

     ▪ Interface de desenvolvimento (IDE).

     ▪ Interfaces grácas.

     ▪ Métodos e atributos.

     ▪ Padrões de desenvolvimento (frameworks).

     ▪ Padronização de código.

     ▪ Polimorsmo.

     ▪ Reulização de códigos.

     ▪ APIs.

     ▪ Sobrecarga e sobrescrita de métodos e construtores.

    Habilidades

     ▪ Aplicar os conceitos de orientação a objetos.

     ▪ Ulizar interfaces de desenvolvimento (IDE) de sistemas orientado a objetos.

     ▪ Ulizar os padrões de projeto em aplicações computacionais.

     ▪ Desenvolver aplicações para desktop.

  • 8/16/2019 Programação_Orientada_ObjetoII

    11/110

    10 CURSOS TÉCNICOS SENAI

    Atudes

     ▪ Organização e zelo na ulização de equipamentos.

     ▪ Foco no conteúdo trabalhado.

     ▪ Acesso a síos relacionados ao tema trabalhado.

     ▪ Organização e limpeza dos ambientes colevos.

     ▪ Dedicação e empenho nas avidades curriculares e extracurriculares.

     ▪ Capacidade de abstração.

     ▪ Trabalho em equipe.

     ▪ Apresentação de novas soluções para situações problemas.

     ▪ Cumprimento de prazos.

     ▪ Análise críca de suas produções.

  • 8/16/2019 Programação_Orientada_ObjetoII

    12/110

    Apresentação

    PROGRAMAÇÃO ORIENTADA A OBJETOS II

    Bem-vindo à disciplina de Programação Orientada a Objeto II. Este ma-terial foi elaborado para facilitar o seu aperfeiçoamento neste importan-te paradigma de desenvolvimento de software . A Programação Orientadaa Objetos tornou-se um padrão amplamente utilizado, principalmentepor limitar a complexidade e permitir soluções elegantes para problemascomplexos, características que você vericará no decorrer desta unidadecurricular.

    O grande objetivo deste material é apresentar os conceitos de orientaçãoa objetos na prática. Para isto, serão explorados detalhes da linguagem deprogramação Java. Esta linguagem consolidou-se e continua expandidoo seu uso nos mais diversos projetos. Pela frente há grandes desaosque contribuirão no seu desenvolvimento prossional, e este material o

    ajudará nesta tarefa, portanto, dedique-se e supere-os! Agora é com você. Bons Estudos!

    Diogo Vinícius Winck

    Bacharel em Ciências da Com-putação pela Universidadedo Estado de Santa Catarina(UDESC), especialista em Redesde Computador e mestre em Ci-ências da Computação pela Uni-versidade Federal de Santa Ca-tarina (UFSC). Atua como lídertécnico do me de Frameworkna TOTVS (Linha de ProdutosDatasul), é Professor Univer-

    sitário no SENAI Joinville. Emconjunto com Vicente Goeen,foi o autor do livro AspectJ - Pro-gramação Orientada a Aspec-tos com Java -, publicado pelaeditora Novatec. Atualmente,pesquisa e aplica metodologiaságeis e Lean Soware em proje-tos WEB/RIA, na criação de  fra-meworks e no desenvolvimentode ferramentas.

    11

  • 8/16/2019 Programação_Orientada_ObjetoII

    13/110

    Unidade deestudo 1

    Seções de estudo

    Seção 1 - O que é Java?

    Seção 2 - Tipos de distribuições JAVA

    Seção 3 - Alô Senai!

    Seção 4 - O que aconteceu?

    Seção 5 - Variáveis

    Seção 6 - Tipos primivos de dados

    Seção 7 - Casng e promoção

    Seção 8 - Operadores aritmécos

    Seção 9 - Controle de uxo

    Seção 10 - Escopo de variávelSeção 11 - Usando a documentação do Java

  • 8/16/2019 Programação_Orientada_ObjetoII

    14/110

    13PROGRAMAÇÃO ORIENTADA A OBJETOS II

    Java Básico

    SEÇÃO 1O que é Java

    Em 1995, a Sun lançou uma lin-guagem de programação chamada

     Java. Ela foi fruto de um projetoiniciado em 1992 que não deucerto comercialmente. O sucesso

    inicial aconteceu com os applets, que eram brinquedos para web  que, naquela época, era estática.Em 2009, a Sun foi adquirida pelaOracle.

    O Java se consolidou e, hoje,está presente nas mais variadasempresas, como IBM, Oracle eNASA. Mas por que esse suces-so? Porque o Java consegue lidarbem com problemas comuns das

    demais linguagens: portabilida-de, gerenciamento de memória,custo de ferramenta. Além disso,atualmente, é possível encontrarcongurações para o uso dessalinguagem, por exemplo: em ser-

     vidores web , desktops  ou dispositi- vos móveis.

     Anal de contas, o que é o Java?O Java é:

     ▪

    uma linguagem orientada aobjetos;

    ▪ uma coleção de APIs (classes,componentes, frameworks  ) parao desenvolvimento de aplica-ções, distribuída gratuitamentepor meio do site e neutra de plata-forma;

     ▪ um framework/ambiente de execução presente em browsers , mainfra- mes , sistemas operacionais (SO’s), celulares, palmtops , cartões inteligen-tes, eletrodomésticos.

    O Java é uma linguagem de alto-nível que pode ser caracterizada como:

    simples, orientada a objetos, distribuída;

     ▪   multithreaded , dinâmica, portável;

     ▪ independente de arquitetura;

    ▪ de alto desempenho, robusta e segura.

     A plataforma Java é composta por:

     ▪  JVM: Java Virtual Machine  ou Máquina Virtual Java, que é responsá- vel pela execução dos programas.

     ▪  JRE: Java Runtime Environment  ou Ambiente de Execução a Java, queé o pacote necessário para executar programas Java, composto pelasbibliotecas e JVM.

     ▪  JDK :  Java Development Kit  ou Kit de Desenvolvimento Java, que é okit necessário para desenvolver aplicações, contendo a JRE e ferramen-tas, como, por exemplo, o compilador Java.

     Também compõem a plataforma, recursos como:

    ▪ NetBeans: ambiente de desenvolvimento de código aberto paraaplicações JSE, JME e JEE.

     ▪

     Javadoc: ferramenta para geração da documentação em HTML. ▪  Tecnologias de Deployment : Java Web Start  e plug-ins  para distri-

    buição de aplicações.

     ▪ User Interface Tookits : Java Foundation Classes , formado por Swing  e Java 2D(Awt).

     ▪ Integration Libraries : bibliotecas de integração, tais como, JavaIDL, JDBC, JNDI, Java RMI e Java RMI-IIOP.

  • 8/16/2019 Programação_Orientada_ObjetoII

    15/110

    14 CURSOS TÉCNICOS SENAI

    Figura 1: Visão geral da plataforma Java

    Fonte: Adaptada de Oracle (2011)

     As APIs (  Application Programming Interface  ou Interface de Programaçãode Aplicativos) Java mais conhecidas do JSE são:

     ▪ java.io – manipulação de arquivos;

     ▪

    java.lang – classes básicas do Java; ▪ java.net – infraestrutura de software  para rede;

     ▪ java.nio – denição de buffers ;

     ▪ java.security – classes para segurança;

     ▪ java.text – textos, datas, números, mensagens;

     ▪ java.util – utilitários, coleções, datas etc;

     ▪ java.util.concurrent – programação concorrente.

     A estrutura da linguagem é mantida por um processo chamado JCP (  Java

    Community Process  ). Existem outras implementações dos padrões deni-dos pelo JCP, além da disponibilizada pelo Oracle, como:

    O JCP é um processo no qual, as partes interessadas na denição daplataforma Java ou de novas funcionalidades podem se envolver,respondendo aos JSRs ( Java Specicaon Requests), sugerindo, porexemplo, melhorias.

    Outra característica foi o desenvolvimento de uma cultura de partilhade informações – existem muitos grupos de usuários onde se comparti-

    lham informações. Além disso, são publicados, diariamente, na internetinformações, artigos e tutorias.

  • 8/16/2019 Programação_Orientada_ObjetoII

    16/110

    15PROGRAMAÇÃO ORIENTADA A OBJETOS II

    Neutralidade de plataforma indica que qualquer programa desenvolvidopode executar sem modicações em diferentes plataformas de computa-ção (exemplo: Linux, Windows etc.). Esta capacidade deve-se ao fato deque os programas são compilados para o um formato chamado bytecode .Este é utilizado pela máquina virtual Java, que interpreta as instruções.

     A gura a seguir, ilustra o funcionamento da linguagem.

    Figura 2: Funcionamento e Distribuição do Java

     

    Durante a execução, a API e a JVM (  Java Virtual Machine  ou Máquina Virtual Java) “isolam” o programa Java do sistema operacional, esta re-lação pode ser observado na gura a seguir.

    Figura 3: Execução de um programa Java

     A máquina virtual corresponde aum computador abstrato e, porconta desse modelo, é possível asua construção por meio de har- 

    dware . Quando uma aplicação Java

    é executada em uma máquina co-mum, faz-se necessário uma im-plementação concreta dessa abs-tração e isso se torna disponívelpor meio da instalação e congu-ração do JRE.

    Durante a execução, cada aplica-ção Java (o bytecode  ) executa dentroda sua própria instância da JVM,permitindo um alto grau de iso-lamento e segurança. O código

    compilado no Java é portável en-tre versões diferentes da JVM, porisso, o desenvolvedor não precisapreocupar-se com detalhes da

     JVM no ambiente de execução.Uma instância ( runtime  ) é criadaquando a aplicação inicia e des-truída quando a aplicação termi-na, isso implica, por exemplo, quetrês aplicações ao mesmo tempo,demandam três JVMs.

     As etapas de execução de um pro-grama Java são:

    1. Class Loader : esta é primeiraatividade executada pela JVM,sendo responsável por carre-gar as classes necessárias pararodar a aplicação. A sequênciada carga é:

    a. carrega as classes nativas do JRE – Java Runtime Environment  

    (Ambiente de Execução Javaem uma tradução livre).

    b. são carregadas as extensões do JRE, disponíveis, por exemplo,em $JAVA_HOME/jre/lib/

    ext 

    c. são carregadas as classes dosistema local, a ordem denidana variável de classpath  dene aprecedência.

    d. são carregadas as classes dosistema remotas, disponíveis,por exemplo, em um servidor.

  • 8/16/2019 Programação_Orientada_ObjetoII

    17/110

    16 CURSOS TÉCNICOS SENAI

    2. Bytecode Verifier : nesta eta-pa os Classes Javas ( bytecodes  )carregadas da dinamicamente/intranet/internet são verica-das antes de serem executadas,

    pois o Class Loader   consideraas classes remotas potencial-mente inseguras. Verica-se,por exemplo, se o formato doarquivo recebido está corretoou se não há violações de se-gurança.

    3. Execução: o programa é exe-cutado.

    4. Garbage Collection : esta é acoleta de lixo. Durante a exe-cução de um programa ob-jetos são alocados. Quandoestes deixam de ser necessá-rios, precisam ser eliminadosda memória, disponibilizandoespaço que era utilizado porele. Em linguagens como C++e Pascal, o programador deverealizar essa tarefa. No Java, aresponsabilidade está delega-da ao Garbage Collector  (coletorde lixo). Ele deve identicar,marcar e eliminar da memóriaobjetos que não são mais refe-renciados de maneira válida.

    SEÇÃO 2Tipos de distribuições

    JAVA

     A partir de 2009, a tecnologia Javapassou por um amplo processosegmentação de sua atuação, prin-cipalmente, após a aquisição daSun pela Oracle. Várias platafor-mas foram derivadas para neces-

    sidades especícas. Destacam-sealgumas:

     ▪  Java Standard Edition  (JSE): voltada para desenvolvimento deaplicações cliente e composta pelas APIs básicas do Java. Disponibiliza,por exemplo, APIs para desenvolvimento de telas.

     ▪  Java Enterprise Edition  (JEE): permite melhor componentizaçãodas aplicações. É utilizada para desenvolvimento de aplicações empre-sariais, como, por exemplo, comércio eletrônico.

    ▪  Java Micro Edition  (JME): projetado para atender às necessidadesde desenvolvimento para aplicativos móveis, como celulares.

    ▪  Java Card : fornece um ambiente seguro para que aplicações rodemem smart cards e outros dispositivos com grande limitação de memóriae de capacidade de processamento. Isso possibilita o uso de ferramen-tas de mercado para a criação das aplicações e as aplicações desenvol-

     vidas podem ser executadas com segurança em cartões de diferentesfornecedores.

     ▪  Java TV : refere-se à JSR-927, que trata da especicação para TV

    digital.

    SEÇÃO 3Alô Senai!

     A realização desta seção, e das próximas, depende de preparação do am-biente de trabalho, segundo a unidade de estudo 8 (Apêndice 1).

     A melhor forma de iniciar o entendimento, ou a relembrar como funcio-na uma linguagem, é por meio de exemplos simples. Nesta seção, seráelaborado um primeiro programa:  Alô Senai!, que irá imprimir umalinha simples no console: “Alô Senai!”.

     A realização dessa tarefa será feita no Netbeans . Estando ele aberto, deve--se criar um novo projeto chamado JavaBasico. Na gura a seguir, sãodetalhados os passos para fazer isso.

    Figura 4: Novo projeto no NetBeans

     

  • 8/16/2019 Programação_Orientada_ObjetoII

    18/110

    17PROGRAMAÇÃO ORIENTADA A OBJETOS II

    Podem-se observar alguns pontos importantes no arquivo apresentan-do. Na gura 5, esses pontos são detalhados.

    Figura 5: Exemplo de arquivo Java

     

    O próximo passo é adicionar ao main , o seguinte trecho de código de

    modo, então o projeto cará como na gura 6.

    System.out.println(“Alo Senai!”);

     

    Figura 6: Código fonte do programa AloSenai 

  • 8/16/2019 Programação_Orientada_ObjetoII

    19/110

    18 CURSOS TÉCNICOS SENAI

     Alguns pontos sobre este exemplo merecem destaque.

     ▪ O método main indica que a classe é um ponto de entrada de apli-cação.

    ▪  public é um modicador de acesso (será visto na seção de Orienta-

    ção a objetos). ▪ static é um modicador que indica que o método pertence a classe

    e não a uma instância.

     ▪ System é uma classe padrão e possui vários métodos úteis sobre aplataforma que está sendo executada, como E/S.

     ▪ //  e /* */ são comentários.

     ▪  void é o valor de retorno do método. Quando um método nãoretorna nenhum valor, uma espécie de valor vazio tem que ser especi-cado.

     ▪ String args [ ] é um vetor de strings  que é formado quando são pas-

    sados ou não argumentos por meio da linha de comando. ▪ System.out.println apresentada no console, a mensagem passada

    como parâmetro e entre aspas. Se for utilizado o System.out.print nãoserá feita a quebra de linha no nal da mensagem.

    O Netbeans  torna a execução dos projetos criados de maneira bem sim-ples. Na gura a seguir, pode-se observar como executar esse primeiroexemplo. Pode-se também ver o resultado da execução. Conra.

    Figura 7: Resultado da execução 

     Alguns erros podem acontecer na execução, por descuido do desen- volvedor. É importante considerar algumas características da linguagem Java:

     ▪ ela diferencia letras maiúsculas de minúsculas ( case-sensitive  ). Se odesenvolvedor escrever SYSTEM ao invés de System um erro seráacusado;

    as linhas de comando nalizam com ; (ponto-e-vírgula);▪ todo sinal de ‘abre chaves’ deve possuir um sinal de ‘fecha chaves’correspondente.

  • 8/16/2019 Programação_Orientada_ObjetoII

    20/110

    19PROGRAMAÇÃO ORIENTADA A OBJETOS II

    SEÇÃO 4O que aconteceu?

    Quando foi acionado o botão executar projeto, o NetBeans compilou o có-

    digo Java, gerando um ByteCode. Além disto, iniciou a máquina virtual Java (JVM), indicando para ela onde estava o código recém gerado.

     A Máquina Virtual Java procurou no ByteCode  por um método main. Esteé utilizado como ponto de entrada das aplicações Java Desktop. Umesquema dessa execução já foi detalhado na gura 3.

    Durante a execução, a JVM identicou a chamada para o método println,presente no atributo out da classe System. O método println  imprime, nasaída padrão, a String passada por parâmetro. Nesse exemplo, a saída pa-drão era o console de execução e a String  passada era “Alô Senai!”.

     Altere o exemplo adicionando ‘\n’ ao nal de mensagem. Ele é um ca-ractere especial de saída que informa ao sistema se a saída em tela teráalguma característica diferente, nesse caso será uma quebra de linha.

    Conra alguns caracteres especiais de saída que podem ser testados:

    \n nova linha;\t tabulação;\r retorno do carro (impressora);\\ barra inversa;\ “ aspas duplas.

    Essa mesma operação poderia ser feita por meio do console do sistemaoperacional. Portanto, seria preciso utilizar o comando javac para compi-lar o programa. E o comando java instanciar a máquina virtual e executaro bytecode . No ambiente, o Windows caria da seguinte maneira:

    C:\\javac AloSenai.java C:\\java AloSenai

    SEÇÃO 5Variável

    Uma variável é uma região de memória capaz de reter e representar um valor ou expressão. Ela possui um identifcador e um tipo de dado. Oidenticador é o nome dado a uma variável, método, atributo, interfaceou classe.

    Na linguagem Java, as variáveis são fortemente tipadas. Isso indica quetoda declaração de uma variável deve explicitar o tipo de dado que a

     variável poderá tratar.

  • 8/16/2019 Programação_Orientada_ObjetoII

    21/110

    20 CURSOS TÉCNICOS SENAI

    O tipo de dado especica as operações que uma variável pode executar,os valores que pode conter, por exemplo, uma variável para armazenara idade  de um aluno pode ser do tipo inteira. Sendo inteira, ela armazenaapenas números inteiros.

     A forma geral de declaração de variável é:

    poVariável idencadorVariável;

    O desenvolvedor, que deseja declarar uma variável para armazenar osjuros de um empréstimo, poderia fazer da seguinte forma:

    double juros;

    São permitidas algumas variações. Veja:

    double juros = 0.05; //declaração com atribuição do valordouble vlParcela, vlEmpresmo; //declaração de múlplas variáveis

    Na gura 8, é um exemplo de onde o desenvolvedor gostaria de calcularo valor de um empréstimo, utilizando juros simples, e exibir, no console,

    o resultado.

    Figura 8: Cálculo da parcela de um emprésmo 

  • 8/16/2019 Programação_Orientada_ObjetoII

    22/110

    21PROGRAMAÇÃO ORIENTADA A OBJETOS II

    O Java impõe regras na criação de identicadores (nome de variáveis).São elas:

     ▪ deve-se ter atenção quanto ao uso de letras maiúsculas e minúsculas;

    ▪ deve-se iniciar com: uma letra, o sinal de cifrão “$” ou com um

    sinal de sublinhado “-“;▪ pode-se utilizar caracteres Unicode e ter qualquer tamanho. Nãodeve conter espaços;

     ▪ Não se deve utilizar as palavras reservadas, contidas na tabela aseguir.

    Tabela 1: Palavras reservadas do Java

    abstract connue for New switch

    assert default goto package synchronized

    boolean do if  private this

    break double implements protected throw

    byte else import public throws

    case enum instanceof return transient

    catch extends int short try

    char nal interface stac void

    class nally long stricp volale

    const oat nave super while

     Além dessas regras, existe uma convenção amplamente aceita pelos de-senvolvedores da comunidade Java, que pode ser observada na unidadede estudo 9 (apêndice 2).

    SEÇÃO 6Tipos primivos de dados

    Existem oito tipos de dados primitivos. Eles são chamados de primiti- vos, pois correspondem diretamente a regiões de memória e não pontei-ros para objetos na memória. Conra:

    ▪ boolean – representa um valor lógico. Pode armazenar os valorestrue ou false. O valor padrão para o boolean é false. Exemplo: boolean cancelou = false;

     ▪ char – representa qualquer caractere (Unicode) entre aspas simples.Seu tamanho é 2 bytes . Pode armazenar valores entre ‘\u0000’ a ‘\uFFFF’. O valor padrão para o char é ‘\u0000’. Exemplo: char sexo = ‘M’;

     ▪ byte – representa um valorinteiro. Seu tamanho é 1 byte .Pode armazenar os valores de-128 a 127. O valor padrão parao byte é 0. 

    Exemplo: byte semana = 0; ▪ short – representa um valor

    inteiro com 2 bytes  de tamanho.Pode armazenar os valores de-32.768 a 32.768. O valor padrãopara o short é 0. Exemplo: short dia = 0;

     ▪ int – representa um valorinteiro com 4 bytes  de tamanho.Pode armazenar os valores de-2.147.483.648 a 2.147.483.647.O valor padrão para o int é 0. Exemplo: int idade = 30;

     ▪ long – representa um valorinteiro com 8 bytes de tamanho.Pode armazenar os valores de-9.223.372.036.854.775.808 a9.223.372.036.854.775.807. O

     valor padrão para o long é 0L. Exemplo: long inteiroGrande =9.223.372.036.854.775.807L;

     ▪

      oat – representa um valorreal com 4 bytes  de tamanho, de-nido segundo a norma IEEE-754. Pode armazenar valoresentre 1.40129846432481707e-45a 3.40282346638528860e+38. O

     valor padrão para o oat é 0.0f.Exemplo: oat pi = 3.14f;

     ▪ double – representa um valorreal com 8 bytes  de tamanho, de-nido segundo a norma IEEE-

    754. Pode armazenar valoresentre 4.94065645841246544e-324a 1.79769313486231570e+308.O valor padrão para o double é0.0d. Exemplo: double estrelas =1e40; double preco = 119.99;

    Nenhuma variável pode ser usa-da antes de ser inicializada. Mais

    exemplos de uso de variáveis po-dem ser observados na gura 9.

  • 8/16/2019 Programação_Orientada_ObjetoII

    23/110

    22 CURSOS TÉCNICOS SENAI

    SEÇÃO 7Promoção e casng

    Na seção anterior, pôde-se obser-

     var que cada tipo de variável pos-sui um tamanho e um formato: al-gumas suportam caractere, outrassuportam números inteiros ou

    reais. Por conta destas diferenças,deve-se tomar um pouco de cui-

    dado ao atribuir variáveis de tiposdiferentes.

    Quando se atribui uma variável,com tipos de dados mais restritos,para outra com tipo de dado mais

    amplo, isso é chamado de promo-ção. Nesses casos, não há preo-cupações: a JVM faz conversãoautomática. Por exemplo, atribuir,uma variável do tipo short (me-nor) para outra variável do tipo int(maior): não há problema! Algunsexemplos de promoção podemser observados a seguir:

    byte var0 = 10; short var1 = var0; int  var2 = var1; long var3 = var2; oat  var4 = var3; double  var5 = var4;

    Há dois casos especiais: oat,mesmo sendo menor em tama-

    nho na memória que o long, podereceber valores de long, por conta

    do padrão que ele utiliza para ar-mazenar. O segundo caso é o dapromoção de char, que só podeser feita para int (e superiores).

    Uma característica da promoçãoé que não há risco de perda deprecisão, e, por isso, a JVM fazautomaticamente. Entretanto, hácasos onde é necessário igualar

     valores, mesmo que haja risco deperda de precisão. Nesses casos, a

     JVM não pode decidir pelo desen- volvedor e é necessário realizarum cast, caso  ilustrado na gura10. Pode-se, também, observar amensagem dada pelo compilador.

    Os tipos primitivos, por não serem objetos, não possuem operações quepermitam realizar manipulações elaboradas, como, por exemplo, con-

     versão para Strings. Essa deciência foi suprida pela criação dos objetos Wrappers. Os objetos Wrapper correspondem ao objeto do tipo pri-mitivo. Para cada tipo primitivo existe um wrapper. Conra na tabela a

    seguir.

    Tabela 2: Objetos Wrappers

    Tipo primivo Classe wrapper Métodos de conversão String -> po

    boolean Boolean Boolean.parseBoolean (String vl)

    byte Byte Byte.parseBype(String vl)

    char Character String.charAt(int pos)

    double Double Double.parseDouble(String vl)

    oat Float Float.partFloat(String vl)

    int Integer Integer.parseInt(String vl)

    long Long Long.parseLong(String vl)

    short Short Short.parseShort(String vl)

     

    Os objetos wapper disponibilizam operações, como:

     ▪  ValueOf(): retorna o objeto wrapper criado;

     ▪ parseInt(), parseDouble() ou parseX() – de acordo com o wrapperem questão: retorna o tipo primitivo nomeado;

     ▪

    toString(): retorna a String com o valor do tipo primitivo encapsula-do no objeto.

    Figura 9: Exemplos de declaração e uso de variáveis 

  • 8/16/2019 Programação_Orientada_ObjetoII

    24/110

    23PROGRAMAÇÃO ORIENTADA A OBJETOS II

    Figura 10: Problemas de conversão 

     A mensagem de erro por incompatibilidade entre tipos de classes é apre-sentada da seguinte maneira:

    Excepon in thread “main” java.lang.RunmeExcepon: Uncompila-ble source code - possible loss of precision  required: int  found: double  at Arredondamento.main(Arredondamento.java:13)

    Nesse caso, e em situações similares, faz-se necessário, realizar um cas-ting, indicando, explicitamente para a JVM, a conversão que deve serfeita. O tipo desejado é colocado entre parênteses e usado como umprexo para a expressão que deve ser modicada. Na gura 11, pode-seobservar o exemplo anterior corrigido de modo a utilizar o cast. Obser-

     ve o formato padrão do casting.

    poDado variavelDesno = (poDado) variavelOrigem;

  • 8/16/2019 Programação_Orientada_ObjetoII

    25/110

    24 CURSOS TÉCNICOS SENAI

    Figura 11: Conversão ulizando cast 

    Na tabela a seguir, podem ser observados todos os possíveis casos decasts/promoções, presentes na linguagem Java. Nos casos em que apa-rece promo, signica que a conversão é automática. Nos demais, é apre-sentado o cast que deve ser utilizado.

    Tabela 3: Tabela de conversão

    PARAbyte short char int long oat double

    DE

    byte ----   promo (char)   p romo promo promo promo

    short (byte) --- (char)   p romo promo promo promo

    char (byte) (short) ---   promo promo promo promo

    int (byte) (short) (char) ---   promo promo promo

    long (byte) (short) (char) (int) ---   promo promo

    oat (byte) (short) (char) (int) (long) ----   promo

    double (byte) (short) (char) (int) (long) (oat) ----Fonte: adaptado de Caelum (2010)

  • 8/16/2019 Programação_Orientada_ObjetoII

    26/110

    25PROGRAMAÇÃO ORIENTADA A OBJETOS II

    SEÇÃO 8Operadores aritmécos

     Você sabe quais são os operadores aritméticos disponibilizados pelo

     Java? Não? Então conra:

    Adição ‘+’. Exemplo: total = a + b;Subtração ‘– ‘. Exemplo: total = a – b;Mulplicação ‘*’. Exemplo: total = a * b;Divisão ‘/’. Exemplo: total = a / b;Módulo (resto de divisão inteira) ‘%’. Exemplo: total = a % b; Este operador pode ser usado, somente, quando ambos operandossão inteiros.

    SEÇÃO 9Controle de uxo

     Agora que você já sabe quais são os operadores aritméticos, conra al-gumas informações sobre o controle de uxo.

    O entendimento sobre a estrutura de execução de programas em Javaestá ligado à compreensão do conceito de bloco de código.

    Blocos de código delimitam conjuntos de comando, possibilitando tra-

    tar escopo de variáveis, sincronia entre processos e controlar exceções.Um bloco é delimitado por chaves { }.Observe um trecho de código,onde há dois blocos de código:

    if ( condição booleana ) { //código do if  }

    else{ /* código do else. Importante observar que o bloco do

    else pode ser suprimido */ }

    Os dois blocos de códigos do trecho apresentado, são:

     ▪ o primeiro vinculado ao if.

    ▪ o segundo vinculado ao else.

    O Java disponibiliza as seguintes estruturas de controle de uxo:

    ▪   if-els;

    ▪   while; 

     ▪   do-while;

    ▪   for;

    ▪   switch.

  • 8/16/2019 Programação_Orientada_ObjetoII

    27/110

    26 CURSOS TÉCNICOS SENAI

    If-else  é a estrutura de testes. Dependendo da satisfação da condição de-clarada, executa um determinado bloco de código, senão, caso exista, éexecutado o bloco complementar. A sintaxe geral do if-else pode serobservada no quadro 1.10.

    Uma condição booleana é uma expressão que utiliza um conjunto de

    operadores relacionais (tabela 4) e/ou operadores lógicos (tabela 5). Oseu resultado é um valor booleano. Os operadores relacionais são:

    Tabela 4: Operadores relacionais

    Operador Símbolo Exemplo Resultado

    maior > A > B Verdadeiro se A maior que B, senão, falso

    menor < A < B Verdadeiro se A menor que B, senão, falso

    maior ou igual >= A >= B Verdadeiro se A maior ou igual a B, senão, falso

    menor ou igual

  • 8/16/2019 Programação_Orientada_ObjetoII

    28/110

    27PROGRAMAÇÃO ORIENTADA A OBJETOS II

    O uso de vários operadores é mediado, segundo regras de precedência.Essas regras podem ser observadas na tabela 6.

    Tabela 6: Operadores lógicos

    Operador Precedência

    Maior precedênciapós-xado expr++ expr--

    unário ++expr --expr +expr -expr ~ !

    mulplicação * / %

    adição/subtração + -

    descolamento > >>>

    relacional < > = instanceof

    igualdade == !=

    bitwise AND &

    bitwise exclusive OR ^

    bitwise inclusive OR |

    lógico AND &&

    lógico OR ||

    ternário ? :Menor precedência

    atribuição = += -= *= /= %= &= ^= |= = >>>=

    O while  é a estrutura de repetição, desviando o uxo de um programa,de modo que repita um bloco de código, enquanto uma determinadacondição booleana for verdadeira. A sintaxe geral do if-else pode serobservada a seguir.

    while( condição booleana ) { //código}

    Observe na gura a seguir, um programa que calcula os números dasérie de Fibonacchi menores que 100, sendo eles: { 1, 1, 2, 3, 5, 8, 13,21, 34, 55 e 89}.

  • 8/16/2019 Programação_Orientada_ObjetoII

    29/110

    28 CURSOS TÉCNICOS SENAI

    Figura 13: Exemplo de while – série de Fibonacci

    Outra estrutura de repetição amplamente utilizada é o for. Essa estrutu-

    ra deve ser usada, quando se deseja controlar a quantidade de vezes queserão executados um determinado bloco de código.

    O uxo de um programa é desviado, de modo que repita um bloco decódigo, enquanto uma determinada condição booleana for verdadeira. Asintaxe geral do for pode ser observada a seguir.

    for(inicialização, condição booleana, incremeto ) { //código}

    Na gura 14, pode-se observar um programa que calcula os 10 primei-ros números da série de Fibonacchi, dessa vez, utilizando um for.

  • 8/16/2019 Programação_Orientada_ObjetoII

    30/110

    29PROGRAMAÇÃO ORIENTADA A OBJETOS II

    Figura 14: Exemplo de for – série de Fibonacci

     A linguagem Java permite controlar o uxo de execução dos laços de

    repetição, utilizando as palavras-chave:▪ break  – interrompe a execução do laço, o uxo continuará execu-tando o próximo comando, após a estrutura. O break não conseguesair de todas as estruturas encadeadas, sendo necessário o uso de múlti-plos breaks nesses casos;

     ▪ continue  – faz com que seja interrompida a execução do bloco decódigo, passando para próximo ciclo do laço. A estrutura de repetiçãocontinua sendo executada a partir do seu início.

    SEÇÃO 10Escopo de variável

    O escopo de uma variável é o alcance que uma variável possui, permi-tindo o seu acesso ou mesmo a sua existência. O escopo é denido pe -los blocos de código, onde essa variável foi declarada, existe e pode seracessada. Na gura 15, pode-se observar um exemplo de um problemarelacionado a escopo.

    Nesse trecho de código é declarada uma variável em um bloco de códigoe o desenvolvedor tenta acessá-la em outro, ocasionando o problema.

    Duas variáveis são criadas: contaLacoInterno e contaLacoExterno.

  • 8/16/2019 Programação_Orientada_ObjetoII

    31/110

    30 CURSOS TÉCNICOS SENAI

     A variável contaLacoExterno possui o escopo mais amplo, sendo declaradano main. Ela pode ser utilizada em qualquer lugar no método após a suacriação.A variável contaLacoInterno possui seu escopo restrito ao blocode código do while. Após o fechamento desse bloco, ela deixa de existir,sendo eliminada pelo Garbage Collector. Tentativas de acesso à ela, geram

    um erro de compilação.

    Figura 15: Escopo de variável

    SEÇÃO 11Usando a documentação do Java

     A documentação da linguagem, ferramentas e API podem ser acessadasonline  no site  da Oracle ou pode ser feito um download   separado do SDK. Ela écomposta por uma coleção de arquivos HTML, com as classes e méto -dos da linguagem Java.

     A documentação é hierárquica, de forma que a página inicial lista todosos pacotes como hyperlinks . Na gura 16, pode-se observar um exemplode documento. Todo projeto pode ter sua documentação, gerada, au-tomaticamente, nesse formato, por meio do uso da ferramenta javadoc .

     As páginas são estruturadas nos seguintes tópicos:

     ▪ a hierarquia da classe;

     ▪ uma descrição da classe e seu propósito geral;

     ▪ uma lista de variáveis associadas;

     ▪ uma lista de construtores;

  • 8/16/2019 Programação_Orientada_ObjetoII

    32/110

    31PROGRAMAÇÃO ORIENTADA A OBJETOS II

     ▪ uma lista de métodos;

    ▪ uma lista detalhada de variáveis, com descrições do propósito e usode cada variável;

     ▪ uma lista detalhada de construtores, com descrições.

    uma lista detalhada de métodos, com descrições.

    Figura 16: Exemplo de documentação 

    Nessa primeira unidade de estudos, você conheceu um pouco sobre Java, na próxima unidade, você irá revisar os conceitos de orientaçãoa objetos e conhecer um estudo de caso. Prepare-se, vem muita coisainteressante pela frente!

  • 8/16/2019 Programação_Orientada_ObjetoII

    33/110

    Unidade deestudo 2

    Seções de estudo

    Seção 1 – Orientação a objetos: classes,

    objetos e instâncias

    Seção 2 – Atributos, métodos, interface,

    estados e comportamento

    Seção 3 – Os três pilares da orientação a

    objetos

    Seção 4 – Estudo de caso: Tamagotchi com

    personalidade

    Seção 5 – Visibilidade

    Seção 6 – Estudo de caso: sistema de clienteSeção 7 – Javabeans

  • 8/16/2019 Programação_Orientada_ObjetoII

    34/110

    33PROGRAMAÇÃO ORIENTADA A OBJETOS II

    Revendo a orientação a objetos

    SEÇÃO 1Orientação a objetos: classes, objetos e instâncias

     Aplicar o paradigma de desenvolvimento orientado a objeto exige o ple-no conhecimento dos conceitos que envolvem a orientação a objetos(OO), por isso, é importante revisar os conceitos que a compõem.

    O termo orientação a objetos remete à tentativa de simular nos com-putadores, aquilo que o desenvolvedor percebe no mundo real. Procura--se trazer para o desenvolvimento da solução, os elementos presentes noproblema, que se procura resolver na forma de abstrações.

    Uma abstração é uma simplicação concentrada nas características re-levantes do elemento avaliado. Pode-se simplicar o esforço presenteno Paradigma Orientado a Objeto (POO), no esforço realizado pelodesenvolvedor na procura por identicar as características de um pro-blema, decompondo a solução em um conjunto de objetos denidospor classes.

    Um objeto é uma construção de software, que encapsula estado e com-

    portamento, permitindo que se modele software  em termos reais e abs-tratos. Podem ser de vários tipos, como entidades físicas: nota-scal,cliente, aluno etc.; abstratas: listas, pilhas, vetores, conexões etc.

    Não seria produtivo durante o desenvolvimento, codicar cada objetoisoladamente. Imagine, o desenvolvedor precisa criar um código paracada aluno de uma escola, ou funcionário de uma empresa. Por contadisso, os objetos são agrupados pelos seus métodos e atributos comuns,formando uma classe de objetos.

     As classes implementam as responsabilidades de um sistema. Nelas sãodenidos atributos e métodos. Elas são como formas, utilizadas paramodelar os biscoitos. São utilizadas para denir a forma inicial, mas a

    partir do momento em que os biscoitos são retirados, passam a se dife-renciar uns dos outros.

    Cada solução teria a necessidade de classes diferentes, por exemplo:

     ▪ um sistema de gerenciamento escolar teria classes como: Aluno,Professor, Contrato, Sala etc.;

    ▪ tratando-se de um sistema para controle de locadoras poderiam exis-tir as classes: Cliente, Filme, Mídia etc.;

     ▪ no caso de um sistema de controle empresarial seriam necessáriasclasses como Funcionário, Gerente, Cliente, Setor, Item etc.

    SEÇÃO 2Atributos, métodos,interface, estados e comportamento

    Os atributos  são característicasrelevantes de uma classe de ob-

    jetos para a solução de um pro-blema, sobre os quais podem serexecutadas ações. O estado  deum objeto é determinado peloconjunto dos valores dos atribu-tos. Para evitar estados inválidosou inconsistentes e acessos inde-

     vidos, os atributos devem ser ape-nas manipuláveis por operaçõesdo próprio objeto.

    Um comportamento é uma ação

    executada por um objeto em res-posta a alguma mensagem  oumudança de estado. Ele é aciona-do pela execução de algum méto-do. Entretanto, essa relação não éexplícita, já que um mesmo com-portamento pode ser realizadopor vários métodos.

    Os métodos  são operações(ações) explicitamente detalhadase codicadas nas classes. O con-

    junto das operações públicas deum objeto forma a lista de servi-ços disponibilizados. A esse servi-ço é dado o nome de interface doobjeto.

    Uma interface  é um contratocom o mundo exterior, informan-do o que um objeto pode fazer,mas não sua implementação. Umainterface não possui implementa-ção e não pode ser instanciada.

  • 8/16/2019 Programação_Orientada_ObjetoII

    35/110

    34 CURSOS TÉCNICOS SENAI

    Cada classe de solução teria a necessidade atributos diferente, por exem-plo:

     ▪ em um sistema de gerenciamento escolar, a classe Aluno precisariade atributos como: nome, endereço, telefone, número da matrícula etc.

     ▪

    num sistema para controle de locadoras, a classe Filme necessitariade atributos como: nome, gênero, ano de lançamento etc.

     ▪ no caso de um sistema de controle empresarial, a classe funcionárioprecisaria de atributos como: nome, endereço, setor e etc.

    Na gura a seguir, você pode observar um diagrama que reúne todas asinformações aprendidas até agora.

    Figura 17: Diagrama dos conceitos da orientação a objetos 

    Fonte: Adaptado de Winck e Goeen (2006)

    SEÇÃO 3Os três pilares da orientação a objetos

     A orientação a objetos está apoiada em três pilares essenciais: encapcu-lamento, herança e polimorsmo. Veja um pouco mais sobre cada umdeles.

    O encapsulamento  é uma característica desejável na implementaçãode sistemas OO. Ele permite conhecer o que é feito, mas ignora-se omodo como é feito. Na OO, o encapsulamento é o pacote formadopelas operações e pelo conjunto de atributos de um objeto. Ele protegea estrutura interna de cada objeto contra a utilização arbitrária, que fujados objetivos propostos pelo projeto da classe.

     A herança  é um mecanismo para reuso de código que possibilita acriação de uma classe baseada em outra previamente existente. A novaclasse irá receber as características da classe-base, utilizando as partescomuns e especializando os pontos onde a classe derivada necessita deum comportamento mais especíco.

    O  polimorfsmo  é a capacidadede uma mesma referência, como,por exemplo, um ponteiro paraobjetos, representar implementa-ções diferentes, sendo que a im-

    plementação é selecionada poralgum mecanismo automático,assim, permite-se que um úniconome expresse comportamentosdiferentes, possibilitando a uti-lização de um mesmo nome demétodo em mais de uma classee, ainda, assuma implementaçõesdiferentes em cada classe.

    SEÇÃO 4Estudo de caso: Tamagotchi com personalidade

     Tamagotchi é um brinquedo, lan-çado pela empresa Bandai(1996).O seu objetivo era criar um ani-mal de estimação virtual. Normal-

    mente, esse brinquedo era apre-sentado como um chaveiro.

    Figura 18: Tamagotchi

    Nele, eram reproduzidos várioscomportamentos de um bicho deestimação real. O proprietário eraobrigado, por exemplo, a alimen-tar, passear, medicar, brincar comseu companheiro virtual etc., casonão fosse cuidado, adequadamen-te, o bichinho poderia morrer.Inspirado nos Tamagotchi, esteestudo de caso simulará apenas ohumor de um animal de estimação.

  • 8/16/2019 Programação_Orientada_ObjetoII

    36/110

    35PROGRAMAÇÃO ORIENTADA A OBJETOS II

    Observe na gura a seguir, um diagrama de classes desse estudo de caso.

    Figura 19: Figura 19: Diagrama de classes

    Esse exercício depende da criação de novas entidades: Animal, Humor, Alegre, Agitado, Triste e Bravo.

    Como o desejo é tratar apenas o humor do animal de estimação, este,quando solicitado, irá se apresentar e indicar o seu humor. Tal compor-tamento será implementado por meio de um método, no caso, falar().

     Veja o código da classe Animal:

    public class Animal {  private String nome = “”;  private Humor humor;

      Animal(String nome){  this.nome = nome;

      }  public Humor getHumor() {  return humor;  }

      public void setHumor(Humor humor) {  this.humor = humor;  }

      public String getNome() {  return nome;  }

      public void falar(){  System.out.println(“Oi! Meu nome é “+nome);  System.out.println(“Hoje eu estou “+humor.toString());  }

    }

     A classe Animal está associada à classe personalidade, que, por sua vez,possui quatro especializações: Agitado, Alegre, Bravo e Triste.

    No exemplo, a classe Animal não sabe detalhes (encapsulamento) sobreas classes especializadas de humor. Essa classe sabe que ao solicitar aoperação toString (sobreposição/polimorsmo) da classe humor, rece-berá o texto correto.

  • 8/16/2019 Programação_Orientada_ObjetoII

    37/110

    36 CURSOS TÉCNICOS SENAI

    Na gura 19 você pôde ver o uso dessas classes. Os códigos das demaisclasses você confere a seguir.

    Código fonte da classe Humor

    public class Humor {

      public String toString() {  return “Normal”;  }

    }

    Código fonte da classe Agitado

    public class Agitado extends Humor{

      public String toString() {  return “Agitado”;  }

    }

    Código fonte da classe Alegre

    public class Alegre extends Humor{

      public String toString() {  return “Alegre”;  }

    }

    Código fonte da classe Bravo

    public class Bravo extends Humor{

      public String toString() {  return “Bravo”;  }

    }

    Código fonte da classe Triste

    public class Triste extends Humor{  public String toString() {  return “Triste”;

      }}

  • 8/16/2019 Programação_Orientada_ObjetoII

    38/110

    37PROGRAMAÇÃO ORIENTADA A OBJETOS II

    Figura 20: Programação dos códigos e classes

    SEÇÃO 5Visibilidade

    O encapsulamento só é garantido se a classe restringir o acesso direto aseus elementos. Um bom exemplo é uma classe que representa um car-

    ro. A velocidade do carro é resultado dos métodos acelerar/frear e nãoda alteração direta da propriedade velocidade.Na implementação, feitano Java da orientação a objetos, foram disponibilizados quatros tipos de

     visibilidade ou controles de acesso:

    ▪  public (público) - permite o acesso a todos os objetos;

     ▪  protected (protegido) – garante acesso à instância, ou seja, paraaquele objeto e para todas as subclasses;

     ▪  private (privado) – garante acesso apenas para a instância.

    ▪ default (pacote) – não é uma visibilidade padrão da orientação a ob-jetos. Está disponível no Java e permite acesso a instâncias do mesmo

    pacote da classe.

  • 8/16/2019 Programação_Orientada_ObjetoII

    39/110

    38 CURSOS TÉCNICOS SENAI

    Nenhum atributo de uma classe deve ser declarado como público, eacessado diretamente por um objeto externo, a menos que haja umagrande juscava.

    Os atributos devem possuir métodos de acesso get/set, possibilitando asua manipulação controlada. Isto pode ser observado na classe Animalnos atributos nome  e humor .

    SEÇÃO 6Estudo de caso: sistema de cliente

    Uma empresa necessita controlar seus clientes. O diretor comercial des-

    sa empresa deseja ter acesso ao nome do cliente, telefone e endereço.Os clientes possuem um valor máximo para compra, se tentar compraralém do que o valor permitido, o sistema não deve impedir. Um clientepode ser considerado especial, pois, ele não possui limite no valor decompras. Nesses casos, também, se deseja saber o nome da pessoa decontato e o telefone dela. Se um cliente estiver devendo, é importanteque seja informado qual cliente está devendo. Um cliente devedor nãopode fazer novas compras.

     Analisando o problema, modelou-se o digrama. Conra na gura a se-guir.

    Figura 21: Diagrama de classes para um sistema de controle de clientes

     A classe Cliente possuirá os seguintes atributos: nome, telefone, ende-reco e limite de compras. Deve possuir um método que avalia se umadeterminada compra pode ser feita. Observe o código da classe Cliente:

  • 8/16/2019 Programação_Orientada_ObjetoII

    40/110

    39PROGRAMAÇÃO ORIENTADA A OBJETOS II

    package org.senai.cliente;

    public class Cliente {  private String nome;

      private String telefone;  private String endereco;  private double limiteCompras;

      public Cliente() {  }

      public Cliente(String nome) {  this.nome = nome;  }

      public void setNome(String nome) {  this.nome= nome;  }

      public String getNome() {

      return nome;  }

      public String getEndereco() {  return endereco;  }

      public void setEndereco(String endereço) {  this.endereco = endereço;  }

      public double getLimiteCompras() {  return limiteCompras;  }

      public void setLimiteCompras(double limiteCompras) {

      this.limiteCompras = limiteCompras;  }

      public String getTelefone() {  return telefone;  }

      public void setTelefone(String telefone) {  this.telefone = telefone;  }

      public boolean liberarCompra(double value){  return value

  • 8/16/2019 Programação_Orientada_ObjetoII

    41/110

    40 CURSOS TÉCNICOS SENAI

    package org.senai.cliente;

    public class ClienteEspecial extends Cliente {

      private String nomeContato;  private String telefoneContato;

      public ClienteEspecial() {  super();  }

     

    public ClienteEspecial(String nome) {  super(nome);  }

      public boolean liberarCompra(double value) {  return true;

      }

      public String getNomeContato() {  return nomeContato;  }

      public void setNomeContato(String nomeContato) {  this.nomeContato = nomeContato;  }

      public String getTelefoneContato() {  return telefoneContato;

      }

      public void setTelefoneContato(String telefoneContato) {  this.telefoneContato = telefoneContato;  }

      public String toString() {  return “Cliente Especial \tnome:”+getNome() + “ Telefone:” +

    getTelefone()+ “ Endereco:” + getEndereco() +” Contato:“+nomeContato+ “ Telefone Contato:”+telefoneContato +

    “ Limite de Compras: sem limite” ;  }

    }

    Por conta da lógica do negócio, foram redenidas a construtora e o mé-todo liberarCompra – um cliente especial possui compras sempre libera-das. Observe, também, a criação de dois novos atributos: nomeContato e telefoneContato, e os respectivos métodos get/set. Na construtora,pode-se ver a aplicação do operador super. Aqui, ele indica que está sen-do chamada a construtora da classe pai.

    No exemplo a seguir, pode-se observar o código da classe cliente de- vedor. Assim como, cliente especial, ela é uma especialização da classeCliente e, por isso, não é necessário redenir os atributos: nome, tele-

    fone, endereço e limite de crédito. Foram redenidas a construtora e ométodo liberarCompra, por conta, da lógica de negócio e, agora, umcliente devedor não pode fazer compras.

  • 8/16/2019 Programação_Orientada_ObjetoII

    42/110

    41PROGRAMAÇÃO ORIENTADA A OBJETOS II

    package org.senai.cliente;

    public class ClienteDevedor extends Cliente {

      public ClienteDevedor() {  }

      public ClienteDevedor(String nome) {  super(nome);  }

      public boolean liberarCompra(double value) {  return false;  }

      public String toString() {  return “Cliente Devedor \tnome:” + getNome() + “ Telefone:” + 

    getTelefone() + “ Endereco:” + getEndereco() +“ Limite de Compras: BLOQUEADO”;

     Veja na gura o código para executar esse programa.

    Figura 22: Testes das classes Cliente, ClienteEspecial e ClienteDevedor 

    SEÇÃO 7 Javabeans

     Javabeans  são componentes de sof- 

    tware, projetados para serem reuti-lizados. Eles possuem, como pre-missa, garantir o encapsulamento.Por isso, são classes que possuemconstrutores sem argumentos e assuas propriedades são acessadas

    externamente, apenas por meiode métodos get/set. Nos exem-plos anteriores, as classes podemser consideradas Javabeans.Cui-dado para não confundir Javabeans  

    com Enterprise   Javabeans . Enterprise Javabeans   é um dos componentesda plataforma Entreprise  (  Java En- terprise   Edition  ), que são executa-dos nos servidores, sendo aces-sados por meio do uso interfaces

    locais/remotas e um protocolo,como, por exemplo, RMI-IIOP.

    Nessa unidade de estudos você

    acompanhou uma breve revisãosobre a orientação a objetos, além

    de acompanhar dois estudos decaso: o Tamagotchi com persona-lidade e um sistema de cliente. Napróxima unidade, você começaráa avançar no Java, então, prepare--se. Todas as informações são im-portantes para o seu aprendizado

    na área.

  • 8/16/2019 Programação_Orientada_ObjetoII

    43/110

    Unidade deestudo 3

    Seções de estudo

    Seção 1 – String

    Seção 2 – Array

    Seção 3 – Construtor

    Seção 4 – Final e stac

    Seção 5 – Estudo de caso: relação

    de clientes

    Seção 6 – Tratamento de exceções

    Seção 7 – Estudo de caso: objetos

    de calcular

    Seção 8 – Ulizando pacotes

  • 8/16/2019 Programação_Orientada_ObjetoII

    44/110

    43PROGRAMAÇÃO ORIENTADA A OBJETOS II

    Avançando no Java

    SEÇÃO 1String

    String é a classe de objetos destinada a representar uma cadeia de carac-teres. Diferentes dos tipos primitivos, as variáveis do tipo String guar-dam referências aos objetos, e não um valor.

     Veja um exemplo de como criar uma String.

    String x = “Criando uma String ulizando literal”;String y = new String(“Criando uma String utlizando operador new “);/* Existem métodos que retornam que retornam Strings String z = String.valueOf(30);

    Uma vez criada uma variável do tipo String, ela é imutável. As Stringssão adicionadas a um pool de Strings e, sendo preciso, são reutilizadas.

    Pode-se observar, na gura a seguir, um exemplo das implicações do usodo operador new  e do pool de Strings.

    Figura 23: Comparação a String 

    Na declaração e criação das variá- veis x e y, a VM utilizará os mes-mos objetos presentes no cache  deStrings. Entretanto, para z, o usodo operador new força a criação

    de uma nova String no pool .Pode-se observar que foram uti-lizadas duas estratégias diferentespara a comparação de Strings:

     ▪ quando foi utilizado o opera-dor ‘==’ (comparação booleana),a VM compara as referências

    para as quais as duas variáveisapontam, e não o seu conteú-do. No caso de x, comparando

    com y, poderá dar certo, pois as variáveis apontam para mesmareferência.

     ▪ nos casos onde foi utilizado ométodo equals, a VM irá compa-rar o conteúdo das referências,que é de fato o desejo neste caso.Por isso, a comparação de Stringsdeve ser feita sempre utilizandoequals .

    O operador + executa uma con-catenação de objetos de Strings,gerando uma nova String. Veja, aseguir, a demonstração de conca-tenação de Strings, usando o ope-rador ‘+’ as implicações da imuta-bilidade das Strings.

  • 8/16/2019 Programação_Orientada_ObjetoII

    45/110

    44 CURSOS TÉCNICOS SENAI

    String exemplo = “parte1 ” + “ parte 2”;

    Nessa demonstração, o desenvolvedor pode ter a impressão de ter cria-

    do apenas uma String, mas na verdade, foram criadas três: “parte 1”,“parte 2” e “ parte 1 parte 2”. Pode-se concatenar string com qualquerobjeto ou tipos primitivos. Veja:

    double peso = 79.4;System.out.println(“O seu peso é: “ + peso);

     A classe possui alguns métodos importantes que devem ser estudadoscom atenção. Segue uma lista deles:

     ▪ split: divide uma String em um vetor de Strings. Exemplo:String frase = “Alô Senai!”; String lista = frase. split(“ “); //o resultado é um vetor com 2 posições

     ▪ compareTo: compara duas String. Esse método retorna um númeronegativo, se a primeira for menor, zero se forem iguais, e um númeropositivo se a segunda for menor. Esse método diferencia letras maiús-culas e minúsculas, por isso, deve-se ter atenção ao usá-lo. Exemplo: String primeira = “Diogo”; String segunda = “Vinícius”; int compara = primeira.comparaTo(segunda);

    //compara será menor que, pois ‘D’ é considerado menor que ‘V’ ▪ toUpperCase / toLowerCase: converte uma String de maiúscula

    para minúscula ou vice-versa. Exemplo: String texto = “eu estudando muito.”; String novoTexto = texto.toUpperCase();

     ▪ replace: substitui em uma string, uma ocorrência por outro valor.Exemplo: String frase = “Estudando Java”; frase = frase.replace(“Java”,“Orientação a Objetos”);

    Outros métodos importantes da classe String são:

     ▪ charAt – indica qual caractere ocupa o índice informado. Exemplo:String vl =” JAVA Senai ”; char c = vl.charAt(1);//c será igual a ‘J’ 

     ▪ substring – permite obter apenas parte de uma String. Exemplo: String vl =” JAVA Senai ”; String subVl = vl.substring(5,10); //subVl será igual a ‘Senai’

     ▪ length – retorna o tamanho da String. Exemplo: String vl =” JAVA Senai ”; int tamanho = vl. length(); // tamanho igual a 10

     ▪ indexOf  – retorna o índice de uma determinada ocorrência Exem-

    plo: String vl =” JAVA Senai ”; int pos = vl. indexOf (“Senai”); //pos será 5

  • 8/16/2019 Programação_Orientada_ObjetoII

    46/110

    45PROGRAMAÇÃO ORIENTADA A OBJETOS II

     ▪ trim – retorna uma nova string sem caracteres brancos do início edo m de uma string Exemplo: String vl =” JAVA Senai ”; String vlTrim = vl.trim(); // vlTrim será igual a “Java Senai” 

     ▪ isEmpty – retorna true  se a string estiver vazia. Exemplo: String vl = ” JAVA Senai ”; boolean vazia = vl.isEmpty(); //vazia = false

    Dependendo da aplicação, o fato da imutabilidade dos objetos do tipoString pode gerar uma grande carga, por exemplo, na geração de arqui-

     vos textos. Um opção é o uso das classes StringBuffer e StringBuidler.

    Essas classes disponibilizam o método ´append´, que permite concate-nar Strings, modicando seu conteúdo, ao invés de criar novos objetos.Observe um exemplo, o uso do StringBuffer.

    StringBuer palavra = new StringBuer();palavra.append(“primeiro”);palavra.append(“\nsegundo”);palavra.append(“\nterceiro”);palavra.append(“\nquarto”);palavra.append(“\nquinto”);System.out.println(palavra);

     A instanciação de classes do tipo StringBuffer (ou StringBuilder) deveser feita por meio do operador new. Outros métodos importantes das

    classes StringBuffer e StringBuilder são: insert , reverse, replace. As classes StringBuffer e StringBuilder possuem os mesmos métodos, adiferença é que a classe StringBuilder não é threadsafe. Threadsafe é umacaracterística desejável em programas multitarefa, onde o trecho de có-digo funciona corretamente em situações de concorrência.

    SEÇÃO 2Array

    Um array é um container de objetos de um determinado tipo que pos-sibilita tratar um número xo de elementos, denidos no momento dasua instanciação. Também é conhecido por vetor (unidimensional) oumatriz (multidimensional). Podem-se criar vetores de qualquer tipo pri-mitivo ou classe.

    Os elementos de um array são acessados por meio de um índice inteiro.O índice do primeiro elemento é igual a zero (0), e índice do último éigual ao tamanho do vetor -1.

    Um array pode ter vários níveis e seu tamanho é denido no momentoda criação. No Java, a declaração não cria o objeto propriamente dito. Ao

    invés disso, a declaração de um array  cria uma referência que pode serusada para percorrer um array. Observe um exemplo:

  • 8/16/2019 Programação_Orientada_ObjetoII

    47/110

    46 CURSOS TÉCNICOS SENAI

    char vetorChars[ ]; //esta forma é desencorajada. int [ ] vetorInts;String [ ][ ] matrizStrings;

    É importante observar que não se deve determinar o tamanho dese- jado do vetor na sua declaração. Isso deve ser feito no momento dainstanciação, por meio do uso do operador new.

    Os objetos do vetor não são criados instantaneamente, sendo necessá -rio, criá-los separadamente.

    String [ ] matrizStrings;matrizStrings= new String[3];matrizStrings[0] = new String(“Santa Catarina”);matrizStrings[1] = new String(“Joinville”);matrizStrings[2] = new String(“Senai”);

     Veja mais exemplos de criação de vetores e matrizes.

    String [ ] matrizStrings2 = {“Santa Catarina”, “Joinville”, “Senai”}; 

    // exemplo de matriz de inteiros 4x3int [ ] [ ] notas = new int[4][ ];notas[0] = new int[3];notas[1] = new int[3];notas[2] = new int[3];notas[3] = new int[3];

    // exemplo de matriz de inteiros 3x3int [ ] [ ]frequencia = {{7,5,4} , {7,7,7}, {9,8,7}};

    Uma questão interessante, sobre matrizes no Java, é que a linguagempermite que a matriz possua linhas de tamanhos diferentes. Veja, a se -guir, um exemplo de matrizes com linhas de tamanhos diferentes.

    /* Exemplo de matriz de inteiros com linhas de tamanhos diferentes*/int [ ] [ ] notasProvas = new int[6][ ];notasProvas [0] = new int[3];notasProvas [1] = new int[2];notasProvas [2] = new int[2];notasProvas [3] = new int[5];

    notasProvas[4] = new int[4];notasProvas[5] = new int[12];

  • 8/16/2019 Programação_Orientada_ObjetoII

    48/110

    47PROGRAMAÇÃO ORIENTADA A OBJETOS II

    O tamanho de um array está no seu atributo length. Esse atributo nãopode ser alterado - ele é imutável após a sua criação -, entretanto, épossível atribuir à variável, que referencia o array um novo vetor comtamanho diferente.

    Na listagem, a seguir, pode-se observar alguns métodos importantes

    para manipulação de Arrays.

    ▪ arrayCopy da classe System: permite copiar o conteúdo de um vetorpara outro vetor. Exemplo: char[] origem = { ‘d’, ‘e’, ‘c’, ‘a’, ‘f’, ‘e’, ‘i’, ‘n’, ‘a’, ‘t’, ‘e’, ‘d’ };  char[] destino = new char[7]; System.arraycopy(origem, 2, destino, 0, 7); 

    //o conteúdo de destino será ‘c’, ‘a’, ‘f’, ‘e’, ‘i’, ‘n’, ‘a’,

     ▪ sort da classe java.util.Arrays. Oderna um vetor. Exemplo: int[] valores = { 10, 5, 6, 1, 2, 8}; java.util.Arrays.sort(valores); 

    //o conteúdo do vetor valores será ordenado crescentemente

    SEÇÃO 3Construtor

    O construtor é o método chamado no momento que uma nova instânciado objeto é criada. Ele possibilita inicializar a instância e suas variáveis,alocando os recursos necessários ao funcionamento do objeto.

    O construtor deve possuir o mesmo nome da classe e não deve ser de-

    nido um tipo de retorno.

    Toda classe possui um construtor. Se o desenvolvedor não denir um cons-

    trutor, a classe recebe um construtor padrão sem argumentos. Um cons-

    trutor pode ser sobrecarregado, permindo que uma mesma classe possua

    vários construtores.

    Observe, a seguir, um exemplo de classe com construtor sobrecarregado.

    public class Empregado {

      private String nome;  private int salario;  public Empregado(String n, int s) {  nome = n;  salario = s;  }

      public Empregado(String n) {  this(n, 0);  }

      public Empregado( ) {  this(“Não denido”);

      }}

  • 8/16/2019 Programação_Orientada_ObjetoII

    49/110

    48 CURSOS TÉCNICOS SENAI

    SEÇÃO 4Final e stac

    O Java disponibiliza duas palavras-chave, que modicam o comporta-

    mento da linguagem sobre classes, atributos, argumentos, variáveis emétodos: static e nal.

    O nal pode ser aplicado à classe, métodos, atributos, variáveis e argu-mentos. Quando aplicada, na declaração de uma classe, indicada que aclasse não pode ser extendida. Isso permite, ao desenvolvedor da classe,garantir que o comportamento da classe não será alterado por uma ques-tão de segurança, por exemplo:

    public  nal class ValidadorSenha{

      public boolean isSenhaValida(String user, String senha){  {  // código de validação...  }

    }

    Um desenvolvedor que queira burlar a segurança, derivando a classe,como, no exemplo a seguir, receberia um erro no momento da compila-ção, indicando que a operação é ilegal.

    public  class ValidadorSenhaNovo extends ValidadorSenha {//

  • 8/16/2019 Programação_Orientada_ObjetoII

    50/110

    49PROGRAMAÇÃO ORIENTADA A OBJETOS II

    public class Carro{

      private nal int anoFabricacao;

      public Carro(int anoFabricacao)  {  this.anoFabricacao = anoFabricacao;

    }

    public void adulteraCarro(int novoAnoFabricacao){{  this.anoFabricacao = novoAnoFabricacao;//

  • 8/16/2019 Programação_Orientada_ObjetoII

    51/110

    50 CURSOS TÉCNICOS SENAI

    public class Log{

      public stac nal int ERROR = 3;  public stac nal int WARNING = 2;

      public stac nal int INFO = 1;  public stac nal int DEBUG = 0;

      public stac void log(int type, String msg){  //... código do log ..  }

    }

    SEÇÃO 5

    Estudo de caso: relação de clientes Você se lembra que, nas seções anteriores, foram denidas as classesCliente, ClienteEspecial e ClienteDevedor? Elas compõem uma mesmahierarquia de classes, possibilitando tratar qualquer instância especializa-da por meio e uma referência de Cliente.

    Por conta disso, para criar uma lista de clientes, pode-se usar um arraydo tipo cliente. No exemplo de código, a seguir, você pode observar aimplementação São criados três objetos, inicializados, apropriadamente,e é feita a referência, as posições e o array para os objetos. Conra:

  • 8/16/2019 Programação_Orientada_ObjetoII

    52/110

    51PROGRAMAÇÃO ORIENTADA A OBJETOS II

    package com.senai.main;

    import org.senai.cliente.Cliente;import org.senai.cliente.ClienteDevedor;

    import org.senai.cliente.ClienteEspecial;

    public class RelacaoCliente {  public stac void main(String args[]){  Cliente[] clientes = new Cliente[3]; 

    Cliente joao = new Cliente(“Loja do Joao”);  joao.setEndereco(“Rua dos programadores, 100”);  joao.setLimiteCompras(150);  joao.setTelefone(“2235-0813”);

      ClienteEspecial maria = new ClienteEspecial(“Loja da Maria”);  maria.setEndereco(“Rua dos desenvolvedores, 101”);

      maria.setLimiteCompras(150);  maria.setTelefone(“2235-0813”);  maria.setNomeContato(“Maria”);  maria.setTelefoneContato(“2357-1113”);

      ClienteDevedor juka = new ClienteDevedor(“Loja da juka”);  juka.setEndereco(“Rua dos analistas, 110”);  juka.setLimiteCompras(150);  juka.setTelefone(“2235-0813”);

      clientes[0] = joao;  clientes[1] = maria;

      clientes[2] = juka; 

    listarClientes(clientes);  }

      public stac void listarclientes(Cliente[] clientes){  System.out.println(“Listagem de Clientes”);  for(Cliente cliente : clientes){  System.out.println(cliente);  }

      }

    }

    No trecho de código, onde são exibidas as informações dos clientes, ocompilador não sabe dos detalhes dos objetos, só valida se a referênciasé permitida. Na execução, por polimorsmo, os métodos são executadosde acordo com a instância presente na memória.

    É importante, também, observar o uso do for-each. No método listar-Clientes, foi utilizado um interator, que varre o array, igualando a posi -ção atual com a variável cliente.

  • 8/16/2019 Programação_Orientada_ObjetoII

    53/110

    52 CURSOS TÉCNICOS SENAI

    de Throwable. Das diversas derivações de Throwable, duas merecemuma atenção especial: Error e RuntimeException.

    O tratamento de exceções é expresso por meio de dois grupos de pala - vras reservadas, que trabalham em conjunto:

     ▪

    um grupo para o lançamento de exceções: throw/throws, onde asexceções são originadas ou passadas para frente;

     ▪ outro para a captura de exceções lançadas e/ou garantia de execu-ção: try-catch-nally, com as quais, de fato, se trata as exceções.

    Figura 24: Gerando exceção NullPointerExcepon 

    O desenvolvedor, durante a criação de uma aplicação, pode identicarsituações no código onde o uxo deva ser interrompido, por exemplo,pela inconsistência de uma informação. Também pode ocorrer que odesenvolvedor não deseja tratar uma determinada situação, como, por

    exemplo, a falta de um arquivo. Nessas situações, ele pode lançar umaexceção. O desenvolvedor, para lançar uma exceção, usa as palavras re-servadas throw  e throws. Veja, a seguir, um exemplo dessa utilização.

    //... código da classepublic void loadData(String caminho) throws IOExcepon{  if (vericarArquivo(caminho) == false){  throw new IOExcepon(“Erro a vericar arquivo”);  }

      //código de carga dos dados 

    }

    SEÇÃO 6Tratamento de exceções

    O tratamento de exceções é o me-

    canismo para tratar erros durantea execução de um programa. Elerepresenta uma parte signicativado esforço em projetos desenvol-

     vidos em Java. Entretanto, esseesforço não agrega valor ao pro-duto e, normalmente, implica emproblemas quando não é adequa-damente codicado.

     As exceções são classes que repre-sentam erros durante a execução

    de um programa Java. Os objetosque representam as exceções po-dem ser “lançados”, capturadose manipulados. São consideradoscondições de erro:

     ▪ tentar abrir um arquivo quenão existe;

     ▪ tentar usar uma conexão derede interrompida;

     ▪ tentar acessar posição de

    arrays fora da faixa; ▪ tentar carregar uma classe que

    não está no classpath.

    Na gura 23, você pôde observara execução de um código que gerauma exceção. É criada uma refe-rência à classe String. Ela é inicia-lizada com null. Antes que sejainstanciado um objeto do tipoString para esta referência, tenta-

    -se utilizar o método isEmpty(), que ainda não existe. A exceçãogerada é uma do tipo NullPoin-terException.

     As exceções no Java derivam daclasse Throwable. Ela é a única,cujas instâncias, diretas ou indire-tas, podem ser usadas para seremlançadas. Existe um grande núme-ro de classes presentes na lingua-gem para tratar todas as catego-

    rias de erro. Também é possívelcriar novas exceções, derivandode Exception, um tipo derivado

  • 8/16/2019 Programação_Orientada_ObjetoII

    54/110

    53PROGRAMAÇÃO ORIENTADA A OBJETOS II

     A linguagem Java exige que toda exceção, que possa ser lançada, deve sertratada. No exemplo anterior de código, o desenvolvedor, que dispararo método loadData, precisará tratar a exceção do tipo IOException, casocontrário, o compilador indicará que há um problema no código. Essasituação não é aplicada, caso as exceções lançadas, envolvam instâncias

    da classe Error, RuntimeException e das classes delas derivadas. Ainda no código mostrado, anteriormente, caso o método verifcarArqui - vo retornar falso, será criado um objeto do tipo IOException . O uxo decontrole será interrompido, e retornará para o método chamador, umobjeto de exceção. Observe, a seguir, o código que dispara o método ve- rifcarArquivo. Ele está envolvido com um conjunto de try/catch/nally.

    //... código da classeString arquivo = “data.txt”;try{

    loadData(arquivo);  omizarData();}

    catch(IOExcepon ioex){  System.out.println(“Problemas ao importar arquivo:”+arquivo);  ioex. printStackTrace(); //imprime todo a pilha de execução}

    nally{

      System.out.println(“Processo Encerrado”);

    }

    //... código da classe

    Caso o método loadData , ou qualquer outro método dentro de um blocotry-catch, lance uma exceção de um tipo previsto por uma cláusula ca-tch, o uxo é desviado para uma cláusula catch apropriada.

    Isso permite uma consideração sobre os métodos, que podem terminarpor uma das condições abaixo:

     ▪ o uxo de controle atingiu o nal do método;

    ▪ o uxo de controle atingiu um comando return;

    ▪ ocorreu um problema grave, impedindo o uxo normal, foi exe-

    cutado um throw implícito ou explícito, que não foi apanhado porum comando try-catch daquele método. Não existindo a execução doprograma, será nalizada, com mensagem de erro provida pela JVM,dizendo que uma exceção foi lançada sem que fosse apanhada.

    Considerando apenas o encerramento, por conta de problemas, é im-portante observar que a linguagem Java classica os erros e exceções emdois grupos:

    ▪ checked: a vericação é obrigatória;

     ▪ unchecked: a vericação não é obrigatória.

    O desenvolvedor, para lançar asexceções checked, deve marcar ométodo com o tipo de exceção aser lançado. Isso é feito, por meiodo uso da palavra reservada thro-

     ws. Isso pode ser observado nadeclaração de método presenteno exemplo try/catch/nally (có-digo anterior). Toda a chamada aométodo calcular precisará tratarou lançar exceções do tipo Ex-ception.

     Ainda nesse exemplo, pode-seobservar a existência de um bloconally. O nally dene um blocode código que sempre será exe-

    cutado, mesmo que uma exceçãoseja lançada ou não.Isso permiteao desenvolvedor, garantir queum determinado bloco de códigosempre será executado, mesmoque algum problema ocorra quan-do, por exemplo, se trabalha daabertura de arquivos ou conexõescom bancos.

    Um bloco try pode conter: try-ca-tch-nally, try-catch ou try-nally.

     A seleção pela forma mais apro-priada cabe ao desenvolvedor.

    O tratamento de exceções permi-te ao desenvolvedor, decidir entretratar uma exceção ou lançá-lapara o método invocador. Issoleva à seguinte questão: quando seutiliza uma forma ou outra?

     A decisão deve levar em conta alógica envolvida e relação comusuário. Se o problema necessita

    de uma ação do usuário e ocorreem uma camada muito interna da

    aplicação, deve-se lançar exceçãoaté um ponto no qual haja intera-ção com usuário.

     Além de contar com ampla bi-blioteca de exceções disponíveisna linguagem, o desenvolvedorpode optar por criar uma nova ex-ceção. No exemplo, a seguir, vocêpode observar a criação de exce-

    ção – que trata da ocorrência detimeout em um servidor.

  • 8/16/2019 Programação_Orientada_ObjetoII

    55/110

    54 CURSOS TÉCNICOS SENAI

    public class ServerTimedOutExcepon extends Excepon {  private int port;

    public ServerTimedOutExcepon(String movo, int porta){

      super(movo); // chama construtor da classe pai  this.porta = porta;  }

      public int getPorta( ) {  return porta;  }

    }

    SEÇÃO 7

    Estudo de caso: objetos de calcularNessa seção, você acompanhará o desenvolvimento de uma aplicação,capaz de receber uma operação e executá-la. Observe na gura, a seguir,um diagrama de classes representando o problema.

    Figura 25: Diagrama UML

     A classe ParserOperacao recebe uma String, contendo a operação a serexecutada. Ela interpreta essa operação e encaminha para o objeto decalculadora efetivar a operação.

    Na gura 26, pode ser visto o código da classe Calculadora. Essa classepossui o método calcular com duas implementações distintas. Uma que

    recebe duas variáveis do tipo double  e realiza a operação; outra que rece-be duas variáveis do tipo String, converte-as, e chama a outra operaçãode calcular. Isso caracteriza polimorsmo de sobrecarga – a Máquina

     Virtual Java selecionará, no momento de execução, a implementaçãoapropriada.

  • 8/16/2019 Programação_Orientada_ObjetoII

    56/110

    55PROGRAMAÇÃO ORIENTADA A OBJETOS II

    Figura 26: Código-fonte calculadora 

    Na gura 25, você pôde ver o código da classe ParserOperacao, quepossui, associada a ela, uma referência à classe Calculadora. A operaçãoprincipal é processar, que fragmenta a expressão e repassa para a calcu-

    ladora executar a operação de fato.

    É importante observar que a análise da operação é bastante restrita:ela apenas conseguirá interpretar uma operação, se entre os elemen-tos, exisr um espaço em branco e o formato for: Número OperadorNúmero.

  • 8/16/2019 Programação_Orientada_ObjetoII

    57/110

    56 CURSOS TÉCNICOS SENAI

    Figura 27: Código-fonte ParserExpressao

    Na gura a seguir, você verá o código da classe Main. É nessa classe,que inicia a execução da aplicação. Ela utiliza uma classe do Swing: o

     JOptionPane, que será detalhada na próxima sessão. Por meio do JOp-tionPane, é exibida uma mensagem para que o usuário informe a expres-são desejada.

    Figura 28: Código-fonte Classe Principal

  • 8/16/2019 Programação_Orientada_ObjetoII

    58/110

    57PROGRAMAÇÃO ORIENTADA A OBJETOS II

    SEÇÃO 8Ulizando pacotes

    Projetos de softwares  exigem uma forma prática de organizar os arqui-

     vos envolvidos. No Java, esse mecanismo é package . Ele permite agruparclasses relacionadas, utilizando a hierarquia de diretórios nesta organiza-ção, possibilitando a criação de múltiplos níveis de classes.

    Deve-se utilizar a declaração de pacote package  para relacionar uma de-terminada classe a um pacote – a estrutura de diretórios é explicitadanessa declaração. As classes que estiverem no mesmo diretório e possu-

     írem a mesma declaração de package, comporão um pacote. Você podeobservar essa organização na gura a seguir.

    Figura 29: Criação de um pacote

    Uma classe armazenada em um pacote pode ser utilizada por outrasclasses, mas para isso deve estar marcada como uma classe pública, e opacote acessível no classpath  da aplicação. Devem-se importar os paco-tes e classes que serão utilizados em um determinado ponto (classe) doprojeto. Isso é feito por meio do uso da declaração de importação import  

    para indicar ao compilador onde achar as classes. Nos exemplos ante -riores, pôde-se observar o uso, tanto da declaração de pacotes, quantode imports .

     Java Archive (JAR) é um arquivo compactado, usado para distribuir umconjunto de classes Java. Ele é usado para armazenar classes compiladase metadados associados, que compõe uma hierarquia de pacotes. Os ar-quivos JAR são criados por meio da ferramenta jar. No NetBeans, podeser criado, por meio do uso da opção ‘Construir’ (Build) ou ‘Limpar eConstruir’ (Clean and Build), um diretório ‘dist’ contendo os JARs.

    Nessa unidade de estudo, você estudou as Strings, arrays, os construto-res e o nal e static, que são palavras-chave que modicam o compor-tamento da linguagem sobre classes, atributos, argumentos, variáveis emétodos. Nos dois estudos de caso, você teve informações importantese exemplos práticos, tanto de relação com o cliente, quanto de calcula-dora.

     Todas essas informações são im-portantes para a sua formação

    na área, e aperfeiçoamento nomercado de trabalho, portanto,mantenha-se atento para que ne-

    nhuma informação passe desper-cebida. Na próxima unidade, vemmais novidade. Até lá!

  • 8/16/2019 Programação_Orientada_ObjetoII

    59/110

    Unidade deestudo 4

    Seções de estudo

    Seção 1 – Visão geral

    Seção 2 – Alô Senai!

    Seção 3 – Containers e gerenciadores

    de layout

    Seção 4 – Eventos

    Seção 5 – Estudo de caso: objetos de

    calcular

  • 8/16/2019 Programação_Orientada_ObjetoII

    60/110

    59PROGRAMAÇÃO ORIENTADA A OBJETOS II

    AWT e Swing

    SEÇÃO 1Visão geral

    O desenvolvedor possui uma va-riedade grande de APIs para de-senvolver interfaces com o usuá-rio no Java. Duas se destacam: o

     AWT e o Swing.

    O AWT –  Abstract Window To- olkit-  é o antigo conjunto de fer-ramentas para interfaces grácasdo Java. Serve para oferecer in-fraestrutura mínima de interfacegráca (nivela por baixo).

    Os componentes do Abstract Win- dow Toolkit   estão no pacote  java.

    awt.* . Ele contém todas as classespara criação de interfaces, entre-tanto apresenta alguns problemas:

     ▪ a aparência dos componentesdependente de plataforma naqual a aplicação será executada;

     ▪ é limitada em recursos pordepender de suporte de cada

    plataforma para os componentesoferecidos;

     ▪   bugs  e incompatibilidades entreplataformas.

     A resposta a essas limitações foio desenvolvimento do Swing. OSwing é um conjunto de compo-nentes grácos, que dão suporteà construção de aplicações Javacom interface gráca e interativi-dade. Ele faz parte da Java Founda- tion Classes  (JFC).

    Os componentes de Swing fazemparte do pacote javax.swing.*. Oscomponentes têm como objetivo,prover o mesmo comportamento,independente do sistema opera-

    cional. Estão disponíveis compo-nentes, tais como:

     ▪  JTextField;

     ▪  JTextArea;

    ▪  JRadioButton;

    ▪ ButtonGroup;

    ▪  JCheckBox;

    ▪  JComboBox;

     ▪  JPanel;

     ▪  JScrollPane.

    Conra algumas características doSwing:

     ▪ grande variedade de compo-nente;

     ▪  Java 2D API;

     ▪ Look-and-Feel;

     ▪ Internationalization;

     ▪  Accessibility API.

    SEÇÃO 2Alô Senai!

     Alô, SENAI! é um exemplo, bem

    básico, para criação de um pro-grama com interface gráca. Oobjetivo é criar uma janela sim-ples, que possuirá um rótulo, umcampo de edição e um botão. Nocampo de edição, o usuário pode-rá escrever um texto, nesse caso,o seu nome. Ao clicar sobre o bo-tão, a aplicação exibirá uma men-sagem, cumprimentando o usuá-rio, utilizando o texto informado.

    Os elementos que compõe umainterface gráca são:

     ▪ n (janela, painel): local ondesão adicionados os componentes

    ou outros containers;

     ▪ componentes: botões, labels,listbox , menus etc.

     ▪

    gerenciador de layout: ob-jeto responsável pelo posiciona-mento dos componentes inseri-

    dos num determinado container.

    O componente Swing, que repre-senta telas no sistema operacio-nal, é o JFrame. As janelas criadas,pelos desenvolvedores, derivamdela. Pode-se criar aplicaçõesSwing inteiras, usando ape