Logo Passei Direto
Buscar

Programação Orientada à Objetos - Livro Digital

Ferramentas de estudo

Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

<p>Programação</p><p>Orientada</p><p>a Objetos</p><p>Neide Silva Nascimento</p><p>Programação</p><p>Orientada</p><p>a Objetos</p><p>Neide Silva Nascimento</p><p>Todos os direitos desta edição são reservados ao Centro Universitário Facens. Nenhuma parte da obra “Programação</p><p>orientada a objetos” poderá ser reproduzida ou transmitida sem autorização prévia. A violação dos direitos autorais</p><p>é crime estabelecido pela Lei n.º 9.610/98 com punição de acordo com artigo 184 do Código Penal. Todas as imagens,</p><p>vetores e ilustrações são creditados ao Shutterstock Inc., salvo quando indicada a referência.</p><p>Centro Universitário Facens: Rodovia Senador José Ermírio de Moraes, 1425, Castelinho km 1,5 – Alto da Boa Vista – Sorocaba/</p><p>SP. CEP: 18087-125. Tel.: 551532381188 / e-mail: facens@facens.br</p><p>EXPEDIENTE</p><p>FICHA CATALOGRÁFICA ELABORADA PELA BIBLIOTECA FACENS</p><p>BIBLIOTECÁRIA RESPONSÁVEL Eliane da Rocha CRB 8062/8ª</p><p>N244p</p><p>Nascimento, Neide Silva.</p><p>Programação orientada a objetos [recurso eletrônico] / Neide Silva</p><p>Nascimento ; ed. ED+ Content Hub Facens – Sorocaba, SP: Centro</p><p>Universitário Facens, 2023.</p><p>1 E-book; (PDF). il.</p><p>Inclui bibliografia</p><p>ISBN: 978-65-84926-06-6</p><p>Modo de acesso: restrito</p><p>1.Orientação a objetos. 2.Java. 3. Programação orientada a objetos.</p><p>I. Ed+ Content Hub Facens. II. Centro Universitário Facens. III. Título.</p><p>CDD 005.117</p><p>CONSELHO ACADÊMICO</p><p>REITOR Prof. Dr. Fabiano Prado Marques</p><p>DIREÇÃO DE REGULAÇÃO E QUALIDADE Profa. Dra.</p><p>Sandra Gavioli Puga</p><p>DIREÇÃO DE OPERAÇÕES ACADÊMICA Profa. Dra. Sandra</p><p>Bizarria Lopes Vilallueva</p><p>DIRETORIA DE PÓS-GRADUAÇÃO E EDUCAÇÃO A</p><p>DISTÂNCIA Prof. Me. Luciano Freire</p><p>ED+ CONTENT HUB</p><p>CONSELHO EDITORIAL Claudia Regina Benedetti | Rodolfo</p><p>Encinas de Encarnação Pinelli</p><p>DESIGN DE PRODUTO Renata Aparecida Cunha Santos</p><p>COORDENAÇÃO DE PRODUTO Antônio Henrique Ribeiro</p><p>Dalbem</p><p>QUALIDADE EDITORIAL Patrícia Ceolin do Nascimento</p><p>AUTORIA Neide Silva Nascimento</p><p>VALIDAÇÃO Ariel da Silva Dias</p><p>DESIGN EDUCACIONAL Camila Carriel Martins Braga |</p><p>Camila Gomes Nogueira | Natália Cavalcante Camargo</p><p>ILUSTRAÇÃO Bárbara Ferreira Moro | Guilherme Alexandre</p><p>de Almeida | Renan Silva Lambert | Vitor Bueno Lima</p><p>DIAGRAMAÇÃO Digital Pub</p><p>REVISÃO Digital Pub | Lílian Moreira Mendes | Patrícia Maria</p><p>de Oliveira Carvalho Moreira | Sarah Elene Müller Rappl</p><p>Sumário</p><p>Palavras do autor ......................................................... 5</p><p>Introdução à programação orientada</p><p>a objetos .............................................................................. 6</p><p>Encapsulamento, construtor</p><p>e sobrecarga .................................................................. 29</p><p>Coleção de objetos em Java ............................... 50</p><p>Herança ............................................................................ 75</p><p>Polimorfismo ................................................................ 98</p><p>Classes abstratas e interfaces ........................... 123</p><p>Pacotes, modificadores</p><p>e atributo/método estático ................................. 152</p><p>Persistência de dados ............................................ 176</p><p>Palavras do autor</p><p>Olá! Sou Neide Nascimento e estarei com você neste</p><p>componente. Minha formação é Bacharel em Ciências da</p><p>Computação pela Universidade Metodista de São Paulo,</p><p>especialista em Docência do Ensino Superior pela FAENAC</p><p>e possuo MBA em Gestão da Tecnologia da Informação pela</p><p>Faculdade Anhanguera. Atuo como professora há aproxi-</p><p>madamente 13 anos nos cursos ligados a desenvolvimento</p><p>de sistemas em programação de computadores.</p><p>O que você irá aprender neste componente curricular?</p><p>Primeiramente, conhecer os conceitos e paradigmas da</p><p>orientação a objetos e como aplicar esses conceitos em</p><p>uma linguagem de programação. A linguagem escolhida</p><p>foi Java, pois está na lista das dez mais usadas no mercado</p><p>de trabalho.</p><p>A ideia é criar um programa utilizando os conceitos de</p><p>programação orientada a objetos na linguagem Java.</p><p>Então, boas-vindas a este universo da linguagem Java na</p><p>criação de software e explore ao máximo todo o conteúdo.</p><p>Assim, poderá se tornar um best como programador no</p><p>mercado de trabalho. Dica principal: desfrute todas as opor-</p><p>tunidades que irá encontrar aqui.</p><p>6</p><p>Introdução à programação orientada a objetos</p><p>Objetivos de aprendizagem</p><p>Compreender as diferenças e as características da progra-</p><p>mação estruturada e da programação orientada a objetos,</p><p>e entender a origem da orientação a objetos, as caracterís-</p><p>ticas da linguagem Java e os conceitos de classe, atributo,</p><p>método e instâncias.</p><p>Tópicos de estudo</p><p>• Programação estruturada x programação orientada</p><p>a objetos e características da linguagem Java;</p><p>• Origem da orientação a objetos;</p><p>• Classes e instâncias.</p><p>Iniciando os estudos</p><p>Olá, estudante!</p><p>Veja quais os tópicos discutidos nesta unidade que irão</p><p>ajudar em seu aprendizado:</p><p>• Conhecer as diferenças entre programação orien-</p><p>tada a objetos e programação estruturada;</p><p>• Conhecer o básico da linguagem Java;</p><p>• Saber sobre os motivos que levaram a programação</p><p>orientada a objetos ao desenvolvimento de sistemas;</p><p>• Aprender sobre classe, atributo, método e instância</p><p>de um objeto;</p><p>7</p><p>• Entender o diagrama de classe da UML e como apli-</p><p>cá-lo em programação orientada a objetos.</p><p>Bons estudos!</p><p>Introdução à programação orientada a objetos</p><p>8</p><p>Programação estruturada</p><p>x programação orientada a</p><p>objetos e características da</p><p>linguagem Java</p><p>Para iniciarmos, vamos conhecer um pouco sobre o que é</p><p>programação orientada a objetos (POO) e programação</p><p>estruturada (PE). De acordo com autores que pesquisaram</p><p>sobre o assunto (como DEITEL, 2010; e SANTOS, 2011), a</p><p>principal diferença entre as duas formas de programação</p><p>refere-se à maneira pela qual dados e procedimentos se</p><p>comunicam. Na PE, os procedimentos são trabalhados em</p><p>módulos separados, e a comunicação entre os dados é feita</p><p>através desses procedimentos. Já na POO, os dados e os</p><p>procedimentos são partes de um só módulo, chamado de</p><p>classes de objetos, em que os dados e procedimentos são</p><p>encapsulados.</p><p>APROFUNDE-SE</p><p>Diferenças entre POO e programação</p><p>estruturada – s02 e02</p><p>Assista ao vídeo para melhor compreender as diferenças</p><p>entre a programação orientada a objetos e a programação</p><p>estruturada.</p><p>Disponível em: https://youtu.be/3Wn5_XCT6W0</p><p>Acesso em: 22/12/2022.</p><p>https://youtu.be/3Wn5_XCT6W0</p><p>https://youtu.be/3Wn5_XCT6W0</p><p>Introdução à programação orientada a objetos</p><p>9</p><p>Agora que você sabe as diferenças entre os métodos de</p><p>desenvolvimento, é hora de conhecer a linguagem de</p><p>programação Java. Segue um pouquinho da história dessa</p><p>linguagem de programação.</p><p>QUADRO 1</p><p>A linguagem Java evoluiu</p><p>conforme novos recursos</p><p>tecnológicos foram</p><p>surgindo.</p><p>Fonte: elaborado pela autora.</p><p>Enfim, desde o momento de seu anúncio, a linguagem</p><p>Java não para de crescer, estando atualmente na sua oitava</p><p>versão, com várias atualizações, de acordo com o site Oracle</p><p>(www.java.com).</p><p>http://www.java.com</p><p>Introdução à programação orientada a objetos</p><p>10</p><p>APROFUNDE-SE</p><p>Java para iniciantes:</p><p>crie, compile e execute</p><p>programas Java rapidamente</p><p>Leia a Introdução do livro “Java para iniciantes”, que você</p><p>poderá acessar pelo link, para aprofundar-se na evolução da</p><p>linguagem Java ao longo do tempo.</p><p>Autor: Herbert Schildt.</p><p>Local: Porto Alegre.</p><p>Editora: Bookman.</p><p>Ano: 2015.</p><p>ISBN: 978-8-58-260337-6 / 8582603371.</p><p>Disponível em: https://cutt.ly/d3K9eMG</p><p>Acesso em: 22/12/2022.</p><p>A linguagem Java</p><p>Acredito que você já tenha escutado muito sobre Java,</p><p>a ponto de ativar sua curiosidade para saber o motivo</p><p>dessa linguagem ser um sucesso no desenvolvimento de</p><p>softwares. Um dos motivos para esse sucesso é o fato de</p><p>poder ser executada em qualquer plataforma (Windows,</p><p>Linux, entre outros).</p><p>O aspecto da utilização de Java em</p><p>multiplataformas é muito importante,</p><p>porque os programadores não precisam ficar</p><p>preocupados em saber em qual máquina o</p><p>https://cutt.ly/d3K9eMG</p><p>https://cutt.ly/d3K9eMG</p><p>Introdução à programação orientada a objetos</p><p>11</p><p>programa será executado, uma vez que</p><p>da linguagem Java</p><p>definido como um conjunto de elementos, que pode variar</p><p>entre todos os tipos de dados – booleanos, números inteiros</p><p>e decimais ou caracteres), porém, o oposto não é permitido.</p><p>Veja um exemplo:</p><p>FIGURA 5</p><p>Meios de transporte:</p><p>diferenças na ação “andar</p><p>para frente”.</p><p>Herança</p><p>85</p><p>Na figura 6, a classe Karts herdou o método acelerar() da</p><p>classe Carro, porém, devido às regras de velocidade do</p><p>objeto Karts, a escrita interna do método acelerar() deve ser</p><p>diferente, ainda que a sua assinatura seja a mesma da classe</p><p>Carro.</p><p>Os métodos sobrescritos são vistos também em processo</p><p>de refatoramento de código. O termo refatoramento é um</p><p>tipo de reuso de código, uma das grandes vantagens da</p><p>programação orientada a objetos.</p><p>FIGURA 6</p><p>Diagrama de classes com</p><p>sobrescrita.</p><p>Fonte: elaborado pela autora.</p><p>Herança</p><p>86</p><p>Em outras palavras, a sobrescrita na programação orientada</p><p>a objetos ocorre quando a assinatura do método já foi rede-</p><p>finida na hierarquia das classes e recebe uma nova definição</p><p>em uma classe herdada.</p><p>Na chamada de um método sobrescrito, o Java considera</p><p>primeiro a classe a partir da qual o objeto foi instanciado, se</p><p>a superclasse possuir um método com a mesma assinatura,</p><p>ele será descartado.</p><p>APROFUNDE-SE</p><p>Uma abordagem para aumentar a</p><p>segurança em refatoramentos de</p><p>programas</p><p>Faça a leitura do texto, focando na seção “2.2.5 Estado da</p><p>Arte” da dissertação, para aprimorar o seu conhecimento</p><p>no uso da sobrescrita em refatoramento de código.</p><p>Disponível em: https://cutt.ly/k41Uuzg</p><p>Acesso em: 27/02/2023.</p><p>https://cutt.ly/k41Uuzg</p><p>https://cutt.ly/k41Uuzg</p><p>Herança</p><p>87</p><p>Analisando o diagrama de classes demonstrado na figura</p><p>7, veja que as classes filhas (Computadores e Impressoras)</p><p>possuem o método listarProduto() com a mesma assina-</p><p>tura da classe mãe (Produto). Na programação orientada</p><p>a objetos, a sobrescrita de método é definida devido às</p><p>regras de implementação. Então, nesse exemplo, na classe</p><p>Computadores, o método listarProduto() irá mostrar todos</p><p>os computadores somente de um tipo de memória RAM e,</p><p>na classe Impressoras, serão exibidas todas as impressoras</p><p>que usam somente a cor preta para impressão.</p><p>ASSISTA</p><p>Sobrescrita de métodos</p><p>Este vídeo demonstra como implementar os métodos</p><p>sobrescritos na programação orientada a objetos utilizando a</p><p>linguagem Java.</p><p>Acesse na plataforma o vídeo.</p><p>FIGURA 7</p><p>Sobrescrita de métodos.</p><p>Fonte: elaborado pela autora.</p><p>Herança</p><p>88</p><p>Aplicando os conceitos</p><p>de herança e sobrescrita</p><p>de métodos</p><p>Para aprender a implementar os conceitos de herança e</p><p>sobrescrita de métodos, acompanhe um exemplo de projeto</p><p>de software de uma clínica veterinária que realiza atendi-</p><p>mento a animais domésticos.</p><p>A figura 8 é um esquema de ilustração da herança por meio</p><p>da abstração do mundo real.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>De acordo com a abstração da classe de animais, é possível</p><p>construir o diagrama de classes:</p><p>FIGURA 8</p><p>Classe de animais</p><p>domésticos.</p><p>Herança</p><p>89</p><p>Agora, vamos fazer a especificação dos objetos:</p><p>Lembre-se de que a herança consiste em um mecanismo</p><p>para a extensão de uma classe existente a fim de criar uma</p><p>nova classe e extends é o comando para se aplicar a herança</p><p>(WINDER; GRAHAM, 2009).</p><p>Analisando as classes separadamente, é possível abstrair as</p><p>classes especializadas e, assim, construir um diagrama de</p><p>classes com o relacionamento de herança.</p><p>FIGURA 10</p><p>Classe Cachorro e classe</p><p>Hamster.</p><p>FIGURA 9</p><p>Diagrama de classes.</p><p>Fonte: elaborado pela autora.</p><p>Herança</p><p>90</p><p>E a aplicação dos métodos sobrescritos?</p><p>De acordo com Sintes (2002, p. 82), “sobrepor é o processo</p><p>de uma filha pegar um método que aparece na progenitora</p><p>e reescrevê-lo para mudar o comportamento do método”.</p><p>Essa técnica também é usada no refatoramento de um</p><p>método.</p><p>Voltando ao exemplo: a classe Animais é a progenitora,</p><p>e as classes Cachorro e Hamster são as classes filhas. Um</p><p>sistema de software de uma clínica veterinária necessita de</p><p>um relatório com todos os animais cadastrados. Para isso,</p><p>o diagrama de classes precisa ter uma modificação para</p><p>atender à solicitação.</p><p>FIGURA 11</p><p>Diagrama de classes com</p><p>herança.</p><p>Fonte: elaborado pela autora.</p><p>Herança</p><p>91</p><p>Nesse novo diagrama de classes, o método mostrarAnimal()</p><p>é o método sobrescrito. O que vai acontecer é que a imple-</p><p>mentação do código-fonte será feita de formas diferentes,</p><p>mas manterá a sua assinatura igual à classe Animais (super-</p><p>classe).</p><p>Veja como fica a construção desse diagrama de classe na</p><p>linguagem Java:</p><p>FIGURA 13</p><p>Classe Animal.</p><p>Fonte: elaborado pela autora.</p><p>FIGURA 12</p><p>Diagrama de classes com</p><p>sobrescrita.</p><p>Fonte: elaborado pela autora.</p><p>Herança</p><p>92</p><p>Acompanhe a explicação sobre a classe Animal:</p><p>• Linha 5: declaração da classe Animal.</p><p>• Linhas 6 e 7: declaração dos atributos nome e peso.</p><p>• Linhas 9 até 21: declaração dos métodos de encap-</p><p>sulamentos dos atributos nome e peso. A informação</p><p>{... 3 linhas} significa que o corpo do método está</p><p>oculto.</p><p>• Linhas 20 até 25: declaração e implementação do</p><p>método mostrarAnimal().</p><p>Acompanhe a explicação sobre a classe Cachorro:</p><p>• Linha 5: declaração da classe Cachorro, com a</p><p>extensão para a classe Animal através do comando</p><p>extends (aplicação do relacionamento de herança).</p><p>• Linha 8: declaração do método sobrescrita</p><p>mostrarAnimal().</p><p>• Linhas 9 e 10: exibição do corpo do método</p><p>mostrarAnimal(), em que as informações são o</p><p>FIGURA 14</p><p>Classe Cachorro.</p><p>Fonte: elaborado pela autora.</p><p>Herança</p><p>93</p><p>nome do cachorro e a sua raça. Se você comparar</p><p>com o corpo do método mostrarAnimal() da classe</p><p>Animal, note que a informação está diferente.</p><p>Acompanhe a explicação sobre a classe Hamster:</p><p>• Linha 4: declaração da classe Hamster com a</p><p>extensão para a classe Animal (aplicação do relacio-</p><p>namento de herança através do comando extends).</p><p>• Linha 5: declaração do atributo da classe Hamster.</p><p>• Linha 7: declaração do método sobrescrita</p><p>mostrarAnimal().</p><p>• Linhas 8 e 9: corpo do método sobrescrita</p><p>mostrarAnimal() com as informações de nome, campo</p><p>herdado da classe Animal, e de habitat, campo da</p><p>própria classe. Se comparar o método mostrarAnimal()</p><p>das três classes – Animal, Cachorro e Hamster –, o</p><p>corpo do método contém dados diferentes.</p><p>FIGURA 15</p><p>Classe Hamster.</p><p>Fonte: elaborado pela autora.</p><p>Herança</p><p>94</p><p>Na compilação das classes, o sistema operacional procura</p><p>primeiramente o método na classe informada. Caso não o</p><p>encontre, ele percorre a hierarquia de classes até que um</p><p>método seja encontrado (SINTES, 2002).</p><p>Aprimore as suas habilidades de implementação dos</p><p>conceitos de herança e sobrescrita em projeto Java com o</p><p>vídeo a seguir.</p><p>ASSISTA</p><p>Implementação de herança e</p><p>de sobrescrita na linguagem Java</p><p>Este vídeo demonstra como construir um projeto Java</p><p>utilizando os conceitos de herança e sobrescrita.</p><p>Acesse na plataforma o vídeo.</p><p>APROFUNDE-SE</p><p>Sobrecarga e sobreposição de métodos</p><p>em orientação a objetos</p><p>A sobrescrita de métodos é uma das técnicas de</p><p>aprimoramento de reuso de código. Leia o artigo para</p><p>entender mais sobre como analisar e construir esses métodos.</p><p>Disponível em: https://cutt.ly/c41OIrS</p><p>Acesso em: 10/03/2023.</p><p>https://cutt.ly/c41OIrS</p><p>Herança</p><p>95</p><p>A herança e a sobrescrita são conceitos importantes da</p><p>programação orientada a objetos e podem ser utilizados</p><p>para atender a necessidades específicas no desenvolvi-</p><p>mento de softwares.</p><p>REFLITA</p><p>Vendas pela internet</p><p>Os brasileiros estão comprando mais produtos</p><p>pela internet. De acordo com o levantamento</p><p>E-Commerce Trends 2023, realizado pelo Octadesk</p><p>em parceria com a Opinion Box, 61% dos brasileiros</p><p>compram mais pela internet do que em lojas</p><p>físicas. Isso mostra que as compras online são um</p><p>hábito que chegou para ficar (COUTO, 2023).</p><p>O que pode e, provavelmente, irá acontecer é que muitos empreendedores vão enxergar</p><p>oportunidades para expandir seus negócios online e unir o e-commerce às suas estratégias de</p><p>vendas. Em decorrência disso, o mercado digital ficará ainda mais competitivo.</p><p>Entre as principais tendências do e-commerce para 2023 estão o omnichannel, o voice</p><p>commerce, os preços dinâmicos, o cashback e a Inteligência Artificial. Estar adaptado ao futuro</p><p>do e-commerce por meio dessas tendências do varejo pode fazer a diferença na hora de se</p><p>destacar da concorrência (COUTO, 2023).</p><p>Nessa perspectiva, como construir uma vitrine de produtos para um e-commerce usando os</p><p>conceitos de herança e sobrescrita? Reflita se essas técnicas permitem um refatoramento de</p><p>código a fim elaborar um sistema com mais facilidade.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>Considerações finais</p><p>Você chegou ao final de mais uma unidade! Aqui, você teve</p><p>a oportunidade de conhecer o relacionamento de herança</p><p>entre as classes de objetos; a sua importância na construção</p><p>de um sistema de informação baseada nos paradigmas da</p><p>orientação a objetos; os conceitos de sobrescrita de métodos;</p><p>e as vantagens de usar essas técnicas na elaboração de</p><p>sistemas de computador. Como também aprendeu a fazer</p><p>a implementação desses conceitos de herança e sobrescrita</p><p>de métodos usando a linguagem Java.</p><p>Referências</p><p>BARNES, David J.; KÖLLING, Michael. Programação orientada a objetos</p><p>com Java: uma introdução prática utilizando o BlueJ. São Paulo: Pearson,</p><p>2004.</p><p>BORATTI, Isaias C. Programação orientada a objetos em Java.</p><p>Florianópolis: Visual Books, 2007.</p><p>COUTO, Marcela. Quais são as principais tendência do e-commerce para</p><p>2023? Nuvemshop, fev. 2023. Disponível em: https://www.nuvemshop.</p><p>com.br/blog/tendencias-do-ecommerce/ Acesso em: 28 fev. 2023.</p><p>FURGERI, Sérgio. Java 8: ensino didático: desenvolvimento e</p><p>implementação de aplicações. São Paulo: Érica, 2015. Disponível em:</p><p>https://integrada.minhabiblioteca.com.br/#/books/9788536519340/</p><p>Acesso em: 24 fev. 2023.</p><p>GUEDES, Gilleanes T. A. UML 2: uma abordagem prática. 3. ed. São Paulo:</p><p>Novatec, 2018.</p><p>SINTES, Anthony. Aprenda programação orientada a objetos em 21</p><p>dias. São Paulo: Pearson Education do Brasil, 2002.</p><p>WINDER, Russel; GRAHAM, Roberts. Desenvolvendo software em Java.</p><p>3. ed. Rio de Janeiro: LTC, 2009.</p><p>https://www.nuvemshop.com.br/blog/tendencias-do-ecommerce/</p><p>https://www.nuvemshop.com.br/blog/tendencias-do-ecommerce/</p><p>Polimorfismo</p><p>98</p><p>Objetivos de aprendizagem</p><p>Compreender o conceito de polimorfismo e suas derivações</p><p>e ser capaz de aplicá-lo na linguagem Java.</p><p>Tópicos de estudo</p><p>• Polimorfismo;</p><p>• Polimorfismo universal;</p><p>• Polimorfismo ad hoc.</p><p>Iniciando os estudos</p><p>Nesta unidade, você terá a oportunidade de:</p><p>• aprender o conceito e a implementação do poli-</p><p>morfismo na programação orientada a objetos utili-</p><p>zando a linguagem Java;</p><p>• conhecer os tipos de polimorfismo (universal e</p><p>ad-hoc);</p><p>• conhecer e aplicar os polimorfismos inclusão e</p><p>paramétrico;</p><p>• conhecer e aplicar os polimorfismos sobrecarga e</p><p>coerção.</p><p>Desejo a você um bom estudo!</p><p>Polimorfismo</p><p>99</p><p>Polimorfismo</p><p>Neste tópico, você vai conhecer o significado do conceito de</p><p>polimorfismo e os seus tipos (universal e ad hoc) na progra-</p><p>mação orientada a objetos, utilizando a linguagem Java de</p><p>uma forma prática e objetiva.</p><p>Para melhor contextualizar o seu aprendizado, considere</p><p>que a base da orientação a objetos é definida em quatro</p><p>pilares principais, como ilustra a figura 1:</p><p>A</p><p>b</p><p>st</p><p>ra</p><p>çã</p><p>o</p><p>E</p><p>n</p><p>ca</p><p>p</p><p>su</p><p>la</p><p>m</p><p>en</p><p>to</p><p>H</p><p>er</p><p>an</p><p>ça</p><p>P</p><p>ol</p><p>im</p><p>or</p><p>fi</p><p>sm</p><p>o</p><p>01 02 03 04</p><p>1. Abstração: o princípio da abstração é a capacidade</p><p>de abstrair a complexidade de um sistema e se</p><p>basear em partes desse sistema.</p><p>FIGURA 1</p><p>Os quatro pilares da</p><p>orientação a objetos.</p><p>Polimorfismo</p><p>100</p><p>2. Encapsulamento: é a forma de construir o objeto</p><p>de modo a proteger o acesso direto a seus dados</p><p>privados.</p><p>3. Herança: é quando uma classe herda os atributos e</p><p>métodos de outra classe, usada para reúso de código;</p><p>4. Polimorfismo: quando a ação de um objeto é invo-</p><p>cada de diversas formas.</p><p>É importante compreender esses pilares, pois isso lhe permi-</p><p>tirá trabalhar com qualquer linguagem orientada a objetos.</p><p>Note que o polimorfismo é o quarto pilar.</p><p>O que é polimorfismo?</p><p>Polimorfismo, como o próprio termo indica, é a possibili-</p><p>dade de um objeto ser referenciado de várias formas, o</p><p>que não significa que ele se transformará em um novo</p><p>objeto (MUNIZ et al., 2021). De acordo com Sintes (2002), o</p><p>polimorfismo permite que um único nome de classe ou de</p><p>método represente um código diferente e assuma muitos</p><p>comportamentos distintos.</p><p>Em particular, o polimorfismo permite escrever</p><p>programas que processam objetos que compartilham</p><p>a mesma superclasse, direta ou indiretamente, como</p><p>se todos fossem objetos da superclasse, simplificando a</p><p>programação (DEITEL; DEITEL, 2017, p. 312).</p><p>Com o polimorfismo, é possível projetar e implementar</p><p>sistemas que são facilmente aplicáveis. Você verá com mais</p><p>detalhes que as novas classes são inseridas com pouca</p><p>modificação de acordo com o programa geral, mas, para</p><p>isso, elas devem permanecer na hierarquia de herança.</p><p>Segundo Deitel e Deitel (2017), as novas classes simples-</p><p>mente se “encaixam”.</p><p>Polimorfismo</p><p>101</p><p>Os tipos de polimorfismo são reconhecidos nas trocas de</p><p>mensagens entre vários objetos. Na linguagem Java, usada</p><p>na programação orientada a objetos, são usados apenas</p><p>dois tipos: universal e ad hoc.</p><p>De qualquer forma, esses dois tipos subdividem-se em</p><p>outros dois, como você pode acompanhar no infográfico.</p><p>Pela forma como os objetos das classes se comunicam, é</p><p>possível identificar qual é o tipo de polimorfismo aplicado.</p><p>APROFUNDE-SE</p><p>Polimorfismo (exemplos em Java)</p><p>Neste vídeo, você terá a oportunidade de conhecer como é a</p><p>abordagem de todos os tipos de polimorfismo na orientação a</p><p>objetos, com exemplos simples na linguagem Java.</p><p>Disponível em: https://youtu.be/lXSdxd2vipw</p><p>Acesso em: 12/03/2023.</p><p>https://youtu.be/lXSdxd2vipw</p><p>https://youtu.be/lXSdxd2vipw</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>Universal</p><p>É o tipo mais comum e ocorre quando a</p><p>mesma chamada de método pode, em</p><p>diversos momentos, invocar diferentes</p><p>métodos. Possui duas variações: paramétrico</p><p>e inclusão.</p><p>É o tipo mais comum e ocorre quando a mesma</p><p>chamada de método pode, em diversos</p><p>momentos, invocar diferentes métodos. Possui</p><p>duas variações: paramétrico e inclusão.</p><p>Universal</p><p>Paramétrico</p><p>Corresponde às subclasses que fornecem</p><p>diferentes implementações de um método</p><p>da superclasse. Esse tipo é o mais usado</p><p>na programação orientada a objetos.</p><p>Inclusão</p><p>adc hoc</p><p>É uma forma contada de polimor�smo. Sua</p><p>implementação é especí�ca e possui duas</p><p>variações: coerção e sobrecarga.</p><p>adc hoc</p><p>É a implementação de um método de acordo</p><p>com a quantidade ou tipos de parâmetros,</p><p>porém, as assinaturas são iguais.</p><p>sobrecarga</p><p>Quando ocorre a conversão do método de</p><p>forma implícita ou explícita.</p><p>TIPOS E SUBTIPOS DE</p><p>POLI</p><p>MOR</p><p>FIS</p><p>MO</p><p>POLI</p><p>MOR</p><p>FIS</p><p>MO</p><p>Coerção</p><p>INFOGRÁFICO 1</p><p>Fonte: adaptado de Igor (2017).</p><p>Polimorfismo</p><p>103</p><p>O Java permite que o polimorfismo controle todas as formas</p><p>de uma maneira simples, sem preocupação com cada objeto</p><p>específico.</p><p>Para que você tenha uma melhor compreensão, acom-</p><p>panhe o exemplo a seguir.</p><p>Exemplo: aumento no preço dos imóveis</p><p>Imagine que você é uma pessoa programadora de uma</p><p>imobiliária, e o corretor solicitou uma manutenção do</p><p>sistema para simular o cálculo de preços dos imóveis para</p><p>venda. Esse cálculo se refere ao aumento mensal de acordo</p><p>com uma tabela padrão. No momento, o cálculo é feito</p><p>manualmente, sendo essa uma rotina comum no setor</p><p>imobiliário.</p><p>Suponha que o aumento será de 5% para casas térreas, 4,3%</p><p>para apartamentos e 6% para prédios comerciais. Analise o</p><p>diagrama de classes que representa essa situação.</p><p>FIGURA 2</p><p>Cálculo de preços dos</p><p>imóveis para venda.</p><p>Polimorfismo</p><p>104</p><p>O diagrama de classe traz uma visão geral de como as classes</p><p>estão se comportando. Embora todos os objetos sejam</p><p>imóveis, o aumento de cada objeto terá que ser calculado de</p><p>uma forma específica, pois os valores são diferentes. Assim,</p><p>a superclasse Imovel não tem como resolver essa questão,</p><p>já que cada objeto</p><p>tem a sua especialidade. Para solucionar</p><p>o problema, as subclasses Casa, Apartamento e Comercial</p><p>terão o seu próprio método calcularAumento. Nesse caso,</p><p>onde está aplicado o polimorfismo? Ele se justifica pelo fato</p><p>de as classes terem o mesmo nome de método, mas sua</p><p>implementação ser diferente entre os objetos do sistema.</p><p>O polimorfismo só pode ser aplicado em uma hierarquia de</p><p>classes, ou seja, através do relacionamento de herança.</p><p>FIGURA 3</p><p>Diagrama de classes:</p><p>imóveis.</p><p>Fonte: elaborado pela autora.</p><p>Polimorfismo</p><p>105</p><p>REFLITA</p><p>Polimorfismo “em ação”</p><p>O Aeroporto Campo de Marte, localizado</p><p>na zona norte da cidade de São Paulo,</p><p>é o maior e mais importante aeroporto</p><p>de aviação geral do Brasil, além de</p><p>contar com infraestrutura para oferecer</p><p>serviços de fretamento de aeronaves,</p><p>hangaragem e manutenção.</p><p>Inaugurado em 1920, foi o primeiro terminal aeroportuário de São Paulo.</p><p>Atualmente não possui linhas comerciais regulares, sendo utilizado pela aviação</p><p>executiva para voos em aviões e helicópteros de pequeno porte.</p><p>A infraestrutura é composta por 24 hangares, além de um terminal de passageiros,</p><p>escolas de aviação, oficinas de manutenção, estacionamento e restaurantes. Sua</p><p>localização é privilegiada, com fácil acesso à Marginal Tietê, uma das principais vias de</p><p>circulação da capital paulista.</p><p>Os transfers aéreos configuram o tipo de serviço mais utilizado partindo do</p><p>Aeroporto Campo de Marte. Dentre as rotas, destacamos os itinerários entre os</p><p>200 helipontos e para outros 6 aeroportos na região metropolitana da capital</p><p>paulista. No mais, voos intramunicipais também são bastante requisitados. Voos</p><p>para o interior do estado, litoral norte e litoral sul carioca, como Paraty e Angra</p><p>dos Reis, configuram a lista de destinos mais desejados. As aeronaves disponíveis</p><p>para fretamento são aviões turboélices, jatos superleves e jatos leves. Também é</p><p>possível realizar operações em helicópteros biturbina, capazes de operar em climas</p><p>adversos (FLAPPER, c2020, adaptado).</p><p>Imagine que o aeroporto tenha um sistema de informação que gerencia os itinerários entre</p><p>os helipontos. Como o serviço de táxi aéreo cresceu nos últimos anos, esse sistema precisa</p><p>de um ajuste para atender a esse serviço. Reflita sobre como o polimorfismo pode contribuir</p><p>para a melhoria desse sistema de gerenciamento de voos de táxi aéreo (apenas para o uso do</p><p>helicóptero).</p><p>Polimorfismo</p><p>106</p><p>Pratique, no vídeo, os seus conhecimentos de polimorfismo</p><p>com a linguagem Java.</p><p>ASSISTA</p><p>Polimorfismo em Java</p><p>O vídeo mostra como implementar os conceitos de</p><p>polimorfismo em um projeto na linguagem Java.</p><p>Acesse na plataforma o vídeo.</p><p>Assim, o polimorfismo na linguagem Java tem quatro formas</p><p>comuns que servem como base para a aplicação da técnica.</p><p>São elas: inclusão, paramétrico, coerção e sobrecarga.</p><p>Polimorfismo</p><p>107</p><p>Polimorfismo universal</p><p>Você sabia que o polimorfismo universal tem dois tipos? O</p><p>tipo de inclusão e o tipo paramétrico. Neste tópico, você</p><p>vai conhecer como aplicar esses tipos de polimorfismo na</p><p>programação orientada a objetos através da linguagem Java.</p><p>Para início de conversa...</p><p>Lembre-se de que o termo polimorfismo significa muitas</p><p>formas. De acordo com Muniz et al. (2021), essa técnica</p><p>permite que um único nome de classe ou de método repre-</p><p>sente vários códigos diferentes. Claro que, assim, o nome</p><p>pode assumir várias formas e diversos comportamentos.</p><p>Esses comportamentos diferentes surgem em nosso dia</p><p>a dia com ações simples, por exemplo, fechar uma porta,</p><p>fechar uma janela, fechar um programa, fechar um rela-</p><p>tório... Assim, o termo “fechar” pode ser aplicado em diversos</p><p>objetos no mundo real. Cada objeto identifica a ação “fechar”</p><p>de sua própria maneira.</p><p>Polimorfismo de inclusão</p><p>O polimorfismo de inclusão é uma característica das lingua-</p><p>gens orientadas a objetos, pois reduz a quantidade de</p><p>código. Esse tipo de polimorfismo permite que você trate</p><p>objetos relacionados genericamente (SINTES, 2002). A ideia,</p><p>assim, é possibilitar a escrita de um método que manipule</p><p>todos os tipos de objetos. Observe o exemplo na figura 4:</p><p>Polimorfismo</p><p>108</p><p>Observe que as linhas 3 até 6 representam a construção do</p><p>método fechar, que pertence à classe Acessos.</p><p>Agora, acompanhe o resultado na figura 5:</p><p>Agora, você vai fazer a leitura das linhas para compreender</p><p>como se implementa o polimorfismo de inclusão.</p><p>FIGURA 4</p><p>Superclasse Acessos.</p><p>Fonte: elaborado pela autora.</p><p>FIGURA 5</p><p>Subclasses: Porta, Janela e</p><p>Portao.</p><p>Fonte: elaborado pela autora.</p><p>Polimorfismo</p><p>109</p><p>• Linhas 1 até 5: construção da classe Porta (subclasse)</p><p>com extensão à classe Acessos (superclasse). Na linha</p><p>2, está declarado o método fechar da classe Porta.</p><p>• Linhas 6 até 9: declaração da classe Janela</p><p>(subclasse) com extensão à classe Acessos (super-</p><p>classe). Na linha 7, consta a declaração do método</p><p>fechar da classe Janela.</p><p>• Linhas 11 até 15: declaração da classe Portao (classe-</p><p>-filha) com herança da classe Acessos (classe-mãe).</p><p>Na linha 12, consta a declaração do método fechar da</p><p>classe Portao.</p><p>Imagine que esse exemplo (exposto na figura 5) sirva para um</p><p>aplicativo de uma casa inteligente. A classe Acessos precisa</p><p>incluir a ação de fechar todos os acessos da casa, ou seja,</p><p>fechar a porta, a janela e o portão. A programação orientada</p><p>a objetos, utilizando o polimorfismo de inclusão, permite</p><p>que, no método fechar da classe Acessos, sejam incluídos</p><p>os métodos fechar das classes Porta, Janela e Portao. Essa</p><p>técnica é denominada polimorfismo de inclusão. Veja o</p><p>resultado na figura 6:</p><p>FIGURA 6</p><p>Classe Acessos com os</p><p>métodos de polimorfismo</p><p>de inclusão.</p><p>Fonte: elaborado pela autora.</p><p>Polimorfismo</p><p>110</p><p>• Linhas 3 até 5: criação dos objetos com a instância</p><p>das subclasses.</p><p>• Linhas 10 até 12: invocação dos métodos fechar das</p><p>subclasses incluídas no método fechar da super-</p><p>classe.</p><p>Lembre-se de que o polimorfismo de inclusão é permitido</p><p>apenas em linguagens orientadas a objetos, portanto, a</p><p>linguagem Java garante o seu uso.</p><p>Polimorfismo paramétrico</p><p>O polimorfismo paramétrico afeta os métodos da classe,</p><p>ou seja, permite que você crie métodos que referenciam os</p><p>tipos genéricos por meio de sua codificação (SINTES, 2002).</p><p>Você deve estar se perguntando: como se aplica o polimor-</p><p>fismo paramétrico na programação orientada a objetos?</p><p>De acordo com Sintes (2002), o polimorfismo paramétrico</p><p>permite que você programe métodos genéricos retirando</p><p>os parâmetros até o momento da execução.</p><p>Veja um método de exemplo:</p><p>int somar(int x, int y)</p><p>O método somar recebe dois argumentos inteiros no parâ-</p><p>metro e tem como objetivo retornar a soma. Você não pode</p><p>passar dois números decimais nesse método, pois isso retor-</p><p>nará um erro em tempo de compilação. Como você resol-</p><p>veria? Pela lógica, criando o método específico:</p><p>Compilação: o compilador</p><p>é um programa capaz de</p><p>traduzir o código-fonte de</p><p>um software, escrito em</p><p>uma linguagem de alto</p><p>nível, para uma espécie de</p><p>programa similar, escrito</p><p>em outra linguagem</p><p>semanticamente</p><p>equivalente, mas</p><p>capaz de ser lida pelos</p><p>processadores.</p><p>Polimorfismo</p><p>111</p><p>double somar(double x, double y)</p><p>E se precisar somar números de uma matriz? Você também</p><p>vai criar mais um método específico. A sua classe terá no</p><p>final mais código, mais propenso ao erro e à necessidade</p><p>de manutenção. Nesse momento, aplica-se o polimorfismo</p><p>paramétrico.</p><p>Veja como é escrito o método paramétrico:</p><p>somar([T] x, [T] y) : [T]</p><p>[T] é a representação de um argumento do tipo de dado</p><p>primitivo que deve ser o mesmo para x e y, cujo objetivo é</p><p>especificar o tipo do parâmetro. Sintes (2002) explica que,</p><p>declarando o método dessa forma, adia-se a definição do</p><p>tipo de argumento até a sua execução.</p><p>A figura 7 representa uma situação clássica nos dias atuais.</p><p>A maioria dos sistemas de informação necessita de um</p><p>cadastro de pessoas (usuário, cliente, paciente etc.), e o poli-</p><p>FIGURA 7</p><p>Sistema de cadastro de</p><p>usuários: aplicando o</p><p>polimorfismo paramétrico.</p><p>Polimorfismo</p><p>112</p><p>morfismo paramétrico otimiza esse processo muito facil-</p><p>mente.</p><p>Chamadas de método em Java são polimórficas. A</p><p>mesma chamada de método pode, em momentos</p><p>diferentes, invocar diferentes métodos, dependendo</p><p>do tipo dinâmico da variável utilizada para fazer essa</p><p>chamada (BARNES; KÖLLING, 2004, p. 245).</p><p>Veja, na figura 8, um exemplo prático usando a linguagem</p><p>Java:</p><p>• Linha 2: declaração da classe de objetos com a</p><p>identificação T como template da classe. A letra T</p><p>representa qualquer tipo primitivo de dados que</p><p>venha a ser utilizado na execução da classe ou do</p><p>método. Em Java, o polimorfismo paramétrico cria</p><p>uma classe template (modelo) para ser invocada em</p><p>qualquer tipo de dados no método main, ou seja, na</p><p>classe principal.</p><p>FIGURA 8</p><p>Classe Pessoa com método</p><p>polimórfico paramétrico.</p><p>Fonte: elaborado pela autora.</p><p>Polimorfismo</p><p>113</p><p>• Linha 3: declaração do atributo (people) com a iden-</p><p>tificação T indicando qualquer tipo de dados para</p><p>esse atributo.</p><p>• Linha 4: declaração do método parametrizado (T p).</p><p>A identificação T informa que se pode usar qualquer</p><p>tipo de dados como parâmetro do método.</p><p>• Linhas 5 e 8: referem-se ao corpo do método para-</p><p>metrizado.</p><p>• Linha 7: outro método parametrizado, em que o T</p><p>indica o retorno de qualquer tipo de dados para o</p><p>uso desse método.</p><p>Essa classe tem como objetivo demonstrar a aplicação da</p><p>classe Pessoa (template) usando os recursos de polimor-</p><p>fismo paramétrico. Você deve notar que, no momento da</p><p>declaração do objeto (nome e rm), em sua instanciação, é</p><p>indicado o tipo de dados que será usado em sua execução.</p><p>FIGURA 9</p><p>Classe principal:</p><p>polimorfismo paramétrico.</p><p>Fonte: elaborado pela autora.</p><p>Polimorfismo</p><p>114</p><p>• Linhas 3 e 10: criação dos objetos (nome e rm) e</p><p>sua instanciação. O tipo de dados que será usado é</p><p>String para nome e Integer para rm.</p><p>• Linhas 6 até 8: invocação do método cadPessoa de</p><p>acordo com o objeto nome.</p><p>• Linhas 11 até 13: invocação do método cadPessoa de</p><p>acordo com o objeto rm.</p><p>Acompanhe o vídeo para praticar os seus conhecimentos de</p><p>polimorfismo universal dos tipos inclusão e paramétrico na</p><p>linguagem Java.</p><p>ASSISTA</p><p>Polimorfismo universal</p><p>O vídeo ensina a implementar os conceitos de polimorfismo</p><p>universal em um projeto na linguagem Java.</p><p>Acesse na plataforma o vídeo.</p><p>Polimorfismo</p><p>115</p><p>Polimorfismo ad hoc</p><p>O polimorfismo ad hoc é uma forma limitada de polimor-</p><p>fismo, e é usado quando você deseja definir algo específico.</p><p>Você vai conhecer os seus dois tipos, sobrecarga e coerção, e</p><p>também a sua implementação na linguagem Java.</p><p>Sobrecarga</p><p>O polimorfismo de sobrecarga ocorre quando há vários</p><p>métodos com o mesmo nome e com uma lista de argu-</p><p>mentos (parâmetros) diferentes (BARNES; KÖLLING, 2004),</p><p>mas o tipo de retorno deve ser o mesmo. Esse método</p><p>também é conhecido como polimorfismo estático e pode</p><p>ser declarado na subclasse como qualquer outro método,</p><p>desde que mantenha as características de uma sobrecarga.</p><p>O programa principal vai chamar o método de acordo com</p><p>a declaração do objeto, decisão que é tomada apenas no</p><p>tempo de execução (SILVA, 2019).</p><p>De acordo com Winder e Roberts (2009), métodos privados</p><p>não podem ser sobrecarregados. Se houver um método</p><p>privado na superclasse, no momento da sobrecarga, sua</p><p>visibilidade é modificada nas subclasses.</p><p>Polimorfismo</p><p>116</p><p>Para exemplificar o uso de sobrecarga, você pode observar</p><p>a calculadora da figura 10. O botão de adição (+) deve aceitar</p><p>números inteiros para realizar a operação matemática de</p><p>soma.</p><p>A classe Calculadora contém dois métodos com o nome</p><p>somar e retorna um valor do tipo inteiro. Veja, na figura 12,</p><p>como é implementado o código em linguagem Java para</p><p>uma classe Calculadora.</p><p>FIGURA 10</p><p>Polimorfismo: uso da</p><p>calculadora.</p><p>FIGURA 11</p><p>Classe Calculadora.</p><p>Fonte: elaborado pela autora.</p><p>Polimorfismo</p><p>117</p><p>• Linha 1: declaração da classe Calculadora.</p><p>• Linhas 2 e 3: declaração dos atributos a e b do tipo</p><p>inteiro.</p><p>• Linhas 4 e 7: declaração do método de sobrecarga</p><p>somar, porém a lista de parâmetros é diferente.</p><p>• Linhas 5 e 8: corpo do método de sobrecarga somar</p><p>que retornará o resultado da operação de adição.</p><p>A sobrecarga de métodos é utilizada para organizar</p><p>métodos que realizam a mesma tarefa ou tarefas</p><p>semelhantes, mas com números diferentes de</p><p>argumentos. O Java vai determinar qual é o método</p><p>correto quando for chamado, a partir dos parâmetros</p><p>(FÉLIX, 2016, p. 43).</p><p>O polimorfismo de sobrecarga é útil quando um método</p><p>não é definido por seus argumentos, e sim pela sua especi-</p><p>ficação no momento em que é chamado em sua execução.</p><p>FIGURA 12</p><p>Classe Calculadora.</p><p>Fonte: elaborado pela autora.</p><p>Polimorfismo</p><p>118</p><p>Coerção</p><p>Você sabia que, em linguagens de programação, é comum</p><p>atribuir um valor de um determinado tipo para uma variável</p><p>de um tipo diferente? Pois é, isso ocorre em polimorfismo</p><p>de coerção.</p><p>O polimorfismo ad hoc do tipo coerção (casting) é conhe-</p><p>cido também como sobreposição de métodos polimór-</p><p>ficos. A coerção é uma forma de contornar a rigidez dos</p><p>tipos monomórficos. De acordo com Muniz et al. (2021), a</p><p>linguagem Java busca um meio-termo nesse contexto,</p><p>em que se admite a realização de coerções para tipos mais</p><p>amplos.</p><p>Deitel e Deitel (2017) afirmam que a linguagem Java embute</p><p>a sobrecarga em operadores e em subprogramas de suas</p><p>bibliotecas.</p><p>Pensando nisso, proponho a você uma melhoria na classe</p><p>Calculadora. Para exemplificar o uso correto da coerção, o</p><p>botão de adição (+) deve aceitar números inteiros e números</p><p>reais para realizar a operação matemática de soma. Para</p><p>solucionar o problema de realizar a soma com os valores</p><p>decimais sem precisar criar novos métodos, é feita a coerção</p><p>do método. Veja como você pode usar a linguagem Java</p><p>para resolução desse problema:</p><p>Polimorfismo</p><p>119</p><p>• Linha 2: Criação do objeto e instanciação da classe</p><p>Calculadora.</p><p>• Linha 4: O comando (double) está aplicando a</p><p>coerção. Veja que no momento da execução do</p><p>método, houve a conversão do tipo de dados de</p><p>números inteiros para números decimais.</p><p>FIGURA 13</p><p>Coerção do método.</p><p>Fonte: elaborado pela autora.</p><p>APROFUNDE-SE</p><p>Polimorfismo ad hoc – desenvolvimento</p><p>orientado a tipos</p><p>Assista ao vídeo para aprender a implementar o polimorfismo</p><p>ad hoc em outras linguagens.</p><p>Disponível em: https://youtu.be/DbEOrCD_fpQ</p><p>Acesso em: 17/03/2023.</p><p>https://youtu.be/DbEOrCD_fpQ</p><p>https://youtu.be/DbEOrCD_fpQ</p><p>Polimorfismo</p><p>120</p><p>Importante: a coerção deve ser usada em</p><p>casos extremamente necessários, pois há</p><p>grande probabilidade de ocorrerem erros.</p><p>No vídeo, você vai praticar os seus conhecimentos de</p><p>polimorfismo ad hoc dos tipos sobrecarga e coerção na</p><p>linguagem Java. Acompanhe!</p><p>ASSISTA</p><p>Polimorfismo ad hoc</p><p>O vídeo mostra como implementar os conceitos de</p><p>polimorfismo ad hoc em um projeto na linguagem Java.</p><p>Acesse na plataforma o vídeo.</p><p>Considerações finais</p><p>Você chegou ao final desta unidade. Aqui, você aprendeu</p><p>os conceitos de polimorfismo de acordo com a orientação</p><p>a objetos, além da implementação dos tipos de polimor-</p><p>fismo – universal e ad hoc – de forma prática, utilizando a</p><p>linguagem Java por meio de sugestões encontradas no</p><p>cotidiano.</p><p>Referências</p><p>BARNES, David J.; KÖLLING, Michael. Programação orientada a objetos</p><p>com Java: uma introdução prática utilizando o BlueJ. São Paulo: Pearson</p><p>Prentice Hall, 2004.</p><p>DEITEL, Harvey. M; DEITEL, Paul. J. Java: como programar. São Paulo:</p><p>Pearson Education do Brasil, 2017.</p><p>FÉLIX, Rafael. Programação orientada a objetos. São Paulo: Pearson</p><p>Education do Brasil, 2016.</p><p>FLAPPER. Táxi aéreo no Campo de Marte. Flapper, c2020. Disponível</p><p>em https://flyflapper.com/stories/pt-br/taxi-aereo-no-campo-de-marte/</p><p>Acesso: 23 mar. 2023.</p><p>IGOR, Victor. Conheça 6 tipos de polimorfismo. Medium, 16 jan. 2017.</p><p>Disponível em: https://medium.com/red-ventures-br-tech/6-tipos-de-</p><p>polimorfismo-7787080e8857 Acesso em: 27 mar. 2023.</p><p>MUNIZ, Antonio et al. Jornada Java: unindo práticas para construção</p><p>de código limpo e implantação que entregue valor ao cliente.</p><p>Rio de</p><p>Janeiro: Brasport, 2021.</p><p>SILVA, Fabricio M. da; LEITE, Márcia C. D.; OLIVEIRA, Diego B. de.</p><p>Paradigmas de programação. Porto Alegre: SAGAH, 2019. E-book.</p><p>Disponível em: https://integrada.minhabiblioteca.com.br/#/</p><p>books/9788533500426/ Acesso em: 20 mar. 2023.</p><p>SINTES, Anthony. Aprenda programação orientada a objetos em 21 dias.</p><p>São Paulo: Pearson Education do Brasil, 2002.</p><p>WINDER, Russel; ROBERTS, Graham. Desenvolvendo software em</p><p>Java. 3. ed. Rio de Janeiro: LTC, 2009.</p><p>https://flyflapper.com/stories/pt-br/taxi-aereo-no-campo-de-marte/</p><p>https://medium.com/red-ventures-br-tech/6-tipos-de-polimorfismo-7787080e8857</p><p>https://medium.com/red-ventures-br-tech/6-tipos-de-polimorfismo-7787080e8857</p><p>https://integrada.minhabiblioteca.com.br/#/books/9788533500426/</p><p>https://integrada.minhabiblioteca.com.br/#/books/9788533500426/</p><p>123</p><p>Classes abstratas e interfaces</p><p>Objetivo de aprendizagem</p><p>Compreender o conceito de classe abstrata e método</p><p>abstrato; ser capaz de implementar classes e métodos</p><p>abstratos em linguagem Java; compreender o conceito de</p><p>interface e múltipla herança; e aprender a implementar</p><p>interface e múltipla herança em Java.</p><p>Tópicos de estudo</p><p>• Classe e método abstrato;</p><p>• Interface e múltipla herança;</p><p>• Aplicações práticas de classes abstratas e interfaces.</p><p>Iniciando os estudos</p><p>Nesta unidade, você terá a oportunidade de aprender sobre:</p><p>• Conceito de classe e método abstrato e sua imple-</p><p>mentação com a linguagem Java;</p><p>• Conceito de interface, funcionalidade de múltipla</p><p>herança e implementação com a linguagem Java;</p><p>• Aplicação prática dos conceitos de classe abstrata</p><p>e interfaces, com implementação de um exemplo</p><p>com esses conceitos na linguagem Java.</p><p>Bons estudos!</p><p>Classes abstratas e interfaces</p><p>124</p><p>Classe e método abstrato</p><p>Você sabia que a abstração aplicada em programação</p><p>orientada a objetos serve para manter uma “visão total” em</p><p>sistemas complexos? De acordo com Deitel e Deitel (2017,</p><p>p. 309), uma classe abstrata ocorre quando se modela uma</p><p>classe para um tipo de objeto, mas sem a intenção de criar</p><p>um objeto próprio. Segundo Felix (2016), as classes abstratas</p><p>estão relacionadas ao polimorfismo, pois permitem ao</p><p>programador utilizar objetos disponíveis no sistema, sem</p><p>se preocupar com suas complexidades internas. A criação</p><p>de classes abstratas na programação orientada a objetos</p><p>tem como característica definir um tipo de classe que será</p><p>seguido pelas classes herdeiras (SILVA; LEITE; OLIVEIRA,</p><p>2019).</p><p>Acompanhe algumas premissas sobre as classes abstratas:</p><p>• “A classe abstrata é uma classe que não permite a</p><p>geração de instâncias a partir dela” (FURGERI, 2015,</p><p>p. 129), ou seja, não permite que sejam criados</p><p>objetos.</p><p>• Uma classe abstrata é muito parecida com qualquer</p><p>outra definição de classe, devido a seus comporta-</p><p>mentos e atributos serem idênticos a uma classe</p><p>normal (SINTES, 2002).</p><p>• Uma classe abstrata serve como modelo para uma</p><p>nova classe.</p><p>• Uma classe concreta é a classe que instancia um</p><p>objeto, ou seja, a classe que cria um objeto na</p><p>programação orientada.</p><p>Classes abstratas e interfaces</p><p>125</p><p>• O objetivo principal de uma classe abstrata é servir</p><p>apenas como uma superclasse apropriada para ter</p><p>os atributos comuns de que as subclasses neces-</p><p>sitam (FELIX, 2017, p. 45).</p><p>Veja um exemplo no mundo real:</p><p>A figura 1 representa o serviço de banho e tosa oferecido</p><p>nos pet shops em todas as cidades brasileiras. Segundo um</p><p>levantamento do Instituto Pet Brasil, em 2021, houve um</p><p>crescimento de 48% no setor, e as empresas de tecnologia</p><p>estão de olho neste mercado. Nesse cenário, imagine um</p><p>aplicativo móvel que gerencia o agendamento do serviço</p><p>de tosa em diversos pet shops.</p><p>O diagrama de classe, presente na figura 2, representa quais</p><p>as classes que irão compor o sistema e como se comportam.</p><p>FIGURA 1</p><p>Serviço de banho e tosa</p><p>em pet shops: aplicando</p><p>classes abstratas.</p><p>Classes abstratas e interfaces</p><p>126</p><p>Você deve notar que o objeto da regra de negócios é o</p><p>cachorro, representado pela superclasse. Nessa classe,</p><p>constam todos os atributos comuns encontrados em qual-</p><p>quer raça desse animal. Nas subclasses, consta o método</p><p>tipoTosa devido a cada raça ter um tipo de tosa diferente.</p><p>Como a linguagem Java implementa esse conceito na</p><p>programação orientada a objetos?</p><p>Para declarar uma classe abstrata, é usada a palavra-chave</p><p>abstract (FELIX, 2016, p. 45).</p><p>FIGURA 2</p><p>Diagrama de classe que</p><p>representa o serviço de tosa.</p><p>Fonte: elaborado pela autora.</p><p>FIGURA 3</p><p>Classe Java abstrata.</p><p>Fonte: elaborado pela autora.</p><p>Classes abstratas e interfaces</p><p>127</p><p>Entenda:</p><p>Linha 2: declaração da classe abstrata na linguagem Java;</p><p>Linhas 3 até 5: declaração dos atributos próprios da classe</p><p>Cachorro.</p><p>Aqui, vai uma dica muito importante para</p><p>esse tema: no mundo real, existem apenas</p><p>objetos, portanto, uma classe abstrata serve</p><p>para classificar um grupo de objetos.</p><p>Métodos abstratos</p><p>Segundo Felix (2016), é possível criar métodos abstratos</p><p>em classe abstrata, que não podem ser implementados ou</p><p>executados, porque não têm corpo.</p><p>A classe abstrata pode ou não conter métodos abstratos.</p><p>Enfim, métodos abstratos definidos em uma classe abstrata</p><p>devem ser implementados em uma classe concreta (SILVA;</p><p>LEITE; OLIVEIRA, 2019, p. 100).</p><p>O método abstrato tem duas características:</p><p>• É identificado pela palavra-chave abstract;</p><p>• Não tem corpo de método, apenas a assinatura</p><p>terminada com ponto e vírgula (;).</p><p>Assim, “uma classe que contém métodos abstratos deve ser</p><p>declarada como uma classe abstrata”, mesmo se contiver</p><p>alguns métodos concretos (DEITEL; DEITEL, 2017, p. 309).</p><p>Classes abstratas e interfaces</p><p>128</p><p>Continuando com o exemplo dos serviços de banho e tosa</p><p>no pet shop, note que o método tipoTosa encontra-se</p><p>em todas as subclasses. Dessa forma, o método tipoTosa</p><p>da classe Cachorro também é classificado como método</p><p>abstrato e deve ser escrito na linguagem Java, conforme a</p><p>instrução:</p><p>Veja como ficou a classe no final:</p><p>FIGURA 4</p><p>Instrução.</p><p>Fonte: elaborado pela autora.</p><p>FIGURA 5</p><p>Classe Cachorro: tipo classe</p><p>abstrata.</p><p>Fonte: elaborado pela autora.</p><p>Classes abstratas e interfaces</p><p>129</p><p>Observe os balões da figura 5, indicando, nas linhas 2 e 7, o</p><p>uso da palavra-chave abstract para a declaração da classe e</p><p>do método abstrato.</p><p>Percebeu como esse recurso pode ser utilizado em uma</p><p>situação do mundo real? Continue a observar outras situa-</p><p>ções em que a abstração pode ser aplicada. Vamos refletir!</p><p>REFLITA</p><p>Aplicando classes abstratas em POO</p><p>Um sistema integrado acadêmico tem como objetivo a</p><p>integração de vários setores de uma instituição de ensino, tais</p><p>como: setor acadêmico, financeiro, atendimento e secretaria,</p><p>além dos aspectos de interesse dos alunos e dos professores.</p><p>No setor financeiro de uma instituição de ensino privado, um</p><p>processo muito importante é o gerenciamento do pagamento</p><p>de boletos, que pode ser das mensalidades, material didático,</p><p>eventos e esportes.</p><p>Para você se inspirar, acompanhe o estudo de caso de uma escola em Mato Grosso do Sul, que</p><p>propõe um novo processo para recebimento de boletos.</p><p>Clique no link: https://cutt.ly/l5xvbkm</p><p>Com base nessas informações, reflita sobre a modelagem de sistemas baseado na orientação a</p><p>objetos desse setor, usando o recurso de classes abstratas. Como poderia ser criado um projeto</p><p>Java simulando o gerenciamento de pagamento de boletos? A classe de pagamento terá apenas</p><p>métodos abstratos?</p><p>Com esses exemplos, você pôde entender como um sistema</p><p>pode ser modelado com a utilização das classes abstratas.</p><p>Quer saber mais sobre o tema?</p><p>https://cutt.ly/l5xvbkm</p><p>https://cutt.ly/l5xvbkm</p><p>Classes abstratas e interfaces</p><p>130</p><p>Sobre esse tema, você deve lembrar que:</p><p>• Somente classes abstratas podem ter métodos</p><p>abstratos;</p><p>• A classe mãe abstrata define suas classes filhas a</p><p>sobrescrever e implementar os métodos declarados</p><p>como abstratos;</p><p>• Cada classe filha concreta deve fornecer implemen-</p><p>tações concretas de todos os métodos abstratos</p><p>herdados da classe</p><p>mãe.</p><p>Agora, aprimore seu conhecimento e aprenda na prática</p><p>como escrever com a linguagem Java as classes abstratas.</p><p>Vamos exercitar juntos no vídeo a seguir.</p><p>APROFUNDE-SE</p><p>Classes abstratas</p><p>Para aprimorar seus conhecimentos sobre classe e métodos</p><p>abstratos, leia o post e assista ao vídeo vinculado.</p><p>Disponível em: https://youtu.be/Vs-2a7I7akU</p><p>Acesso em: 24/04/2023.</p><p>https://youtu.be/Vs-2a7I7akU</p><p>https://youtu.be/Vs-2a7I7akU</p><p>Classes abstratas e interfaces</p><p>131</p><p>ASSISTA</p><p>Classes abstratas na linguagem Java</p><p>O vídeo mostra como implementar os conceitos de classe</p><p>abstrata na linguagem Java.</p><p>Acesse o vídeo na plataforma.</p><p>Classes abstratas e interfaces</p><p>132</p><p>Interface e múltipla herança</p><p>Você sabe o que é interface na programação orientada a</p><p>objetos?</p><p>Silva, Leite e Oliveira (2019, p. 98) informam que uma inter-</p><p>face se caracteriza por uma coleção de operações utilizadas</p><p>para especificar uma espécie de “contrato” com a classe</p><p>que irá implementá-la. Furgeri (2015, p. 132) complementa</p><p>que esse contrato funciona de maneira bastante similar a</p><p>classes abstratas; a diferença é que não permite a imple-</p><p>mentação de método, apenas a sua assinatura. Deitel e</p><p>Deitel (2017) explicam que interfaces definem e padronizam</p><p>como objetos podem interagir entre si.</p><p>Veja algumas características das interfaces:</p><p>• Não podem ser instanciadas, ou seja, não se cria</p><p>objeto;</p><p>• Todos os métodos são abstratos, contendo apenas</p><p>sua assinatura;</p><p>• Todas as assinaturas dos métodos são públicas. Não</p><p>é permitida a visibilidade privada e protegida;</p><p>• As interfaces não possuem construtores.</p><p>Onde podemos encontrar as interfaces?</p><p>Classes abstratas e interfaces</p><p>133</p><p>Em supermercados, há promoções semanalmente de</p><p>diversos produtos. Esses produtos são organizados por</p><p>gêneros: lataria, congelado, higiene pessoal, produto de</p><p>limpeza, dentre outros. O gerente da unidade controla as</p><p>promoções semanais para os consumidores por meio de</p><p>um software. A modelagem de sistema facilita a compre-</p><p>ensão da estrutura do software.</p><p>FIGURA 6</p><p>Produtos em promoção</p><p>nos supermercados podem</p><p>exemplificar o uso de</p><p>interfaces.</p><p>FIGURA 7</p><p>Modelagem de sistemas</p><p>usando interfaces.</p><p>Fonte: elaborado pela autora.</p><p>Classes abstratas e interfaces</p><p>134</p><p>Na modelagem de sistemas, especificamente o diagrama de</p><p>classes, a identificação da interface é o uso do estereótipo</p><p><<interface>> junto com o nome da classe. As demais classes</p><p>estão se interligando pelo relacionamento de dependência,</p><p>representado pela linha tracejada.</p><p>Agora, você vai conhecer como é criada a interface na</p><p>linguagem Java. Observe o bloco de código:</p><p>Linha 2: declaração da interface. Na listagem Java, usa-se a</p><p>palavra-chave interface substituindo a palavra-chave class.</p><p>Linha 4: declaração do método addPromocao, sem nenhuma</p><p>codificação para o seu conteúdo. Você pode notar o ponto</p><p>e vírgula no final da instrução, indicando o fim do método.</p><p>De acordo com Silva, Leite e Oliveira (2019), à medida que</p><p>a construção do sistema vai obtendo uma maior complexi-</p><p>dade, as interfaces são importantes para especificar a visão</p><p>geral de um pacote ou subsistema.</p><p>Uma característica interessante sobre o tema abordado é</p><p>que uma classe pode implementar várias interfaces. Outro</p><p>FIGURA 8</p><p>Bloco de código.</p><p>Fonte: elaborado pela autora.</p><p>estereótipo: um</p><p>mecanismo de extensão</p><p>da UML que possibilita aos</p><p>desenvolvedores criarem</p><p>novas categorias de</p><p>elementos.</p><p>Classes abstratas e interfaces</p><p>135</p><p>ponto é que permite um encapsulamento de comporta-</p><p>mento, ocultando qual a classe está realizando uma tarefa</p><p>específica. As principais vantagens são uma manutenção</p><p>mais simples do código e um maior reúso desse (SILVA;</p><p>LEITE; OLIVEIRA, 2019).</p><p>APROFUNDE-SE</p><p>Entendendo interfaces com C#</p><p>Para entender mais sobre o tema e auxiliar na compreensão</p><p>de interfaces aplicando C# na linguagem, leia o artigo.</p><p>Disponível em: https://cutt.ly/x5xbJu9</p><p>Acesso em: 26/03/2023.</p><p>Usando uma interface</p><p>E como usar uma interface na linguagem Java? A interface</p><p>contém apenas constantes e métodos abstratos, portanto,</p><p>é uma classe concreta que deve implementar a interface.</p><p>Para especificar que uma classe implementa uma interface,</p><p>escreva a palavra-chave implements na declaração da classe</p><p>(DEITEL; DEITEL, 2017, p. 331). Veja o exemplo:</p><p>https://cutt.ly/x5xbJu9</p><p>https://cutt.ly/x5xbJu9</p><p>Classes abstratas e interfaces</p><p>136</p><p>Segundo Felix (2016, p. 49), uma classe que implementa</p><p>uma interface é obrigada a implementar todos os métodos</p><p>existentes nela. A vantagem de você usar uma interface é a</p><p>possibilidade de implementá-la em quaisquer classes que</p><p>requerem essa funcionalidade.</p><p>Você pode observar que, na figura 9, as classes Enlatado,</p><p>Congelado e Limpeza serão implementadas na classe</p><p>Produto devido à rotatividade dos produtos, pois são colo-</p><p>cados na promoção semanal ofertada no supermercado.</p><p>E cada método addPromocao tem a sua especificação no</p><p>cálculo do valor promocional.</p><p>Pratique e aprenda a implementar a interface em um projeto</p><p>Java no vídeo a seguir.</p><p>FIGURA 9</p><p>Declaração de classe</p><p>implements.</p><p>Fonte: elaborado pela autora.</p><p>Classes abstratas e interfaces</p><p>137</p><p>Herança múltipla</p><p>Na orientação a objetos, o recurso de herança múltipla ocorre</p><p>quando uma classe herda atributos e métodos de mais</p><p>de uma superclasse. Mas há um problema nesse conceito:</p><p>quando existem métodos sobrescritos, ou seja, métodos</p><p>com a mesma assinatura na superclasse e subclasses, o</p><p>compilador gera um erro no momento que está chamando</p><p>o método.</p><p>Analise o case das promoções do supermercado. O diagrama</p><p>de classe apresentado na figura 7 mostra que está sendo</p><p>utilizada uma herança múltipla com métodos sobrescritos.</p><p>A linguagem Java não suporta herança múltipla. E agora, o</p><p>que fazer?</p><p>As interfaces resolvem esse problema e ajudam a separar a</p><p>funcionalidade de sua implementação. Uma classe só pode</p><p>estender outra classe, mas pode implementar várias interfaces.</p><p>O Java não permite que subclasses sejam</p><p>herdadas de mais de uma superclasse,</p><p>mas permite que uma classe seja herdada</p><p>ASSISTA</p><p>Interfaces</p><p>Veja de forma prática como aplicar a interface na linguagem</p><p>Java.</p><p>Acesse o vídeo na plataforma.</p><p>Classes abstratas e interfaces</p><p>138</p><p>de uma superclasse e implemente as</p><p>interfaces de que ele precisa (DEITEL;</p><p>DEITEL, 2017, p. 335).</p><p>Para implementar várias interfaces, utiliza-se a vírgula para</p><p>separar os seus nomes. Veja o exemplo:</p><p>Nessa forma, para acelerar o acesso aos métodos e otimizar</p><p>o programa, o ideal é sempre chamar a interface Produto</p><p>para que o programa defina qual é a melhor classe a ser</p><p>utilizada em sua execução.</p><p>FIGURA 10</p><p>Exemplo para a</p><p>implementação de</p><p>interfaces.</p><p>Fonte: elaborado pela autora.</p><p>Classes abstratas e interfaces</p><p>139</p><p>Aplicações práticas de classes</p><p>abstratas e interfaces</p><p>Um dos recursos avançados na programação orientada a</p><p>objetos é o uso de classes abstratas e interfaces na cons-</p><p>trução de programas complexos.</p><p>INFOGRÁFICO 1</p><p>Fonte: Adaptado de Devmedia.</p><p>Classes abstratas e interfaces</p><p>141</p><p>Na linguagem Java, “interface é a especificação de um nome</p><p>ou de um conjunto de métodos que não define nenhuma</p><p>implementação para os métodos ligados a ela” (BARNES,</p><p>2004, p. 271). Assim, preste atenção a algumas informações</p><p>que devem ser observadas em interfaces:</p><p>• A palavra-chave interface deve ser usada na decla-</p><p>ração da classe.</p><p>• Não existe código no corpo dos métodos, apenas sua</p><p>assinatura finalizada com ponto e vírgula.</p><p>• Em interface não há construtores.</p><p>• Os métodos são públicos; não é permitido método</p><p>privado ou protegido.</p><p>• Devem ser utilizados apenas atributos constantes,</p><p>definido como público, estático e final, usando as</p><p>palavras-chaves public, static e final.</p><p>E as classes abstratas?</p><p>Segundo Deitel e Deitel (2017, p. 316), o objetivo de uma</p><p>classe abstrata é fornecer uma superclasse apta para que</p><p>seja herdada pelas demais classes. Em outras palavras, uma</p><p>classe abstrata é um local reservado para declaração de</p><p>métodos e atributos compartilhados</p><p>por subclasses. Para</p><p>Winder (2009), a função mais importante de uma classe</p><p>abstrata é declarar um conjunto de métodos públicos os</p><p>quais suas subclasses podem usar diretamente ou sobrepor.</p><p>Nesse caso, você vai compreender que esse conjunto pode</p><p>ser usado para qualquer objeto de uma subclasse.</p><p>Você deve estar se perguntando: qual classe deve ser usada,</p><p>classe abstrata ou interface?</p><p>Quando estiver programando, é importante lembrar de</p><p>algumas dicas.</p><p>Classes abstratas e interfaces</p><p>142</p><p>Se precisar implementar métodos da classe,</p><p>escolha a classe abstrata. As interfaces vão</p><p>ajudar a implementar heranças múltiplas,</p><p>pois, na linguagem Java, é a forma mais</p><p>adequada para esse recurso (FELIX, 2017).</p><p>Essa é a melhor escolha quando é necessário desenvolver</p><p>uma classe base para que as demais possam herdar dela</p><p>seus atributos e métodos, já que existe um código comum</p><p>entre todas as classes.</p><p>Um exemplo prático de classes abstratas</p><p>Nos dias atuais, a prestação de serviços para entrega de</p><p>alimentação cresceu mais de 100%. O software que gerencia</p><p>as entregas sofreu uma atualização para atender a demanda</p><p>do mercado. Por exemplo, para um pedido de qualquer tipo</p><p>de alimento, o cliente retirava direto do balcão, mas hoje</p><p>tem a opção do delivery.</p><p>APROFUNDE-SE</p><p>Entenda de forma definitiva a diferença entre classes</p><p>abstratas e interfaces – POO</p><p>Saiba mais sobre as diferenças entre classes abstratas e</p><p>interfaces na programação orientada a objetos, assistindo ao</p><p>vídeo.</p><p>Disponível em: https://youtu.be/zJml-dDGLsI</p><p>Acesso em: 29/03/2023.</p><p>https://youtu.be/zJml-dDGLsI</p><p>https://youtu.be/zJml-dDGLsI</p><p>Classes abstratas e interfaces</p><p>143</p><p>Veja como fica a modelagem de classes representado essa</p><p>atualização.</p><p>Como surgiu a classe Delivery, a política do estabelecimento</p><p>é calcular a entrega do pedido de acordo com a quilome-</p><p>tragem da distância do restaurante até o ponto de destino.</p><p>Para a entrega realizada pelo balcão, não será cobrada</p><p>nenhuma taxa, porém, todos os pedidos têm a possibilidade</p><p>de entrega. Na classe Pedido, o método calcularEntrega é</p><p>um método abstrato.</p><p>FIGURA 11</p><p>Entrega rápida de</p><p>alimentação: estudo de</p><p>caso.</p><p>FIGURA 12</p><p>Modelagem do sistema:</p><p>entrega de pedido.</p><p>Fonte: elaborado pela autora.</p><p>Classes abstratas e interfaces</p><p>144</p><p>Linha 2: declaração da classe abstrata usando a palavra-</p><p>-chave abstract</p><p>Linhas 3 e 4: declaração dos atributos da classe pedido.</p><p>Linha 6: declaração do método abstrato calcularEntrega,</p><p>sem codificação do corpo para implementação.</p><p>Linhas 8 até 11: construção do método imprimirPedido.</p><p>FIGURA 14</p><p>Classe Delivery com a</p><p>definição do método</p><p>calcularEntrega.</p><p>Fonte: elaborado pela autora.</p><p>FIGURA 13</p><p>Modelagem do sistema:</p><p>entrega de pedido.</p><p>Fonte: elaborado pela autora.</p><p>Classes abstratas e interfaces</p><p>145</p><p>Linha 1: declaração da classe Delivery aplicando a técnica de</p><p>herança.</p><p>Linha 2: declaração do método próprio.</p><p>Linhas 5 até 15: construção do método calcularEntrega com</p><p>as suas especificações.</p><p>Linha 2: declaração da classe Balcao com aplicação de</p><p>herança com uso do comando extends.</p><p>Linhas 4 até 6: construção do método calcularEntrega com</p><p>a sua especificação.</p><p>Para finalizar, construa a classe principal com a instan-</p><p>ciação dos objetos da classe Delivery e Balcao e, em seguida,</p><p>invoque os métodos.</p><p>FIGURA 15</p><p>Classe Balcao com o</p><p>método calcularEntrega.</p><p>Fonte: elaborado pela autora.</p><p>Classes abstratas e interfaces</p><p>146</p><p>Linha 2: declaração da classe principal.</p><p>Linha 4: declaração do método main, responsável pela</p><p>execução do programa na linguagem Java.</p><p>Linha 5 e 8: instanciação do objeto das classes Delivery e</p><p>Balcao.</p><p>Linha 6 e 9: Com o uso dos objetos, é invocado o método</p><p>calcularPedido das classes Delivery e Balcao.</p><p>Você deve notar que uma classe abstrata funciona como</p><p>um modelo para as demais classes.</p><p>E as interfaces?</p><p>De acordo com Furgeri (2015), as interfaces funcionam de</p><p>forma parecida com a das classes abstratas, a diferença está</p><p>na declaração de métodos, pois a interface não permite a</p><p>implementação de nenhum método. O exemplo da entrega</p><p>de alimentação pode ser melhorado com essa técnica.</p><p>Nesse sentido, analise a modelagem do programa:</p><p>FIGURA 16</p><p>Classe principal.</p><p>Fonte: elaborado pela autora.</p><p>Classes abstratas e interfaces</p><p>147</p><p>As classes Delivery e Balcao implementam a interface</p><p>Pedido. Você pode notar que a classe Pedido tem o comando</p><p><<interface>> sinalizando que essa classe será o modelo</p><p>para as demais classes: Delivery e Balcao. Veja as linhas de</p><p>código na classe Pedido.</p><p>Linha 1: declaração da interface na linguagem Java. Veja</p><p>que o comando interface está logo após da visibilidade da</p><p>classe (pública).</p><p>FIGURA 17</p><p>Interface.</p><p>Fonte: elaborado pela autora.</p><p>FIGURA 18</p><p>Interface: Java.</p><p>Fonte: elaborado pela autora.</p><p>Classes abstratas e interfaces</p><p>148</p><p>Linhas 2 e 3: declaração dos atributos com seus valores</p><p>iniciais.</p><p>Linha 5 e 6: declaração dos métodos imprimirPedido e</p><p>calcularEntrega. Na interface, os métodos não têm código-</p><p>-fonte, somente a assinatura.</p><p>Linha 2: declaração da classe Delivery usando a implemen-</p><p>tação da classe Pedido por meio da palavra-chave imple-</p><p>ments.</p><p>Linha 3: declaração do atributo próprio da classe Delivery.</p><p>Linhas 5 até 14: criação do método calcularEntrega com a</p><p>definição do objetivo do método.</p><p>Linhas 15 até 20: criação do método imprimirPedido com a</p><p>definição de exibir todos os dados do pedido.</p><p>A classe Balcao será muito parecida com a classe Delivery,</p><p>o que ficará diferente é a definição do método calcularEn-</p><p>trega, pois não haverá cobrança de taxa.</p><p>FIGURA 19</p><p>Classe Delivery</p><p>implementada na interface</p><p>Pedido.</p><p>Fonte: elaborado pela autora.</p><p>Classes abstratas e interfaces</p><p>149</p><p>Linha 2: declaração da classe Balcao usando a implemen-</p><p>tação da classe Pedido através da palavra-chave implements.</p><p>Linhas 3 até 8: criação do método calcularEntrega com a</p><p>definição do objetivo do método.</p><p>Linhas 9 até 11: criação do método imprimirPedido com a</p><p>definição de exibir todos os dados do pedido.</p><p>Construa um projeto Java aplicando as classes abstratas e</p><p>interfaces, assistindo ao vídeo a seguir.</p><p>FIGURA 20</p><p>Classe Balcao</p><p>implementada na interface</p><p>Pedido.</p><p>Fonte: elaborado pela autora.</p><p>ASSISTA</p><p>Construção de um projeto Java com o</p><p>uso de classes abstratas e interfaces</p><p>O vídeo mostra, na linguagem Java, a aplicação de classes</p><p>abstratas e interfaces em uma situação atual do dia a dia.</p><p>Acesse o vídeo na plataforma.</p><p>Considerações finais</p><p>Você alcançou o final desta unidade. Aqui, você aprendeu</p><p>os conceitos de classes abstratas e interfaces de acordo com</p><p>a orientação a objetos; e a implementação dessas técnicas</p><p>de forma prática, utilizando a linguagem Java por meio de</p><p>sugestões encontradas no cotidiano.</p><p>Referências</p><p>BARNES, David.; KÖLLING, Michael. Programação orientada a objetos</p><p>com Java: uma introdução prática utilizando o Blue J. São Paulo: Pearson</p><p>Prentice Hall, 2004.</p><p>DEITEL, Paul; DEITEL, Harvey. Java: como programar. 10. ed. São Paulo:</p><p>Pearson Education do Brasil, 2017.</p><p>EMPREENDE VET. Mercado pet em crescimento: evento mostra o</p><p>potencial empreendedor do setor. G1, Mato Grosso do Sul, 03 jun. 2022.</p><p>Disponível em: https://g1.globo.com/ms/mato-grosso-do-sul/especial-</p><p>publicitario/empreende-vet/noticia/2022/06/03/mercado-pet-em-</p><p>crescimento-evento-mostra-o-potencial-empreendedor-do-setor.ghtml</p><p>Acesso em: 23 mar. 2023.</p><p>FELIX, Rafael. Programação orientada a objetos. São Paulo: Pearson</p><p>Education do Brasil, 2017.</p><p>FURGERI, Sérgio. Java 8: ensino didático: desenvolvimento e</p><p>implementação de aplicações. São Paulo: Érica, 2015. E-book. Disponível</p><p>em: https://integrada.minhabiblioteca.com.br/#/books/9788536519340/</p><p>Acesso em: 23 mar. 2023.</p><p>MODELAGEM de software com UML. Devmedia, c2023. Disponível em:</p><p>https://www.devmedia.com.br/modelagem-de-software-com-uml/20140</p><p>Acesso em: 09 abr. 2023.</p><p>SILVA, Fabricio M.; LEITE, Márcia C. D.; OLIVEIRA, Diego B. Paradigmas</p><p>de programação. Porto Alegre: SAGAH, 2019.</p><p>SINTES, Anthony. Aprenda programação</p><p>orientada a objetos em 21</p><p>dias. São Paulo: Makron Books, 2002.</p><p>WINDER, Russel; GRAHAM, Roberts. Desenvolvendo software em Java.</p><p>3. ed. Rio de Janeiro: LTC, 2009. E-book. Disponível em: https://integrada.</p><p>minhabiblioteca.com.br/#/books/978-85-216-1994-9/ Acesso em: 29 mar.</p><p>2023.</p><p>https://g1.globo.com/ms/mato-grosso-do-sul/especial-publicitario/empreende-vet/noticia/2022/06/03/mercado-pet-em-crescimento-evento-mostra-o-potencial-empreendedor-do-setor.ghtml</p><p>https://g1.globo.com/ms/mato-grosso-do-sul/especial-publicitario/empreende-vet/noticia/2022/06/03/mercado-pet-em-crescimento-evento-mostra-o-potencial-empreendedor-do-setor.ghtml</p><p>https://g1.globo.com/ms/mato-grosso-do-sul/especial-publicitario/empreende-vet/noticia/2022/06/03/mercado-pet-em-crescimento-evento-mostra-o-potencial-empreendedor-do-setor.ghtml</p><p>https://integrada.minhabiblioteca.com.br/#/books/9788536519340/</p><p>https://www.devmedia.com.br/modelagem-de-software-com-uml/20140</p><p>https://integrada.minhabiblioteca.com.br/#/books/978-85-216-1994-9/</p><p>https://integrada.minhabiblioteca.com.br/#/books/978-85-216-1994-9/</p><p>152</p><p>Pacotes, modificadores e atributo/</p><p>método estático</p><p>Objetivos de aprendizagem</p><p>Compreender os conceitos de atributos e métodos está-</p><p>ticos e implementá-los na linguagem Java; compreender</p><p>o conceito de pacotes e como organizar o projeto em Java;</p><p>conhecer e implementar os modificadores de acesso utili-</p><p>zados na linguagem Java.</p><p>Tópicos de estudo</p><p>• Pacotes em Java;</p><p>• Modificadores de acesso;</p><p>• Atributo e método estático.</p><p>Iniciando os estudos</p><p>Nesta unidade, você terá a oportunidade de conhecer:</p><p>• O conceito de pacotes e como organizar suas classes;</p><p>• Os modificadores de acesso: public, private, default e</p><p>protected e exemplificar com a linguagem Java;</p><p>• O conceito de atributo e método estático, exemplificar</p><p>e aplicar utilizando a linguagem Java;</p><p>Desejo a você um bom estudo.</p><p>Pacotes, modificadores e atributo/método estático</p><p>153</p><p>Pacotes em Java</p><p>Quando você vai ao supermercado fazer compras, precisa</p><p>passar todos os produtos na caixa registradora. Para você</p><p>levar os produtos para casa, é necessário colocar em pacotes.</p><p>O ideal é separar os produtos de acordo com o setor, por</p><p>exemplo, produtos de limpeza em um pacote, os produtos</p><p>enlatados em outro, produtos congelados em um novo</p><p>pacote e assim por diante, até finalizar as compras. Por meio</p><p>dessa abstração, surgiu o conceito de pacotes na orientação</p><p>a objetos. Os produtos que serão levados para casa na orien-</p><p>tação a objetos são as classes.</p><p>De acordo com Winder e Graham (2009, p. 589), a intenção</p><p>de usar pacotes começa na necessidade de um mecanismo</p><p>que forneça uma unidade de agrupamento e escopo que</p><p>englobe classes. Furgeri (2015) acrescenta que quando há</p><p>diversas classes de mesma finalidade, ou mesmo propó-</p><p>sito, essas são armazenadas em um mesmo local, o qual é</p><p>chamado de pacote.</p><p>FIGURA 1</p><p>Compras em um</p><p>supermercado: abstração</p><p>que deu origem ao</p><p>conceito de pacotes na</p><p>programação orientada a</p><p>objetos.</p><p>Pacotes, modificadores e atributo/método estático</p><p>154</p><p>Em Java, os pacotes têm duas finalidades (SCHILDT, 2015):</p><p>1. Fornecer um mecanismo de organização de</p><p>classes como uma unidade. E para acessar as classes</p><p>desse pacote, utilizar o seu nome. De acordo com</p><p>a convenção da programação orientada a objetos,</p><p>o nome de um pacote deve ser escrito em letras</p><p>minúsculas, e quando o nome do pacote é composto</p><p>por dois nomes, pode-se usar o ponto final (.) para</p><p>separar as palavras.</p><p>2. Fornecer um processo de controle de acesso Java,</p><p>ou seja, as classes definidas dentro de um pacote</p><p>tornam-se privadas. Você deve notar que, dessa</p><p>forma, as classes são encapsuladas.</p><p>Primeira finalidade</p><p>Segundo Furgeri (2015), o nome do pacote deve conter</p><p>nome reverso, como, por exemplo, o pacote é meupacote,</p><p>portanto, o endereço do pacote deve ser br.com.pacotes.</p><p>meupacote.</p><p>A palavra-chave para declarar um pacote na linguagem Java é</p><p>package (figura 2) que deve ser colocada na primeira linha</p><p>da classe. Importante você ficar atento, pois, na linguagem</p><p>Java, não pode ter nomes duplicados em package.</p><p>nome reverso: escrita</p><p>das últimas palavras na</p><p>primeira posição do nome</p><p>do pacote.</p><p>package: palavra reservada</p><p>na linguagem Java para</p><p>declarar o pacote da classe.</p><p>Pacotes, modificadores e atributo/método estático</p><p>155</p><p>Linha 2: declaração do pacote. É escrito em letra minúscula e</p><p>deve conter um nome de domínio, iniciando com com, edu,</p><p>br, etc. Como convenção, o nome do pacote acaba sendo o</p><p>domínio.</p><p>Linha 4: declaração da classe.</p><p>O gerenciamento de pacotes no Java é feito por meio do</p><p>sistema de arquivos, ou seja, cada pacote armazenado</p><p>em seu próprio diretório. Esse diretório em que o pacote é</p><p>armazenado deve conter o mesmo nome do pacote decla-</p><p>rado na classe. Um pacote pode ter várias classes armaze-</p><p>nadas. Schildt (2015, p. 262) explica que a instrução package</p><p>especifica apenas a que pacote pertencem às classes defi-</p><p>nidas em um arquivo.</p><p>FIGURA 2</p><p>Representação de um</p><p>pacote.</p><p>Fonte: elaborada pela autora.</p><p>Pacotes, modificadores e atributo/método estático</p><p>156</p><p>REFLITA</p><p>Organizando classes em pacotes</p><p>Leia o estudo de caso a seguir, sobre o sistema de uma clínica veterinária.</p><p>O sistema irá se comportar da seguinte forma:</p><p>Os clientes marcam consultas com a secretária,</p><p>fornecendo suas informações pessoais e as dos</p><p>animais que desejam tratar. Se o cliente ou o</p><p>animal não estiver cadastrado no sistema ou</p><p>existir algum dado que precise ser atualizado, a</p><p>secretária deverá atualizar o registro. Em cada</p><p>consulta, o cliente deve informar os sintomas</p><p>aparentes do animal, os quais devem ser</p><p>registrados. Um tratamento pode ser encerrado</p><p>em apenas uma consulta, quando se tratar de</p><p>algo simples. Durante a consulta, o veterinário</p><p>pode marcar exames para o animal, a serem</p><p>trazidos na consulta seguinte. O pedido dos</p><p>exames e seus resultados devem ser registrados</p><p>no histórico de tratamentos do animal. Após</p><p>cada consulta, o histórico da consulta deve ser</p><p>atualizado. A secretária irá manter o cadastro dos</p><p>clientes (GUEDES, p. 100, 2018).</p><p>Com base nessas informações, reflita sobre o uso de pacotes na linguagem Java e elabore</p><p>a organização das classes de objetos em seus pacotes. Para a exibição dessa organização, a</p><p>sugestão é criar uma lista de tópicos.</p><p>Pacotes, modificadores e atributo/método estático</p><p>157</p><p>Segunda finalidade</p><p>As classes Java que são armazenadas na biblioteca de</p><p>classes não estão automaticamente disponíveis para utili-</p><p>zação (BARNES; KÖLLING, 2004, p. 119). Nesse caso, você</p><p>deve declarar no código-fonte que deseja usar essa classe</p><p>a partir da biblioteca. Para que isso ocorra, é necessário</p><p>usar o comando import, que significa importar classes de</p><p>biblioteca. Veja a continuação do exemplo:</p><p>Linha 3: importação da classe JOptionPane que está arma-</p><p>zenada na biblioteca javax.swing. Aqui, está explícito o uso do</p><p>pacote para as classes definidas no Java.</p><p>Linha 8: O uso da classe JOptionPane, chamando o método</p><p>showMessageDialog para mostrar uma mensagem na caixa</p><p>de diálogo. Aqui, você está aprendendo a ler o código de</p><p>uma forma bem técnica.</p><p>A linguagem Java contém muitas bibliotecas; por isso, é</p><p>necessário criar uma estrutura na organização para faci-</p><p>litar o seu uso. O Java utiliza pacotes para organizar classes</p><p>FIGURA 3</p><p>Representação dos pacotes</p><p>Java com suas duas</p><p>finalidades.</p><p>Fonte: elaborada pela autora.</p><p>Pacotes, modificadores e atributo/método estático</p><p>158</p><p>de biblioteca em grupos (BARNES; KÖLLING, 2004, p. 119).</p><p>Caso você precise usar várias classes do mesmo pacote,</p><p>basta substituir o nome da classe para o símbolo asterisco</p><p>(*):</p><p>Turini (2014) explica que é comum você ouvir que importar</p><p>todas as classes da biblioteca prejudica a performance do</p><p>programa, mas, na verdade, não afeta o tempo de execução.</p><p>Você deve se preocupar com a questão de nomes dupli-</p><p>cados, pois nem o IDE ajuda nessa questão, uma vez que</p><p>não há como saber se já houve esse nome declarado. Assim,</p><p>o ideal é chamar</p><p>as classes separadamente nas importa-</p><p>ções.</p><p>IDE: ambiente de</p><p>desenvolvimento</p><p>integrado (em inglês,</p><p>Integrated Development</p><p>Environment), é um</p><p>programa que combina</p><p>recursos e ferramentas</p><p>para auxiliar no</p><p>desenvolvimento de</p><p>software, com o objetivo de</p><p>torná-lo mais eficiente.</p><p>FIGURA 4</p><p>Exemplo de importação de</p><p>biblioteca organizado por</p><p>pacote.</p><p>Fonte: elaborada pela autora.</p><p>Pacotes, modificadores e atributo/método estático</p><p>159</p><p>Há uma exceção no Java: algumas classes são utilizadas com</p><p>maior frequência, por exemplo, a classe String, que pertence</p><p>à biblioteca java.lang; nesse caso, a exceção fica na impor-</p><p>tação implícita dessa biblioteca.</p><p>Chegou a hora de praticar na linguagem Java! Assista ao</p><p>vídeo para aprender a usar os pacotes na organização das</p><p>classes e das bibliotecas.</p><p>APROFUNDE-SE</p><p>Pacotes (package)</p><p>Leia o artigo para saber mais sobre como organizar classes</p><p>próprias do projeto usando pacotes.</p><p>Disponível em: https://cutt.ly/I6hQQuk</p><p>Acesso em: 17/04/2023.</p><p>ASSISTA</p><p>Pacotes em Java</p><p>O vídeo ensina a implementar o conceito de pacote na</p><p>linguagem Java.</p><p>Acesse na plataforma o vídeo.</p><p>https://cutt.ly/I6hQQuk</p><p>Pacotes, modificadores e atributo/método estático</p><p>160</p><p>Modificadores de acesso</p><p>Agora, você vai aprender com mais detalhes o que são os</p><p>modificadores de acesso (public, private, default e protected)</p><p>e como são implementados com a linguagem Java por meio</p><p>de exemplos corriqueiros da nossa rotina.</p><p>Vamos começar com os conceitos demonstrados no info-</p><p>gráfico. Saiba que a simbologia dos modificadores fica ao</p><p>lado esquerdo no nome do membro.</p><p>INFOGRÁFICO 1</p><p>Fonte: elaborado pela autora.</p><p>Pacotes, modificadores e atributo/método estático</p><p>162</p><p>O modificador default (padrão) não tem indicador e nem</p><p>representação. Quando uma classe ou um membro da</p><p>classe é declarado como default, o nível de acesso é implícito.</p><p>Como você pôde perceber, os modificadores de acesso</p><p>atuam, assim, no quesito segurança. De acordo com Félix</p><p>(2016, p. 27), “durante o desenvolvimento do código, para</p><p>garantir mais segurança ao sistema de software desenvol-</p><p>vido, é possível definir o nível de proteção de membros do</p><p>código”.</p><p>No desenvolvimento de software na</p><p>programação orientada a objetos, os</p><p>modificadores de acesso são usados mais</p><p>facilmente na visibilidade dos campos,</p><p>construtores e métodos (BARNES, KÖLLING,</p><p>2004).</p><p>Analise a seguir o diagrama de classe com a declaração do</p><p>nível de acesso aos seus membros.</p><p>FIGURA 5</p><p>Visibilidade de acesso nos</p><p>membros da classe.</p><p>Fonte: elaborada pela autora.</p><p>Pacotes, modificadores e atributo/método estático</p><p>163</p><p>Observe que na classe de objeto, representada na figura 5,</p><p>os atributos n1 e n2 foram definidos como privados; dessa</p><p>forma, apenas a própria classe (calculadora) tem a visibili-</p><p>dade desses atributos. De acordo com Furgeri (2015, p. 112), é</p><p>necessário que sejam criados métodos para permitir a mani-</p><p>pulação de seus conteúdos por meio de outras classes. O</p><p>atributo resultado tem a definição de protegido, que garante</p><p>que somente outras classes do mesmo pacote podem ter</p><p>a visibilidade desse atributo. Os métodos da classe Calcu-</p><p>ladora são todos determinados como públicos, assim, são</p><p>visíveis e podem ser acessados fora da classe.</p><p>APROFUNDE-SE</p><p>Modificadores de acesso e encapsulamento em Python</p><p>Nas linguagens orientadas a objetos, os modificadores de</p><p>acesso permitem a restrição aos atributos e métodos por meio</p><p>das palavras-chaves. Leia o artigo para saber mais sobre como</p><p>são feitos esses acessos na linguagem Python, que é diferente</p><p>da linguagem Java.</p><p>Disponível em: https://cutt.ly/z6hQUX8</p><p>Acesso em: 10/04/2023.</p><p>Importante saber que se não for informado o modificador</p><p>de acesso ao membro, o nível definido será o default. O</p><p>quadro 1 resume as regras de acesso para cada modificador.</p><p>https://cutt.ly/z6hQUX8</p><p>Pacotes, modificadores e atributo/método estático</p><p>164</p><p>Níveis e modificadores de acesso</p><p>Modificador</p><p>de Acesso</p><p>public protected private default</p><p>A partir da mesma</p><p>classe</p><p>Sim Sim Sim Sim</p><p>Em qualquer classe</p><p>no mesmo pacote</p><p>Sim Sim Não Sim</p><p>Em qualquer classe</p><p>filha no mesmo</p><p>pacote</p><p>Sim Sim Não Sim</p><p>Em qualquer</p><p>classe em qualquer</p><p>pacote</p><p>Sim Não Não Não</p><p>Você vai saber como escrever na linguagem Java a classe</p><p>Calculadora exibida na figura 5 com o foco nos modifica-</p><p>dores de acesso.</p><p>Linha 2: declaração do pacote modificador, indicando o</p><p>local que está armazenado a classe Calculadora.</p><p>Linha 5 e 6: declaração dos atributos privados n1 e n2.</p><p>QUADRO 1</p><p>Fonte: Muniz et al. (2021, p. 122).</p><p>FIGURA 6</p><p>Classe Calculadora na</p><p>linguagem Java.</p><p>Fonte: elaborada pela autora.</p><p>Pacotes, modificadores e atributo/método estático</p><p>165</p><p>Linha 7: declaração do atributo protegido resultado.</p><p>Linhas 9 até 12: declaração dos métodos públicos soma,</p><p>subtracao, multiplicacao, divisao. No exemplo, você verá</p><p>somente a assinatura, pois o conteúdo não é abordado no</p><p>tema.</p><p>Vamos ver como esses atributos e métodos são visualizados</p><p>em outra classe. Para exemplificar, a classe Calculadora será</p><p>chamada na classe Principal que contém o método main.</p><p>Linha 2: declaração do pacote modificador. Observe que</p><p>essa classe faz parte do mesmo pacote da classe Calcula-</p><p>dora. Isso é importante por ter um atributo protegido.</p><p>Linha 7: criação do objeto calc e instanciação do objeto da</p><p>classe Calculadora.</p><p>Linha 9: o atributo resultado foi chamado pelo objeto calc.</p><p>Veja que não há indicador de erro, pois a classe Principal</p><p>foi criada dentro do mesmo pacote da classe Calculadora.</p><p>Observe a linha 2 que traz a declaração do pacote.</p><p>FIGURA 7</p><p>Acesso aos atributos e</p><p>métodos da classe Java.</p><p>Fonte: elaborada pela autora.</p><p>Pacotes, modificadores e atributo/método estático</p><p>166</p><p>Linha 10 e 11: por meio do objeto calc, foram invocados os</p><p>atributos n1 e n2. Note que há um indicador de erro, pois</p><p>esses métodos são privados e a classe Principal não tem</p><p>acesso aos membros.</p><p>Linhas 13 até 16: os métodos soma, subtracao, multiplicacao</p><p>e divisão são invocados por meio do objeto calc. Como todos</p><p>os métodos foram determinados como públicos, a classe</p><p>Principal tem permissão de acesso.</p><p>Momento de praticar o uso dos modificadores de acesso por</p><p>meio da IDE NetBeans. Acompanhe no vídeo!</p><p>ASSISTA</p><p>Modificadores de acesso</p><p>No vídeo, você aprimora seus conhecimentos sobre os</p><p>modificadores de acesso na linguagem Java e aprende como</p><p>a plataforma indica a visibilidade dos membros, facilitando a</p><p>compreensão das funções de cada modificador.</p><p>Acesse na plataforma o vídeo.</p><p>Pacotes, modificadores e atributo/método estático</p><p>167</p><p>Atributo e método estático</p><p>Você sabe o que é atributo e método estático? Sabe como</p><p>usá-los na programação orientada a objetos?</p><p>A palavra reservada static é utilizada para</p><p>o gerenciamento de memória e pode ser</p><p>aplicada em métodos, variáveis, classes e</p><p>blocos (MUNIZ, 2021, p. 150).</p><p>Vamos começar com os atributos estáticos</p><p>Os atributos estáticos são campos que guardam informa-</p><p>ções, independente da instanciação da classe. São também</p><p>chamados de variáveis de classe e têm como objetivo</p><p>representar informações de escopo de classe, sendo que</p><p>todos os objetos da classe compartilham os mesmos dados</p><p>(DEITEL; DEITEL, 2005). Esses atributos estáticos são usados</p><p>quando todos os objetos da classe precisarem utilizar uma</p><p>cópia desses atributos declarados.</p><p>Para compreender melhor esse conceito, vamos usar um</p><p>exemplo.</p><p>Pacotes, modificadores e atributo/método estático</p><p>168</p><p>A figura 8 representa um sistema acadêmico em que o</p><p>objeto principal é o estudante. Suponha que no período de</p><p>matrículas, a secretaria precisa ter o controle dos alunos</p><p>matriculados por sala, visto que há um limite máximo de</p><p>matrículas. Observe o bloco de código na figura 9:</p><p>Linha 5: declaração do atributo estático qtdeAluno, que</p><p>significa que o seu valor será o mesmo para todas as instân-</p><p>cias da classe.</p><p>FIGURA 8</p><p>Sistema de Informação</p><p>Acadêmico.</p><p>FIGURA 9</p><p>Atributo estático em Java.</p><p>Fonte: elaborada pela autora.</p><p>Pacotes, modificadores</p><p>e atributo/método estático</p><p>169</p><p>Linha 6: declaração do atributo não estático nome.</p><p>Linha 8: declaração do método construtor da classe que</p><p>invoca o atributo estático qtdeAluno.</p><p>Na classe Principal, você tem a certeza de que o objeto</p><p>(aluno) está compartilhando uma cópia do mesmo atributo.</p><p>Agora, compare esse bloco (figura 9) com o bloco de código</p><p>na figura 10. Veja que o atributo estático qtdeAluno está</p><p>sendo chamado por meio da classe Aluno, sem usar o nome</p><p>do objeto instanciado a1 e a2.</p><p>Linhas 4 e 8: criação do objeto da classe e instanciação</p><p>através do construtor.</p><p>Linhas 5 e 9: Determinam os valores do atributo nome para</p><p>cada objeto instanciado.</p><p>Linhas 6 e 10: Através do comando de saída será mostrado</p><p>o resultado final da classe em execução.</p><p>Acompanhe o resultado da execução da classe:</p><p>FIGURA 10</p><p>Classe principal: atributos</p><p>estáticos.</p><p>Fonte: elaborada pela autora.</p><p>Pacotes, modificadores e atributo/método estático</p><p>170</p><p>Métodos Estáticos</p><p>Os métodos estáticos também são declarados com a pala-</p><p>vra-chave static.</p><p>Segundo Winder e Graham (2009), o</p><p>significado do método estático é que,</p><p>embora faça parte da classe, o método</p><p>pode ser chamado diretamente em vez</p><p>de ser chamado apenas para um objeto</p><p>específico. O método estático é invocado</p><p>com o uso do nome da classe, sem nenhum</p><p>objeto instanciado.</p><p>Métodos declarados como static têm algumas restrições,</p><p>tais como: não usam a referência this; e só podem chamar</p><p>diretamente outros métodos static e acessar diretamente</p><p>dados static.</p><p>FIGURA 11</p><p>Resultado final da classe</p><p>Aluno.</p><p>Fonte: elaborada pelo autor.</p><p>Pacotes, modificadores e atributo/método estático</p><p>171</p><p>APROFUNDE-SE</p><p>Diferença entre método estático</p><p>e não estático em Java</p><p>Para aprimorar seus conhecimentos sobre o tema métodos</p><p>estáticos, leia o artigo que explica a diferença em um método</p><p>estático e não estático na linguagem Java.</p><p>Disponível em: https://cutt.ly/F6hQFmz</p><p>Acesso em: 10/04/2023.</p><p>Em Java, também podemos ter blocos estáticos, que são</p><p>definidos pela palavra static e são executados apenas uma</p><p>vez, antes do construtor da classe, não importando quantos</p><p>objetos sejam criados (MUNIZ, 2021, p. 153).</p><p>Veja no exemplo como se aplicam essas definições:</p><p>FIGURA 12</p><p>Métodos estáticos.</p><p>Fonte: elaborada pelo autor.</p><p>https://cutt.ly/F6hQFmz</p><p>Pacotes, modificadores e atributo/método estático</p><p>172</p><p>Linha 9: o método construtor da classe Aluno foi completado</p><p>com a invocação do método msgMatricula. Assim, quando</p><p>instanciar o objeto da classe por meio do construtor, o</p><p>método msgMatricula será executado.</p><p>Linhas 13 até 15: construção do bloco de estático contendo</p><p>apenas o corpo do método, sem assinatura e nome do</p><p>método. Esse método deverá ser exibido uma única vez.</p><p>Linhas 17 até 19: construção do método estático msgMatricula.</p><p>A palavra reservada static consta na assinatura do método.</p><p>Após as alterações da classe Aluno, é momento de executar</p><p>a classe Principal.</p><p>Na figura 13, a parte superior é o editor de código com a</p><p>linguagem Java. Note que, se comparada com a figura 10,</p><p>não houve nenhuma alteração na codificação da classe</p><p>Principal, porém, o resultado da saída mostra os métodos</p><p>estáticos exibindo seus conteúdos.</p><p>Hora de praticar! Aprimore seu conhecimento, construindo</p><p>as classes e realizando testes, inclusive para checar como</p><p>FIGURA 13</p><p>Classe Principal: métodos</p><p>estáticos.</p><p>Fonte: elaborada pelo autor.</p><p>Pacotes, modificadores e atributo/método estático</p><p>173</p><p>o compilador se comporta com as restrições dos métodos</p><p>estáticos.</p><p>ASSISTA</p><p>Atributos e métodos estáticos</p><p>No vídeo, você aprende a implementar atributos e métodos</p><p>estáticos na linguagem Java.</p><p>Acesse na plataforma o vídeo.</p><p>Considerações finais</p><p>Nesta unidade, você aprendeu sobre os conceitos e o uso dos</p><p>pacotes na linguagem Java; aprimorou os conhecimentos</p><p>dos modificadores de acesso de uma classe; e conheceu os</p><p>atributos e métodos estáticos. As aplicações foram baseadas</p><p>nos desafios diários ocorridos no desenvolvimento de</p><p>sistemas.</p><p>Considerações finais</p><p>BARNES, David J.; KÖLLING, Michael. Programação Orientada a Objetos</p><p>com Java: uma introdução prática utilizando o Blue J. São Paulo: Pearson</p><p>Prentice Hall, 2004.</p><p>DEITEL, Harvey M.; DEITEL, Paul J. Java: como programar. 6. ed. São</p><p>Paulo: Pearson Prentice Hall, 2005.</p><p>FÉLIX, Rafael. Programação Orientada a Objetos. São Paulo: Pearson</p><p>Education do Brasil, 2016.</p><p>FURGERI, Sérgio. Java 8 - Ensino Didático: desenvolvimento e</p><p>implementação de aplicações. São Paulo: Editora Saraiva, 2015.</p><p>GUEDES, Gilleanes T. A. UML 2.0: uma abordagem prática. 3. ed. São</p><p>Paulo: Novatec, 2018.</p><p>MUNIZ, Antonio. et al. Jornada Java: unindo práticas para construção</p><p>de código limpo e implantação que entregue valor ao cliente. Rio de</p><p>Janeiro: Brasport Livros e Multimídia Ltda, 2021. Disponível em: https://</p><p>elibro.net/pt/ereader/newtonpaiva/175584 Acesso em: 11 abr. 2023.</p><p>SCHILDT, Herbert. Java para Iniciantes: crie, compile e execute programa</p><p>Java rapidamente. 6. ed. Porto Alegre: Bookman, 2015.</p><p>TURINI, Rodrigo. Desbravando Java e Orientação a Objetos: um guia</p><p>para o iniciante da linguagem. 1. ed. São Paulo: Casa do Código, 2014.</p><p>WINDER, Russel; GRAHAM, Roberts. Desenvolvendo Software em Java,</p><p>3. ed. Rio de Janeiro: LTC, 2009.</p><p>https://elibro.net/pt/ereader/newtonpaiva/175584</p><p>https://elibro.net/pt/ereader/newtonpaiva/175584</p><p>176</p><p>Persistência de dados</p><p>Objetivos de aprendizagem</p><p>Compreender os conceitos de JDBC, DAO, ORM e JPA e</p><p>aprender a implementar em Java a persistência de dados</p><p>utilizando JDBC e JPA.</p><p>Tópicos de estudo</p><p>• Persistência de dados com JDBC;</p><p>• Introdução ao ORM e JPA;</p><p>• Persistência de dados com JPA.</p><p>Iniciando os estudos</p><p>Nesta unidade, você terá a oportunidade de aprender sobre</p><p>os seguintes assuntos:</p><p>• Conceito de JDBC e DAO;</p><p>• Criação de um sistema com as operações do CRUD,</p><p>utilizando a conexão JDBC;</p><p>• Conceito de ORM e JPA e suas principais anotações</p><p>JPA utilizadas nas classes e as anotações de relacio-</p><p>namentos entre classes;</p><p>• Implementação de um programa em Java utilizando a</p><p>persistência de dados via JPA.</p><p>Bom estudo!</p><p>Persistência de dados</p><p>177</p><p>Persistência de dados com</p><p>JDBC</p><p>Você já ouviu falar sobre a persistência de dados com JDBC?</p><p>A partir de agora, você conhecerá os conceitos de JDBC e</p><p>DAO e, depois, aprenderá como criar um sistema com as</p><p>operações do CRUD, utilizando a conexão JDBC por meio de</p><p>uma rotina prática de nosso dia a dia.</p><p>O que é persistência de dados?</p><p>O conceito de persistência está atrelado à necessidade de</p><p>gravar informações em disco. Segundo Guedes (2018), há</p><p>situações em que é preciso preservar de maneira perma-</p><p>nente os objetos de uma classe. Para ter uma definição</p><p>mais concreta, a persistência de dados é uma maneira do</p><p>programa persistir e recuperar os dados de um sistema de</p><p>armazenamento não volátil, ou seja, em HD, nuvem, dentre</p><p>outros.</p><p>Algumas definições</p><p>Banco de dados: é uma coleção de dados organizados.</p><p>Esses dados podem ser uma lista simples de produtos para</p><p>uma compra como um cadastro completo de uma pessoa.</p><p>Um sistema de gerenciamento de banco de dados (SGBD)</p><p>fornece mecanismos para armazenar, organizar, recuperar e</p><p>modificar dados para vários usuários (DEITEL; DEITEL, 2017).</p><p>Banco de Dados Relacional: um banco de dados relacional</p><p>é o local de armazenamento de dados. Para Deitel e Deitel</p><p>(2017, p. 815), é uma representação lógica de dados que</p><p>Persistência de dados</p><p>178</p><p>permite que os dados sejam acessados sem considerar sua</p><p>estrutura física. Esse banco de dados é formado por uma</p><p>coleção de tabelas que possuem linhas e colunas (MUNIZ</p><p>et al., 2021, p. 257), que garante a integridade das relações</p><p>entre elas, conforme mostra a figura 1.</p><p>Uma tabela é composta por linhas, nas quais são inseridos</p><p>os dados dos registros, e por colunas, que são os campos</p><p>desses registros. As informações contidas entre a linha e a</p><p>coluna têm a mesma finalidade.</p><p>Structured Query Language (SQL):</p><p>De acordo com Deitel e Deitel (2017, p. 814), é uma</p><p>um</p><p>mesmo programa pode ser usado em um</p><p>PC, em um Mac ou em um computador de</p><p>grande porte. (FURGERI, 2012).</p><p>Um dos pontos importantes para o sucesso do Java é o fato</p><p>que ele nasceu com os padrões da orientação a objetos.</p><p>Referente às suas edições, o Java possui uma divisão de</p><p>ambientes para a sua utilização. As principais versões são:</p><p>• Java SE (Java Standard Edition): é a plataforma</p><p>mais usada para criações de desenvolvimento na</p><p>linguagem Java.</p><p>• Java EE (Java Enterprise Edition): é uma plata-</p><p>forma de programação para servidores, voltada para</p><p>sistemas em redes.</p><p>• Java ME (Java Micro Edition): é o ambiente de</p><p>desenvolvimento para dispositivos móveis ou portá-</p><p>teis;</p><p>• Java FX: é uma linguagem Script; o domínio da</p><p>plataforma engloba o desenvolvimento de RIA (Rich</p><p>Internet Application) para desktops e dispositivos</p><p>móveis.</p><p>A linguagem Java é uma das principais linguagens orientadas</p><p>a objetos. Seu grande diferencial entre as outras linguagens,</p><p>desde quando foi criada, é que o programador escreve uma</p><p>única vez o código-fonte e pode usá-lo em várias aplicações.</p><p>É uma linguagem consolidada no mercado e continua forte</p><p>nos requisitos de profissionais.</p><p>Introdução à programação orientada a objetos</p><p>12</p><p>Ela é compilada por bytecode e interpretada pela JVM</p><p>(Java Virtual Machine). Desta forma, seus scripts podem ser</p><p>executados em qualquer plataforma. Veja, no infográfico</p><p>1, as aplicações da linguagem Java, compreendendo suas</p><p>possibilidades.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>INFOGRÁFICO 1</p><p>A linguagem Java está em</p><p>várias aplicações, desde um</p><p>simples programa até um</p><p>sistema corporativo.</p><p>Fonte: adaptado de https://cutt.ly/</p><p>Z3K8ke8 Acesso em 15 jan. 2023.</p><p>https://cutt.ly/Z3K8ke8</p><p>https://cutt.ly/Z3K8ke8</p><p>Introdução à programação orientada a objetos</p><p>13</p><p>As características da Linguagem Java</p><p>A linguagem Java possui várias características que vieram</p><p>da herança da linguagem C; por exemplo, na escrita do códi-</p><p>go-fonte, os caracteres maiúsculos e minúsculos são inter-</p><p>pretados pelo compilador de forma diferente (case-sensi-</p><p>tive) e é usada a indentação regular, que facilita a leitura do</p><p>código. Veja as principais:</p><p>• Orientação a objetos: a forma de escrever essa</p><p>linguagem é totalmente voltada nas normas desse</p><p>padrão;</p><p>• Portabilidade: é uma linguagem multiplata-</p><p>forma, permitindo que os programas escritos nessa</p><p>linguagem possam ser utilizados em vários sistemas</p><p>operacionais;</p><p>• Multithreadings: um mesmo programa pode ser</p><p>executado várias vezes ao mesmo tempo e cada</p><p>execução pode processar uma instrução diferente</p><p>do mesmo programa (FURGERI, 2012);</p><p>• Suporte à comunicação: possui uma grande varie-</p><p>dade de bibliotecas, o que facilita a construção de</p><p>um programa.</p><p>Nosso primeiro programa</p><p>O programa Java é um aplicativo escrito com os comandos</p><p>Java e executado em seu ambiente virtual JVM (Java Virtual</p><p>Machine).</p><p>Introdução à programação orientada a objetos</p><p>14</p><p>Um programa Java pode ser escrito em qualquer editor de</p><p>texto, porém, deve ser salvo com a extensão .java. Utilizando</p><p>a IDE NetBeans (programa utilizado para escrever o código-</p><p>-fonte da linguagem Java, em que é possível fazer a compi-</p><p>lação e a interpretação do programa), por exemplo, isso já</p><p>é aplicado automaticamente, facilitando a vida do progra-</p><p>mador.</p><p>Tipos de dados</p><p>Veja que aqui identificamos o tipo de dados utilizados nas</p><p>variáveis que o programa vai usar. As variáveis são os espaços</p><p>reservados na memória que armazena os valores dos dados.</p><p>Por exemplo, o nome de um jogador pode ser guardado na</p><p>variável jogador e o seu tipo de dado é texto.</p><p>Uma variável é uma posição na memória</p><p>do computador onde um valor pode ser</p><p>armazenado para uso posterior em um</p><p>programa. Todas as variáveis Java devem</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 1</p><p>Exemplo simples de um</p><p>programa escrito na</p><p>linguagem Java.</p><p>Fonte: adaptado de</p><p>DEITEL, 2010, p. 29.</p><p>Introdução à programação orientada a objetos</p><p>15</p><p>ser declaradas com um nome e um tipo</p><p>antes que elas possam ser utilizadas</p><p>(DEITEL, 2010, p. 38).</p><p>Segundo Furgeri (2012), os tipos de dados em Java são</p><p>portáveis entre todas as plataformas de computadores que</p><p>suportam essa linguagem. Veja um exemplo para melhor</p><p>compreensão: um círculo é composto pelo valor do seu raio.</p><p>No Java, o raio deve ser definido com o tipo de dado double,</p><p>pois armazena números inteiros e decimais. Conheça, no</p><p>quadro 1, os tipos de dados mais usados na linguagem Java.</p><p>Tipo Quantidade</p><p>de bits</p><p>Intervalo de</p><p>valores possíveis</p><p>Descrição</p><p>char 16 “\u000” a “\uFFF” São aqueles valores que expressam um</p><p>dado na forma de um único caractere.</p><p>Int 32 -2.147.483.648 a</p><p>+2.147.483.647</p><p>São valores que representam</p><p>quantidades de números inteiros.</p><p>Float 32 -3.4029237E+38 a</p><p>+3.40292347E+38</p><p>São valores que representam números</p><p>flutuantes de precisão simples com no</p><p>máximo 7 dígitos.</p><p>Double 64 -1.79769313486231570E+308</p><p>a</p><p>+1.79769313486231570E+307</p><p>São valores que representam números</p><p>inteiros e/ou decimais com no máximo</p><p>15 dígitos. Esse tipo de dado é usado</p><p>quando é necessário uma alta precisão.</p><p>boolean 8 True e false São valores que representam dados</p><p>booleanos, usados para expressar o</p><p>valor de uma condição ou expressão</p><p>lógica.</p><p>QUADRO 1</p><p>Tipos de dados.</p><p>Fonte: adaptado de</p><p>FURGERI, 2012, p. 33.</p><p>Introdução à programação orientada a objetos</p><p>16</p><p>Variáveis e Constantes</p><p>Uma variável, ou constante, é um tipo de identificador do</p><p>espaço da memória que guarda os valores trabalhados no</p><p>programa. O nome da variável e da constante é determi-</p><p>nado pelo programador, que para isso, deve seguir algumas</p><p>regras. A regra principal é que, na linguagem Java, as variá-</p><p>veis devem conter um tipo de dado associado.</p><p>Operadores</p><p>Para criar um programa que realiza cálculos, a linguagem</p><p>Java contém vários tipos de operadores destinados à reali-</p><p>zação de operações aritméticas, lógicas e relacionais, com</p><p>os quais é possível criar expressões aritméticas, por exemplo.</p><p>Entrada de dados pelo teclado</p><p>Vamos começar a criar programas em que o usuário define</p><p>os valores da entrada por meio do teclado. Utilizaremos as</p><p>caixas de diálogo disponíveis na biblioteca Swing, do pacote</p><p>JoptionPane.</p><p>Introdução à programação orientada a objetos</p><p>17</p><p>Essas caixas de diálogo dispõem o programa de forma</p><p>gráfica para receber e exibir os dados do programa.</p><p>• showInputDialog – responsável por abrir a caixa</p><p>de diálogo que permite a digitação de um dado do</p><p>tipo String, ou seja, texto. Para a leitura de outros</p><p>tipos de dados, é necessário o uso dos comandos de</p><p>conversão de dados.</p><p>• showMessageDialog – responsável por abrir a caixa</p><p>de mensagem e mostrar os valores contidos nas</p><p>variáveis e/ou textos.</p><p>FIGURA 2</p><p>Exemplo da utilização das</p><p>caixas de diálogo da classe</p><p>JoptionPane.</p><p>Fonte: adaptado de https://cutt.</p><p>ly/73LeAfo Acesso em 11 jan. 2023.</p><p>ASSISTA</p><p>Fundamentos da linguagem Java</p><p>E agora, preparado? No vídeo, você pode começar a praticar</p><p>todos os conceitos vistos neste tópico.</p><p>Acesse na plataforma o vídeo.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>https://cutt.ly/73LeAfo</p><p>https://cutt.ly/73LeAfo</p><p>Introdução à programação orientada a objetos</p><p>18</p><p>Origem da</p><p>orientação a objetos</p><p>Afinal, o que é orientação a objetos?</p><p>Saiba que esse termo é bem importante em nossos estudos,</p><p>pois a linguagem Java é baseada nos paradigmas da orien-</p><p>tação a objetos para o desenvolvimento de programas. De</p><p>acordo com Poletini (2015), é uma metodologia de progra-</p><p>mação, a qual se abstrai em objetos. Santos (2011) menciona</p><p>que os objetos são os dados a serem processados e os meca-</p><p>nismos de processamento desses dados devem ser conside-</p><p>rados em conjuntos.</p><p>APROFUNDE-SE</p><p>Programação orientada a objetos –</p><p>Aula 01 – Introdução à orientação</p><p>a objetos</p><p>Para compreender melhor esses conceitos da POO, assista ao</p><p>vídeo que explana de uma forma clara e objetiva as principais</p><p>informações sobre o tema, como paradigmas da orientação</p><p>a objetos,</p><p>linguagem</p><p>padrão “utilizada quase universalmente com banco de</p><p>dados relacionais para fazer consultas e manipular dados”.</p><p>O SQL surgiu na década de 80 com a IBM e já deu origem</p><p>a várias versões, inclusive, atualmente, possui recursos de</p><p>orientação a objetos para a modelagem de dados. Como a</p><p>proposta do Java é ser uma linguagem multiplataforma, foi</p><p>criada API (Application Programming Interface) com classes</p><p>FIGURA 1</p><p>Exemplo de uma tabela.</p><p>Fonte: Deitel; Deitel (2017, p. 815).</p><p>Persistência de dados</p><p>179</p><p>especiais para que qualquer banco de dados fosse acessado</p><p>em uma aplicação.</p><p>De qualquer forma, nesta unidade, o importante é conhecer</p><p>como a linguagem Java se relaciona com os diversos</p><p>programas de banco de dados existentes no mercado, a</p><p>fim de construir sistemas que manipulam as informações</p><p>contidas em um banco de dados.</p><p>O que é JDBC?</p><p>O significado da sigla é Java DataBase Connectivity. É a</p><p>biblioteca de classes de Java para acesso a banco de dados,</p><p>a qual possui um conjunto de interfaces que elabora um</p><p>ambiente comum em que as aplicações e os mecanismos</p><p>de banco de dados se comunicam (RODRIGUES FILHO,</p><p>2008, p. 330). Os aplicativos Java interagem com o banco de</p><p>dados por meio de API JDBC, que faz parte da especificação</p><p>Java SE, e tem como vantagem ser portátil, além do mesmo</p><p>código poder manipular banco de dados em vários SGBD</p><p>(sistema de gerenciamento de banco de dados).</p><p>Como funciona um JDBC?</p><p>Para compreender o funcionamento da classe JDBC, a figura</p><p>2 representa o esquema simples, sendo que a classe JDBC</p><p>contém diversas bibliotecas que permitem a comunicação</p><p>entre a aplicação e a base de dados:</p><p>Java SE: Significa Java</p><p>Stardand Edition. O Java</p><p>SE é a plataforma principal</p><p>para a programação na</p><p>linguagem Java. Nessa</p><p>plataforma, existem todas</p><p>as bibliotecas e APIs de que</p><p>o programador necessita</p><p>para uma criar uma</p><p>aplicação Java.</p><p>Persistência de dados</p><p>180</p><p>Analisando o esquema representado pela ilustração, um</p><p>aplicativo Java repassa as informações para API JDBC, o</p><p>qual possui várias camadas, e a resposta do banco de dados</p><p>retorna como um objeto.</p><p>DAO</p><p>O Data Access Object (DAO) possibilita persistir dados de</p><p>um objeto em um banco de dados (MACHADO et al., 2016, p.</p><p>90). O DAO funciona de forma centralizada, ou seja, o serviço</p><p>de persistência de dados evita que o código SQL se espalhe</p><p>por várias classes do projeto. Segundo Machado et al. (2016),</p><p>permite ligar as classes de uma aplicação ao banco de dados</p><p>desejado.</p><p>Driver de conexão</p><p>O driver é uma biblioteca de código Java com instruções</p><p>específicas sobre a JVM que tem como objetivo se comu-</p><p>nicar com o banco de dados em uso. Muniz et al. (2021, p. 261)</p><p>JVM: Java Virtuam Machine,</p><p>programa responsável pela</p><p>compilação e execução do</p><p>código-fonte.</p><p>FIGURA 2</p><p>Esquema do</p><p>funcionamento JDBC.</p><p>Fonte: elaborada pela autora.</p><p>Persistência de dados</p><p>181</p><p>relata que cada banco de dados tem o seu próprio driver,</p><p>o qual deve ser declarado nas dependências do projeto</p><p>de acordo com o tipo que deseja utilizar. Esses drivers de</p><p>conexão são ofertados gratuitamente pelos fabricantes de</p><p>banco de dados, portanto, cada banco de dados tem seu</p><p>driver específico.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>Camadas</p><p>definidas no</p><p>JDBC</p><p>Camadas</p><p>definidas no</p><p>JDBC</p><p>O acesso de uma aplicação Java para uma base de dados é</p><p>realizada pelo pacote java.sql, que seleciona o driver apropriado</p><p>para o banco de dados particular que está em uso.</p><p>Conheça um pouco mais sobre as Interfaces existentes no JDBC.</p><p>driver manager</p><p>connection</p><p>statement prepared statement</p><p>resultset</p><p>DriverManager: tem como objetivo localizar o driver referenciado na inicialização da aplicação e os</p><p>drivers que foram carregados explicitamente no método Class.forName().</p><p>Connection: permite a conexão com o banco de dados específico, controle de transação e de</p><p>liberação dos recursos (SQL).</p><p>Statement: usado para executar uma instrução SQL e retornar os resultados que ela produz.</p><p>Prepared Statement: objeto que representa uma instrução SQL pré-compilada. Esse objeto pode</p><p>ser usado para executar a instrução várias vezes.</p><p>ResultSet: interface que fornece métodos para recuperar valores de uma tabela de dados e</p><p>navegação de dados.</p><p>INFOGRÁFICO 1</p><p>Fonte: adaptado de https://cutt.ly/IwqdlJeH</p><p>Acesso em: 8 maio 2023.</p><p>https://cutt.ly/IwqdlJeH</p><p>Persistência de dados</p><p>183</p><p>Criando a primeira ligação</p><p>A figura 3 representa um exemplo simples de uma classe de</p><p>conexão ao banco de dados criado no MySQL.</p><p>Agora, você compreenderá a implementação do pacote</p><p>java.sql:</p><p>• Linhas 3 a 5: importação da biblioteca com suas</p><p>classes;</p><p>• Linha 7: declaração da classe Conexao;</p><p>• Linha 8: declaração do método getConnection. O</p><p>método getConnection tem como função estabe-</p><p>lecer uma comunicação entre a aplicação e o driver</p><p>específico;</p><p>• Linha 10, 17 e 19: definição do bloco try catch que</p><p>tenta realizar a conexão da aplicação com o banco</p><p>de dados. Caso não ocorra a comunicação por qual-</p><p>quer motivo, a exceção SQLException será efetuada</p><p>Try catch: essa estrutura</p><p>tem como função desviar a</p><p>execução de um bloco de</p><p>código, caso ocorra algum</p><p>tipo de erro. Quando ocorre</p><p>esse erro, o programa gera</p><p>uma exceção que será</p><p>tratada pelo programa.</p><p>FIGURA 3</p><p>Classe Conexao.</p><p>Fonte: elaborada pela autora.</p><p>Persistência de dados</p><p>184</p><p>enviando um alerta com os devidos códigos encon-</p><p>trados na documentação do Java;</p><p>• Linha 12 a 14: declaração das variáveis com as infor-</p><p>mações do servidor local, usuário e senha. Nessas</p><p>linhas, também constam o nome do banco de dados</p><p>que vai se conectar e os dados necessários para esta-</p><p>belecer o protocolo usado pelo driver JDBC;</p><p>• Linha 15: o método getConnection da classe Driver-</p><p>Manager tenta conectar-se com o banco de dados</p><p>especificados nas declarações da classe.</p><p>APROFUNDE-SE</p><p>Comandos SQL – 10 essenciais para</p><p>todo programador</p><p>Aprimore seus conhecimentos sobre as instruções SQL! O</p><p>artigo demonstra de forma prática e rápida como utilizar</p><p>os comandos SQL com exemplos simples para o melhor</p><p>entendimento.</p><p>Disponível em: https://cutt.ly/swqdl2vF</p><p>Acesso em: 19/04/2023.</p><p>Trabalhando o CRUD</p><p>Devido ao crescimento da complexidade dos programas de</p><p>computadores, houve uma maior demanda por armazena-</p><p>mento e gerenciamento de dados. Nesse cenário, destaca-se</p><p>o CRUD, sigla para create, read, update e delete, mecanismo</p><p>usado nas movimentações de registros da tabela. O CRUD</p><p>https://cutt.ly/swqdl2vF</p><p>https://cutt.ly/swqdl2vF</p><p>Persistência de dados</p><p>185</p><p>representa as operações realizadas no banco de dados rela-</p><p>cional e não relacional, que facilitam o processamento e a</p><p>integridade dos dados. As operações são:</p><p>• Create: criação de um registro em uma tabela;</p><p>• Read: leitura de um ou mais registros em uma tabela;</p><p>• Update: atualização de um ou mais registros de uma</p><p>tabela;</p><p>• Delete: exclusão de um ou mais registros de uma</p><p>tabela.</p><p>Para que você tenha um melhor entendimento, será expli-</p><p>cado com mais detalhes o funcionamento do CRUD na</p><p>linguagem Java por meio de um exemplo prático. Em vários</p><p>setores administrativos, os sistemas de informação são utili-</p><p>zados para o gerenciamento de pessoas, seja um cliente,</p><p>paciente, aluno, dentre outras opções. Esses dados devem</p><p>ser armazenados em tabelas no banco de dados. Como saber</p><p>quais dados serão manipulados? Basta o estabelecimento</p><p>apresentar uma ficha de cadastro, como mostra a figura 4.</p><p>FIGURA 4</p><p>Usuário preenchendo</p><p>uma ficha de cadastro</p><p>manualmente.</p><p>Persistência de dados</p><p>186</p><p>Depois, o setor de informática retransmite essas informa-</p><p>ções para o sistema de informação onde serão guardados os</p><p>dados do usuário. Suponha que você seja um programador</p><p>de uma empresa de criação de software e precise criar o</p><p>programa para essa situação.</p><p>Para criar uma aplicação que realiza a manipulação</p><p>de banco de dados, é necessário incluir instruções no</p><p>programa para carregar um driver de comunicação</p><p>com o banco de dados. [...] a manipulação de dados</p><p>será realizada em duas etapas: a primeira irá realizar</p><p>apenas a conexão com o banco de dados e a segunda,</p><p>a manipulação dos registros da tabela (FURGERI, 2015 p.</p><p>235).</p><p>Para elaborar essa aplicação, você pode seguir alguns passos:</p><p>1. Criar a classe de conexão com o banco de dados.</p><p>2. Criar as classes de interface gráfica que permitem</p><p>aos usuários digitar as informações que irão para o</p><p>banco de dados.</p><p>3. Criar as classes que contêm as instruções SQL para</p><p>as operações do CRUD.</p><p>4. Realizar os testes antes de finalizar a aplicação.</p><p>Para facilitar a manutenção e a construção de um programa</p><p>completo, conheça o padrão de arquitetura MVC, que tem</p><p>como objetivo dividir a aplicação em camadas. Aprenda</p><p>sobre isso no vídeo.</p><p>Persistência de dados</p><p>187</p><p>ASSISTA</p><p>Padrão MVC</p><p>No vídeo, você tem a oportunidade de conhecer o que é o</p><p>padrão MVC para a construção de sistema de informação</p><p>utilizando a orientação a objetos</p><p>Acesse na plataforma o vídeo.</p><p>Persistência de dados</p><p>188</p><p>Introdução ao ORM e JPA</p><p>Agora, você aprenderá os conceitos de ORM e JPA, com</p><p>suas principais anotações. Também terá a oportunidade de</p><p>conhecer em JPA as anotações de relacionamentos entre</p><p>classes.</p><p>JPA</p><p>JPA significa Java Persistence API. De acordo com Muniz et</p><p>al. (2021), a JPA é a especificação Java para trabalhar com o</p><p>mapeamento de objetos (classes) com tabelas de banco de</p><p>dados relacionais. Essas tabelas são conhecidas como ORM</p><p>(Object-Relational Mapping). O framework JPA determina</p><p>um padrão que inclui um conjunto de funcionalidades:</p><p>• mapeamento objeto-relacional;</p><p>• formas flexíveis de acesso ao estado da entidade por</p><p>parte do provedor;</p><p>• extensões para JPQL;</p><p>• criação de critérios Java orientados a objetos para</p><p>execução dinâmica de consultas.</p><p>ORM</p><p>Saiba um pouco mais sobre ORM! O ORM é um tipo de</p><p>conversão de dados realizado por meio de uma progra-</p><p>mação. O surgimento do ORM aconteceu quando os desen-</p><p>volvedores de sistemas precisaram otimizar o código-fonte</p><p>para acessar os dados armazenados no banco de dados. O</p><p>uso do ORM é realizado por meio do mapeamento da classe</p><p>Persistência de dados</p><p>189</p><p>com seus respectivos dados e como esses dados são inse-</p><p>ridos dentro da tabela. Quando existe uma aplicação Java</p><p>que utiliza o framework ORM, este se torna responsável pela</p><p>abstração do banco de dados relacional, da mesma forma</p><p>que se faz a abstração do banco de dados orientado a objetos,</p><p>algo muito bom para quem está usando a linguagem Java.</p><p>Neste momento, é importante que você considere os dados,</p><p>os tipos de dados e as relações com as entidades de qual-</p><p>quer outra tabela.</p><p>A portabilidade da aplicação entre banco de dados, trata-</p><p>mento de acesso simultâneo e acesso às funções são</p><p>algumas vantagens do framework ORM (COELHO, 2013).</p><p>APROFUNDE-SE</p><p>ORM - entendendo diferentes abordagens de</p><p>mapeamento objeto-relacional</p><p>Para complementar seu conhecimento, assista ao vídeo, que</p><p>aborda os padrões mais usados por ferramentas ORM para</p><p>realizar o mapeamento na construção de sistemas.</p><p>Disponível em: https://youtu.be/NvdGYdOAt5Q</p><p>Acesso em: 19/04/2023.</p><p>Primeiro exemplo</p><p>Em alguns sistemas de entrega é preciso obter alguns dados</p><p>do local de destino, tais como, nome, bairro, rua, etc. A figura</p><p>5 demonstra como um sistema de GPS pode identificar</p><p>alguns pontos importantes dentro de um mapa. A classe</p><p>https://youtu.be/NvdGYdOAt5Q</p><p>https://youtu.be/NvdGYdOAt5Q</p><p>Persistência de dados</p><p>190</p><p>DestinoEntrega representada na figura está demonstrando</p><p>uma classe em JPA.</p><p>Você pode observar que os comandos @Entity (Linha 8),</p><p>@Id (Linha 11), @GeneratedValue (Linha 12) são anotações</p><p>da classe Java que indicam os campos persistidos em um</p><p>banco de dados pela API JPA (MACHADO, 2016, p. 99). As</p><p>informações escritas nas linhas 13 a 17 referem-se aos dados</p><p>que serão gerenciados na classe JPA.</p><p>É chamada de entidades as classes que estão vinculadas</p><p>com uma unidade de persistência. Como a JPA trata</p><p>de mapeamento objeto-relacional (ORM), a unidade de</p><p>persistência é um banco de dados, e de modo geral, uma</p><p>entidade estará associada a uma tabela nesse banco</p><p>(CORDEIRO, 2014, p. 37).</p><p>As anotações citadas na classe têm o seguinte significado:</p><p>• @Entity: especifica uma entidade, ou seja, a tabela</p><p>do banco de dados;</p><p>FIGURA 5</p><p>Exemplo da classe Cidade</p><p>escrita em JPA.</p><p>Fonte: elaborada pela autora.</p><p>Persistência de dados</p><p>191</p><p>• @Id: indica o atributo que representa a chave-pri-</p><p>mária;</p><p>• @GeneratedValue: identifica que o campo chave</p><p>será de autoincremento.</p><p>Anotações</p><p>As anotações são usadas para configurar as definições da</p><p>classe. Essas anotações são usadas para as classes, proprie-</p><p>dades e métodos da classe. Para escrever as anotações,</p><p>inicia-se com o símbolo ‘@’, seguido de sua descrição.</p><p>As anotações devem ser inseridas antes de uma classe,</p><p>propriedade ou método. Segue uma lista com a definição</p><p>de algumas anotações em JPA.</p><p>Anotações em Java – entidade de classe</p><p>Anotação Descrição</p><p>@Transient</p><p>Indica que a propriedade que não é persistente,</p><p>ou seja, o valor não é mantido no banco de</p><p>dados.</p><p>@Tipo de acesso)</p><p>Comentário usado para se referir o tipo de</p><p>acesso. Exemplo: @AccessType(Campo).</p><p>@ColumnResult</p><p>Usada na referência ao nome de uma coluna da</p><p>consulta SQL utilizando a cláusula select.</p><p>@NamedQueries Especifica uma lista de consultas nomeadas.</p><p>Ciclo de vida de um objeto na JPA</p><p>Para compreender como funciona um objeto JPA, é preciso</p><p>conhecer o ciclo de vida que se inicia no momento em que</p><p>o objeto é iniciado pela primeira vez até chegar em sua</p><p>gravação no banco de dados. A figura 6 demonstra como</p><p>funciona o ciclo de vida de uma JPA.</p><p>QUADRO 1</p><p>Fonte: adaptado de https://cutt.ly/</p><p>swqdziWt Acesso em: 8 mai. 2023.</p><p>https://cutt.ly/swqdziWt</p><p>https://cutt.ly/swqdziWt</p><p>Persistência de dados</p><p>192</p><p>Para que você possa compreender o esquema do ciclo de</p><p>vida de uma JPA, acompanhe uma breve explicação.</p><p>O objeto só vai se tornar um objeto persistente quando</p><p>passar pelo estado Managed (gerenciado) chamando o</p><p>método persist ou por meio do método merge, mas, nesse</p><p>caso, há uma pequena diferença. De acordo com Cordeiro</p><p>(2014, p. 75), o método persist faz com que o objeto possa ser</p><p>gerenciado, enquanto o método merge retorna o objeto que</p><p>é gerenciado sem fazer nenhuma alteração. Com o objeto</p><p>gerenciado, a JPA mantém o sincronismo entre o objeto e</p><p>o banco de dados por meio do método commit que está</p><p>nessa transação.</p><p>O estado detached é usado com mais frequência, pois os</p><p>objetos detached são os que já foram gerenciados, porém,</p><p>o banco de dados está fechado. Para que as mudanças</p><p>ocorram no objeto detached, é preciso retornar o objeto no</p><p>estado gerenciado por meio do método merge.</p><p>E você já ouviu falar em persistência de dados volátil e não</p><p>volátil? Assista ao vídeo para aprender sobre esse tema.</p><p>FIGURA 6</p><p>Fonte: Cordeiro (2014, p. 74).</p><p>Persistência de dados</p><p>193</p><p>ASSISTA</p><p>Persistência de dados volátil e não volátil</p><p>No vídeo, você conhece a diferença entre persistência de</p><p>dados volátil e não volátil e aprofunda seu conhecimento sobre</p><p>a importância da persistência de dados para as empresas.</p><p>Acesse na plataforma o vídeo.</p><p>Persistência de dados</p><p>194</p><p>Persistência de dados com</p><p>JPA</p><p>Neste tópico, você aprenderá como implementar uma JPA</p><p>usando a linguagem Java com a persistência de um banco</p><p>de dados em MySQL. Essa aplicação terá as operações do</p><p>CRUD de uma tabela não relacional. Aqui, vai ser abordado</p><p>um exemplo simples, utilizado nos diversos programas</p><p>desenvolvidos na linguagem Java.</p><p>Antes, aproveite para aprofundar seus conhecimentos.</p><p>APROFUNDE-SE</p><p>JPA – Conexão com 2 Banco de Dados</p><p>diferentes</p><p>Saiba como é realizada a conexão nos bancos de dados MySQL</p><p>e Postgres para ser usada em um projeto JPA. Acesse!</p><p>Disponível em: https://cutt.ly/Pwqdzcwv</p><p>Acesso em: 19/04/2023.</p><p>MySQL: É um sistema de</p><p>gerenciador de banco de</p><p>dados relacional de código</p><p>aberto usado em várias</p><p>aplicações gratuitas para</p><p>manipular suas bases de</p><p>dados. O MySQL utiliza a</p><p>linguagem SQL –</p><p>Structure</p><p>Query Language, uma</p><p>linguagem bem conhecida</p><p>que gerencia dados</p><p>armazenados em um</p><p>banco de dados.</p><p>Para compreender como é realizada essa comunicação</p><p>entre a linguagem Java e o banco de dados, a JPA API é um</p><p>framework para camada de persistência dos dados, que</p><p>oferece uma camada de comunicação entre o programa</p><p>e o banco de dados. Aqui, o programa será criado no IDE</p><p>NetBeans, usando a linguagem Java; e o banco de dados</p><p>será o MySQL, disponível em um servidor web.</p><p>https://cutt.ly/Pwqdzcwv</p><p>https://cutt.ly/Pwqdzcwv</p><p>Persistência de dados</p><p>195</p><p>Algumas facilidades que a JPA oferece referem-se à sua</p><p>arquitetura:</p><p>• Conversão de registros do banco de dados em</p><p>objetos Java;</p><p>• Não ter necessidade de criar as instruções SQL para</p><p>manipular os registros da tabela;</p><p>• Aplicação livre do banco de dados, pois é apenas</p><p>uma troca de mensagem.</p><p>Veja na figura 7:</p><p>Por onde começar uma JPA?</p><p>Para construir um projeto com sucesso, sugiro que você siga</p><p>alguns passos.</p><p>Comece com um novo projeto no IDE e escolha a categoria</p><p>Maven; determine as dependências e informe os dados de</p><p>conexão com o banco de dados.</p><p>FIGURA 7</p><p>Fonte: adaptado de https://cutt.ly/</p><p>qwqdzQFR Acesso em: 8 mai. 2023.</p><p>Maven: projeto Maven</p><p>é uma ferramenta que</p><p>gerencia a construção,</p><p>geração de relatórios e</p><p>documentação de um</p><p>projeto a partir de uma</p><p>informação central.</p><p>https://cutt.ly/qwqdzQFR</p><p>https://cutt.ly/qwqdzQFR</p><p>Persistência de dados</p><p>196</p><p>Para compreender melhor sobre JPA, considere a seguinte</p><p>situação:</p><p>Uma empresa de decoração de festas é parceira de algumas</p><p>empresas de eventos. Para gerenciamento e controle dos</p><p>pedidos das decorações e dos locais onde ocorrerão as</p><p>festas, foi solicitada para você uma aplicação em Java que</p><p>será desenvolvida em JPA.</p><p>Para que possa armazenar os locais que irão levar os itens para</p><p>a decoração de festa, foi criada uma modelagem da tabela.</p><p>Com essas informações, é possível criar a classe de persis-</p><p>tência. Veja a figura 9:</p><p>FIGURA 8</p><p>Representação gráfica da</p><p>tabela Local.</p><p>Fonte: elaborada pela autora.</p><p>Persistência de dados</p><p>197</p><p>Linha 6: identifica o nome da persistência por meio da</p><p>propriedade name e o tipo de transação no qual o caso é</p><p>RESOURCE_LOCAL.</p><p>Linha 7: identifica a biblioteca importada no projeto.</p><p>Linhas 9 a 13: declaram as informações do servidor web para</p><p>MySQL.</p><p>Após essas configurações iniciais, é preciso fazer o mapea-</p><p>mento da tabela.</p><p>FIGURA 9</p><p>Arquivo persistente.xml do</p><p>projeto Evento.</p><p>Fonte: elaborada pela autora.</p><p>Persistência de dados</p><p>198</p><p>Linhas 5 e 7: são as anotações da JPA para o mapeamento</p><p>da tabela.</p><p>Linhas 8 a 10: declaração dos campos da tabela como atri-</p><p>butos da classe. Importante que essa declaração seja idên-</p><p>tica aos nomes do campo da tabela no banco de dados.</p><p>Linhas 13 a 18: métodos get e set do atributo id da tabela</p><p>Local. Esses métodos devem ser criados para todos os</p><p>campos declarados.</p><p>Essas informações contidas na classe Local são o mínimo</p><p>necessário para a classe funcionar. Lembre-se que deve</p><p>seguir o padrão para outros exemplos.</p><p>Para realizar as operações de buscas e alterações de registros,</p><p>deve ser criado o EntityManager, conhecido como fábrica.</p><p>FIGURA 10</p><p>Classe Java Local com a</p><p>definição do mapeamento</p><p>da tabela Local do banco</p><p>de dados.</p><p>Fonte: elaborada pela autora.</p><p>Persistência de dados</p><p>199</p><p>Linha 10: você deve observar que o parâmetro do método</p><p>createEntityManagerFactory está informando o valor do</p><p>name da classe persistence.xml, no comando persistence-</p><p>-uml.</p><p>Linha 11: o método irá retornar à implementação da persis-</p><p>tência do JPA que contém o método createEntityManager-</p><p>Factory.</p><p>Saiba que uma vez que a fábrica está criada, “a ideia é que</p><p>você guarde essa instância durante todo o tempo de vida da</p><p>sua aplicação” (AFONSO, 2019).</p><p>Neste momento, você pode criar as transações de inclusão,</p><p>edição e exclusão de registros, pois temos acesso à instância</p><p>de EntityManager. Não há regras que indicam o tempo que</p><p>essa instância deve ser mantida; você pode usar de acordo</p><p>com as requisições da aplicação.</p><p>Agora, para complementar seu conhecimento, saiba quando</p><p>se aplica o JPA e o Hibernate na aplicação Java</p><p>FIGURA 11</p><p>Método EntityManager</p><p>que contém o comando de</p><p>persistência.</p><p>Fonte: elaborada pela autora.</p><p>Persistência de dados</p><p>200</p><p>REFLITA</p><p>Vendas de ingresso online: aplicando JPA</p><p>O sistema de vendas de ingresso tem como objetivo principal</p><p>automatizar o processo de compras de ingressos. Esse sistema</p><p>traz alguns benefícios importantes, tais como agilidade e</p><p>praticidade para os clientes na compra do ingresso de acordo</p><p>com o evento.</p><p>O recebimento dos valores das vendas é gerenciado com mais</p><p>facilidade e o cliente pode conseguir comprar o ingresso em</p><p>qualquer momento do dia; além disso, o administrador do</p><p>evento tem como acompanhar todo o processo.</p><p>Com base nessa demanda no setor de entretenimento, faça uma reflexão sobre como se pode</p><p>criar um sistema online utilizando a JPA e sobre as vantagens desse sistema.</p><p>ASSISTA</p><p>JPA e Hibernate</p><p>O vídeo traz as diferenças sobre aplicação de JPA e Hibernate</p><p>no desenvolvimento de sistemas. Confira!</p><p>Acesse na plataforma o vídeo.</p><p>Chegou o momento de fazer uma reflexão depois de</p><p>aprender todos esses recursos.</p><p>Considerações finais</p><p>Você chegou ao fim desta unidade! Aqui, aprendeu a criar</p><p>programas na linguagem Java com os recursos de persis-</p><p>tência em JPA, ORM e as operações de manipulação de</p><p>registros no banco de dados MySQL. Você teve, ainda, a</p><p>oportunidade de ampliar seus conhecimentos na cons-</p><p>trução de sistemas desenvolvidos na linguagem Java com</p><p>o uso de framework e também entendeu as diferenças dos</p><p>recursos JPA com JDBC e JPA com ORM, para que possa</p><p>fazer a melhor escolha em seus projetos futuros.</p><p>Referências</p><p>AFONSO, Alexandre. Tutorial definitivo: tudo o que você precisa para</p><p>começar bem com JPA. Algaworks, 2 jul. 2019. Disponível em: https://</p><p>blog.algaworks.com/tutorial-jpa Acesso em: 20 abr. 2023.</p><p>COELHO, Hébert. JPA Eficaz: as melhores práticas de persistência de</p><p>dados em Java. 1. ed. São Paulo: Casa do Código, 2013.</p><p>CORDEIRO, Gilliard. Aplicações Java para a web com JSF e JPA. 1. ed.</p><p>São Paulo: Casa do Código, 2014.</p><p>DEITEL, Paul. DEITEL, Harvey. Java: como programar. 10. ed. São Paulo:</p><p>Pearson Education do Brasil, 2017.</p><p>FELIX, Rafael. Programação Orientada a Objetos. São Paulo: Pearson</p><p>Education do Brasil, 2016.</p><p>FURGERI, Sérgio. Java 8: Ensino didático – desenvolvimento e</p><p>implementação de aplicações. São Paulo: Editora Saraiva, 2015.</p><p>GUEDES, Gilleanes T. A. UML 2: Uma abordagem prática. 3. ed. São</p><p>Paulo: Novatec Editora, 2018.</p><p>MACHADO, Rodrigo P. et al. Desenvolvimento de software III:</p><p>programação de sistemas web orientada a objetos em Java. Porto</p><p>Alegre: Bookman, 2016.</p><p>MUNIZ, Antonio. et al. Jornada Java: unindo práticas para construção de</p><p>código limpo e implantação que entregue valor ao cliente. 1. ed. Rio de</p><p>Janeiro: Brasport Livros e Multimídia Ltda, 2021. Disponível em: https://</p><p>elibro.net/pt/ereader/newtonpaiva/175584 Acesso em: 11 abr. 2023.</p><p>RODRIGUES FILHO, Renato. Desenvolva Aplicativos com Java 6. 1. ed.</p><p>São Paulo: Érica, 2008.</p><p>SAKURAI, Rafael. JPA Introdução. Universidade Java, 2011. Disponível</p><p>em http://www.universidadejava.com.br/jee/jpa-introducao/</p><p>https://blog.algaworks.com/tutorial-jpa</p><p>https://blog.algaworks.com/tutorial-jpa</p><p>https://elibro.net/pt/ereader/newtonpaiva/175584</p><p>https://elibro.net/pt/ereader/newtonpaiva/175584</p><p>http://www.universidadejava.com.br/jee/jpa-introducao/</p><p>Experiência pensada</p><p>por edmais.tech</p><p>https://edmais.tech</p><p>Palavras do Autor</p><p>Introdução à programação orientada a objetos</p><p>Programação estruturada x programação orientada a objetos e características da linguagem Java</p><p>Origem da</p><p>orientação a objetos</p><p>Classes e instâncias</p><p>Considerações finais</p><p>Referências</p><p>Encapsulamento, construtor e sobrecarga</p><p>Encapsulamento</p><p>Construtor</p><p>Sobrecarga de método e construtor</p><p>Considerações finais</p><p>Referências</p><p>Coleção de objetos em Java</p><p>Associação de classes</p><p>Associação simples de classes</p><p>Agregação e composição</p><p>Considerações finais</p><p>Referências</p><p>Herança</p><p>Herança</p><p>Sobrescrita de métodos</p><p>Aplicando os conceitos de herança e sobrescrita de métodos</p><p>Considerações finais</p><p>Referências</p><p>Polimorfismo</p><p>Polimorfismo</p><p>Polimorfismo universal</p><p>Polimorfismo ad hoc</p><p>Considerações finais</p><p>Referências</p><p>Classes abstratas e interfaces</p><p>Classe e método abstrato</p><p>Interface e múltipla herança</p><p>Aplicações práticas de classes abstratas e interfaces</p><p>Considerações finais</p><p>Referências</p><p>Pacotes, modificadores e atributo/método estático</p><p>Pacotes em java</p><p>Modificadores de acesso</p><p>Atributo e método estático</p><p>Considerações finais</p><p>Referências</p><p>Persistência de dados</p><p>Persistência de dados com JDBC</p><p>Introdução ao ORM e JPA</p><p>Persistência de dados com JPA</p><p>Considerações finais</p><p>Referências</p><p>aplicação desses conceitos na linguagem de</p><p>programação e alguns exemplos na prática.</p><p>Disponível em: https://youtu.be/yhEqroz32Nk</p><p>Acesso em: 06/01/2023.</p><p>https://youtu.be/yhEqroz32Nk</p><p>https://youtu.be/yhEqroz32Nk</p><p>Introdução à programação orientada a objetos</p><p>19</p><p>Quando se trata de orientação a objetos, você deve compre-</p><p>ender alguns conceitos que estão explicados no vídeo:</p><p>• Classe e objetos;</p><p>• Encapsulamento;</p><p>• Herança/Generalização;</p><p>• Polimorfismo;</p><p>• Composição.</p><p>ASSISTA</p><p>Orientação a objetos</p><p>Assista ao vídeo e entenda o que são esses conceitos, a partir</p><p>de uma analogia simples que mostra, com um exemplo do dia</p><p>a dia, como cada um deles pode ser aplicado.</p><p>Acesse na plataforma o vídeo.</p><p>Vale lembrar que na orientação a objetos, os conceitos de</p><p>objetos e classes devem estar bem esclarecidos. Aqui vai</p><p>mais uma definição desses itens que são trabalhados na</p><p>Programação orientada a objetos, escrita na linguagem</p><p>Java:</p><p>• Objetos: Objeto pode ser qualquer coisa do mundo</p><p>real (FUGERI, 2012).</p><p>• Classes: Para Boratti (2007), uma classe define</p><p>as características de um grupo de objetos. Em</p><p>Introdução à programação orientada a objetos</p><p>20</p><p>linguagem de programação, as classes são estru-</p><p>turas de dados de um objeto.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 3</p><p>Exemplo de objetos de</p><p>uma mesma classe.</p><p>Fonte: adaptado de https://cutt.ly/</p><p>M3LHQTy Acesso em 11 jan. 2023.</p><p>REFLITA</p><p>Para um bom desenvolvimento de software, o mercado de</p><p>trabalho apresenta uma vasta diversidade de princípios e</p><p>conceitos que são aplicados e venho destacar a programação</p><p>orientada a objetos, a qual se tornou a principal metodologia</p><p>de desenvolvimento de sistemas.</p><p>As linguagens de programação como Java,</p><p>C#, Python e C++ são totalmente orientadas a</p><p>objeto e mesmo possuindo formas diferentes</p><p>de implementação, todas seguem os mesmos</p><p>princípios e conceitos (MONQUEIRO, 2007).</p><p>A linguagem Java ainda está no top 10 das</p><p>linguagens de programação na construção de sistemas.</p><p>Independente da linguagem de programação, ter um bom</p><p>conhecimento nas técnicas da orientação a objetos é essencial</p><p>para ser um profissional qualificado. Pesquisas na área de</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>https://cutt.ly/M3LHQTy</p><p>https://cutt.ly/M3LHQTy</p><p>Introdução à programação orientada a objetos</p><p>21</p><p>engenharia de software apontam que a criação de apps</p><p>mobiles está em alta no mercado de trabalho.</p><p>Com base nessas informações, faça uma reflexão sobre as</p><p>técnicas de orientação a objetos e crie um modelo de classes</p><p>para a criação de um app qualquer.</p><p>Instanciação de um objeto</p><p>Quando um objeto representa uma classe, podemos</p><p>começar a falar sobre instanciação. A instância de um</p><p>objeto é uma materialização da classe (SANTOS, 2015, p</p><p>14). Para Boratti (2017), é uma operação que determina um</p><p>objeto que pertence à classe.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 4</p><p>Exemplo de instanciação</p><p>de uma classe.</p><p>Introdução à programação orientada a objetos</p><p>22</p><p>Para finalizar esse tópico, é importante um breve resumo.</p><p>Abstração é um processo mental de</p><p>observação para criar uma classe de</p><p>objetos.</p><p>Classe de objetos é quando temos um</p><p>objeto com suas características e funções</p><p>definidas pelo processo de abstração.</p><p>As ações de encapsulamento, herança,</p><p>polimorfismo e composição fazem parte</p><p>dos paradigmas da orientação a objetos.</p><p>Introdução à programação orientada a objetos</p><p>23</p><p>Classes e instâncias</p><p>Neste tópico, você vai compreender o conceito de classes</p><p>de objetos, como as classes são representadas a partir de</p><p>um modelo utilizando a UML e como os objetos são instan-</p><p>ciados pela técnica de abstração. Na prática, será apresen-</p><p>tado como é escrito o código-fonte na linguagem Java de</p><p>acordo com os conceitos exibidos.</p><p>Classe</p><p>Agora, você entenderá como trabalhar com classe e suas</p><p>características na linguagem Java. Reforçando alguns</p><p>conceitos:</p><p>Representação de Classes</p><p>Segundo Boratti (2007), uma classe define as caracterís-</p><p>ticas de um grupo de objetos, isto é, define como serão</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 5</p><p>Representação de</p><p>classes de objetos e suas</p><p>características.</p><p>Fonte: elaborada pela autora.</p><p>Introdução à programação orientada a objetos</p><p>24</p><p>as instâncias pertencentes a ela. Veja na figura 5, o relógio</p><p>indica o objeto abstraído do mundo real, já a classe de</p><p>objetos contém vários relógios a fim de representar a classe</p><p>de objetos com suas semelhanças. As características do</p><p>relógio são indicadas nos atributos, que podem ser vistos</p><p>pela imagem do relógio analógico de parede. Já o método</p><p>representa as ações realizadas pelo relógio, por exemplo, a</p><p>ação de disparar um alarme.</p><p>A representação final de uma classe é reproduzida por um</p><p>texto escrito em uma modelagem de programação. Ela</p><p>pode ser realizada em um formato retangular que especi-</p><p>fica o nome da classe, seus atributos e métodos.</p><p>Esse exemplo representa a abstração do objeto animal do</p><p>mundo real.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 6</p><p>Representação visual de</p><p>uma classe.</p><p>Fonte: elaborada pela autora.</p><p>Introdução à programação orientada a objetos</p><p>25</p><p>UML – Diagrama de classes</p><p>Para modelar uma classe, é usado o diagrama de classes</p><p>da UML – Linguagem unificada de modelagem. Na progra-</p><p>mação orientada a objetos, usamos as classes modeladas</p><p>pelo diagrama de classe, pois esse tipo de diagrama</p><p>ilustra classes, interfaces e suas associações. O diagrama de</p><p>classes permite ao programador a visão estática do objeto</p><p>(LARMAN, 2011, pg. 268). Para o seu aprendizado, é impor-</p><p>tante entender que o diagrama de classes pode ser usado</p><p>também para representar uma perspectiva de software ou</p><p>um projeto de sistema de informação. Na UML, uma classe</p><p>é composta por três partes: nome do objeto, atributos e</p><p>métodos (veja a figura 6).</p><p>APROFUNDE-SE</p><p>Engenharia de software -</p><p>Aula 10 - Modelos estruturais</p><p>Assista ao vídeo e veja como é criada a representação de uma</p><p>classe de objetos no modelo UML.</p><p>Disponível em: https://youtu.be/0uhwR0ieLaM</p><p>Acesso em: 08/01/2023.</p><p>Criando classes em Java</p><p>Para ter sucesso na construção das classes na linguagem</p><p>Java, é necessário o uso do computador com a IDE NetBeans.</p><p>https://youtu.be/0uhwR0ieLaM</p><p>https://youtu.be/0uhwR0ieLaM</p><p>Introdução à programação orientada a objetos</p><p>26</p><p>ASSISTA</p><p>Criando classes em Java</p><p>Chegou o momento de você aprender a criar uma classe na</p><p>linguagem Java. Acompanhe no vídeo!</p><p>Acesse na plataforma o vídeo.</p><p>Para um programa na linguagem Java utilizando a IDE</p><p>NetBeans, é importante identificar as principais linhas de</p><p>comandos quando é gerado pela própria IDE NetBeans.</p><p>Ao solicitar um novo arquivo do tipo Classe Principal, a IDE</p><p>NetBeans já escreve o método principal (main), que tem</p><p>a responsabilidade de executar o arquivo chamando as</p><p>classes de objetos contidas no projeto. A linha do método da</p><p>classe main public static void main (String args[]) aparece</p><p>em todas as classes executáveis e não pode ser alterado.</p><p>Veja o significado dos comandos dessa linha:</p><p>public à é um tipo de visibilidade da classe. É pública, para</p><p>que todas as outras classes tenham acesso a essa principal.</p><p>static à comando que obriga o compartilhamento de todos</p><p>os objetos da classe.</p><p>void à é o valor de retorno do método, nesse caso, não</p><p>retorna nada.</p><p>Perceba como é importante conhecer todos os conceitos</p><p>iniciais para que seu aprendizado seja efetivo! Nesse sentido,</p><p>sugiro que aproveite para rever as principais informações,</p><p>antes de seguir adiante em sua trilha de aprendizagem.</p><p>Considerações finais</p><p>Que bom que chegou ao final desta unidade! Acredito que</p><p>tenha aproveitado todos os links e sugestões de leitura para</p><p>se aprofundar nesse universo da programação orientada a</p><p>objetos. Veja que você aprendeu sobre os conceitos iniciais</p><p>da orientação a objetos e como aplicá-los na linguagem</p><p>de programação Java. Teve também a oportunidade de</p><p>conhecer brevemente sobre a UML,</p><p>uma linguagem de</p><p>modelagem que oferece todo suporte nesses projetos orien-</p><p>tados a objetos. Não perca o foco e siga em frente!</p><p>Referências</p><p>BORATTI, Isaías C. Programação Orientada a objetos em Java.</p><p>Florianópolis: Visual Books, 2007.</p><p>DEITEL, Harvey. M; DEITEL, Paul J. Java: como programar. 8. ed. São</p><p>Paulo: Pearson, 2010.</p><p>FURGERI, Sérgio. Java 7: Ensino Didático. 2. ed. São Paulo: Editora Érica,</p><p>2012.</p><p>LARMAN, Craig. Utilizando UML e Padrões. Porto Alegre: Bookman, 2011.</p><p>MONQUEIRO, Júlio C. B. Programação Orientada a Objetos: uma</p><p>introdução. Hardware.com.br, 29 out. 2007. Disponível em: https://www.</p><p>hardware.com.br/artigos/programacao-orientada-objetos/ Acesso em:</p><p>15 jan. 2023.</p><p>POLETINI, Ricardo A. Aprendendo Java por meio de conceitos e</p><p>exemplos. 1. ed. Rio de Janeiro: Ciência Moderna, 2015.</p><p>SANTOS, Rafael. Introdução à programação orientada a objetos</p><p>usando Java. Rio de Janeiro: Elsevier, 2011.</p><p>SCHILDT, Herbert. Java para iniciantes. Tradução: Aldir José Coelho</p><p>Corrêa da Silva. Porto Alegre: Bookman, 2015.</p><p>https://www.hardware.com.br/artigos/programacao-orientada-objetos/</p><p>https://www.hardware.com.br/artigos/programacao-orientada-objetos/</p><p>29</p><p>Encapsulamento, construtor e sobrecarga</p><p>Objetivos de aprendizagem</p><p>Compreender os conceitos de encapsulamento, construtor e</p><p>sobrecarga e implementar os conceitos na linguagem Java.</p><p>Tópicos de estudo</p><p>• Encapsulamento;</p><p>• Construtor;</p><p>• Sobrecarga de método e construtor.</p><p>Iniciando os estudos</p><p>Olá, estudante!</p><p>Nesta unidade, você terá a oportunidade de aprender sobre</p><p>os seguintes tópicos:</p><p>• Conhecer os conceitos de encapsulamento e os tipos</p><p>de modificadores de acesso;</p><p>• Implementar os conceitos de encapsulamento e os</p><p>modificadores de acesso na linguagem Java;</p><p>• Conhecer o conceito de construtor de uma classe;</p><p>• Aplicar o construtor na linguagem Java em uma</p><p>classe;</p><p>• Conhecer os conceitos de sobrecarga de método;</p><p>30</p><p>• Compreender o uso da sobrecarga de método na</p><p>construção de programas de computador;</p><p>• Aplicar os métodos de sobrecarga na linguagem</p><p>Java.</p><p>Bons estudos!</p><p>Encapsulamento, construtor e sobrecarga</p><p>31</p><p>Encapsulamento</p><p>Encapsulamento é uma das técnicas mais presentes na</p><p>orientação a objetos. Segundo Poletini (2015, p. 18), o conceito</p><p>de encapsulamento está relacionado a proteger os dados</p><p>da classe, agrupando seus registradores internos e disponi-</p><p>bilizando ao usuário apenas as funções necessárias.</p><p>O encapsulamento tem uma lista de vantagens. As princi-</p><p>pais são:</p><p>• Permite que o código fique limpo e legível;</p><p>• Diminui a probabilidade de erros de programação;</p><p>• Os valores dos atributos ficam restritos à execução</p><p>do programa.</p><p>APROFUNDE-SE</p><p>Orientação a objetos: encapsulamento</p><p>Neste vídeo, você vai encontrar respostas a várias dúvidas</p><p>dos programadores sobre o conceito de encapsulamento</p><p>na orientação a objetos. Os apresentadores também</p><p>exemplificam esse conceito de encapsulamento em outras</p><p>linguagens de programação. Acompanhe!</p><p>Disponível em: https://youtu.be/vkLEVgPGcyo</p><p>Acesso em: 17/01/2023.</p><p>https://youtu.be/vkLEVgPGcyo</p><p>https://youtu.be/vkLEVgPGcyo</p><p>Encapsulamento, construtor e sobrecarga</p><p>32</p><p>No encapsulamento, os dados do objeto ficam restritos ao</p><p>usuário, semelhante a uma caixa preta. A figura 1 mostra</p><p>como é representado no caso de um objeto do tipo Caixa</p><p>Corrente de um sistema bancário. Veja que os dados (saldo;</p><p>nome do titular; CPF do titular; e históricos das transações)</p><p>ficam implementados no interior do círculo, representando</p><p>o encapsulamento. Para ter acesso a esses dados, veja que a</p><p>ação getSaldo se encontra fora do centro, representando o</p><p>método de acesso aos dados.</p><p>Para implementar o nível de acesso aos atributos e métodos</p><p>de uma classe, são usados os modificadores de acesso.</p><p>Acompanhe no quadro 1 quais são os tipos e objetivos de</p><p>cada um.</p><p>Figura 1</p><p>Representação de um</p><p>objeto com os dados</p><p>encapsulados.</p><p>Fonte: adaptado de https://</p><p>cutt.ly/18wc3dH Acesso em:</p><p>23 jan. 2023.</p><p>https://cutt.ly/18wc3dH</p><p>https://cutt.ly/18wc3dH</p><p>Encapsulamento, construtor e sobrecarga</p><p>33</p><p>Modificador</p><p>de acesso</p><p>Objetivo</p><p>public Um nível sem restrições. Quando um membro da classe</p><p>for public não é possível fazer o encapsulamento.</p><p>private Restringe o membro da classe para a própria classe.</p><p>protected Permite que o membro da classe tenha acesso pela</p><p>própria classe ou por suas subclasses.</p><p>package Para ter acesso ao membro da classe, somente as</p><p>classes que pertencem ao mesmo pacote.</p><p>Saber definir o nível de acesso aos membros da classe</p><p>(atributos e métodos) é muito importante. De acordo com</p><p>Sintes (2002, p. 25), todo membro que deseja ser visível para</p><p>o projeto precisa ter acesso público; caso queira ocultar,</p><p>precisa ter acesso privado ou protegido.</p><p>Veja um exemplo prático para ter uma melhor compre-</p><p>ensão do assunto. No sistema bancário, é preciso cadas-</p><p>trar os dados do titular da conta, porém esses dados não</p><p>podem ser alterados por qualquer função do sistema. É aí</p><p>que entra a técnica do encapsulamento, em que, por meio</p><p>de uma ação setNomeTitular, é possível cadastrar o nome</p><p>sem saber como isso ocorre internamente, pois essa ação</p><p>já foi definida pelo programador. A ação setNomeTitular é</p><p>um método encapsulado, o qual garante a segurança da</p><p>essência do dado Nome do Titular.</p><p>Quadro 1</p><p>Tipos de modificadores</p><p>de acesso.</p><p>Fonte: Furgeri (2015).</p><p>Encapsulamento, construtor e sobrecarga</p><p>34</p><p>REFLITA</p><p>Estudo de caso</p><p>De acordo com os recentes levantamentos feitos</p><p>pelo SEBRAE e pelo próprio Governo Federal, o</p><p>empreendedorismo no Brasil vem crescendo muito</p><p>nos últimos anos.</p><p>O Brasil, assim como o mundo todo, enfrenta</p><p>uma das suas piores crises financeiras, alavancada</p><p>pela pandemia da Covid-19, que trouxe inúmeras</p><p>consequências para diversos setores.</p><p>Até por causa da necessidade de recomposição de</p><p>renda, ocasionada pelo alto número de demissões</p><p>do mercado, em 2020 o Brasil teve o maior número</p><p>de novos empreendedores de sua história. Ou seja,</p><p>muitas pessoas decidiram investir num negócio</p><p>próprio por subsistência ou renda extra, já que muitas</p><p>também tiveram redução de trabalho e jornada.</p><p>Nesse cenário, os MEIs (microempreendedores</p><p>individuais) são os que tiveram maior aumento.</p><p>Segundo Dados do Portal do Empreendedor, o Brasil</p><p>teve um crescimento entre os empreendedores dessa</p><p>categoria de 13,23% - de março a dezembro de 2020.</p><p>No total, 3,36 milhões de novas empresas foram</p><p>abertas em 2020, somando um total recorde de 19,9</p><p>milhões de negócios em funcionamento no país.</p><p>O empreendedorismo digital foi o que mais se</p><p>desenvolveu e estimulou esse crescimento, a partir do</p><p>momento em que novas oportunidades nascem a partir</p><p>de negócios totalmente online, que podem ser iniciados</p><p>sem sair de casa (SANTANDER, c2021, adaptado).</p><p>Encapsulamento, construtor e sobrecarga</p><p>35</p><p>A “Programa Perfeito” é uma pequena empresa que</p><p>desenvolve sistemas de informação e atualmente está</p><p>criando novas soluções de vendas online para os novos</p><p>empreendedores. Uma solução rápida é criar um sistema</p><p>padrão de vendas para internet a fim de captar novos clientes,</p><p>porém, o mais importante é garantir a qualidade do processo</p><p>“carrinho de compras” desse produto.</p><p>Com base nessas informações, faça uma análise de um carrinho</p><p>de compras de qualquer eCommerce. O ideal é que você</p><p>analise o funcionamento do carrinho de compras em dois</p><p>sites diferentes. Após a análise, aponte dois métodos ocultos</p><p>(encapsulados) encontrados nos carrinhos de compras e reflita</p><p>sobre as vantagens do encapsulamento no sistema eCommerce,</p><p>exclusivamente na função do Carrinho de Compras.</p><p>Importante: os métodos devem ser os mesmos encontrados</p><p>no funcionamento do carrinho de compras.</p><p>Encapsulamento na prática</p><p>Para Palmeira (2017, p. 47), na linguagem Java os modifica-</p><p>dores de acesso são padrões de visibilidade que fornecem</p><p>acessos às classes e seus membros. Para criar uma boa</p><p>prática na programação orientada a objetos, definem-se</p><p>os membros como privados. Para isso, basta</p><p>escrever no</p><p>código-fonte a palavra-chave private. Palmeira (2017, p. 47)</p><p>afirma que essa ação tem como efeito auxiliar na técnica de</p><p>encapsulamento com o objetivo de preservar a segurança.</p><p>Na programação orientada a objetos, essa ação é realizada</p><p>pelos métodos get e set.</p><p>Na UML, a representação dos modificadores de acesso (que</p><p>você vai acompanhar no vídeo abaixo) aos membros da</p><p>classe acontece por meio de sua simbologia.</p><p>UML – Unified Modeling</p><p>Language (Linguagem de</p><p>Modelagem Unificada):</p><p>é uma linguagem</p><p>padrão para modelagem</p><p>orientada a objetos.</p><p>Encapsulamento, construtor e sobrecarga</p><p>36</p><p>Quando há atributos privados e visíveis apenas à própria</p><p>classe, é necessário criar os métodos para permitir a manipu-</p><p>lação dos valores por intermédio de outras classes (FURGERI,</p><p>2015, p. 112).</p><p>Figura 2</p><p>Classe Funcionario com os</p><p>atributos privados.</p><p>Fonte: adaptado de</p><p>Furgeri (2015).</p><p>ASSISTA</p><p>Encapsulamento na linguagem Java</p><p>Chegou o momento de colocar a mão na massa, definindo os</p><p>modificadores de acesso aos atributos e gerando os métodos</p><p>encapsulados (get/set). É hora de praticar o encapsulamento</p><p>na linguagem Java! Vamos lá?</p><p>Acesse na plataforma.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>Encapsulamento, construtor e sobrecarga</p><p>37</p><p>Construtor</p><p>Para Furgeri (2015, p. 116), “o método construtor é o respon-</p><p>sável por construir um objeto com determinados valores”.</p><p>Já para Poletini (2015, p. 36), os construtores têm o objetivo</p><p>de inicializar as variáveis de instância do objeto. Na visão</p><p>de Palmeira (2017, p. 153), o construtor de um objeto é um</p><p>método especial devido a sua função de inicializar os atri-</p><p>butos de uma classe sempre que for instanciado.</p><p>Quando não existe um método construtor declarado, na</p><p>linguagem Java há conteúdos default para os atributos.</p><p>Nesse caso, os valores default são o número zero para atri-</p><p>butos numéricos, os atributos lógicos são inicializados como</p><p>false e outros objetos recebem o valor null.</p><p>De acordo com o Furgeri (2015), esse método tem como</p><p>responsabilidade alocar o espaço na memória para a mani-</p><p>pulação do objeto. Na linguagem Java, o construtor é reque-</p><p>rido para todo o objeto que é criado (DEITEL; DEITEL, 2010).</p><p>APROFUNDE-SE</p><p>O que são construtores?</p><p>O vídeo explica o que é construtor na orientação a objetos e</p><p>as diferenças de implementação do construtor nas principais</p><p>linguagens de programação orientada a objetos. Assista e</p><p>amplie seus conhecimentos!</p><p>Disponível em: https://youtu.be/PYA1v2fMvZs</p><p>Acesso em: 17/01/2023.</p><p>https://youtu.be/PYA1v2fMvZs</p><p>https://youtu.be/PYA1v2fMvZs</p><p>Encapsulamento, construtor e sobrecarga</p><p>38</p><p>O método construtor tem algumas características:</p><p>• Nunca deve retornar um valor;</p><p>• Não deve especificar um tipo de retorno;</p><p>• Possui o mesmo nome da classe.</p><p>Veja uma simples representação gráfica de como funciona</p><p>um método construtor.</p><p>Na figura 3, o objeto p, quando iniciado pelo método cons-</p><p>trutor, define os valores iniciais (7 e 6), ou seja, x recebe o</p><p>valor 7 e y recebe o valor 6. Quando não há valores iniciais</p><p>no método construtor, o objeto é iniciado com valor padrão,</p><p>como você pode observar na figura 4.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>Figura 3</p><p>Representação do</p><p>construtor com</p><p>valores iniciais.</p><p>Fonte: adaptado de https://</p><p>cutt.ly/l8wFnZd Acesso em:</p><p>23 jan. 2023.</p><p>https://cutt.ly/l8wFnZd</p><p>https://cutt.ly/l8wFnZd</p><p>Encapsulamento, construtor e sobrecarga</p><p>39</p><p>Construtor na prática</p><p>Sempre que a palavra reservada new é informada, signi-</p><p>fica que o objeto solicita na memória um espaço. Impor-</p><p>tante reforçar que quando não há um método construtor, o</p><p>compilador irá fornecer um construtor padrão.</p><p>Utilizando uma classe representada no UML, veja como os</p><p>construtores são escritos.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>Figura 4</p><p>Representação do</p><p>construtor com</p><p>valor padrão.</p><p>Fonte: adaptado de https://</p><p>cutt.ly/L8wF16e Acesso em:</p><p>23 jan. 2023.</p><p>Figura 5</p><p>Representação gráfica</p><p>do construtor.</p><p>Fonte: adaptado de</p><p>Boratti (2007).</p><p>https://cutt.ly/L8wF16e</p><p>https://cutt.ly/L8wF16e</p><p>Encapsulamento, construtor e sobrecarga</p><p>40</p><p>Você pode notar que um construtor funciona como qualquer</p><p>método da linguagem Java, ou seja, permite duplicação em</p><p>seu nome, porém os parâmetros devem ser diferentes para</p><p>cada construtor.</p><p>ASSISTA</p><p>Implementação dos construtores</p><p>Assista ao vídeo e aprenda a interpretar uma classe de objetos</p><p>(UML) e escrever na linguagem Java. Importante: utilizada a</p><p>IDE NetBeans para a construção do código.</p><p>Acesse na plataforma.</p><p>Encapsulamento, construtor e sobrecarga</p><p>41</p><p>Sobrecarga de método e</p><p>construtor</p><p>Afinal, o que é um método?</p><p>Na abstração da orientação a objetos, o método é ação e/</p><p>ou mensagem do objeto. Boratti (2007, p. 76) relata que um</p><p>método se constitui em uma sequência de instruções que</p><p>serão executadas pelo computador. Já Polettini (2015, p. 19)</p><p>trata os métodos como mensagens e retrata que os objetos</p><p>se comunicam por meio de mensagens. Em uma classe, você</p><p>fornece um ou mais métodos, que são projetados para realizar</p><p>as tarefas da classe (DEITEL; DEITEL, 2010, p. 57). Para melhor</p><p>compreender esses conceitos, vamos exemplificar: em um</p><p>sistema bancário, na classe Conta Corrente, pode existir um</p><p>método para fazer depósitos em dinheiro, outro método</p><p>para fazer transferência entre contas correntes e um terceiro</p><p>método para pagamento de boleto via código de barras.</p><p>Um método é identificado pela sua assinatura, ou seja, pela</p><p>forma como são declarados na classe.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>Figura 6</p><p>Representação de</p><p>métodos de uma classe.</p><p>Fonte: adaptado de</p><p>Boratti (2007).</p><p>Encapsulamento, construtor e sobrecarga</p><p>42</p><p>Segundo Furgeri (2015, p. 89) “os métodos são trechos de</p><p>código que permitem modularizar um sistema”. Também</p><p>reduzem o tamanho da quantidade de código-fonte e faci-</p><p>litam e agilizam o processo de manutenção do sistema de</p><p>informação. São eles que representam a ação do objeto e</p><p>podem ser chamados toda vez que sua função for neces-</p><p>sária. Veja no infográfico 1 como é composta uma assinatura</p><p>de métodos.</p><p>Encapsulamento, construtor e sobrecarga</p><p>44</p><p>Sobrecarga de métodos</p><p>Como na orientação a objetos, podemos definir vários</p><p>métodos para uma classe; quando esses métodos têm</p><p>o mesmo nome, porém assinaturas diferentes, estamos</p><p>falando de método de sobrecarga. Para Furgeri (2015, p. 97),</p><p>“os métodos sobrecarregados são utilizados para a realização</p><p>de tarefas semelhantes sobre tipos de dados diferentes”.</p><p>APROFUNDE-SE</p><p>Sobrecarga de métodos</p><p>Leia o tópico “Sobrecarga de métodos” (p. 174-176), no capítulo</p><p>6 (Métodos: uma visão aprofundada), do livro Java: como</p><p>programar, para entender com mais detalhes como são</p><p>escritos os métodos sobrecarregados utilizando a linguagem</p><p>Java.</p><p>Autor: Deitel, H.; Deitel, P.</p><p>Local: São Paulo.</p><p>Editora: Pearson.</p><p>Ano: 2010.</p><p>ISBN: 978-85-7605-194-7.</p><p>Disponível em: https://cutt.ly/d8wJYKo</p><p>Acesso em: 20/01/2023.</p><p>Os métodos sobrecarregados também são utilizados nos</p><p>métodos construtores quando são chamados para criar</p><p>novos objetos com dados diferentes. Por exemplo, pode-se</p><p>usar três métodos construtores na classe Casa. Veja na</p><p>figura 7:</p><p>https://cutt.ly/d8wJYKo</p><p>Encapsulamento, construtor e sobrecarga</p><p>45</p><p>Há duas principais vantagens de usar a técnica de sobre-</p><p>carga na programação orientada a objetos:</p><p>1. Permite que o código se torne mais natural. Assim,</p><p>os programadores ficam isentos de ter que criar</p><p>vários métodos com as mesmas funções, mas com</p><p>nomes diferentes, pois isso pode gerar confusão ou</p><p>mesmo falhas na execução do projeto.</p><p>2. Permite que o código seja padronizado e flexível. Por</p><p>exemplo: o método Add tem como objetivo inserir</p><p>valores em um determinado atributo e, com técnica</p><p>de sobrecarga, sua chamada pode ser feita com</p><p>vários valores diferentes usando o mesmo nome</p><p>(Add(1), Add(“nome”), Add(23.4)).</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>Figura 7</p><p>Representação gráfica</p><p>da classe com métodos</p><p>sobrecarregados pelo</p><p>Construtor.</p><p>Fonte: elaborada</p><p>pela autora.</p><p>Encapsulamento, construtor e sobrecarga</p><p>46</p><p>Sobrecarga na linguagem Java</p><p>Na linguagem Java, é muito fácil implementar os métodos</p><p>sobrecarregados nos projetos. Aqui será mostrado como</p><p>aplicar os conceitos de sobrecarga na prática. Para isso, veja</p><p>a classe de objeto que será usada no exemplo do vídeo.</p><p>Figura 8</p><p>Representação gráfica</p><p>da classe Produto com os</p><p>métodos sobrecarregados.</p><p>Fonte: elaborada</p><p>pela autora.</p><p>ASSISTA</p><p>Implementação de sobrecarga</p><p>Neste vídeo, você vai aprender a escrever o código-fonte</p><p>na linguagem Java da classe de objeto Area. O objetivo dos</p><p>métodos é mostrar o resultado do cálculo da área com os</p><p>valores recebidos em seus parâmetros.</p><p>Acesse na plataforma.</p><p>Encapsulamento, construtor e sobrecarga</p><p>47</p><p>Importante: declarar os métodos sobrecarregados com os</p><p>mesmos parâmetros gera um erro de compilação.</p><p>Agora que você estudou os tópicos desta unidade, aproveite</p><p>para rever as principais informações e tirar todas as suas</p><p>dúvidas.</p><p>Siga firme em sua trilha de aprendizagem!</p><p>Considerações finais</p><p>Você chegou ao final dessa unidade! Tenha certeza que se</p><p>você explorou o conteúdo dos links e realizou as leituras</p><p>sugeridas, avançou nos conhecimentos da Programação</p><p>orientada a objetos. Nessa unidade, teve a oportunidade de</p><p>conhecer o que são os conceitos de encapsulamento, cons-</p><p>trutor e sobrecarga de métodos e como aplicar essas técnicas</p><p>na linguagem Java. Percebeu também que os exemplos</p><p>foram baseados na modelagem de UML – Diagrama de</p><p>Classe, para dar mais enfoque na construção dos projetos</p><p>orientados a objetos.</p><p>Referências</p><p>BORATTI, Isaias C. Programação Orientada a Objetos em Java.</p><p>Florianópolis: Visual Books, 2007.</p><p>DEITEL, Paul; DEITEL, Harvey. Java: como programar. 8. ed. São Paulo:</p><p>Pearson, 2010.</p><p>FURGERI, Sérgio. Java 8: ensino didático: desenvolvimento e</p><p>implementação de aplicações. São Paulo: Érica, 2015.</p><p>PALMEIRA, Thiago V. Java Fundamental. Rio de Janeiro: Editora Ciência</p><p>Moderna, 2017.</p><p>POLETINI, Ricardo A. Aprendendo Java por meio de conceitos e</p><p>exemplos. Rio de Janeiro: Editora Ciência Moderna, 2015.</p><p>SANTANDER. Empreendedorismo no Brasil: cenário atual e</p><p>o que esperar para os próximos anos. 2021. Disponível em:</p><p>https: //santandernegocioseempresas.com.br/conhecimento/</p><p>empreendedorismo/empreendedorismo-no-brasil/ Acesso em: 23 jan.</p><p>2023.</p><p>SINTES, Anthony. Aprenda programação orientada a objetos em 21 dias.</p><p>São Paulo: Pearson, 2002.</p><p>https://santandernegocioseempresas.com.br/conhecimento/empreendedorismo/empreendedorismo-no-brasil/</p><p>https://santandernegocioseempresas.com.br/conhecimento/empreendedorismo/empreendedorismo-no-brasil/</p><p>Coleção de objetos em Java</p><p>50</p><p>Objetivos de aprendizagem</p><p>Conhecer os tipos de coleções de objetos em Java e aprender</p><p>a implementá-los.</p><p>Tópicos de estudo</p><p>• Associação de classes;</p><p>• Associação simples de classes;</p><p>• Agregação e composição.</p><p>Iniciando os estudos</p><p>Nesta unidade, você terá a oportunidade de:</p><p>• aprender sobre os diversos tipos de associações</p><p>entre as classes de objetos e como implementá-los</p><p>na linguagem Java de forma prática e objetiva;</p><p>• conhecer o conceito de associação e como encontrar</p><p>associações, multiplicidade de papéis e implementar</p><p>exemplos de associação simples entre classes com a</p><p>linguagem Java;</p><p>• conhecer a diferença de agregação e composição e</p><p>compreender como podem ser implementados em</p><p>Java.</p><p>Desejo a você um ótimo estudo!</p><p>Coleção de objetos em Java</p><p>51</p><p>Associação de classes</p><p>Para iniciarmos os nossos estudos, saiba que, cada vez mais,</p><p>os relacionamentos e as conexões entre classes são impor-</p><p>tantes. Assim, esse assunto precisa ser dominado pelos</p><p>profissionais da área, pois, caso essas associações sejam mal</p><p>definidas ou mal planejadas, a probabilidade desse projeto</p><p>de software ser falho e instável é grande. Há dois tipos de</p><p>associações: associação e herança. Vamos abordar a asso-</p><p>ciação nesta unidade.</p><p>A associação é a forma mais simples de relacionamento</p><p>entre classes (WINDER, 2009, p. 178). Ela serve para a comu-</p><p>nicação e a verificação da existência das classes de objetos</p><p>no projeto de software. Em outras palavras, a associação é a</p><p>relação entre duas classes distintas que se comunicam por</p><p>meio de seus objetos.</p><p>Na programação orientada a objetos, a comunicação entre</p><p>os objetos ocorre quando há uma função ou serviço forne-</p><p>cido por esses objetos. Veja um exemplo representado</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 1</p><p>Representação gráfica da</p><p>associação entre classes.</p><p>Coleção de objetos em Java</p><p>52</p><p>por um Diagrama de Classes da UML (Unified Modeling</p><p>Language) na figura 2. O Diagrama de Classes tem como</p><p>objetivo demonstrar os objetos que compõem o sistema e o</p><p>relacionamento existente entre eles:</p><p>Note que a direção da seta é que determina a associação</p><p>entre as classes. Nesse exemplo, a classe Banco tem acesso</p><p>a um ou mais objetos da classe Cliente, ou seja, a classe</p><p>origem (de onde a seta parte) é que terá um atributo da</p><p>classe destino: Banco → Cliente.</p><p>De acordo com Page-Jones (2001, p. 116),</p><p>“uma associação na UML representa</p><p>uma população variada de links de</p><p>relacionamento entre instâncias de classe”.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 2</p><p>Associação de classes</p><p>com UML.</p><p>Fonte: elaborada pela autora.</p><p>Coleção de objetos em Java</p><p>53</p><p>Uma dica importante para saber se os objetos de classes</p><p>distintas podem ter algum relacionamento é fazer certas</p><p>perguntas: “Tem um?” ou “Tem um ou mais?”. Veja os exem-</p><p>plos:</p><p>• Prefeito e Cidade: toda cidade tem um prefeito</p><p>eleito;</p><p>• Cliente e Telefone: todo cliente pode ter um ou</p><p>mais telefones para contato;</p><p>• Conta Corrente e Pessoa Física: toda conta corrente</p><p>possui um titular e este titular pode conter vários</p><p>dados.</p><p>APROFUNDE-SE</p><p>Associação entre Classes em Java</p><p>A associação entre classes está em várias partes de um sistema</p><p>de informação. No vídeo, veja como isso é possível, quando</p><p>uma classe pode se conectar a outra e acompanhe um</p><p>exemplo prático na linguagem Java.</p><p>Disponível em: https://youtu.be/gHOsCcBfbPk</p><p>Acesso em: 04/03/2023.</p><p>Note que, para determinar um relacionamento entre objetos,</p><p>é feito o diagnóstico a partir da responsabilidade de uma</p><p>determinada tarefa. Dessa forma, podemos dizer que um</p><p>programa orientado a objeto é feito por classes com suas</p><p>responsabilidades.</p><p>https://youtu.be/gHOsCcBfbPk</p><p>https://youtu.be/gHOsCcBfbPk</p><p>Coleção de objetos em Java</p><p>54</p><p>Segundo Sintes (2002, p. 184), as associações são relacio-</p><p>namentos estruturais. Desse modo, uma associação indica</p><p>que um objeto está conectado a outro objeto. Veja mais</p><p>um exemplo, na figura 3, dessa vez com um pouco mais de</p><p>detalhes.</p><p>A ilustração define que uma loja física tem um cliente; um</p><p>cenário comum em nosso dia a dia. Como a orientação a</p><p>objetos pode ser abstraída para um sistema de informação,</p><p>começamos com a notação UML:</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 3</p><p>Representação lúdica de</p><p>uma associação entre</p><p>objetos.</p><p>FIGURA 4</p><p>Diagrama de Classes:</p><p>Associação entre objetos.</p><p>Fonte: elaborada pela autora.</p><p>Coleção de objetos em Java</p><p>55</p><p>O Diagrama de Classes representa de forma gráfica como</p><p>um objeto está conectado a outro objeto. Essa notação é</p><p>importante para que tenhamos um modelo de um conjunto</p><p>de classes interligadas. Saiba que, na programação estru-</p><p>turada, utilizava-se o fluxograma, um diagrama que repre-</p><p>senta o algoritmo; na programação orientada a objetos,</p><p>usamos os diagramas de UML, sendo que o Diagrama de</p><p>Classes representa um modelo estrutural do sistema.</p><p>Na programação orientada a objetos, inclui-se o atributo</p><p>cliente dentro da classe Loja. Quando ocorre isso, o atributo</p><p>deve ser declarado com o tipo da classe associada e não</p><p>com um tipo primitivo de dados. Dessa forma, estamos apli-</p><p>cando a associação</p><p>entre os objetos. Veja o bloco de código</p><p>a seguir:</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 5</p><p>Classe na linguagem Java.</p><p>Fonte: elaborada pela autora.</p><p>Coleção de objetos em Java</p><p>56</p><p>Para que você compreenda melhor o código-fonte, seguem</p><p>alguns comentários:</p><p>Linha 1 – declaração do início da classe Loja.</p><p>Linhas 3 até 6 – declaração dos atributos da classe Loja, de</p><p>acordo com o diagrama de classes.</p><p>Linha 11 – declaração da associação simples por meio do atri-</p><p>buto vendedor. Veja que o tipo de dados é o nome da classe</p><p>a qual faz a comunicação, nesse caso, a classe Funcionario.</p><p>Assista ao vídeo e aprenda a criar essas associações entre</p><p>objetos na linguagem Java.</p><p>ASSISTA</p><p>Classes e Associações</p><p>Neste vídeo, você acompanha a criação de classes que são</p><p>muito comuns em um sistema de informação para lojistas.</p><p>Acesse na plataforma o vídeo.</p><p>Coleção de objetos em Java</p><p>57</p><p>Associação simples de classes</p><p>As associações acontecem quando as classes estão relacio-</p><p>nadas, permitindo que compartilhem informações entre</p><p>si. De acordo com Guedes (2018, p. 140), “uma associação</p><p>descreve um vínculo que ocorre normalmente entre os</p><p>objetos de uma ou mais classes”.</p><p>Na notação UML, no Diagrama de Classes, as associações</p><p>são representadas por linhas ligando uma classe com a</p><p>outra. Essas linhas podem conter nomes ou legendas entre</p><p>os objetos das classes envolvidas nesse relacionamento.</p><p>Existem alguns tipos de associações simples:</p><p>• Um-para-um;</p><p>• Um-para-muitos;</p><p>• Muitos-para-muitos.</p><p>Todos esses tipos de associações simples são identificados</p><p>através de sua multiplicidade encontrada nas extremidades</p><p>das setas de ligação.</p><p>Multiplicidade</p><p>A multiplicidade tem como objetivo “determinar o número</p><p>mínimo e o máximo de objetos” que se relacionam entre as</p><p>classes (GUEDES, 2018, p. 141), além de permitir a especifi-</p><p>cação do nível de dependência entre os objetos envolvidos</p><p>na associação. A tabela 1 exibe os valores comuns de multi-</p><p>plicidade que podem ser utilizados em associações simples.</p><p>Coleção de objetos em Java</p><p>58</p><p>Exemplos de multiplicidade</p><p>Multiplicidade Significado</p><p>0...1 Um-para-zero. Neste caso, informa que não há</p><p>obrigatoriedade na associação, porém, se houver,</p><p>indica que apenas um objeto se relaciona com o</p><p>outro objeto nas classes distintas.</p><p>1...1 Um-para-um. Informa que apenas um objeto se</p><p>relaciona a outro objeto da outra classe.</p><p>0...* Zero-para-muitos. Nesta situação, pode haver ou</p><p>não uma associação, assim, se houver associação,</p><p>será para muitos objetos da outra classe.</p><p>*...* Muitos-para-muitos. Indica que vários objetos</p><p>podem estar se relacionando com vários outros</p><p>objetos da classe associada.</p><p>Na notação UML, as indicações de multiplicidade são colo-</p><p>cadas nas extremidades das linhas. Segue a sequência de</p><p>exemplos:</p><p>Nesse exemplo, um Cliente pode possuir nenhum e muitos</p><p>pedidos e a classe Pedido pode se relacionar apenas a um</p><p>Cliente.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>TABELA 1</p><p>Fonte: Guedes (2018, p. 142).</p><p>FIGURA 6</p><p>Multiplicidade um-para-</p><p>muitos.</p><p>Fonte: elaborada pela autora.</p><p>Coleção de objetos em Java</p><p>59</p><p>Esse exemplo traz a informação que um Fornecedor pode</p><p>fornecer nenhum ou muitos produtos e um Produto pode</p><p>ter nenhum ou muitos fornecedores.</p><p>APROFUNDE-SE</p><p>Fundamentos do Desenho</p><p>Orientada a Objetos</p><p>De acordo com Page-Jones (2001, p. 117), uma associação é</p><p>“como uma classe cujos vínculos são suas instâncias”. Leia os</p><p>tópicos mencionados a seguir (p. 118 a 124) do livro indicado,</p><p>entenda como seria a associação com mais de uma classe e</p><p>como podem ser analisadas essas situações mais complexas.</p><p>4.2.1 – Notação básica da UML para associações;</p><p>4.2.2 – Associações representadas como classes;</p><p>4.2.3 – Associações de ordem mais alta;</p><p>4.2.4 – Navegabilidade de associações.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 7</p><p>Multiplicidade muitos-</p><p>para-muitos.</p><p>Fonte: elaborada pela autora.</p><p>https://cutt.ly/g8NubnT</p><p>Coleção de objetos em Java</p><p>60</p><p>Definindo as associações</p><p>Uma maneira de representar uma associação é por meio de</p><p>sua utilização na qual o objeto referenciado será compar-</p><p>tilhado e usado por vários outros objetos (WINDER, 2009).</p><p>É muito importante dominar a associação no desenvolvi-</p><p>mento de sistemas. As associações são definidas de acordo</p><p>com suas participações. Os tipos mais comuns de associação</p><p>simples são:</p><p>• Associação reflexiva: quando há associação com</p><p>objetos da mesma classe;</p><p>• Associação binária: quando duas classes distintas</p><p>se relacionam;</p><p>• Associação ternária: quando há objetos conectados</p><p>a mais de duas classes.</p><p>Implementação da associação na linguagem Java</p><p>A implementação permite saber quem está apontando para</p><p>quem, através da sua notação UML. E mais, assim fica mais</p><p>fácil de compreender de que lado está a responsabilidade</p><p>da classe.</p><p>Autor: PAGE-JONES M.</p><p>Local: São Paulo.</p><p>Editora: Makron Books.</p><p>Ano: 2001.</p><p>ISBN: 1243-9.</p><p>Disponível em: https://cutt.ly/g8NubnT</p><p>Acesso em: 08/02/2023.</p><p>https://cutt.ly/g8NubnT</p><p>Coleção de objetos em Java</p><p>61</p><p>Aqui está um exemplo de associação binária.</p><p>Na classe Funcionario, pode haver um ou nenhum relacio-</p><p>namento com o objeto da classe Dependente. Na figura 9,</p><p>há um exemplo da implementação dessas classes utilizando a</p><p>linguagem Java. Veja:</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 8</p><p>Associação binária.</p><p>Fonte: GUEDES, 2018, p. 145.</p><p>FIGURA 9</p><p>Classes associadas no Java.</p><p>Fonte: elaborada pela autora.</p><p>Coleção de objetos em Java</p><p>62</p><p>Vamos comentar o código-fonte para que você tenha um</p><p>melhor entendimento sobre o assunto.</p><p>Na classe Funcionario, as linhas de número 3 até 7 são as</p><p>declarações dos atributos que pertencem ao objeto Funcio-</p><p>nario. Na linha 9, está declarado o atributo dependentes</p><p>indicando a associação binária com multiplicidade zero</p><p>(colchetes está vazio). A classe Dependente terá apenas a</p><p>declaração de seus atributos de acordo com as linhas 4 e 5.</p><p>Para aprimorar seu conhecimento sobre o uso de multiplici-</p><p>dade em associação simples de classe, assista ao vídeo.</p><p>ASSISTA</p><p>Associação Simples da Classe</p><p>Neste vídeo, você tem a oportunidade de aprender como se</p><p>aplica a linguagem Java em associações de classes.</p><p>Acesse na plataforma o vídeo.</p><p>Coleção de objetos em Java</p><p>63</p><p>Agregação e composição</p><p>Você sabe a diferença entre agregação e composição na</p><p>orientação a objetos? E sabe como implementar esses rela-</p><p>cionamentos na linguagem Java?</p><p>Para iniciarmos esse assunto, vamos entender o que são</p><p>agregação e composição na orientação a objetos.</p><p>Agregação</p><p>Como o próprio nome diz, a agregação é uma classe que</p><p>agrega a outra, porém não exclusivamente. A agregação</p><p>representa uma associação especial.</p><p>Essa associação “tenta demonstrar que as informações</p><p>de um objeto (objeto-todo) são complementadas pelas</p><p>contidas em um ou mais objetos no outro fim da associação</p><p>(chamados objetos-parte)” (GUEDES, 2018, p. 147).</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 10</p><p>Representação da</p><p>agregação.</p><p>Fonte: elaborada pela autora.</p><p>Coleção de objetos em Java</p><p>64</p><p>A função principal de um relacionamento do tipo agregação</p><p>é exibir a obrigatoriedade de uma complementação dos</p><p>dados de um objeto-todo por seus objetos-parte (GUEDES,</p><p>2018, p. 147). A figura 11 mostra um exemplo dessa associação:</p><p>Esse exemplo demonstra uma associação de agregação</p><p>entre a classe Cliente e a classe ContaCorrente, o que indica</p><p>que os objetos da classe Cliente são objetos-todo que têm</p><p>seus dados complementados pelos objetos da classe Conta-</p><p>Corrente, da qual são objeto-parte. Assim, sempre que o</p><p>cliente for consultado, na pesquisa aparecerão seus dados</p><p>pessoais e as informações da conta corrente. A figura 12</p><p>representa essa função de acordo com a realidade abstraída</p><p>nesse exemplo.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 11</p><p>Diagrama de Classe:</p><p>agregação.</p><p>Fonte: elaborada pela autora.</p><p>Coleção de objetos em Java</p><p>65</p><p>Composição</p><p>As composições são um caso especial</p><p>de associação de</p><p>agregação. Segundo Guedes (2018, p. 148), uma composição</p><p>é constituída por uma agregação, em que é apresentado</p><p>um vínculo mais forte entre os objetos-todo e os objetos-</p><p>-parte. Em outras palavras, uma composição demonstra que</p><p>um objeto é composto obrigatoriamente por um ou mais</p><p>objetos da outra classe.</p><p>Veja a figura 13:</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 12</p><p>Realidade no Diagrama de</p><p>Classe – agregação.</p><p>FIGURA 13</p><p>Diagrama de Classe:</p><p>composição.</p><p>Fonte: elaborada pela autora.</p><p>Coleção de objetos em Java</p><p>66</p><p>Segundo Larman (2007, p. 281), a composição é uma espécie</p><p>forte de agregação todo-parte. Na notação UML, a compo-</p><p>sição é um losango cheio em uma linha de associação, dife-</p><p>rente da agregação que é um losango vazio em uma linha</p><p>de associação. É importante considerar, no relacionamento</p><p>de composição, que:</p><p>1. uma instância da parte (por exemplo, Pedido)</p><p>pertence apenas a uma instância composta (por</p><p>exemplo, itemPedido);</p><p>2. o objeto-parte deve sempre pertencer a uma compo-</p><p>sição;</p><p>3. a composição é responsável pela inserção e exclusão</p><p>de suas partes.</p><p>APROFUNDE-SE</p><p>Relacionamento entre Classes e Agregação</p><p>Neste vídeo, você conhecerá mais sobre os tipos de</p><p>relacionamento entre classes com a UML, além de</p><p>acompanhar como é a representação da agregação e como</p><p>implementá-la na linguagem Java.</p><p>Disponível em: https://youtu.be/aJ-CKihGgZM</p><p>Acesso em: 04/02/2023.</p><p>https://youtu.be/aJ-CKihGgZM</p><p>https://youtu.be/aJ-CKihGgZM</p><p>Coleção de objetos em Java</p><p>67</p><p>Assim, a composição e a agregação são duas formas de</p><p>relacionar objetos e ambos os conceitos são importantes</p><p>para modelar as relações entre objetos de maneira clara e</p><p>eficiente. Conheça no infográfico 1 as diferenças entre os</p><p>relacionamentos de agregação e composição na progra-</p><p>mação orientada a objetos.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>F</p><p>ac</p><p>en</p><p>s</p><p>©</p><p>2</p><p>0</p><p>23</p><p>Diferenças entre</p><p>agregação e composição</p><p>Diferenças entre</p><p>agregação e composição</p><p>VS</p><p>Agregação Composição</p><p>Pode existir uma</p><p>independência entre</p><p>relação objeto-parte</p><p>com o objeto-todo.</p><p>A construção da relação</p><p>é do tipo “tem um”.</p><p>Na UML, é representa-</p><p>da pela seta vazia na</p><p>extremidade da linha.</p><p>A exclusão de um objeto</p><p>não afeta o outro objeto.</p><p>É uma associação</p><p>mais fraca.</p><p>Não existe indepen-</p><p>dência entre as</p><p>classes objeto-todo</p><p>com objeto-parte.</p><p>O tipo de relação</p><p>é “parte de”.</p><p>Na UML, é representa-</p><p>da pela seta cheia na</p><p>extremidade da linha.</p><p>A exclusão de um objeto</p><p>(objeto-todo) afeta direta-</p><p>mente o outro objeto (ob-</p><p>jeto-parte).</p><p>É uma associa-</p><p>ção mais forte.</p><p>INFOGRÁFICO 1</p><p>Coleção de objetos em Java</p><p>69</p><p>Implementação da agregação na linguagem Java</p><p>Vale frisar que a composição é uma forma mais restrita de</p><p>agregação entre classes de objetos, e possui uma depen-</p><p>dência forte da classe relacionada. Digamos que esse tipo de</p><p>relacionamento é parcial, pois a classe que possui o objeto</p><p>composto não pode existir sem a outra classe. O exemplo na</p><p>figura 14 demonstra como é escrito na linguagem Java esse</p><p>tipo de associação de acordo com a notação UML.</p><p>De acordo com o diagrama de classe apresentado, veja</p><p>como são escritas essas classes na linguagem Java. O obje-</p><p>tivo é mostrar como a associação de agregação é feita na</p><p>linguagem de programação Java.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>FIGURA 14</p><p>Diagrama de Classe:</p><p>composição.</p><p>Fonte: elaborada pela autora.</p><p>Coleção de objetos em Java</p><p>70</p><p>Para melhorar a sua compreensão, acompanhe o comen-</p><p>tário sobre as linhas do código apresentado na figura 15.</p><p>Na classe Banco temos:</p><p>• Linha 2 - comando Poupanca[] poupa, que indica</p><p>qual é a classe que está compondo a classe Banco.</p><p>Nesse caso, a classe Poupanca compõe a classe</p><p>Banco. Note que a composição é realizada por meio</p><p>da declaração do atributo.</p><p>• Linhas 4 e 5 - declaração dos atributos próprios da</p><p>classe Banco.</p><p>• Linhas 6 até 9 - método Construtor da classe Banco</p><p>informando que, ao iniciar a classe, o atributo</p><p>numConta irá começar com o valor 1.</p><p>• Linhas 11 até 13 - construção do método abrePou-</p><p>panca. Em sua implementação, o objeto poupa[num-</p><p>Conta] será instanciado, ou seja, aqui está se cons-</p><p>truindo a composição das classes.</p><p>FIGURA 15</p><p>Linguagem Java.</p><p>Fonte: elaborada pela autora.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>Coleção de objetos em Java</p><p>71</p><p>Analisando a classe Poupanca, temos:</p><p>• Linha 2 - declaração do atributo saldo, de acordo</p><p>com o diagrama de classe.</p><p>• Linhas 4 até 7 - construção do método saque com a</p><p>definição de subtrair o valor de R$ 10,00 no atributo</p><p>saldo, toda vez que o método for chamado.</p><p>• Linhas 8 até 11 – construção do método deposito</p><p>com a definição de somar o valor de R$ 10,00 no atri-</p><p>buto saldo, toda vez que o método for chamado.</p><p>Assista ao vídeo e aprenda como implementar a linguagem</p><p>Java no projeto orientado a objetos, de acordo com a notação</p><p>UML, usando as associações de agregação e composição.</p><p>ASSISTA</p><p>Composição</p><p>Neste vídeo, você aprende a realizar um projeto no</p><p>NetBeans com as associações de agregação e composição</p><p>na linguagem Java.</p><p>Acesse na plataforma o vídeo.</p><p>Em um projeto, é possível encontrar o uso da associação</p><p>simples, agregação e composição. Isso depende da comple-</p><p>xidade do sistema.</p><p>Coleção de objetos em Java</p><p>72</p><p>REFLITA</p><p>UML&Java</p><p>A UML tornou-se a representação gráfica mais</p><p>usada em projetos de sistemas de programação</p><p>orientada a objetos, e a linguagem Java também se</p><p>tornou uma das linguagens de programação mais</p><p>utilizadas nos últimos tempos (MAGALHÃES, 2011, p.</p><p>7). As duas tecnologias, UML e Java, cresceram nas</p><p>últimas décadas. O Diagrama de Classes da UML</p><p>fornece uma representação gráfica das classes e</p><p>seus relacionamentos de um programa de software orientado a objetos. Segundo Winder (2009,</p><p>p. 297), isso permite que o projeto de um programa seja visualizado em um nível mais genérico,</p><p>ou abstrato, do que o código-fonte.</p><p>O uso da UML, em especial o Diagrama de Classes para a estrutura do projeto de software, facilita</p><p>a escrita da linguagem Java para a construção do programa. Reflita sobre a interação da UML</p><p>com a linguagem Java no desenvolvimento de projetos de software orientados a objetos na fase</p><p>de relacionamento entre as classes. Pense sobre a importância da notação UML na criação de</p><p>programas que irão utilizar a linguagem Java e em quais as vantagens e as desvantagens de usar</p><p>essas tecnologias de uma forma conjunta na criação de programas.</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>Considerações finais</p><p>Nesta unidade, você teve a oportunidade de conhecer como</p><p>os objetos das classes se relacionam e seus tipos de relacio-</p><p>namento. Além disso, você viu a importância de dominar os</p><p>conceitos de associação, agregação e composição para criar</p><p>projetos mais complexos.</p><p>Referências</p><p>GUEDES, Gilleanes T. A. UML 2: uma abordagem prática. 3. ed. rev. e</p><p>atual. São Paulo: Novatec, 2018.</p><p>LARMAN, Craig. Utilizando UML e padrões: uma introdução a análise e</p><p>ao projeto orientados a objetos e ao desenvolvimento interativo. 3. ed. Porto</p><p>Alegre: Bookman, 2007.</p><p>MAGALHÃES, Luiz P. A. Um estudo sobre a engenharia de ida e volta entre</p><p>UML e Java. 140 f. Dissertação (Mestrado em Ciência da Computação) –</p><p>Programa de Pós-Graduação em Ciência da Computação, Instituto de</p><p>Ciências Exatas, Universidade Federal de Minas Gerais, Belo Horizonte,</p><p>2011. Disponível em: https://repositorio.ufmg.br/bitstream/1843/SLSS-</p><p>8KDQRQ/1/luispauloalvesmagalh_es.pdf Acesso em: 13 fev. 2023.</p><p>PAGE-JONES, Meilir. Fundamentos do desenho orientada a objeto</p><p>com UML. São Paulo: Makron Books, 2001.</p><p>SINTES, Anthony. Aprenda programação orientada a objetos em 21</p><p>dias. São Paulo: Makron Books, 2002.</p><p>WINDER, Russel; GRAHAM, Roberts. Desenvolvendo software em Java.</p><p>3. ed. Rio de Janeiro: LTC, 2009.</p><p>https://repositorio.ufmg.br/bitstream/1843/SLSS-8KDQRQ/1/luispauloalvesmagalh_es.pdf</p><p>https://repositorio.ufmg.br/bitstream/1843/SLSS-8KDQRQ/1/luispauloalvesmagalh_es.pdf</p><p>Herança</p><p>75</p><p>Objetivos de aprendizagem</p><p>Compreender as definições de herança, superclasses,</p><p>subclasses e sobrescrita de métodos, para assim ser capaz</p><p>de implementar esses conceitos em Java.</p><p>Tópicos de estudo</p><p>• Herança;</p><p>• Sobrescrita de métodos;</p><p>• Aplicando os conceitos de herança e sobrescrita de</p><p>métodos.</p><p>Iniciando os estudos</p><p>Nesta unidade, você irá aprender sobre o relacionamento</p><p>entre as classes do tipo herança. Veja os assuntos que serão</p><p>abordados:</p><p>• Hierarquia de herança com as superclasses e</p><p>subclasses;</p><p>• Conceito de sobrescrita de métodos;</p><p>• Conceitos de herança e sobrescrita de métodos</p><p>usando a linguagem Java.</p><p>Desejo a você um bom estudo!</p><p>Herança</p><p>76</p><p>Herança</p><p>Você sabe o que significam os conceitos de herança, super-</p><p>classe e subclasse no relacionamento entre classes de</p><p>objetos? Para começar, é preciso entender que o relacio-</p><p>namento de herança é um dos tipos mais importantes na</p><p>programação orientada a objetos.</p><p>O que é herança?</p><p>O termo herança na orientação a objetos tem o mesmo</p><p>significado que possui no contexto familiar, em que os filhos</p><p>herdam o patrimônio dos seus pais.</p><p>De acordo com Sintes (2002), a herança é um mecanismo</p><p>de criar uma nova classe, a qual herda todos os atributos</p><p>e métodos da classe existente. Para Furgeri (2015), quando</p><p>ocorre o relacionamento de herança entre as classes, a nova</p><p>classe é especificada como superclasse.</p><p>FIGURA 1</p><p>Assim como numa família,</p><p>a herança na programação</p><p>orientada a objetos</p><p>representa a hierarquia</p><p>quanto à transferência por</p><p>sucessão de características.</p><p>Herança</p><p>77</p><p>A técnica de herança possibilita o reaproveitamento de</p><p>recursos entre as classes herdadas, além de permitir a</p><p>redução de linhas de código e facilitar futuras manutenções</p><p>(GUEDES, 2018).</p><p>Esse tipo de relacionamento permite representar classes</p><p>derivadas a partir de classes mais antigas, e ao mesmo</p><p>tempo que se herda os atributos e métodos, é possível</p><p>adicionar novos atributos e/ou métodos a essas classes</p><p>(GUEDES, 2018, p. 149).</p><p>Em notação UML (Linguagem de Modelagem Unificada, do</p><p>inglês Unified Modeling Language), na representação do</p><p>diagrama de classes, o relacionamento de herança é indi-</p><p>cado por meio de uma ligação como a da figura 2, visto que</p><p>a ponta da seta está informando qual é a classe herdada.</p><p>Quais os pontos positivos em usar a herança?</p><p>Em um projeto orientado a objetos, o uso da herança:</p><p>• permite maior rapidez no desenvolvimento, visto que</p><p>não é preciso inserir novos atributos e/ou métodos;</p><p>FIGURA 2</p><p>Representação UML:</p><p>herança.</p><p>Fonte: elaborado pela autora.</p><p>Herança</p><p>78</p><p>• impede erros de codificação desnecessários;</p><p>• permite que os métodos possam ser redeclarados</p><p>em uma classe especializada com o mesmo nome,</p><p>mas com comportamentos diferentes.</p><p>Veja um exemplo que demonstra melhor esse conceito:</p><p>No exemplo da figura 3, a classe Imovel torna-se uma classe</p><p>geral, da qual derivam-se duas classes especializadas: a</p><p>classe Urbano e a classe Rural. Elas herdam seus atributos e</p><p>métodos da classe Imovel. Em seguida, há mais um nível de</p><p>hierarquia, em que a classe Casa e a classe Lote herdam os</p><p>atributos e métodos da classe Urbano, porém, cada classe</p><p>tem seus próprios atributos especializados. O mesmo ocorre</p><p>com as classes Sitio e Fazenda, que herdam os atributos e</p><p>métodos da classe Rural e possuem seus próprios atributos.</p><p>No relacionamento de classes do tipo herança, há uma</p><p>hierarquia de classes de objetos, as quais são denominadas</p><p>como superclasse e subclasse. Veja no infográfico:</p><p>FIGURA 3</p><p>Herança entre classes.</p><p>Fonte: adaptado de Boratti (2007,</p><p>p. 197).</p><p>E</p><p>D</p><p>+</p><p>C</p><p>on</p><p>te</p><p>n</p><p>t</p><p>H</p><p>u</p><p>b</p><p>©</p><p>2</p><p>0</p><p>23</p><p>Conhecida como classe</p><p>especializada ou classe filha.</p><p>Ela representa os membros</p><p>da superclasse. Uma subclasse</p><p>pode ter os seus próprios atributos</p><p>e métodos, por ser mais específica</p><p>em um relacionamento.</p><p>Também é conhecida como classe</p><p>geral ou classe mãe (progenitora).</p><p>Uma superclasse pode conter</p><p>várias subclasses e, na hierarquia</p><p>de classes, é a que fica no topo.</p><p>Por meio do mecanismo da herança,</p><p>torna-se possível a criação de uma</p><p>hierarquia de classes. Assim, a classe</p><p>Funcionario, por exemplo, herda todas</p><p>as funcionalidades de PessoaFisica,</p><p>que herda as funcionalidades da</p><p>superclasse Pessoa.</p><p>SUPERCLASSE</p><p>SUBCLASSES</p><p>Pessoa</p><p>PessoaFisica</p><p>Funcionario</p><p>PessoaJuridica</p><p>HIERARQUIA DE CLASSES</p><p>INFOGRÁFICO 1</p><p>Fonte: adaptado de Furgeri (2015).</p><p>Herança</p><p>80</p><p>A herança é uma construção poderosa que pode ser utili-</p><p>zada na criação de diversas soluções para diferentes tipos</p><p>de problemas (BARNES; KÖLLING, 2004). Na linguagem</p><p>Java, o mecanismo de herança é inserido pela palavra-chave</p><p>extends na declaração do nome da classe, seguida pela</p><p>classe que será herdada.</p><p>Acompanhe uma breve explicação da figura 4 sobre os</p><p>comandos apresentados na construção do exemplo:</p><p>• Linha 3: declaração da classe ContaEspecial e</p><p>comando extends indicando qual classe está sendo</p><p>herdada, no caso, a classe ContaCorrente.</p><p>• Linha 5: declaração do atributo próprio da classe</p><p>ContaEspecial.</p><p>• Linhas 7 até 9: método construtor da classe ContaEs-</p><p>pecial somente com o atributo próprio da classe.</p><p>• Linhas 11 até 14: método construtor da classe</p><p>ContaEspecial com a formação do atributo herdado</p><p>da classe ContaCorrente.</p><p>FIGURA 4</p><p>Herança na linguagem</p><p>Java.</p><p>Fonte: elaborado pela autora.</p><p>Herança</p><p>81</p><p>Assista ao vídeo e aprimore o seu conhecimento sobre o</p><p>conceito de herança por meio da programação orientada a</p><p>objetos.</p><p>Outro termo utilizado na orientação a objetos quanto ao</p><p>conceito de herança é o de generalização/especialização.</p><p>Segundo Guedes (2018), esse tipo de associação tem como</p><p>objetivo demonstrar a ocorrência de herança entre as</p><p>classes, identificando as classes gerais e as especializadas.</p><p>Para Furgeri (2015), o termo especialização justifica-se uma</p><p>vez que uma classe (subclasse), ao herdar características de</p><p>outra (superclasse), pode implementar elementos especí-</p><p>ficos (caso tenha alguma ação própria), tornando-se espe-</p><p>cializada em algum processo.</p><p>ASSISTA</p><p>Herança simples</p><p>Este vídeo demonstra como é implementado o conceito</p><p>de herança utilizando a linguagem Java.</p><p>Acesse na plataforma o vídeo.</p><p>Herança</p><p>82</p><p>APROFUNDE-SE</p><p>Herança – programação orientada</p><p>a objetos em Java</p><p>Este vídeo facilita a compreensão do relacionamento de</p><p>herança na programação orientada a objetos.</p><p>Disponível em: https://youtu.be/k1kxUOGKbkM</p><p>Acesso em: 22/02/2023.</p><p>https://youtu.be/k1kxUOGKbkM</p><p>https://youtu.be/k1kxUOGKbkM</p><p>Herança</p><p>83</p><p>Sobrescrita de métodos</p><p>Já ouviu falar a respeito da sobrescrita de métodos e de</p><p>como implementá-la na linguagem Java? Para começar,</p><p>saiba que é um recurso fundamental na programação orien-</p><p>tada a objetos.</p><p>O que é uma sobrescrita de métodos?</p><p>A programação orientada a objetos permite que novos</p><p>métodos sejam criados nas classes herdadas (classes filhas),</p><p>as quais contêm a mesma assinatura e o mesmo tipo de</p><p>retorno do método da classe geral (classe mãe). Na orien-</p><p>tação a objetos, a sobrescrita de métodos ocorre quando</p><p>uma classe subordinada (subclasse) tem uma função que</p><p>pertence à classe superior (superclasse) por estar incom-</p><p>pleta, assim, em sua implementação, complementa a ação</p><p>de acordo com sua especialidade.</p><p>Considerando a figura 5, classifique a ilustração como Trans-</p><p>porte. Todos os meios de transporte têm a ação “andar para</p><p>frente”, porém, se analisar cada transporte separadamente,</p><p>a implementação da ação “andar para frente” será diferente</p><p>para cada um.</p><p>Herança</p><p>84</p><p>De acordo com Sintes (2002), a sobrescrita de métodos</p><p>permite reescrever um método com o mesmo nome, tipo de</p><p>retorno e quantidade de parâmetros do método da super-</p><p>classe. Nesse tipo de método, é possível alterar seu compor-</p><p>tamento nas subclasses, deixando-o específico.</p><p>Em relação ao seu tipo de retorno, ele pode ser um subtipo,</p><p>por exemplo, se o método da superclasse retornar um Array</p><p>(um tipo de dado que permite armazenar vários valores na</p><p>mesma variável) ou um List  (comando</p>

Mais conteúdos dessa disciplina