<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-72424643251171844</atom:id><lastBuildDate>Mon, 04 May 2026 11:18:28 +0000</lastBuildDate><category>Análise e Desenvolvimento de Sistemas</category><category>FATEC</category><category>Technology</category><category>SENAC</category><category>Programação</category><category>Ciência da Computação</category><category>IT</category><category>Java</category><category>Sistemas de Informação</category><category>UniAnchieta</category><category>Tech</category><category>OO</category><category>UNIP</category><category>C#</category><category>Desenvolvimento Profissional</category><category>Carreira</category><category>Internet of Things</category><category>Internet das Coisas</category><category>IoT</category><category>Cloud Computing</category><category>Docência</category><category>Gaming</category><category>Sustentabilidade</category><category>Wearable Computing</category><category>e-Waste</category><category>Business Intelligence</category><category>Colaboração</category><category>Comunicação</category><category>Educação</category><category>Gestão Ambiental</category><category>IA</category><category>Inteligência Artificial</category><category>Sistemas Operacionais</category><category>TCC</category><category>Virtualização</category><title>Tecnopode</title><description>Compartilhar é o espírito!</description><link>http://tecnopode.blogspot.com/</link><managingEditor>noreply@blogger.com (Prof. Peter Jandl Jr)</managingEditor><generator>Blogger</generator><openSearch:totalResults>107</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-7139436245949442755</guid><pubDate>Mon, 13 Jul 2020 20:54:00 +0000</pubDate><atom:updated>2020-07-13T18:00:14.761-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">Internet das Coisas</category><category domain="http://www.blogger.com/atom/ns#">Internet of Things</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><title>A importância de saber programar</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Hoje em dia estamos cercados por computadores e não apenas aqueles, com telas e teclados, que as pessoas usam no trabalho, no estudo e até no lazer. Mas por muitos outros, disfarçados e escondidos dentro de outras máquinas e equipamentos, que estão por toda parte.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqb5Ono7zJBjePwMgkT9a8U68W4D6rK0CQ40Q_yLRCeBOgTxoBg58WUjXNxv8aL3I2lcRiu6bLXtNXDCVv6joECsFzC44jZZE0lbzPqDmtuMAVNBNh1jPl8PNPqQ9OUXGhrZ-cGgOsZFE/s1600/code-javascript-programming-strip.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;222&quot; data-original-width=&quot;910&quot; height=&quot;95&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqb5Ono7zJBjePwMgkT9a8U68W4D6rK0CQ40Q_yLRCeBOgTxoBg58WUjXNxv8aL3I2lcRiu6bLXtNXDCVv6joECsFzC44jZZE0lbzPqDmtuMAVNBNh1jPl8PNPqQ9OUXGhrZ-cGgOsZFE/s400/code-javascript-programming-strip.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isso acontece por conta da grande evolução da eletrônica e das técnicas de fabricação de circuitos integrados, de maneira que hoje é barato construir dispositivos eletrônicos dotados de microprocessadores.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um microprocessador é uma pequena máquina capaz de executar várias tarefas simples e diferentes, como cálculos, comparações ou a movimentação de dados. Cada tarefa tem um código, de maneira que podemos combinar sequências destes códigos, que chamamos de instruções, para realizarmos tarefas mais longas ou mais complicadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Programar é definir estas sequências de instruções para resolvermos problemas diferentes. Os microprocessadores e seus programas podem ser conectados com outros componentes e dispositivos, eletrônicos, elétricos, mecânicos e hidráulicos, de maneira que é possível construir coisas simples ou muito complexas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Equipamentos simples são rádios-relógio, fornos de microondas, elevadores dos edifícios e alarmes residenciais. Coisas mais interessantes são como as impressoras multifuncionais e 3D; televisões que navegam na internet; os equipamentos médicos; controladores industriais; e, é claro, os computadores pessoais.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outro exemplo são os automóveis, que possuem muitos microprocessadores em seus sistemas de frenagem ABS, de injeção eletrônica, do câmbio automático, das centrais multimídia para entretenimento e navegação GPS, além de outros para controle de conforto como regulagem de bancos, ar condicionado, iluminação e outras preferências.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
E os exemplos não param por aí, pois temos as redes de caixas eletrônicos dos bancos; os sistemas de automação industrial, comercial e residencial; de geração, transmissão e distribuição de energia; além dos muitos outros&amp;nbsp; sistemas telecomunicações.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ao invés de construir uma máquina ou equipamento específico para cada problema que temos, usamos, tanto quanto possível, a eletrônica e o microprocessadores, genéricos e mais baratos, mas que são muito versáteis porquê podem ser programados. A telefonia mostra isso, pois cada celular é, de fato, um pequeno computador, no qual convergiram o telefone, máquina fotográfica, filmadora, calculadora, jogos e mais, tudo por meio da programação.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Então, da mesma maneira que existem inúmeras possibilidades de aplicação dos microprocessadores e dos computadores; existe um mercado enorme para tais equipamentos e, com isso, muita procura por profissionais que possam trabalhar em seu projeto, construção e aplicação.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Você pode fazer parte de tudo isso&lt;/b&gt;, com o novo &lt;a href=&quot;http://www.fatecjd.edu.br/se/&quot; target=&quot;_blank&quot;&gt;curso superior de Tecnologia em Sistemas Embarcados da Fatec Jundiaí&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Para Saber Mais&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.fatecjd.edu.br/&quot; target=&quot;_blank&quot;&gt;FATEC Jundiaí&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/channel/UCa7BwHdVr5Bs2qx3bC4hZ-A&quot; target=&quot;_blank&quot;&gt;Canal da FATEC Jundiaí/YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2020/07/saber-programar.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqb5Ono7zJBjePwMgkT9a8U68W4D6rK0CQ40Q_yLRCeBOgTxoBg58WUjXNxv8aL3I2lcRiu6bLXtNXDCVv6joECsFzC44jZZE0lbzPqDmtuMAVNBNh1jPl8PNPqQ9OUXGhrZ-cGgOsZFE/s72-c/code-javascript-programming-strip.jpg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Jundiaí - Aglomeração Urbana de Jundiaí, Jundiaí - SP, Brasil</georss:featurename><georss:point>-23.1857076 -46.8978057</georss:point><georss:box>-23.4192396 -47.2205292 -22.9521756 -46.5750822</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-6901443761953083924</guid><pubDate>Mon, 15 Oct 2018 20:28:00 +0000</pubDate><atom:updated>2018-10-15T17:28:45.830-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">Business Intelligence</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Sistemas de Informação</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>Power BI 101</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Durante a Semana de Tecnologia 2018 da FATEC Jundiaí, tive a oportunidade de falar um pouco sobre o Microsoft Power BI, uma ferramenta muito conveniente que combina facilidade de uso com ótimos recursos para visualização de dados.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY189xsXfVTLtMuMZZcG76ObUYA6KMHH9tcPM0WZgO8dyZrR8wKRGFu7vVJCG9f_0fycrV-L3mdCvpfbuTSxbq5d-Q18U4Nc1D9thobAlc9J6FhWaqi-0bCFQFPBDI3grbRIE8vZNEDFo/s1600/Massifica%25C3%25A7%25C3%25A3o-TI.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;240&quot; data-original-width=&quot;1080&quot; height=&quot;88&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY189xsXfVTLtMuMZZcG76ObUYA6KMHH9tcPM0WZgO8dyZrR8wKRGFu7vVJCG9f_0fycrV-L3mdCvpfbuTSxbq5d-Q18U4Nc1D9thobAlc9J6FhWaqi-0bCFQFPBDI3grbRIE8vZNEDFo/s400/Massifica%25C3%25A7%25C3%25A3o-TI.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Com a massificação do consumo da Tecnologia da Informação, ou sua &lt;i&gt;consumerisation&lt;/i&gt;, a quantidade de dados disponíveis aumenta dez vezes a cada cinco anos, dos quais 27% são oriundos de mídias sociais e 85% são novos tipos, isto é, conteúdos diferentes. É por isso que o fenômeno do &lt;i&gt;big data&lt;/i&gt; não é uma preocupação teórica, constituindo uma realidade, pois cada ser humano adulto do planeta possui, em média, mais de quatro dispositivos conectados.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A alta disponibilidade de dados deveria impulsionar as empresas na organização e construção de um sistema moderno de gerenciamento de informações, pois isto pode, segundo previsões do Gartner Institute, proporcionar resultados financeiros até 20% maiores do que seus concorrentes que não tomarem tal ação.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Neste cenário, a &lt;i&gt;Inteligência de Negócios&lt;/i&gt;&amp;nbsp;(ou &lt;i&gt;Business Intelligence&lt;/i&gt;) pode ser vista como um conjunto de técnicas e ferramentas destinados à auxiliar a transformação de dados brutos, disponíveis em grandes quantidades, em informações significativas e úteis que possibilitem uma análise mais aprofundada do negócio.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim, a &lt;i&gt;Inteligência de Negócios&lt;/i&gt; constitui um conjunto de ações de coleta, de organização, de análise e de monitoramento de dados que, depois de tratados, organizados e analisados, possibilitam uma melhor tomada de decisões de negócio. A &lt;i&gt;Inteligência de Negócios&lt;/i&gt; também permite avaliar se as decisões tomadas, assim como as ações e investimentos decorrentes destas decisões, estão trazendo bons resultados.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os objetivos da &lt;i&gt;Inteligência de Negócios&lt;/i&gt; podem ser sumarizados como:&lt;/div&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Sistematizar a coleta e organização de dados, em grande volumes (empregando &lt;i&gt;datawarehouses &lt;/i&gt;e &lt;i&gt;datamarts&lt;/i&gt;), processando dados estruturados e dados não estruturados.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Permitir uma fácil interpretação de grandes volumes de dados, com uso de técnicas de &lt;i&gt;data visualization&lt;/i&gt;, &lt;i&gt;graphical analysis&lt;/i&gt;, &lt;i&gt;data mining&lt;/i&gt; e &lt;i&gt;forecasting&lt;/i&gt;.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Identificar novas oportunidades de negócios.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Implementar estratégias mais efetivas baseadas nos resultados da análise dos dados.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como o trabalho envolvido na &lt;i&gt;Inteligência de Negócios&lt;/i&gt; é complexo, é muito necessário utilizar ferramentas adequadas. Aqui surge o &lt;b&gt;Microsoft Power Business Intelligence&lt;/b&gt;, ou apenas Power BI, considerada uma das 10 melhores ferramentas de BI.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Na apresentação abaixo temos uma pequena introdução ao PowerBI, que mostra como carregar dados, criar visualizações e painéis (&lt;i&gt;dashboard&lt;/i&gt;) que podem ser compartilhados e visualizados em qualquer dispositivo.&lt;/div&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/a0fuCPJ8OFt4IX&quot; style=&quot;border-width: 1px; border: 1px solid #ccc; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/pjandl/power-bi-101-118917188&quot; target=&quot;_blank&quot; title=&quot;Power BI 101&quot;&gt;Power BI 101&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/pjandl&quot; target=&quot;_blank&quot;&gt;Peter Jandl Junior&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;br /&gt;
Espero que este material seja útil!&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Para aprender mais&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://powerbi.microsoft.com/&quot;&gt;http://powerbi.microsoft.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://powerbi.microsoft.com/pt-br/&quot;&gt;https://powerbi.microsoft.com/pt-br/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://powerbi.microsoft.com/en-us/desktop&quot;&gt;https://powerbi.microsoft.com/en-us/desktop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://visuals.powerbi.com/&quot;&gt;http://visuals.powerbi.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/pt-br/power-bi/power-bi-overview&quot;&gt;https://docs.microsoft.com/pt-br/power-bi/power-bi-overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/pt-br/power-bi/guided-learning/&quot;&gt;https://docs.microsoft.com/pt-br/power-bi/guided-learning/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;</description><link>http://tecnopode.blogspot.com/2018/10/power-bi-101.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY189xsXfVTLtMuMZZcG76ObUYA6KMHH9tcPM0WZgO8dyZrR8wKRGFu7vVJCG9f_0fycrV-L3mdCvpfbuTSxbq5d-Q18U4Nc1D9thobAlc9J6FhWaqi-0bCFQFPBDI3grbRIE8vZNEDFo/s72-c/Massifica%25C3%25A7%25C3%25A3o-TI.png" height="72" width="72"/><thr:total>1</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0074583 -46.818752899999993</georss:point><georss:box>-23.2412953 -47.141476399999995 -22.7736213 -46.496029399999991</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-8431217670641253269</guid><pubDate>Fri, 08 Jun 2018 19:02:00 +0000</pubDate><atom:updated>2018-06-08T16:02:25.025-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">Gaming</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><title>Robocode 666</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;A construção de robôs de batalha para o Robocode requer alguns conhecimentos adicionais, sobre os eventos de controle, sobre classes avançadas da API e, principalmente sobre estratégias para movimentação, localização de adversários e mira.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
O material compartilhado a seguir foi usado numa oficina de programação na FATEC Jundiaí, sob o nome Robocode 666.&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/iPMvdmtE7FU1AM&quot; style=&quot;border-width: 1px; border: 1px solid #ccc; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/pjandl/robocode-666&quot; target=&quot;_blank&quot; title=&quot;Robocode 666&quot;&gt;Robocode 666&lt;/a&gt; &lt;/strong&gt; de &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/pjandl&quot; target=&quot;_blank&quot;&gt;Peter Jandl Junior&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;br /&gt;
Boas batalhas!&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Para saber mais&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Home&lt;br /&gt;&lt;a href=&quot;http://robocode.sourceforge.net/&quot;&gt;http://robocode.sourceforge.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download&lt;br /&gt;&lt;a href=&quot;https://sourceforge.net/projects/robocode/files/&quot;&gt;https://sourceforge.net/projects/robocode/files/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentação OnLine&lt;br /&gt;&lt;a href=&quot;http://robocode.sourceforge.net/docs/robocode/&quot;&gt;http://robocode.sourceforge.net/docs/robocode/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Wiki&lt;br /&gt;&lt;a href=&quot;http://robowiki.net/wiki/Robocode&quot;&gt;http://robowiki.net/wiki/Robocode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Artigos&lt;br /&gt;&lt;a href=&quot;http://robocode.sourceforge.net/developerWorks.php&quot;&gt;http://robocode.sourceforge.net/developerWorks.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;UFSC&lt;br /&gt;&lt;a href=&quot;https://www.gsigma.ufsc.br/~popov/aulas/robocode/index.html&quot;&gt;https://www.gsigma.ufsc.br/~popov/aulas/robocode/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;YouTube vídeo&lt;br /&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=3qOoDuGkwco&quot;&gt;http://www.youtube.com/watch?v=3qOoDuGkwco&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><link>http://tecnopode.blogspot.com/2018/06/robocode-666.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><thr:total>0</thr:total><georss:featurename>Jundiaí, SP, Brasil</georss:featurename><georss:point>-23.1857076 -46.897805699999992</georss:point><georss:box>-23.4192396 -47.220529199999994 -22.9521756 -46.57508219999999</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-4391456792822225972</guid><pubDate>Tue, 15 May 2018 14:50:00 +0000</pubDate><atom:updated>2018-05-15T11:50:46.726-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">Gaming</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>Robocode 101</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Não é novidade que existe grande interesse no desenvolvimento de jogos digitais por conta do enorme mercado que existe. Mas nem todo mundo sabe que criar jogos digitais auxilia, e muito, no desenvolvimento de habilidade de programação que servem para muito mais do que os jogos.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://www.gsigma.ufsc.br/~popov/aulas/robocode/robocode_logo.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;213&quot; data-original-width=&quot;570&quot; height=&quot;119&quot; src=&quot;https://www.gsigma.ufsc.br/~popov/aulas/robocode/robocode_logo.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por isto é que existe tanto interesse em jogos digitais e competições, principalmente envolvendo estudantes, para identificar novos talentos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O robocode é um ambiente de programação de jogos digitais, de código livre, onde tanques-de-guerra-robôs competem virtualmente, de maneira autônoma, em batalhas do tipo vale-tudo (o último sobrevivente é o vencedor). Tal plataforma pode ser utilizada como ambiente para o desenvolvimento de tais habilidade de programação e também para conduzir competições de diferentes estilos e níveis.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Segue um material de orientação para aqueles que estão interessados no assunto. Aviso que este material é uma reorganização de outros que já publiquei aqui mesmo no Tecnopode.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/v9VwMqa4Y3ZjBU&quot; style=&quot;border-width: 1px; border: 1px solid #ccc; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/pjandl/robocode-101&quot; target=&quot;_blank&quot; title=&quot;Robocode 101&quot;&gt;Robocode 101&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/pjandl&quot; target=&quot;_blank&quot;&gt;Peter Jandl Junior&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Bom proveito!&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;
Para saber mais&lt;/h3&gt;
&lt;br /&gt;
&lt;li&gt;Home&lt;br /&gt;&lt;a href=&quot;http://robocode.sourceforge.net/&quot;&gt;http://robocode.sourceforge.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download&lt;br /&gt;&lt;a href=&quot;https://sourceforge.net/projects/robocode/files/&quot;&gt;https://sourceforge.net/projects/robocode/files/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentação OnLine&lt;br /&gt;&lt;a href=&quot;http://robocode.sourceforge.net/docs/robocode/&quot;&gt;http://robocode.sourceforge.net/docs/robocode/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Wiki&lt;br /&gt;&lt;a href=&quot;http://robowiki.net/wiki/Robocode&quot;&gt;http://robowiki.net/wiki/Robocode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Artigos&lt;br /&gt;&lt;a href=&quot;http://robocode.sourceforge.net/developerWorks.php&quot;&gt;http://robocode.sourceforge.net/developerWorks.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;UFSC&lt;br /&gt;&lt;a href=&quot;https://www.gsigma.ufsc.br/~popov/aulas/robocode/index.html&quot;&gt;https://www.gsigma.ufsc.br/~popov/aulas/robocode/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;YouTube vídeo&lt;br /&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=3qOoDuGkwco&quot;&gt;http://www.youtube.com/watch?v=3qOoDuGkwco&amp;nbsp;&lt;/a&gt;&lt;/li&gt;
</description><link>http://tecnopode.blogspot.com/2018/05/robocode-101.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-1936197412985190666</guid><pubDate>Thu, 05 Apr 2018 03:00:00 +0000</pubDate><atom:updated>2018-04-05T01:10:47.986-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Plena-25-Classes Internas e Anônimas</title><description>&lt;table style=&quot;background-color: white; color: black; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-19.html&quot; style=&quot;color: black; text-decoration-line: none;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; style=&quot;background: rgba(0, 0, 0, 0); border-radius: 0px; border: 1px solid rgba(0, 0, 0, 0); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/04/poo-p-24.html&quot; style=&quot;color: black; text-decoration-line: none;&quot;&gt;POO-P-24-Polimorfismo, upcasting e downcastin&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;POO-A-26-Tratamento Avançado de Exceções&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/03/poo-p-20.html&quot; style=&quot;color: #3778cd;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; style=&quot;background: rgba(0, 0, 0, 0); border-radius: 0px; border: 1px solid rgba(0, 0, 0, 0); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Os mecanismos de definição de classe presentes todas as linguagens de programação OO permitem o aninhamento de classes, criando o que se denominam classes internas. Assim é possível criar uma classe contida em outra classe, que pode estar contida em outra e, assim, sucessivamente.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo-BsSyQ1Fit_zbYZkpaFNS7BzLJiW8NaUq9msXLR6yDaU9YBZMkqsG45r_r5t6zbsrpHm2gz4qYCXCKz3JVkq09PbaRmfp6BMQfWLOxCK6ZfeQmTx3owMEY86COA7ZiAPnX-Iz3PdHWg/s1600/externa-aninhada.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;254&quot; data-original-width=&quot;197&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo-BsSyQ1Fit_zbYZkpaFNS7BzLJiW8NaUq9msXLR6yDaU9YBZMkqsG45r_r5t6zbsrpHm2gz4qYCXCKz3JVkq09PbaRmfp6BMQfWLOxCK6ZfeQmTx3owMEY86COA7ZiAPnX-Iz3PdHWg/s1600/externa-aninhada.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Classes aninhadas e internas&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O aninhamento de classes permite que uma classe seja declarada como membro de outra, o que corresponde a uma sintaxe de natureza recursiva [4][6][7]. Toda classe &lt;i&gt;aninhada&lt;/i&gt; (&lt;i&gt;nested class&lt;/i&gt;) é membro de uma &lt;i&gt;classe externa&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Tal como a &lt;i&gt;classe externa&lt;/i&gt;, a &lt;i&gt;classe aninhada&lt;/i&gt; pode conter campos, métodos, construtores e outras classes aninhadas, como mostra a figura anterior.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O exemplo que segue mostra uma classe denominada &lt;b&gt;Externa&lt;/b&gt;, que possui alguns campos, métodos e construtores, públicos e privados, incluindo um membro que é uma classe aninhada pública denominada &lt;b&gt;Aninhada&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Externa {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private double valor1;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public int valor2;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Externa() { this(1.5); }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Externa(double valor1) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.valor1 = valor1;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void exibir() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.printf(&quot;%f, %d\n&quot;, valor1, valor2);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public class Aninhada {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; private float valor3;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public Aninhada(float valor3) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.valor3 = valor3;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public double produto() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return valor1 * valor2 * valor3;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public void exibir() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.printf(&quot;%f, %d, %f\n&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; valor1, valor2, valor3);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A classe &lt;b&gt;Aninhada&lt;/b&gt;, que é membro público da classe &lt;b&gt;Externa&lt;/b&gt;, também possui campos, métodos e construtores, públicos e privados. As regras de acesso, isto é, a visibilidade dos seus membros é como sempre.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A &lt;i&gt;classe aninhada&lt;/i&gt;, como membro de sua &lt;i&gt;classe externa&lt;/i&gt;, possui acesso irrestrito a todos os membros&amp;nbsp; desta, independentemente de sua visibilidade declarada [6][7]. Os membros públicos da classe aninhada serão visíveis externamente a classe, enquanto os privados serão exclusivos da implementação da classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A instanciação de objetos da &lt;i&gt;classe externa&lt;/i&gt; é feita como para qualquer classe comum, ou seja:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// instanciação da classe Externa&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Externa externa1 = new Externa(20.16);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Externa externa2 = new Externa(14.04);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Já a instanciação de objetos da &lt;i&gt;classe aninhada&lt;/i&gt; requer a existência de uma instância da sua classe externa para que um objeto do seu tipo possa ser instanciado. Isto evidencia o tipo de relacionamento de dependência que existe entre uma classe aninhada e a classe externa que a contém.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// instanciação da classe Aninhada&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Externa.Aninhada aninhada1 = externa1. new Aninhada(1.2f);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Externa.Aninhada aninhada2 = externa2. new Aninhada(3.4f);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Na instanciação da classe Aninhada temos uma sintaxe que, de fato, não é familiar:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;A declaração de um objeto da classe aninhada requer a qualificação completa: &lt;b&gt;Externa.Aninhada&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;A instanciação de objeto da classe aninhada requer uma instância da sua classe externa.&lt;/li&gt;
&lt;li&gt;Além disso, se observa uma sintaxe não usual associada ao operador &lt;i&gt;new&lt;/i&gt;!&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Já o uso dos objetos, tanto da classe externa como da aninhada, é feito da maneira usual, como mostra o programa simples que segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class TestaExternaAninhada {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static void main(String[] a) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // uso dos objetos da classe Externa&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; externa1.valor2 = 1;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; externa1.exibir();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // uso dos objetos da classe Aninhada&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(aninhada1.produto());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; aninhada1.exibir();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // uso dos objetos da classe Externa&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; externa2.valor2 = 2;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; externa2.exibir();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // uso dos objetos da classe Aninhada&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(aninhada2.produto());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; aninhada2.exibir();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Cada objeto da &lt;i&gt;classe aninhada&lt;/i&gt; tanto faz referência ao seu objeto correspondente da &lt;i&gt;classe externa&lt;/i&gt;, como tem acesso ao conteúdo específico desta instância, como ilustrado na figura que segue.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0GV_1Gosjmf0LvKrv0PDFVX36t5llIm3xL5EZ_-uunLNIfGlfGa59zGIBqbpz1g-xLLm4jdZwa9MaRJI9tvPMewRnZo823u_q5TMEtl1CDbtMpRwPik_FXSl-2Xxg6KHlOEApTGWbRL4/s1600/classe-aninhada-1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;216&quot; data-original-width=&quot;600&quot; height=&quot;115&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0GV_1Gosjmf0LvKrv0PDFVX36t5llIm3xL5EZ_-uunLNIfGlfGa59zGIBqbpz1g-xLLm4jdZwa9MaRJI9tvPMewRnZo823u_q5TMEtl1CDbtMpRwPik_FXSl-2Xxg6KHlOEApTGWbRL4/s320/classe-aninhada-1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O resultado ilustrado nesta figura mostra:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Linha_1:&lt;br /&gt;valores 20.16 e 1, armazenados nos campos &lt;i&gt;valor1 &lt;/i&gt;e &lt;i&gt;valor2 &lt;/i&gt;da instância da classe &lt;b&gt;Externa &lt;/b&gt;denominada &lt;i&gt;externa1&lt;/i&gt;, exibidos pelo seu método exibir();&lt;/li&gt;
&lt;li&gt;Linha_2:&lt;br /&gt;valor 24.19..., resultado do método produto() acionado para a instância da classe &lt;b&gt;Aninhada &lt;/b&gt;chamada aninhada1&amp;nbsp; (&lt;i&gt;valor1*valor2*valor3&lt;/i&gt;=20.16*1*1.2);&lt;/li&gt;
&lt;li&gt;Linha_3:&lt;br /&gt;valores 20.16, 1 e 1.2, resultado do método &lt;i&gt;exibir()&lt;/i&gt; acionado para a instância da classe &lt;b&gt;Aninhada &lt;/b&gt;denominada &lt;i&gt;aninhada1&lt;/i&gt;;&lt;/li&gt;
&lt;li&gt;Linha_4:&lt;br /&gt;valores 14.04 e 2, armazenados nos campos &lt;i&gt;valor1&lt;/i&gt; e &lt;i&gt;valor2 &lt;/i&gt;da instância da classe &lt;b&gt;Externa &lt;/b&gt;denominada externa2, exibidos pelo seu método e&lt;i&gt;xibir()&lt;/i&gt;;&lt;/li&gt;
&lt;li&gt;Linha_5:&lt;br /&gt;valor 95472..., resultado do método produto() acionado para a instância da classe &lt;b&gt;Aninhada &lt;/b&gt;chamada &lt;i&gt;aninhada2&amp;nbsp; &lt;/i&gt;(&lt;i&gt;valor1*valor2*valor3&lt;/i&gt;=14,04*2*3.4);&lt;/li&gt;
&lt;li&gt;Linha_6:&lt;br /&gt;valores 14,04, 2 e 3.4, resultado do método &lt;i&gt;exibir()&lt;/i&gt; acionado para a instância da classe &lt;b&gt;Aninhada &lt;/b&gt;denominada &lt;i&gt;aninhada2&lt;/i&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Com isso vemos que é possível utilizar membros de instâncias de classes aninhadas como de qualquer classe, apesar de que a forma de instanciação é um pouco diferente.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como a existência de instâncias das classes aninhadas depende de uma instância da &lt;i&gt;classe externa&lt;/i&gt;, esse tipo de classe aninhada recebe o nome (mais comum) de &lt;i&gt;classe interna&lt;/i&gt; ou &lt;i&gt;inner class&lt;/i&gt;. A &lt;i&gt;classe externa&lt;/i&gt;, por analogia, é conhecida como &lt;i&gt;outter class&lt;/i&gt; [4][6][7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso destes objetos, após sua instanciação, é semelhante a qualquer outro, como já vimos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Classes aninhadas estáticas&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma classe aninhada pode ser declarada como um membro estático de sua classe externa, num outro uso do modificador &lt;i&gt;static&lt;/i&gt; [4][6][7]. Desta forma a classe aninhada estática tem acesso irrestrito apenas aos membros estáticos da classe externa, independente de sua visibilidade.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class OutraExterna {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private static int valor1;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public int valor2;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static class AninhadaEstatica {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public void exibir () {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&quot;valor1 = &quot;+ valor1);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Classes aninhadas estáticas não são consideradas classes internas, pois não existe uma relação de dependência forte como aquela existente nas classes internas, ou seja, como nas classes aninhadas como membros não estáticos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outro aspecto particular é que a instanciação de classes aninhadas estáticas independe de instâncias da classe externa, sendo feito como segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;OutraExterna.AninhadaEstatica aninhadaEstatica;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;aninhadaEstatica = new OutraExterna.AninhadaEstatica();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Aqui é possível ver que a declaração e instanciação de um objeto de uma classe aninhada estática requer apenas sua qualificação completa.&lt;br /&gt;
&lt;br /&gt;
O exemplo que segue mostra um programa que cria uma lista arbitrariamente longa de palavras. As palavras são armazenadas numa lista ligada simples, cujos nodos são objetos da classe &lt;b&gt;No&lt;/b&gt;, uma classe aninhada estática. Como não se pretende que esta classe &lt;b&gt;No&lt;/b&gt; seja utilizada por outros programas, seu caráter auxiliar e privado mostra como é conveniente sua declaração como classe aninhada estática.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Lista {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// classe aninhada estática&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private static class No {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public String nome;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public No proximo;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; @SuppressWarnings(&quot;unused&quot;)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public No() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this(null, null); // aciona construtor parametrizado&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public No(String n, No p) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nome = n;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;proximo = p;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static void main (String arg[]) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; No lista = null; // lista vazia (sem nós)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Scanner sc = new Scanner(System.in); // prepara console&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; do { // laço para solicitação de dados&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&quot;Digite uma palavra (. encerra):&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String aux = sc.next();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!aux.equals(&quot;.&quot;)) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; No novo = new No(aux, lista);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lista = novo;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } while (!aux.equals(&quot;.&quot;));&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;Lista das Palavras:&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; No no = lista; // variável auxiliar para navegar lista&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; while (no!=null) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.print(no.nome + &quot; &quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;no = no.proximo;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;&amp;lt;.&amp;gt;&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;} // Fim da classe Lista&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Classes anônimas&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma &lt;i&gt;classe anônima&lt;/i&gt; (&lt;i&gt;anonymous class&lt;/i&gt;) é uma classe interna, de papel auxiliar, declarada sem nome e definida como uma subclasse ou como a realização de uma interface específica [4][6][7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Tem o propósito de servir para a instanciação de um único objeto que, provavelmente, não será utilizado em outro contexto, portanto não requerendo que seja armazenada uma referência para o objeto criado.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Considere a situação que segue, de definição de duas classes semelhantes destinadas a criação de uma &lt;i&gt;thread&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Uma subclasse da classe Thread&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class A extends Thread {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void run () {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;/* código de run omitido */&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// A realização da interface Runnable&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class B implements Runnable {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void run () {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;/* código de run omitido */&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Objetos das classes &lt;b&gt;A&lt;/b&gt; e &lt;b&gt;B&lt;/b&gt; poderiam ser instanciados como:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Uma instância de A&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;A objeto1 = new A ();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Uma instância de B&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;B objeto2 = new B ();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Mas, se apenas um objeto destas classes é usado, a definição de &lt;b&gt;A&lt;/b&gt; ou &lt;b&gt;B&lt;/b&gt;, como classes independentes, aninhadas ou internas é desnecessária, pois não serão reutilizadas para criação de outros objetos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso de classes anônimas é conveniente nestas situações, onde é possível substituir as classes &lt;b&gt;A&lt;/b&gt; e &lt;b&gt;B&lt;/b&gt; criadas anteriormente pelo código que segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Classe anônima derivada de Thread&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// e que equivale a classe A.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Thread objeto1 = new Thread ( ) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void run () {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;/* código de run omitido */&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Classe anônima que realiza Runnable&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// e que equivale a classe B.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Runnable objeto2 = new Runnable ( ) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void run () {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;/* código de run omitido */&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Aqui o uso de um construtor é complementado com um bloco declarativo de código que:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;implementa métodos abstratos necessários, ou&lt;/li&gt;
&lt;li&gt;substitui métodos existentes da superclasse indicada; ou&lt;/li&gt;
&lt;li&gt;realiza uma interface diretamente implementando os métodos nela especificados.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Deve ser ressaltado que o bloco declarativo não é acompanhado de um nome específico, ou seja, temos uma classe sem nome, ou seja, anônima.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Esta construção é conveniente quando é requerido apenas um objeto da classe, pois como a classe criada é anônima, não será possível utilizá-la novamente para criar outros objetos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um uso bastante típico de classe anônimas é no registro de objetos processadores de eventos (&lt;i&gt;listeners&lt;/i&gt;) em interfaces gráficas (GUI - &lt;i&gt;Graphical User Interfaces&lt;/i&gt;), como nos fragmentos que seguem:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Instância de botão presente na GUI&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;JButton button1 = new JButton(&quot;Fazer Ação&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Registro do listener: acionamento do botão&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// provoca invocação do método&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;button1.addActionListener( new ActionListener() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;@Override&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void actionPerformed(ActionEvent evt) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // método acionado pelo botão&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; acao_Botao1(evt);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;});&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;protected void acao_Botao1(ActionEvent evt) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// Ação correspondente do botão&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A &lt;i&gt;classe anônima&lt;/i&gt; utilizada neste exemplo realiza a interface &lt;b&gt;java.awt.event.ActionListener&lt;/b&gt;, que requer apenas a implementação do método &lt;i&gt;actionPerformed(Event)&lt;/i&gt;, o qual &quot;desvia&quot; o acionamento do botão para outro método, declarado como membro da classe externa.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Dado que são elementos auxiliares, as classes aninhadas somente devem ser criadas quando sua implementação se limita a dois ou três métodos simples. Classes aninhadas extensas pioram a legibilidade dos programas e devem ser evitadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ao mesmo tempo, as classes anônimas são muito utilizadas: na criação de &lt;i&gt;iterators &lt;/i&gt;(classes para navegação de coleções); e no processamento de eventos em aplicações dotadas de interfaces gráficas. Nestas situações, permitem a definição rápida de subclasses e objetos que implementam interfaces específicas de maneira simples.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;background-color: white; color: black; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-19.html&quot; style=&quot;color: black; text-decoration-line: none;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; style=&quot;background: rgba(0, 0, 0, 0); border-radius: 0px; border: 1px solid rgba(0, 0, 0, 0); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/04/poo-p-24.html&quot; style=&quot;color: black; text-decoration-line: none;&quot;&gt;POO-P-24-Polimorfismo, upcasting e downcastin&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;POO-A-26-Tratamento Avançado de Exceções&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/03/poo-p-20.html&quot; style=&quot;color: #3778cd;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; style=&quot;background: rgba(0, 0, 0, 0); border-radius: 0px; border: 1px solid rgba(0, 0, 0, 0); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[12] GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J.. Design Patterns: Elements of Reusable Object-Oriented Software. Reading, MA: Addison-Wesley, 1995.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/04/poo-p-25.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Jundiaí, SP, Brasil</georss:featurename><georss:point>-23.1857076 -46.897805699999992</georss:point><georss:box>-23.4192396 -47.220529199999994 -22.9521756 -46.57508219999999</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-8606363480318849295</guid><pubDate>Mon, 02 Apr 2018 03:00:00 +0000</pubDate><atom:updated>2018-04-05T01:12:33.910-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Plena-24-Polimorfismo, upcasting e downcasting</title><description>&lt;table style=&quot;background-color: white; color: black; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-19.html&quot; style=&quot;color: black; text-decoration-line: none;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; style=&quot;background: rgba(0, 0, 0, 0); border-radius: 0px; border: 1px solid rgba(0, 0, 0, 0); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-23.html&quot; style=&quot;color: black; text-decoration-line: none;&quot;&gt;POO-P-23-Polimorfismo&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/04/poo-p-25.html&quot;&gt;POO-A-25-Classes internas e anônimas&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/04/poo-p-25.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; style=&quot;background: rgba(0, 0, 0, 0); border-radius: 0px; border: 1px solid rgba(0, 0, 0, 0); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;O polimorfismo é a característica mais importante da OO e consiste no mecanismo pelo qual vários tipos de objetos, ou seja, formas diferentes de implementação, podem ser tratadas como sendo de um tipo comum.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjUISFC4DccP0yf504MDxBp2BxF6L04EYodql1muIFQDX9bNfP4wlpVloYDeWKmE1izr3pzpe9FbhxAfdkuGmEkzNK1lgKpMQ1Raohi0-GEUbdfDwsrndB0aGBMvpkj8-0yLz5RtnVBwA/s1600/polimorfismo-em-Java.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;456&quot; data-original-width=&quot;764&quot; height=&quot;190&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjUISFC4DccP0yf504MDxBp2BxF6L04EYodql1muIFQDX9bNfP4wlpVloYDeWKmE1izr3pzpe9FbhxAfdkuGmEkzNK1lgKpMQ1Raohi0-GEUbdfDwsrndB0aGBMvpkj8-0yLz5RtnVBwA/s320/polimorfismo-em-Java.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Todas as linguagens orientadas a objetos possuem uma classe que constitui a raiz de sua hierarquia de tipos. A partir desta classe são criadas outras por meio da herança, a qual pode ser usada de maneira implícita ou explícita. Na plataforma Java a raiz da hierarquia é a classe &lt;b&gt;java.lang.Object&lt;/b&gt;; enquanto que no C# a classe-raiz é &lt;b&gt;System.Object&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Desta maneira, qualquer que seja a hierarquia de classes considerada, todas as classes ali existentes são subclasses de &lt;b&gt;Object&lt;/b&gt;, sendo assim, uma variável do tipo &lt;b&gt;Object&lt;/b&gt; pode armazenar referências de qualquer tipo de objeto.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O polimorfismo permite que um objeto seja, transparentemente, tratado como qualquer outro tipo ascendente (superclasses da qual é derivado), e também como sendo do seu tipo verdadeiro, isto é, como foi instanciado de fato. Isso possibilita a generalização, ou seja, uma operação que faz o contrário da herança, que permite a especialização.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como vimos, um objeto cuja classe é derivada de outra é uma composição de objetos em camadas. A camada mais externa corresponde ao tipo real do objeto (por exemplo &lt;b&gt;Gerente&lt;/b&gt;) e nela se encontram as adições providas por esta classe (sua especialização em relação à camada anterior). A camada mais interna é sempre aquela que corresponde ao tipo &lt;b&gt;Object&lt;/b&gt;, onde estão presentes seus elementos. As camadas intermediárias são aquelas fornecidas pelos descendentes de &lt;b&gt;Object &lt;/b&gt;até a camada mais externa. A figura que segue ilustra esta estrutura em camadas de um objeto de uma possível classe &lt;b&gt;Comissionado&lt;/b&gt;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMMcqkrHZ89oHHWfYRzwTNQbvwtvydzhC-aakrZ_iHo50KrGCsjdbzYwNBrg1UJcVh-fAN6yvd8YOhdzOrCRs55n3sP9iIJ-OvkoDGFiM8VHcFxUqo62qxUwTyXKUZPsRiD1xKyzf6U-A/s1600/polimorfismo-01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;553&quot; data-original-width=&quot;410&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMMcqkrHZ89oHHWfYRzwTNQbvwtvydzhC-aakrZ_iHo50KrGCsjdbzYwNBrg1UJcVh-fAN6yvd8YOhdzOrCRs55n3sP9iIJ-OvkoDGFiM8VHcFxUqo62qxUwTyXKUZPsRiD1xKyzf6U-A/s320/polimorfismo-01.png&quot; width=&quot;237&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Conforme o tipo da referência usada para acessar um objeto, determina-se quais camadas poderão efetivamente ser usadas. Se utilizamos uma referência do tipo real (de instanciação), temos acesso a todas os membros públicos deste tipo e de todos os tipos ancestrais (ascendentes). Na figura acima, a referência do tipo &lt;b&gt;Comissionado &lt;/b&gt;permite acessar todos os membros públicos do objeto presentes na camada mais externa (&lt;b&gt;Comissionado&lt;/b&gt;), na camada intermediária (&lt;b&gt;Funcionario&lt;/b&gt;) e também na camada mais interna (&lt;b&gt;Object&lt;/b&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Mas se a referência é do tipo &lt;b&gt;Funcionario&lt;/b&gt;, só é possível acessar os membros desta camada (&lt;b&gt;Funcionario&lt;/b&gt;) e das mais internas (no caso apenas &lt;b&gt;Object&lt;/b&gt;). Uma referência de tipo &lt;b&gt;Funcionário &lt;/b&gt;não consegue acessar nada presente em camadas mais externas do que seu tipo, porque sua classe não prevê sua existência, pois foram adicionadas nas especializações (&lt;i&gt;subclasses&lt;/i&gt;) posteriores.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Da mesma maneira, uma referência do tipo &lt;b&gt;Object&lt;/b&gt; só consegue acessar a porção referente a este tipo presente em objetos de qualquer classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por conta da construção dos objetos em múltiplas camadas e do comportamento dos diferentes tipos de referências em relação às camadas presentes nos objetos, temos duas importantes operações decorrentes do polimorfismo:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;up type casting&lt;/i&gt; (ou apenas &lt;i&gt;upcasting&lt;/i&gt;) e&lt;/li&gt;
&lt;li&gt;&lt;i&gt;down type casting&lt;/i&gt; (ou apenas &lt;i&gt;downcasting&lt;/i&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Polimorfismo e upcasting&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O &lt;i&gt;uptype casting&lt;/i&gt;, &lt;i&gt;upcasting&lt;/i&gt; ou coerção para &lt;i&gt;supertipo&lt;/i&gt; é a operação disponível na orientação a objetos que permite que uma referência de superclasse utilize a porção correspondente nos objetos descendentes de sua hierarquia. Em outras palavras, uma referência de um certo tipo pode acessar sua camada correspondente em qualquer objeto de tipo derivado, isto é, em qualquer subclasse.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observe novamente a hierarquia de objetos. &lt;b&gt;Funcionario&lt;/b&gt; (que é uma classe derivada de &lt;b&gt;Object&lt;/b&gt;) dá origem a várias classes, tais como &lt;b&gt;Caixa&lt;/b&gt;, &lt;b&gt;Gerente&lt;/b&gt;, &lt;b&gt;Motorista &lt;/b&gt;ou &lt;b&gt;Comissionado&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma referência do tipo &lt;b&gt;Gerente &lt;/b&gt;permite acessar todas as camadas presentes nos objetos instanciados como deste tipo, assim como apenas uma referência do tipo &lt;b&gt;Comissionado &lt;/b&gt;permite acessar todos os elementos deste tipo, como ilustrado na figura que segue.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJLBLisha3RaeKl40GGD1B4VUeDP3-nGAB-xYwjM1l2R9zb6dZpbOg1qV8mR5xqXv7ISU9jc1vkOgY6AvGGuyI-VopgnvMpnybikuvPeNZ_ikkT_pbF60lMMB4KvB_WZf6_vjBUirmIGM/s1600/polimorfismo-02.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;641&quot; data-original-width=&quot;874&quot; height=&quot;234&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJLBLisha3RaeKl40GGD1B4VUeDP3-nGAB-xYwjM1l2R9zb6dZpbOg1qV8mR5xqXv7ISU9jc1vkOgY6AvGGuyI-VopgnvMpnybikuvPeNZ_ikkT_pbF60lMMB4KvB_WZf6_vjBUirmIGM/s320/polimorfismo-02.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Referências deste tipo podem ser obtidas como no fragmento abaixo:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Gerente g2 = new Gerente(2345);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Comissionado c2 = new Comissionado(3456);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No entanto, como um &lt;b&gt;Gerente &lt;/b&gt;é um&amp;nbsp;&lt;b&gt;Funcionario&lt;/b&gt;&amp;nbsp;(é subclasse deste tipo e possui uma camada interna correspondente), uma referência do tipo &lt;b&gt;Funcionario &lt;/b&gt;pode ser usada para acessar tal camada (e as interiores) em qualquer objeto do tipo Gerente ou Comissionado, pois é garantido que tais objetos possuem a camada interior correspondente a &lt;b&gt;Funcionario&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por meio do polimorfismo, uma referência de tipo &lt;b&gt;Funcionario &lt;/b&gt;pode acessar objetos de tipos diferentes, embora tal acesso seja limitado a camada correspondente à referência, portanto de objetos cujos tipos são subclasses do tipo da referência. Assim é válido fazer:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Funcionario é superclasse de Gerente&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Gerente é subclasse de Funcionario&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Funcionario f2 = g2;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Funcionario f3 = new Gerente(2346);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Funcionario é superclasse de Comissionado&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Comissionado é subclasse de Funcionario&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Funcionario f4 = c2;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Funcionario f5 = new Comissionado(3457);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Aqui foi usado o &lt;i&gt;upcasting&lt;/i&gt;, ou seja, uma referência de um tipo ancestral (&lt;b&gt;Funcionario&lt;/b&gt;) foi usada para acessar a camada correspondente em objetos de seus subtipos (&lt;b&gt;Gerente &lt;/b&gt;e &lt;b&gt;Comissionado&lt;/b&gt;). Assim, objetos de tipos diferentes são acionados por um mesmo conjunto de métodos, ou seja, recebem os mesmos tipos de mensagens. Esta situação é ilustrada na figura que segue.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU2xpq49z3MooTzSqHCWHTNPB0UoBT_dixQD3WV7ct44JoS4Yj03YZqUE5WOv0II0mNT4I_n1NLHIOs4NXCuz_NbdtFuD9-mEfknz-jPniKuXzm82z2YosA4y0Vp8pIxM_1mWNRPNgOeI/s1600/polimorfismo-03.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;585&quot; data-original-width=&quot;863&quot; height=&quot;216&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU2xpq49z3MooTzSqHCWHTNPB0UoBT_dixQD3WV7ct44JoS4Yj03YZqUE5WOv0II0mNT4I_n1NLHIOs4NXCuz_NbdtFuD9-mEfknz-jPniKuXzm82z2YosA4y0Vp8pIxM_1mWNRPNgOeI/s320/polimorfismo-03.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Quando o tipo de referência usada não é compatível com a hierarquia do objeto, o compilador sinaliza o erro e impede que o código seja compilado, evitando que objetos sejam incorretamente manipulados por referências inadequadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Já referências de tipo &lt;b&gt;Object&lt;/b&gt;, por meio do &lt;i&gt;upcasting&lt;/i&gt;, podem acessar qualquer tipo de objeto, pois qualquer tipo é subclasse de &lt;b&gt;Object&lt;/b&gt; e todo objeto possui como camada mais interior aquela que corresponde a &lt;b&gt;Object&lt;/b&gt;, como mostra a figura que segue.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2pnpFg3fqdA582fSTZ8mfkhNKfAG1jPU_RmoMLDfUK091dFk10ljyQ0MMCKttf0KQz9v3mShknkJTRC7C9AnTRv3xPigIWHjz5fYm_NseLyvycjrSPA_kN2ZjvbgTM2dtBxqa1d2AjfU/s1600/polimorfismo-04.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;553&quot; data-original-width=&quot;864&quot; height=&quot;204&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2pnpFg3fqdA582fSTZ8mfkhNKfAG1jPU_RmoMLDfUK091dFk10ljyQ0MMCKttf0KQz9v3mShknkJTRC7C9AnTRv3xPigIWHjz5fYm_NseLyvycjrSPA_kN2ZjvbgTM2dtBxqa1d2AjfU/s320/polimorfismo-04.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim temos que é possível fazer:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Object o1 = new Gerente(2367);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Object o2 = new Comissionado(3489);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Object o3 = f2;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Object o4 = f5;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Object o5 = new String(&quot;Upcasting&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isto significa que, sob certos aspectos, uma operação de &lt;i&gt;up type casting&lt;/i&gt; é como uma operação implícita de coerção (conversão de tipo) que possibilita o uso mais genérico de um objeto, mas só é válida quando utiliza subclasse do tipo real do objeto.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O &lt;i&gt;upcasting&lt;/i&gt; é um mecanismo polimórfico de generalização, que permite o uso de um objeto por meio de referências de seus &lt;i&gt;supertipos&lt;/i&gt;, embora as operações estejam limitadas as características da superclasse usada. Isto é conveniente para tratar famílias de objetos, pois uma referência de superclasse permite manipular qualquer um de seus subtipos, ao invés de requerer referências de tipos específicos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isto flexibiliza o armazenamento de objetos em &lt;i&gt;arrays&lt;/i&gt; e outras estruturas de dados; possibilita que métodos retornem objetos de tipos diferentes (mas de uma mesma família; além de facilitar alterações no projeto de sistemas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por exemplo, no fragmento de código que segue, um &lt;i&gt;array&lt;/i&gt; de tipo &lt;b&gt;Funcionario&lt;/b&gt; pode conter objetos de qualquer tipo derivado de &lt;b&gt;Funcionario&lt;/b&gt;:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// cria array de Funcionario&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Funcionario folha[] = new Funcionario[3];&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// instancia e ajusta objeto tipo funcionário&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Funcionario f = new Funcionario(1234);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;f.setSalarioBase(850);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// atribui objeto Funcionario ao array de mesmo tipo&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;folha[0] = f;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// instancia e ajusta objeto tipo Comissionado&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Comissionado c = new Comissionado(2345);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;f.setSalarioBase(650);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// atribui objeto Comissionado ao array&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;folha[1] = c;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// instancia objeto Gerente, atribuindo-o ao array, ajustando-o&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;folha[2] = new Gerente(3456);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;folha[2].setSalarioBase(4500);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nos elementos [1] e [2] do array, cujo tipo declarado é &lt;b&gt;Funcionario&lt;/b&gt;, ocorre o &lt;i&gt;upcasting&lt;/i&gt;, pois objetos de subclasses de &lt;b&gt;Funcionario&lt;/b&gt; são ali armazenados.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso do &lt;i&gt;array&lt;/i&gt; de &lt;b&gt;Funcionario&lt;/b&gt; permite generalizar o tratamento de funcionários de tipos diferentes, como no outro fragmento que segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;double folhaBaseTotal = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;for(int i=0; i&amp;lt;folha.length; i++) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;folhaBaseTotal += folha[i].getSalarioBase();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;Folha total = &quot; + folhaBaseTotal);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No laço existente, a despeito do tipo real, todas as características do tipo &lt;b&gt;Funcionario &lt;/b&gt;estão disponíveis por meio das referências existentes no array de tipo &lt;b&gt;Funcionario&lt;/b&gt;. No entanto, ao acionar método &lt;i&gt;getSalarioBase()&lt;/i&gt;, disponível na interface do tipo &lt;b&gt;Funcionario&lt;/b&gt;, é de fato acionada a implementação existente na classe efetiva do objeto armazenado naquela posição, pois esta substitui (&lt;i&gt;method overriding&lt;/i&gt;) a definida em &lt;b&gt;Funcionario&lt;/b&gt;. Assim, este laço de tratamento generalizado acaba usado a operação definida nas subclasses de &lt;b&gt;Funcionario&lt;/b&gt;, sem qualquer tratamento condicional.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O &lt;i&gt;upcasting &lt;/i&gt;permite, assim, criar operações genéricas para lidar com múltiplos tipos de objetos, relacionados numa hierarquia de classes por meio de um ancestral comum, como segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;double getFolhaBaseTotal(Funcionario[] folha ){&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double folhaBaseTotal = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;for(int i=0; i&amp;lt;folha.length; i++) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; folhaBaseTotal += folha[i].getSalarioBase();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;return folhaBaseTotal;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O método &lt;i&gt;getFolhaBaseTotal(Funcionario[])&lt;/i&gt; recebe um &lt;i&gt;array&lt;/i&gt; de tipo &lt;b&gt;Funcionario&lt;/b&gt;. Como antes, a despeito do tipo real, todas as características do tipo &lt;b&gt;Funcionario &lt;/b&gt;estão disponíveis por meio das referências existentes no array de tipo &lt;b&gt;Funcionario&lt;/b&gt;. Mas, dada a sobreposição de métodos, serão usadas as implementações dos tipos específicos. Então, mesmo que surjam novos subtipos derivados de &lt;b&gt;Funcionario&lt;/b&gt;, esta operação continuará a funcionar, sem necessidade de qualquer alteração.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Polimorfismo e downcasting&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O polimorfismo também dispõe de uma operação que permite converter uma referência de superclasse em outra de subclasse, portanto mais especializada, que é chamada de &lt;i&gt;down type casting&lt;/i&gt;, &lt;i&gt;downcasting&lt;/i&gt; ou coerção para subtipo.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga0lJhmrg4POPcUKaHfRXw8IfKX2qAJk1yK8HZdfGmrYHrV0tr77DG_HhzbtqlJQB5nhV2xDmrk9X8KHVJkZOoiNtkcF5__mMgmX6q87_YFJeDX2THFFEku5HthN9cK4wXQETquZCUnnE/s1600/polimorfismo-05.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;249&quot; data-original-width=&quot;472&quot; height=&quot;168&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga0lJhmrg4POPcUKaHfRXw8IfKX2qAJk1yK8HZdfGmrYHrV0tr77DG_HhzbtqlJQB5nhV2xDmrk9X8KHVJkZOoiNtkcF5__mMgmX6q87_YFJeDX2THFFEku5HthN9cK4wXQETquZCUnnE/s320/polimorfismo-05.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como mostra a figura, o &lt;i&gt;downcasting &lt;/i&gt;é uma operação inversa ao &lt;i&gt;upcasting&lt;/i&gt;. Enquanto o &lt;i&gt;upcasting &lt;/i&gt;ocorre quando se utiliza uma referência de supertipo (ancestral) para o tratamento de um objeto; no &lt;i&gt;downcasting &lt;/i&gt;é usada uma referência de subtipo (descendente) para o tratamento de um objeto.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Aqui, a referência desejada como resultado do &lt;i&gt;downcasting &lt;/i&gt;passa a utilizar uma camada mais externa do objeto, decorrente da especialização. Mas como o compilador não pode garantir que o objeto referenciado possua tais camadas adicionais, esta operação deve ser explicitamente indicada pelo programador, como uma espécie de autorização para sua realização.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observe no fragmento de código que segue, como uma referência &lt;i&gt;f3&lt;/i&gt;, de tipo &lt;b&gt;Funcionario&lt;/b&gt; ou mesmo &lt;b&gt;Object&lt;/b&gt;, é transformada em um objeto de tipo &lt;b&gt;Comissionado&lt;/b&gt; (que é uma de subclasses); ou como uma referência de &lt;b&gt;Object &lt;/b&gt;é transformada em outra do tipo &lt;b&gt;String&lt;/b&gt;:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Comissionado c = (Comissionado) f3;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;String str = (String) obj;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A transformação de tipo, &lt;i&gt;down type casting&lt;/i&gt; ou coerção possibilita transformar uma referência do objeto em outra de seu tipo real ou de tipo mais próximo. Como nem sempre isso será possível, porque o objeto não foi, de fato, criado como algo daquele tipo, a compilação do código requer a explicitação da conversão por meio da indicação do tipo de destino entre parêntesis.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se a referência não pode ser transformada na tipo indicado, o &lt;b&gt;downcasting&lt;/b&gt; provoca o lançamento da exceção &lt;b&gt;ClassCastException&lt;/b&gt;, como nestes exemplos inválidos:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Upcasting OK&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Funcionario f4 = new Gerente (6789);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Downcasting INVALIDO&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Comissionado c = (Comissionado) f4;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para evitar esse tipo de exceção, existe o operador &lt;i&gt;instanceof&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Operador instanceof&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O operador especial &lt;i&gt;instanceof&lt;/i&gt;, que retorna um resultado booleano, permite verificar, em tempo de execução, se um objeto é de um tipo específico ou de suas subclasses. A sua sintaxe é:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;lt;objeto&amp;gt; instanceof &amp;lt;Tipo&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso deste operador retorna &lt;i&gt;true&lt;/i&gt;, quando o objeto é uma instância direta do tipo indicado ou de alguma de suas subclasses; ou &lt;i&gt;false&lt;/i&gt;, quando o objeto não é uma instancia do tipo indicado ou de qualquer uma de suas subclasses.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso do operador &lt;i&gt;instanceof &lt;/i&gt;permite evitar erros em operações de &lt;i&gt;downcasting&lt;/i&gt;, mas sua aplicação não pode ser generalizada, devendo empregar tipos específicos. Um exemplo:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Funcionario func = new Gerente(5678);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;if (func instanceof Gerente) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;Gerente g = (Gerente) func; // downcasting&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;System.out.println(&quot;Gerente depto: &quot; + g.getGerencia() );&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outro exemplo:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Integer n = new Integer (123456789);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;if (n instanceof Number) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;count= n.intValue();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Com o uso de &lt;i&gt;instanceof &lt;/i&gt;é possível garantir a execução de operações de &lt;i&gt;downcasting &lt;/i&gt;sem a ocorrência de exceções &lt;b&gt;ClassCastException &lt;/b&gt;decorrentes de coerção inválida de objetos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Considerações finais&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O polimorfismo é o mecanismo principal da OO que pode se manifestar tanto em tempo de compilação, quanto em tempo de execução.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Em tempo de compilação o polimorfismo aparece como a sobrecarga de métodos (&lt;i&gt;method overload&lt;/i&gt;), também como sobrecarga de operadores em algumas linguagens OO, também sendo chamado de ligação precoce (&lt;i&gt;early binding&lt;/i&gt;). Já em tempo de execução, aparece como sobreposição de métodos (&lt;i&gt;method overriding&lt;/i&gt;), que é decorrência do uso do mecanismo da herança onde a versão mais especializada de um método, presente em subclasses, é acionada, situação conhecida como ligação tardia (&lt;i&gt;late binding&lt;/i&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim, com o polimorfismo é possível:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Que subclasses forneçam implementações diferentes de métodos com uma mesma assinatura (ou seja, a sobreposição de métodos ou &lt;i&gt;method overriding&lt;/i&gt;), provendo então comportamentos distintos, modificados em cada classe derivada conforme a especialização desejada.&lt;/li&gt;
&lt;li&gt;Que referências de superclasse acionem métodos de subclasse comuns à superclasse (sobrepostos) em tempo de execução, ou seja, invoquem métodos diferentes, mas com a mesma assinatura, possibilitando que tipos diferentes recebam as mesmas mensagens.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Finalmente, grande parte da flexibilidade e elegância das linguagens de programação OO decorrem do polimorfismo.&lt;/div&gt;
&lt;br /&gt;
&lt;table style=&quot;background-color: white; color: black; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-19.html&quot; style=&quot;color: black; text-decoration-line: none;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; style=&quot;background: rgba(0, 0, 0, 0); border-radius: 0px; border: 1px solid rgba(0, 0, 0, 0); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-23.html&quot; style=&quot;color: black; text-decoration-line: none;&quot;&gt;POO-P-23-Polimorfismo&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;table style=&quot;color: black; font-size: 13px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/04/poo-p-25.html&quot;&gt;POO-A-25-Classes internas e anônimas&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/04/poo-p-25.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; style=&quot;background: rgba(0, 0, 0, 0); border-radius: 0px; border: 1px solid rgba(0, 0, 0, 0); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;
Referências Bibliográficas&lt;/h4&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;br /&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;br /&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;br /&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;br /&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;br /&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;br /&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;br /&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;br /&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;br /&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;br /&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;br /&gt;
[12] GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J.. Design Patterns: Elements of Reusable Object-Oriented Software. Reading, MA: Addison-Wesley, 1995.</description><link>http://tecnopode.blogspot.com/2018/04/poo-p-24.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Jundiaí, SP, Brasil</georss:featurename><georss:point>-23.1857076 -46.897805699999992</georss:point><georss:box>-23.4192396 -47.220529199999994 -22.9521756 -46.57508219999999</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-682533120390704884</guid><pubDate>Mon, 26 Mar 2018 13:00:00 +0000</pubDate><atom:updated>2018-04-02T08:53:50.738-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Plena-23-Polimorfismo</title><description>&lt;table style=&quot;background-color: white; color: black; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-19.html&quot; style=&quot;color: black; text-decoration-line: none;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; style=&quot;background: rgba(0, 0, 0, 0); border-radius: 0px; border: 1px solid rgba(0, 0, 0, 0); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-22.html&quot; style=&quot;color: black; text-decoration-line: none;&quot;&gt;POO-P-22-Herança Múltipla&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/04/poo-p-24.html&quot;&gt;POO-A-24-Polimorfismo, upcasting e downcasting&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/04/poo-p-24.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; style=&quot;background: rgba(0, 0, 0, 0); border-radius: 0px; border: 1px solid rgba(0, 0, 0, 0); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;A palavra polimorfismo vem do grego &lt;i&gt;poli morfos&lt;/i&gt; e significa muitas formas. É a característica chave da orientação a objetos que torna possível utilizar múltiplas formas de construção de objetos. Na OO o polimorfismo de manifesta na sobrecarga, na herança, na sobreposição e também na generalização.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh802OyU80c875UT1INfJm_FFxoN5wRBWS14hrwkd2SNCkhihTrcx_NF3GCAoYHv1gNZPbh1woJNL1Bb2m0bks064ZnXtUg5ukD8seeG3QaQIEvUK9D4nZVYOqJoZB6EJOMbVBp8jWMboU/s1600/polimorfismo-00.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;474&quot; data-original-width=&quot;326&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh802OyU80c875UT1INfJm_FFxoN5wRBWS14hrwkd2SNCkhihTrcx_NF3GCAoYHv1gNZPbh1woJNL1Bb2m0bks064ZnXtUg5ukD8seeG3QaQIEvUK9D4nZVYOqJoZB6EJOMbVBp8jWMboU/s320/polimorfismo-00.png&quot; width=&quot;220&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Na verdade, o polimorfismo é um mecanismo único, semelhante a uma força. Em uma direção ele provê a &lt;i&gt;especialização&lt;/i&gt; (de tipos), enquanto no sentido oposto oferece a &lt;i&gt;generalização&lt;/i&gt; (de tipos). É por meio do polimorfismo que as linguagens OO proporcionam mecanismos de classificação e também de reuso.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Mecanismos do polimorfismo::sobrecarga&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A sobrecarga de métodos (&lt;i&gt;method overload&lt;/i&gt;) é uma propriedade da OO que permite a existência de dois ou mais métodos com o mesmo nome em uma mesma classe, desde que possuam &lt;i&gt;assinaturas&lt;/i&gt; diferentes. Devemos recordar que a &lt;i&gt;assinatura&lt;/i&gt; de um método é a combinação de seu nome com a lista dos tipos de seus parâmetros formais.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim, o método estático &lt;i&gt;pow&lt;/i&gt; da classe &lt;b&gt;Math&lt;/b&gt;, que toma dois parâmetros do tipo &lt;i&gt;double&lt;/i&gt;, tem assinatura &lt;i&gt;pow(double, double)&lt;/i&gt;; o método &lt;i&gt;getClass()&lt;/i&gt; da classe &lt;b&gt;Objeto&lt;/b&gt; não toma parâmetros, sendo sua assinatura &lt;i&gt;getClass(void)&lt;/i&gt;; enquanto o método &lt;i&gt;get&lt;/i&gt; da classe &lt;b&gt;ArrayList&lt;/b&gt; toma um inteiro como argumento e tem assinatura &lt;i&gt;get(int)&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É a assinatura diferente que possibilita a diferenciação do método que deve ser acionado no ponto de sua invocação (i.e., na chamada do método); por isso o tipo de retorno é desconsiderado e não faz parte da assinatura, como ilustra a figura que segue.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm5o0Q4LzenInySvt-19LTmKU_2yY4-O_d5jq2-HLRHZj6k0_h2lOuu-tUZsfIJVAKwrqR0oy7PCZ886DoF22SyTekBxPXaYxM6OgQgB73J30yirT9_bcDffroZZgAuvTw6ooMgf_mIEI/s1600/overload-1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;185&quot; data-original-width=&quot;550&quot; height=&quot;107&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm5o0Q4LzenInySvt-19LTmKU_2yY4-O_d5jq2-HLRHZj6k0_h2lOuu-tUZsfIJVAKwrqR0oy7PCZ886DoF22SyTekBxPXaYxM6OgQgB73J30yirT9_bcDffroZZgAuvTw6ooMgf_mIEI/s320/overload-1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Desta maneira, métodos conceitualmente semelhantes podem possuir o mesmo nome, diferenciando-se pela lista requerida de argumentos, que possibilita que cada um realize sua operação de maneiras distintas. Por exemplo, a classe &lt;b&gt;String&lt;/b&gt; oferece quatro métodos com nome &lt;i&gt;indexOf&lt;/i&gt;:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;indexOf(char)&lt;/i&gt; retorna a posição onde se localiza a primeira ocorrência do caractere fornecido como argumento;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;indexOf(char, int)&lt;/i&gt; retorna a posição da primeira ocorrência do caractere suprido como argumento, a partir da posição indicada;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;indexOf(String)&lt;/i&gt; retorna a posição onde se encontra a primeira ocorrência da &lt;i&gt;substring&lt;/i&gt; indicada como argumento;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;indexOf(String, int)&lt;/i&gt; retorna a posição da primeira ocorrência da &lt;i&gt;substring&lt;/i&gt; dada como argumento, a partir da posição indicada.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A existência de métodos sobrecarregados proporciona flexibilidade para o uso da classe, pois várias formas das operações estão presentes, ao mesmo tempo que mantém a interface da classe simples, porque conceitualmente os métodos sobrecarregados fornecem uma mesma operação.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Construtores também podem ser sobrecarregados, aumentando as possibilidades de criação de objetos. A classe &lt;b&gt;String&lt;/b&gt; possui 11 diferentes construtores, que permitem várias formas de instanciação de cadeias de caracteres.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Mecanismos do polimorfismo::herança&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A herança (&lt;i&gt;inheritance&lt;/i&gt;) é, talvez, a segunda característica mais importante da OO. É o mecanismo que permite a construção de novos tipos de dados (classes) baseada em outros tipos já existentes, possibilitando a criação de hierarquias de classes, como ilustrado a seguir.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc48q-k7fHSyWiAvk3-148ccp_D-CerzGsIPQzOSLSbFpjvGg_j8gZJ9sc1r32yPQuxc9ethYGrvlsY1S4BlfAOhIfgmGf9lxRjXul5mtN_H8wkaazop3O_NKJROw2wnr0w5F1CX1q9OA/s1600/hierarquia-funcionario-2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;354&quot; data-original-width=&quot;478&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc48q-k7fHSyWiAvk3-148ccp_D-CerzGsIPQzOSLSbFpjvGg_j8gZJ9sc1r32yPQuxc9ethYGrvlsY1S4BlfAOhIfgmGf9lxRjXul5mtN_H8wkaazop3O_NKJROw2wnr0w5F1CX1q9OA/s320/hierarquia-funcionario-2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Tipicamente, uma hierarquia de classes é como uma árvore cuja raiz é colocada na parte superior do diagrama. A classe-raiz, que dá origem às demais, é colocada no topo, assim, de modo que, para qualquer classe presente na árvore, seus tipos ascendentes ficam acima, enquanto seus descendentes ficam abaixo.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Na herança, uma classe, tomada como &lt;i&gt;superclasse&lt;/i&gt; ou classe-pai, pode dar origem a uma ou mais novas classes denominadas de &lt;i&gt;subclasses&lt;/i&gt; ou classes-filha. Esta relação pai-filha, identificada pela resposta afirmativa a questão &quot;&lt;i&gt;é um?&lt;/i&gt; | &lt;i&gt;é do tipo?&lt;/i&gt;&quot;, conecta as classes no diagrama e permite, do ponto de vista de implementação, que:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;as características ancestrais sejam compartilhadas pelos descendentes;&lt;/li&gt;
&lt;li&gt;novas características possam ser adicionadas nos descendentes;&lt;/li&gt;
&lt;li&gt;características presentes nos ascendentes sejam modificadas ou restringidas.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O compartilhamento da implementação da superclasse nas subclasse já é um ganho, pois atributos e operações públicas e protegidas tornam-se acessíveis para todos os descendentes da classe, evitando repetição de código e facilitando a manutenção. Isto é um mecanismo efetivo de simplificação de projeto e de reuso.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Além disso, ao adicionar novos atributos e operações, a subclasse é diferenciada de seu ancestral, o que corresponde a um mecanismo de extensão ou de especialização das classes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Também é possível modificar o comportamento de operações existentes, utilizando outro mecanismo decorrente do polimorfismo denominado sobreposição, que será comentado um pouco mais a frente.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A adição de novos atributos e novas operações é a forma mais comum de aproveitar o mecanismo da herança. Nesta situação procura-se identificar os elementos comuns a um conjunto de classes, mantendo tais&amp;nbsp; elementos comuns em uma classe que funcionará como ponto de partida comum para um conjunto de outras classes, tal como na ilustração acima, onde a classe &lt;b&gt;Funcionario&lt;/b&gt; concentra aspectos comuns de todos os tipos de funcionário de uma empresa, possibilitando que novas classes, especializadas em funções específicas, como &lt;b&gt;Caixa&lt;/b&gt;, &lt;b&gt;Motorista&lt;/b&gt;, &lt;b&gt;Segurança&lt;/b&gt; ou &lt;b&gt;Gerente&lt;/b&gt;, possam ser criadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para auxiliar no tarefa de fatoração das características comuns e também na identificação daquelas que são específicas, a organização de uma tabela de classes/tipos e suas funcionalidades pode ser muito útil. Partindo da narrativa descritiva do problema, as classes que representam as entidades/atores do problema usualmente figuram como substantivos. Outros substantivos, adjetivos e complementos costumam indicar os atributos destas entidades; já os verbos apontam as funcionalidades que serão representadas por métodos das classes associadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É claro que o benefício da herança é permitir o compartilhamento da implementação dos aspectos comuns destes funcionários, sem necessidade de repetição deste código. Isto mantém a coesão necessária a cada classe, ao mesmo tempo que promove o reuso, facilita a manutenção do código e ainda permite que, no futuro, novas classes sejam adicionadas à hierarquia construída.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Mecanismos do polimorfismo::sobreposição&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A sobreposição (ou substituição) de métodos, também conhecida como &lt;i&gt;method overriding&lt;/i&gt;, consiste na implementação de um método na subclasse com a mesma assinatura de outro existente na superclasse.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isto permite dotar a subclasse de uma implementação distinta daquela existente na superclasse, mas mantendo sua interface, o que facilita seu uso por meio do polimorfismo, como será visto mais à frente.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É necessário frisar que a sobreposição envolve a criação de um novo método, com a mesma assinatura, de uma operação existente nas superclasses daquela onde é codificado. Assim, isto constitui um mecanismo distinto da sobrecarga, que envolve a criação de métodos com mesmo nome, mas assinaturas diferentes, em uma mesma classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Em conjunto com a herança, a sobreposição permite que uma subclasse tenha comportamento diferente da superclasse, mantendo sua interface. Esta é uma outra forma de especialização da classe, sem ampliação de suas características.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Além disso, métodos considerados inadequados na subclasse, embora não possam ser ocultos (ou seja, deixarem de ser públicos), suas versões sobrepostas podem lançar exceções impedindo seu uso. Com isso, a sobreposição permite a contração de classes, ou seja, a redução de suas funcionalidades.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Mecanismo da sobrecarga::generalização&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Sempre é adequado destacar que o polimorfismo é a característica mais importante da OO, pois representa o mecanismo pelo qual vários tipos de objetos, ou seja, várias formas de implementação, podem ser tratadas como sendo de um tipo comum.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por isso é importante observar que:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Uma referência (de instância) é uma variável cujo tipo é uma classe.&lt;/li&gt;
&lt;li&gt;Cada referência aponta para UM objeto de cada vez.&lt;/li&gt;
&lt;li&gt;É possível trocar o valor de uma referência, por outra, para que ela aponte para OUTRO objeto.&lt;/li&gt;
&lt;li&gt;O valor &lt;i&gt;null&lt;/i&gt; indica que a referência não aponta qualquer objeto válido.&lt;/li&gt;
&lt;li&gt;Várias referências diferentes podem apontar para um mesmo objeto.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No Java, em particular, as referências não são endereços de memória, mas identificadores de objetos definidos pela máquina virtual Java (JVM). Por meio desses identificadores, a JVM verifica quando os objetos estão sendo referenciados (em uso aparente). Se a JVM detecta que um objeto deixa de ser referenciado, isto é, quando não existem referências apontando para um objeto específico, ele é marcado pelo &lt;i&gt;Automatic Garbage Collector&lt;/i&gt; para descarte (remoção da memória).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Também sabemos que na plataforma Java, qualquer classe é, direta ou indiretamente, uma subclasse de &lt;b&gt;java.lang.Object&lt;/b&gt;, pois mesmo numa declaração de classe simples, implicitamente usamos o mecanismo da herança, tomando como superclasse o tipo &lt;b&gt;Object&lt;/b&gt;, que constitui assim a raiz da hierarquia de classes Java. Com o C# ocorre o mesmo, mas com a classe &lt;b&gt;System.Object&lt;/b&gt; sendo a raiz da hierarquia de classes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Sendo assim, considerando qualquer hierarquia de classes, toda classe existente é uma subclasse de &lt;b&gt;Object&lt;/b&gt;, de modo que uma variável do tipo &lt;b&gt;Object&lt;/b&gt; pode armazenar referências de qualquer tipo de objeto:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Object o;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;o = new String(&quot;Polimorfismo&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;o = new Integer(123456);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;o = new ArrayList();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;o = new FileReader(&quot;arquivoTexto.txt&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;o = new JFrame(&quot;GUI&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;o = new Thread(&quot;fluxo de processamento&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O polimorfismo permite que um objeto seja, transparentemente, tratado como qualquer outro tipo ascendente (superclasses da qual é derivado), e também como sendo do seu tipo verdadeiro, isto é, como foi instanciado de fato.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A possibilidade de admitir múltiplos tratamentos para um mesmo objeto é a própria definição de polimorfismo. Mas existe uma condição envolvida nesta forma do polimorfismo: um objeto pode tratado como do seu próprio tipo, como sendo de qualquer um de seus ancestrais, até a raiz da hierarquia, ou seja, como do tipo &lt;b&gt;Object&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se observarmos novamente a figura da hierarquia de funcionários, podemos concluir que as classes &lt;b&gt;Caixa&lt;/b&gt;, &lt;b&gt;Motorista&lt;/b&gt;, &lt;b&gt;Segurança&lt;/b&gt; e &lt;b&gt;Gerente&lt;/b&gt;, derivadas diretamente da classe &lt;b&gt;Funcionario&lt;/b&gt;, podem ter seus objetos tratados como sendo do tipo &lt;b&gt;Funcionario&lt;/b&gt;, ou mesmo &lt;b&gt;Object&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isso possibilita a &lt;i&gt;generalização&lt;/i&gt;, ou seja, uma operação que faz o contrário da herança, que permite a &lt;i&gt;especialização&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um objeto cuja classe é derivada de outra é como uma composição de objetos em camadas. A camada mais externa corresponde ao tipo real do objeto (por exemplo &lt;b&gt;Gerente&lt;/b&gt;) e nela se encontram as adições providas por esta classe (sua especialização em relação à camada anterior). A camada mais interna é sempre aquela que corresponde ao tipo &lt;b&gt;Object&lt;/b&gt;, onde estão presentes seus elementos. As camadas intermediárias são aquelas providas pelos descendentes de &lt;b&gt;Object&lt;/b&gt; até a camada mais externa.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A figura que segue ilustra um objeto de uma possível classe &lt;b&gt;Comissionado&lt;/b&gt;, a qual é derivada de (uma subclasse de) &lt;b&gt;Funcionario&lt;/b&gt;, que por sua vez é derivada de (uma subclasse de) &lt;b&gt;Object&lt;/b&gt;. Assim, o objeto possui três camadas, uma provida por cada classe de sua hierarquia, a mais interna correspondente a &lt;b&gt;Object&lt;/b&gt; e a mais externa correspondente ao seu tipo real (ao tipo de sua criação -- instanciação).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPWebouBZohzHmZ1bGNU69IRVy370ub1rtrrtrx6IZW9-9wTTAsbk4IDFWDlZ8ih4pgd1wkfcN1C4UckeVjaZbM1uAVcHVpuVpoc5STebnk0J8C955LZvUBneB8RPJv_7JckaQrDv6iks/s1600/polimorfismo-01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;553&quot; data-original-width=&quot;410&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPWebouBZohzHmZ1bGNU69IRVy370ub1rtrrtrx6IZW9-9wTTAsbk4IDFWDlZ8ih4pgd1wkfcN1C4UckeVjaZbM1uAVcHVpuVpoc5STebnk0J8C955LZvUBneB8RPJv_7JckaQrDv6iks/s320/polimorfismo-01.png&quot; width=&quot;237&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Conforme o tipo da referência usada para acessar um objeto, determina-se quais camadas serão efetivamente acessadas. Se é utilizada uma referência do tipo real (de instanciação), temos acesso a todas os membros públicos deste tipo e de todos os tipos ancestrais (ascendentes). Na figura acima, a referência do tipo &lt;b&gt;Comissionado&lt;/b&gt; pode acessar todos os membros públicos do objeto presentes na camada mais externa (&lt;b&gt;Comissionado&lt;/b&gt;), na camada intermediária (&lt;b&gt;Funcionario&lt;/b&gt;) e também na camada mais interna (&lt;b&gt;Object&lt;/b&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Mas se a referência é do tipo &lt;b&gt;Funcionario&lt;/b&gt;, só é possível acessar os membros desta camada (&lt;b&gt;Funcionario&lt;/b&gt;) e das mais internas (no caso apenas &lt;b&gt;Object&lt;/b&gt;). Uma referência de tipo &lt;b&gt;Funcionário&lt;/b&gt; não consegue acessar nada presente em camadas mais externas do que seu tipo, porque sua classe não prevê sua existência, pois foram adicionadas em especializações (subclasses) posteriores.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Da mesma maneira, uma referência do tipo &lt;b&gt;Object&lt;/b&gt; só consegue acessar a porção referente a este tipo presente em objetos de qualquer classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por conta da construção dos objetos em múltiplas camadas e do comportamento dos diferentes tipos de referências em relação às camadas presentes nos objetos, temos duas importantes operações decorrentes do polimorfismo:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;up type casting&lt;/i&gt; (ou apenas &lt;i&gt;upcasting&lt;/i&gt;) e&lt;/li&gt;
&lt;li&gt;&lt;i&gt;down type casting&lt;/i&gt; (ou apenas &lt;i&gt;downcasting&lt;/i&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;Mas este é o assunto do próximo &lt;/span&gt;&lt;i style=&quot;text-align: justify;&quot;&gt;post&lt;/i&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;!&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;background-color: white; color: black; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-19.html&quot; style=&quot;color: black; text-decoration-line: none;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; style=&quot;background: rgba(0, 0, 0, 0); border-radius: 0px; border: 1px solid rgba(0, 0, 0, 0); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-22.html&quot; style=&quot;color: black; text-decoration-line: none;&quot;&gt;POO-P-22-Herança Múltipla&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/04/poo-p-24.html&quot;&gt;POO-A-24-Polimorfismo, upcasting e downcasting&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/04/poo-p-24.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; style=&quot;background: rgba(0, 0, 0, 0); border-radius: 0px; border: 1px solid rgba(0, 0, 0, 0); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[12] GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J.. Design Patterns: Elements of Reusable Object-Oriented Software. Reading, MA: Addison-Wesley, 1995.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/03/poo-p-23.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Jundiaí, SP, Brasil</georss:featurename><georss:point>-23.1857076 -46.897805699999992</georss:point><georss:box>-23.4192396 -47.220529199999994 -22.9521756 -46.57508219999999</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-3977926472053920003</guid><pubDate>Thu, 22 Mar 2018 03:00:00 +0000</pubDate><atom:updated>2018-03-26T11:40:48.934-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Plena-22-Herança múltipla</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-21.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-21.html&quot;&gt;POO-P-21-Sobreposição&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-23.html&quot;&gt;POO-P-23-Polimorfismo&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-22.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;A herança (&lt;i&gt;inheritance&lt;/i&gt;) é uma das formas mais importantes do polimorfismo que possibilita a especialização de classes. De fato, é uma técnica que possibilita compartilhar partes da implementação de uma classe com outra, além de permitir a adição de novos elementos, o que torna as novas classes em versões especializadas.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg44ItLpv29c1FhoKkO1udPjy7nJtNI-vO8lkknwmBgx0OeMdxK9MmDsBY-62hdnpkILiFiWW0IRIbZ3C0dltZ3QOkPYdD7R9WH07DTDs8catK02J802MGV1GJ1xMZTkEsfID28g2D7wS0/s1600/heran%25C3%25A7a-simples-m%25C3%25BAltipla.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;198&quot; data-original-width=&quot;560&quot; height=&quot;113&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg44ItLpv29c1FhoKkO1udPjy7nJtNI-vO8lkknwmBgx0OeMdxK9MmDsBY-62hdnpkILiFiWW0IRIbZ3C0dltZ3QOkPYdD7R9WH07DTDs8catK02J802MGV1GJ1xMZTkEsfID28g2D7wS0/s320/heran%25C3%25A7a-simples-m%25C3%25BAltipla.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Com isto podem ser criadas famílias de classes, cujos participantes possuem características semelhantes, o que facilita seu desenvolvimento, sua manutenção e também seu reuso. Este mecanismo é único, pois só existe na orientação a objetos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Considerando que existem muitos tipos de objetos e de entidades, reais e abstratas, estes podem ser classificados em hierarquias, nas quais os elementos superiores agrupam as características comuns dos seus derivados. Esta técnica é usada frequentemente nos diversos campos da conhecimento para criar classificações (ou taxonomias) de seres, componentes, máquinas ou funções.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Desta maneira, a &lt;i&gt;herança &lt;/i&gt;é um mecanismo da orientação a objetos que permite representar as relações de semelhança, identificadas afirmativamente pela questão &#39;&lt;i&gt;é um(a)?&lt;/i&gt;&#39;, existentes entre conceitos. Uma de suas contribuições diretas é evitar que atributos e operações comuns sejam definidos repetidamente em classes relacionadas.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Existem duas formas de herança: a &lt;i&gt;herança simples&lt;/i&gt; (&lt;i&gt;single inheritance&lt;/i&gt;), onde uma única classe é tomada como base na criação de uma subclasse; e a &lt;i&gt;herança múltipla&lt;/i&gt; (&lt;i&gt;multiple inheritance&lt;/i&gt;), na qual duas ou mais classes são, simultaneamente, tomadas como base para definição de novas classes derivadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A linguagem de programação Java foi originalmente projetada para oferecer apenas a herança simples, assim como o C#, apesar de um pouco mais recente.&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;Herança múltipla&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Em algumas situações, as relações existentes entre conceitos não podem ser representadas pela herança simples, que relaciona diretamente uma única &lt;i&gt;superclasse&lt;/i&gt; (ou &lt;i&gt;classe base&lt;/i&gt;) com sua &lt;i&gt;subclasse &lt;/i&gt;(ou &lt;i&gt;classe derivada&lt;/i&gt;). Nestes casos, torna-se necessário representar as subclasses relacionadas a partir de duas ou mais outras classes. Esta é a herança múltipla, que permite que uma nova classe compartilhe elementos de duas ou mais superclasses.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como as linguagens de programação Java e C# não possuem herança múltipla, os exemplos desta seção utilizarão a sintaxe da linguagem C++.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A sintaxe para a construção de classes com herança múltipla em C# é a seguinte:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;[acesso] class &amp;lt;NomeSubClasse&amp;gt; : [acesso] &amp;lt;NomeSuperClasse1&amp;gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[acesso] &amp;lt;NomeSuperClasse2&amp;gt;,&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;... ,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[acesso] &amp;lt;NomeSuperClasseN&amp;gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// corpo da subclasse&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// implementação de membros da subclasse&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Pode ser observado que, após o nome da subclasse o sinal de dois pontos (&#39;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;:&lt;/span&gt;&#39;), segue uma relação dos nomes das superclasses tomadas para herança, separados por vírgulas (&#39;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;,&lt;/span&gt;&#39;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A herança múltipla possibilita que uma nova classe seja criada pela combinação de características de várias classes existentes, evitando a repetição destas características no código e permitindo tratamento polimórfico (como será visto no post sobre polimorfismo).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A classe &lt;b&gt;Funcionario&lt;/b&gt;, que segue representa um funcionário qualquer de uma empresa que pode ser distinguido dos demais por meio do atributo privado &lt;i&gt;long id&lt;/i&gt; que tem papel de um identificador.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class Funcionario {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// membros privados&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; long id;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// membros publicos&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; public:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; Funcionario(long nid) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cout &amp;lt;&amp;lt; &quot;Construtor Funcionario: &quot; &amp;lt;&amp;lt; nid &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; id = nid;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; ~Funcionario() { cout &amp;lt;&amp;lt; &quot;Destrutor Funcionario\n&quot;; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; long getId() { return id; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observe que o único construtor disponível em &lt;b&gt;Funcionario&lt;/b&gt; exige um parâmetro de tipo &lt;i&gt;long&lt;/i&gt; que indica o &lt;i&gt;id&lt;/i&gt; do funcionário.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Já a classe &lt;i&gt;Temporario&lt;/i&gt; representa os colaboradores contratados por período determinado, sendo seu principal atributo o privado de tipo &lt;i&gt;int periodo&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class Temporario {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// membros privados&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; int periodo;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// membros publicos&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; public:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; Temporario(int p) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cout &amp;lt;&amp;lt; &quot;Construtor Temporario: &quot; &amp;lt;&amp;lt; p &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; periodo = p;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; ~Temporario() { cout &amp;lt;&amp;lt; &quot;Destrutor Temporario\n&quot;; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; int getPeriodo() { return periodo; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Aqui também temos que o único construtor disponível em &lt;b&gt;Temporario&lt;/b&gt; exige um parâmetro de tipo &lt;i&gt;int&lt;/i&gt; que requer o número de períodos do contrato de trabalho temporário.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma empresa pode possuir engenheiros, que são um tipo particular de funcionário, ou seja, cuja classe &lt;b&gt;Engenheiro&lt;/b&gt; pode ser uma subclasse de &lt;b&gt;Funcionario&lt;/b&gt;, empregando herança simples. Observe a implementação da classe &lt;b&gt;Engenheiro&lt;/b&gt; que segue.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class Engenheiro: public Funcionario {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// membros publicos&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; public:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; Engenheiro(long nid): Funcionario(nid) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cout &amp;lt;&amp;lt; &quot;Construtor Engenheiro: &quot; &amp;lt;&amp;lt; nid &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; ~Engenheiro() { cout &amp;lt;&amp;lt; &quot;Destrutor Engenheiro\n&quot;; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Note que a classe &lt;b&gt;Engenheiro&lt;/b&gt; não possui campos privados. Além disso, o construtor declarado aciona o construtor da superclasse &lt;b&gt;Funcionario&lt;/b&gt; para prover o valor requerido do &lt;i&gt;id&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como a classe &lt;b&gt;Engenheiro&lt;/b&gt; toma, por meio da herança simples e pública, a superclasse &lt;b&gt;Funcionario&lt;/b&gt;, compartilha seus membros públicos, isto é, a operação &lt;i&gt;getId()&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma empresa também pode possuir estagiários, que são funcionários temporários, de modo que uma classe &lt;b&gt;Estagiario&lt;/b&gt;, como segue, deve utilizar da herança múltipla para compartilhar aspectos das classes &lt;b&gt;Funcionario&lt;/b&gt; (o &lt;i&gt;id&lt;/i&gt; do funcionário) e também &lt;b&gt;Temporario&lt;/b&gt; (o número de períodos de contrato de trabalho).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class Estagiario: public Funcionario, public Temporario {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; public:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; Estagiario(long nid, int p): Funcionario(nid), Temporario(p) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cout &amp;lt;&amp;lt; &quot;Construtor Estagiario: &quot; &amp;lt;&amp;lt; nid &amp;lt;&amp;lt; &quot;,&quot; &amp;lt;&amp;lt; p &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; ~Estagiario() { cout &amp;lt;&amp;lt; &quot;Destrutor Estagiario\n&quot;; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outra vez é possível observar que o construtor declarado aciona os construtores das superclasses &lt;b&gt;Funcionario&lt;/b&gt; (para prover o valor requerido do &lt;i&gt;id&lt;/i&gt;) e &lt;b&gt;Temporario&lt;/b&gt; (para suprir o valor dos períodos).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A classe &lt;b&gt;Estagiario&lt;/b&gt; toma, por meio da herança múltipla e pública, as superclasses &lt;b&gt;Funcionario&lt;/b&gt; e &lt;b&gt;Temporario&lt;/b&gt;; compartilhando seus membros públicos, isto é, as operações &lt;i&gt;getId()&lt;/i&gt; (de &lt;b&gt;Funcionario&lt;/b&gt;) e &lt;i&gt;getPeriodo()&lt;/i&gt; (de &lt;b&gt;Temporario&lt;/b&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A figura que segue ilustra um diagrama de classe UML simplificado que mostra as relações de herança existentes entre as classes &lt;b&gt;Funcionario&lt;/b&gt;, &lt;b&gt;Temporario&lt;/b&gt;, &lt;b&gt;Engenheiro&lt;/b&gt; e &lt;b&gt;Estagiario&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSeB82iVjv_rN5Q4f5U_o6iEE2mn0jG0VyiagyYK272ai61YydzJz7cfNoFLILVc8Cfg2ymtA9PlFY2v_gunXzaetdGL5nueCyj_KzxHqIdbJh3lkceVvfjNmXCG6lrPYuvrUJQZnWmRo/s1600/heran%25C3%25A7a-m%25C3%25BAltipla-func-temp-eng-estag.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;97&quot; data-original-width=&quot;318&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSeB82iVjv_rN5Q4f5U_o6iEE2mn0jG0VyiagyYK272ai61YydzJz7cfNoFLILVc8Cfg2ymtA9PlFY2v_gunXzaetdGL5nueCyj_KzxHqIdbJh3lkceVvfjNmXCG6lrPYuvrUJQZnWmRo/s1600/heran%25C3%25A7a-m%25C3%25BAltipla-func-temp-eng-estag.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A herança múltipla é um recurso sofisticado que deve ser utilizado com bastante cautela principalmente por programadores menos experientes. Alternativas tais como a &lt;a href=&quot;http://tecnopode.blogspot.com/2018/03/poo-p-20.html&quot; target=&quot;_blank&quot;&gt;herança simples&lt;/a&gt;, a &lt;a href=&quot;http://tecnopode.blogspot.com/2018/03/poo-p-17.html&quot; target=&quot;_blank&quot;&gt;agregação&lt;/a&gt; ou &lt;a href=&quot;http://tecnopode.blogspot.com/2018/03/poo-p-16.html&quot; target=&quot;_blank&quot;&gt;composição&lt;/a&gt; (que foram tratadas em &lt;i&gt;posts&lt;/i&gt; anteriores) não devem ser descartadas e podem ser mais simples de implementar e utilizar.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A herança múltipla é um aspecto complexo de C++, muito debatido. Para alguns é uma característica desnecessária, que pode ser substituída por outros mecanismos mais simples, evitando os diversos problemas de ambigüidade decorrentes. Para outros trata questões específicas e quando bem empregada conduz a resultados satisfatórios.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por conta deste debate, tanto Java como C# não oferecem a herança múltipla, tendo seus projetistas optado por oferecer apenas a herança simples, complementada pelo mecanismo de implementação de interfaces, que será discutido num &lt;i&gt;post&lt;/i&gt; mais a frente.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-21.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-21.html&quot;&gt;POO-P-21-Sobreposição&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-23.html&quot;&gt;POO-P-23-Polimorfismo&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-22.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[12] GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J.. Design Patterns: Elements of Reusable Object-Oriented Software. Reading, MA: Addison-Wesley, 1995.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/03/poo-p-22.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Jundiaí, SP, Brasil</georss:featurename><georss:point>-23.1857076 -46.897805699999992</georss:point><georss:box>-23.4192396 -47.220529199999994 -22.9521756 -46.57508219999999</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-6024768997887825216</guid><pubDate>Mon, 19 Mar 2018 03:00:00 +0000</pubDate><atom:updated>2018-03-21T23:32:07.181-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Plena-21-Sobreposição</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-20.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-20.html&quot;&gt;POO-P-20-Herança Simples&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-22.html&quot;&gt;POO-P-22-Herança Múltipla&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com.br/2018/03/poo-p-21.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;A herança (&lt;i&gt;inheritance&lt;/i&gt;) é um mecanismo da orientação a objetos que permite estabelecer relações de hierarquia entre classes e possibilita compartilhar membros selecionados entre elas. Esta é uma das características únicas e importantes da orientação a objetos [1][2][4][5][6][7].&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A classe tomada como ponto de partida na herança torna-se a superclasse (ou classe-base ou classe-pai) de uma família, onde as subclasses (ou classes-derivadas ou classes-filha) criadas a partir desta primeira podem compartilhar de seus membros públicos e protegidos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Além do compartilhamento de elementos existentes na superclasse, as subclasses podem adicionar novos atributos e operações próprios, de maneira a se tornarem extensões ou especializações de suas superclasses [4][5][6][7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Mas também é possível substituir membros existentes, restringindo ou modificando as características herdadas. A substituição ou reescrita de métodos é o que se denomina sobreposição ou &lt;i&gt;overriding&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg96YI6VYlwqLUQurUMxoHsYGv3h16hX0zIfSRUGxkDLqkXmZhcuCUoLhx1dNjG_N-PcOIgZvHjOf3JpcV01iEHnXgFEWt3xUI1KJzWe2LdIf-aoRjxfDb9foXb6gkOZ9lu7R3iw_igOBU/s1600/sobreposi%25C3%25A7%25C3%25A3o-casos.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;292&quot; data-original-width=&quot;773&quot; height=&quot;120&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg96YI6VYlwqLUQurUMxoHsYGv3h16hX0zIfSRUGxkDLqkXmZhcuCUoLhx1dNjG_N-PcOIgZvHjOf3JpcV01iEHnXgFEWt3xUI1KJzWe2LdIf-aoRjxfDb9foXb6gkOZ9lu7R3iw_igOBU/s320/sobreposi%25C3%25A7%25C3%25A3o-casos.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
A sobreposição de métodos&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A substituição de métodos ou sobreposição de métodos é uma técnica conhecida também como &lt;i&gt;method overriding&lt;/i&gt; ou apenas &lt;i&gt;overriding&lt;/i&gt;. Constitui uma alternativa de implementação na qual uma subclasse recebe um método com a mesma assinatura de um método existente na superclasse, substituindo-o [6][7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Esta técnica é tanto conveniente, como interessante, pois permite que a subclasse contenha uma implementação mais apropriada de um método definido na superclasse, o que mantém sua interface, facilita seu uso por meio do polimorfismo, ao mesmo tempo que torna possível alterar como tal operação é realizada [6][7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Considere a classe Java que segue, denominada &lt;b&gt;Motor&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Motor {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static final double potenciaMax = 100;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double getPotencia() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return potenciaMax;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A classe &lt;b&gt;Motor &lt;/b&gt;possui apenas um campo constante denominado &lt;i&gt;potenciaMax&lt;/i&gt;, e um método de observação &lt;i&gt;getPotencia()&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Analise agora a classe &lt;b&gt;MotorControlavel&lt;/b&gt;, que é uma subclasse de &lt;b&gt;Motor&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class MotorControlavel extends Motor {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private double taxa = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double getTaxa() { return taxa; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setTaxa(double taxa) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (taxa&amp;lt;0 || taxa&amp;gt;1) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Taxa invalida: &quot; + taxa);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.taxa = taxa;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;@Override&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double getPotencia() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return taxa * potenciaMax;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A classe &lt;b&gt;MotorControlavel&lt;/b&gt; acrescenta um campo de tipo &lt;i&gt;double&lt;/i&gt; denominado taxa e também os métodos de acesso &lt;i&gt;getTaxa()&lt;/i&gt; e &lt;i&gt;setTaxa(double)&lt;/i&gt; que permitem obter e ajustar o valor do campo &lt;i&gt;taxa&lt;/i&gt;, garantindo que tenha um valor entre 0 e 1 (ou seja, 0 e 100%). O método &lt;i&gt;getPotencia()&lt;/i&gt; da subclasse &lt;b&gt;MotorControlavel&lt;/b&gt; é reescrito para fornecer uma implementação mais adequada, a qual substitui aquela existente na superclasse &lt;b&gt;Motor&lt;/b&gt;, ou seja, efetua a sobreposição de método ou &lt;i&gt;method override&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Objetos do tipo &lt;b&gt;Motor&lt;/b&gt; e &lt;b&gt;MotorControlavel&lt;/b&gt; podem ser instanciados e ter seus métodos &lt;i&gt;getPotencia() &lt;/i&gt;acionados, o que provoca a execução da implementação efetivamente disponível em seu tipo, como segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Motor motor = new Motor();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;MotorControlavel motorContr = new MotorControlavel();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;motorContr.setTaxa(0.5);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// método getPotencia() acionado é da classe Motor&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;motor: &quot; + motor.getPotencia());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// método getPotencia() acionado é da classe MotorControlavel&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;motorContr: &quot; + motorContr.getPotencia());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Este pequeno exemplo ilustra como um método pode substituir outro existente em suas superclasses, provendo uma nova implementação que substitui o método para a classe onde ocorre a substituição e suas descendentes. Ao mesmo tempo, as várias classes da hierarquia oferecem a mesma interface, o que possibilita o uso polimórfico dos objetos destas classes, mas sempre acionando o método que corresponde ao tipo de origem (de instanciação) do objeto.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
Polimorfismo na sobreposição&lt;/h4&gt;
Considerando a classe &lt;b&gt;Motor &lt;/b&gt;e sua subclasse &lt;b&gt;MotorControlavel&lt;/b&gt;, sabemos que é possível referenciar um objeto do tipo &lt;b&gt;MotorControlavel &lt;/b&gt;por meio de uma referência do tipo Motor, pois um &lt;b&gt;MotorControlavel &lt;/b&gt;&quot;&lt;i&gt;é um&lt;/i&gt;&quot; &lt;b&gt;Motor&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Motor mc = new MotorControlavel();&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Apesar disso, quando é acionado o método &lt;i&gt;getPotencia()&lt;/i&gt; por meio da referência do tipo &lt;b&gt;Motor&lt;/b&gt;, a versão efetivamente invocada é aquela que pertence a classe &lt;b&gt;MotorControlavel&lt;/b&gt; (do tipo de nascença), pois o objeto referenciado pela variável &lt;i&gt;mc&lt;/i&gt; é, de fato, do tipo &lt;b&gt;MotorControlavel&lt;/b&gt;, não sendo possível &quot;burlar&quot; a substituição efetuada no código por meio de referências de suas superclasses.&lt;br /&gt;
&lt;br /&gt;
Assim, quando ocorre a sobreposição de um método, as instâncias das subclasses ficam impedidas de acionar o método original da superclasse, pois este é o objetivo deste mecanismo.&lt;br /&gt;
&lt;br /&gt;
No entanto, o uso de &lt;i&gt;super&lt;/i&gt; permite que, exclusivamente na implementação da subclasse, seja acessada a versão de um método definida na superclasse. O método &lt;i&gt;getPotencia()&lt;/i&gt; de &lt;b&gt;MotorControlavel&lt;/b&gt; poderia ser sido escrito como segue, aproveitando o código do método sobreposto.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class MotorControlavel extends Motor {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private double taxa = 0;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// demais membros não modificados foram omitidos&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public final double getPotencia() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return taxa * super.getPotencia();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Embora não seja obrigatório, essa é uma prática habitual, visto que o método reescrito geralmente adiciona funcionalidade à sua versão sobreposta. Não há qualquer problema em não utilizar o método sobreposto quando não for conveniente.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
O modificador final&lt;/h4&gt;
Nas situações onde se deseja impedir que um método seja sobrecarregado, pode ser empregado o modificador &lt;i&gt;final&lt;/i&gt;, que indica que o método afetado não poderá ser substituído em qualquer subclasse.&lt;br /&gt;
&lt;br /&gt;
Por exemplo, a classe &lt;b&gt;MotorControlavel&lt;/b&gt; poderia sinalizar que o método &lt;i&gt;getPotencia()&lt;/i&gt; não deve ser sobreposto em possíveis subclasses como segue:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class MotorControlavel extends Motor {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private double taxa = 0;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// demais membros não modificados foram omitidos&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;@Override&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public &lt;b&gt;final&lt;/b&gt; double getPotencia() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return taxa * potenciaMax;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
A anotação @Override&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Existe uma anotação específica no Java,&amp;nbsp;&lt;i&gt;@Override&lt;/i&gt;, a qual indica que o método anotado (isto é, o método onde se aplica) sobrepõe outro existente em uma de suas superclasses. Quando a sobreposição é feita corretamente, esta anotação não produz qualquer efeito, servindo apenas como um lembrete no programa fonte. Mas caso o método anotado não substitua alguma operação, isto é, quando não ocorre a sobreposição, o compilador gera um erro indicando o problema.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para aplicar a anotação, basta posicioná-la imediatamente antes da declaração do método anotado, com uma das formas que seguem:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;@Override public int metodoAnotado() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// código do método&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;@Override&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public int metodoAnotado() {&lt;br /&gt;&amp;nbsp; &amp;nbsp;// código do método&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Embora seja opcional, seu emprego constitui uma boa prática de programação, como feito na class &lt;b&gt;MotorControlavel&lt;/b&gt;, pois funciona como um comentário para o programador e garante que sobreposição pretendida, de fato, ocorra.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Regras para sobreposição de métodos&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso da sobreposição de métodos (&lt;i&gt;method overriding&lt;/i&gt;) pode ser vantajoso em muitas situações, mas existem limitações (ou regras) que devem ser observadas em sua aplicação.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Um método, em Java ou C#, só pode ser substituído numa subclasse, nunca na própria classe onde foi originalmente declarado.&lt;/li&gt;
&lt;li&gt;A lista de argumentos deve ser exatamente a mesma (quantidade, tipo e sequência dos parâmetros) do método sobreposto, caso contrário teremos uma mera sobrecarga de método.&lt;/li&gt;
&lt;li&gt;O tipo de retorno, embora não faça parte da assinatura, deve ser o mesmo daquele declarado no método original, sendo possível indicar uma subclasse do tipo de retorno.&lt;/li&gt;
&lt;li&gt;Construtores não são herdados, portanto não podem ser sobrepostos.&lt;/li&gt;
&lt;li&gt;Métodos declarados como final não podem ser sobrepostos.&lt;/li&gt;
&lt;li&gt;O nível de acesso (visibilidade) não pode ser mais restritivo que o método sobreposto, ou seja, a visibilidade deve ser a mesma ou maior. A maior implicação disso é que métodos públicos não podem ser sobrepostos por versões protegidas ou privadas.&lt;/li&gt;
&lt;li&gt;Métodos estáticos, de fato, não são sobrepostos, mas podem ser redeclarados.&lt;/li&gt;
&lt;li&gt;Métodos privados, não são herdados e, assim, não são sobrepostos, mas podem ser redeclarados.&lt;/li&gt;
&lt;li&gt;Os métodos sobrepostos podem lançar qualquer exceção não-monitoradas (&lt;i&gt;unchecked exceptions&lt;/i&gt;), a despeito daquelas lançadas pelo método substituído.&lt;/li&gt;
&lt;li&gt;Os métodos sobrepostos não podem lançar outras exceções monitoradas (&lt;i&gt;checked exceptions&lt;/i&gt;), além daquelas lançadas pelo método substituído ou de suas subclasses. É possível que o método sobreposto lance menos exceções.&lt;/li&gt;
&lt;/ul&gt;
A sobreposição de métodos é um mecanismo útil que permite fornecer uma nova implementação para um método existente. Isto possibilita tanto modificar (e especializar) a realização de uma operação em uma subclasse, quanto suprir uma primeira implementação no caso de métodos abstratos, assunto dos próximos &lt;i&gt;posts&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-20.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-20.html&quot;&gt;POO-P-20-Herança Simples&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-22.html&quot;&gt;POO-P-22-Herança Múltipla&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com.br/2018/03/poo-p-21.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[12] GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J.. Design Patterns: Elements of Reusable Object-Oriented Software. Reading, MA: Addison-Wesley, 1995.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/03/poo-p-21.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-6487915444758238175</guid><pubDate>Thu, 15 Mar 2018 03:00:00 +0000</pubDate><atom:updated>2018-03-19T09:16:58.795-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Plena-20-Herança simples</title><description>&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-19.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-19.html&quot;&gt;POO-P-19-Especificadores e Modificadores&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com.br/2018/03/poo-p-21.html&quot;&gt;POO-P-21-Sobreposição&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/03/poo-p-20.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Os objetos e entidades reais possuem relações entre si que, quando reconhecidas, facilitam o entendimento do conjunto de objetos envolvidos e, ao mesmo tempo, de suas partes. É bastante comum classificar as coisas, criando hierarquias de elementos, onde os grupos superiores contém características comuns, depois separadas em subgrupos, nos quais se incluem características mais específicas, possibilitando definir muitos níveis e grupos. A &lt;i&gt;herança &lt;/i&gt;é o mecanismo da orientação a objetos que permite estabelecer este tipo de relação, possibilitando o compartilhamento de características comuns, criando famílias de classes.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIG0NhFycJr4qIs2oZtZgSX3FidHarugOHtpo_LKlhy7AEAjxZGXCo7RCMy26lGjzQs0iT2LGRuqxVAUiG6EtZoIRhE4qqcCtdECi9glCIZK20G25r0g0bgg0gjyLjF6fPHIu2B1J3SJE/s1600/inheritance.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;384&quot; data-original-width=&quot;909&quot; height=&quot;135&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIG0NhFycJr4qIs2oZtZgSX3FidHarugOHtpo_LKlhy7AEAjxZGXCo7RCMy26lGjzQs0iT2LGRuqxVAUiG6EtZoIRhE4qqcCtdECi9glCIZK20G25r0g0bgg0gjyLjF6fPHIu2B1J3SJE/s320/inheritance.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A Biologia, por exemplo, organiza os seres vivos numa árvore, agrupando suas características comuns, separando-os em filos, ordens, gêneros e espécies a medida em que são diferenciados. Enquanto os mamíferos contém características comuns encontradas em todos os animais deste tipo, a ordem dos canídeos acrescenta características encontradas apenas nos cães e lobos; assim como a ordem dos felinos inclui características presentes em gatos e tigres. Nesta situação, podemos dizer que os canídeos e os felinos herdam características dos mamíferos. Da mesma forma, uma espécie particular de cão, herda as características dos canídeos, que por sua vez incluem as dos mamíferos. Assim, vemos que as características dos grupos superiores são propagadas, por meio da herança, para os grupos descendentes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Herança&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A herança (&lt;i&gt;inheritance&lt;/i&gt;) é um dos mecanismos mais importantes da orientação a objeto s [1][2][4][5][6][7]. De fato, é uma técnica que possibilita a uma classe utilizar atributos e operações definidas em outra classe. Neste sentido a herança representa o compartilhamento de atributos e de operações entre classes, sendo uma característica que só existe na orientação a objetos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ao realizar tal compartilhamento, cria-se uma &lt;i&gt;relação hierárquica&lt;/i&gt;, do tipo pai e filha, ou seja, a classe pai, tomada como ponto de partida, contém definições que, a critério do programador, poderão ser utilizadas nas classes definidas como filhas. Sob certos aspectos, é como se as características comuns de diversas classes fossem fatoradas em um tipo tomado como classe pai.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É comum que a classe pai seja chamada de classe base (&lt;i&gt;base class&lt;/i&gt;) ou superclasse (&lt;i&gt;superclass&lt;/i&gt;), enquanto a classe filha é denominada de classe derivada (&lt;i&gt;derived class&lt;/i&gt;) ou subclasse (&lt;i&gt;subclass&lt;/i&gt;). Nas linguagens de programação Java e C# é mais comum o uso dos termos &lt;i&gt;superclasse&lt;/i&gt; e &lt;i&gt;subclasse&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A figura que segue ilustra, por meio de um diagrama de classes UML, a relação existente entre uma superclasse e uma subclasse. Nele se observam as duas classes relacionadas, representadas por retângulos, unidas por uma reta finalizada por um triângulo não preenchido, que aponta para a classe de maior nível hierárquico, ou seja, a classe base ou superclasse. Uma superclasse pode dar origem a várias subclasses, sendo desnecessário dizer que tais subclasses pode ser empregada como novas superclasses, permitindo criar hierarquias com múltiplos níveis.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgblFQj2sicW4W1ItmE3zL-xHuGK9I9-ZgZcokXRNAaReDNSRoHhuIGPAMQlY8-pqlXY-U_AiiCO-kyiW3dy7sPbJhbdk-tuq_QeOPFUx41fiyT3Zf9mJJ8SDg2DYigeTyIG3Snu9TinTQ/s1600/superclasse-subclasse.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;249&quot; data-original-width=&quot;233&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgblFQj2sicW4W1ItmE3zL-xHuGK9I9-ZgZcokXRNAaReDNSRoHhuIGPAMQlY8-pqlXY-U_AiiCO-kyiW3dy7sPbJhbdk-tuq_QeOPFUx41fiyT3Zf9mJJ8SDg2DYigeTyIG3Snu9TinTQ/s1600/superclasse-subclasse.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Além de compartilhar elementos existentes na superclasse, as subclasses podem adicionar novos atributos e operações próprios, ou seja, cada subclasse se torna particular e mais especial do que a superclasse. Assim as subclasses podem ser entendidas como &lt;i&gt;extensões &lt;/i&gt;ou &lt;i&gt;especializações &lt;/i&gt;de suas superclasses. Como também é possível substituir atributos e operações existentes, as características herdadas podem ser restritas ou modificadas, aumentando as possibilidades da herança. Quando características de uma classe são eliminadas, diz-se que ocorreu uma &lt;i&gt;contração&lt;/i&gt;, pois subclasse torna-se mais simples que a superclasse.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No sentido mais amplo e também em sua forma de uso mais comum, a &lt;i&gt;herança &lt;/i&gt;é um mecanismo para expressar similaridade entre classes, permitindo representar elementos comuns explicitamente em uma hierarquia de classes [2][4], possibilitando a adição de novos membros na criação de novos tipos derivados e especializados.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A existência de uma relação de herança entre dois tipos pode ser identificada quando uma das perguntas &#39;&lt;i&gt;é um(a)?&lt;/i&gt;&#39; ou &#39;&lt;i&gt;é do tipo?&lt;/i&gt;&#39; é respondida afirmativamente [4][6][7]. Ao considerar as classes &lt;b&gt;Funcionario&lt;/b&gt;, &lt;b&gt;Caixa &lt;/b&gt;e &lt;b&gt;Cliente&lt;/b&gt;, é fácil perceber que &lt;b&gt;Caixa &lt;/b&gt;é um (tipo de) &lt;b&gt;Funcionario&lt;/b&gt;, mas não o contrário. Assim, &lt;b&gt;Funcionario &lt;/b&gt;pode constituir a superclasse de uma hierarquia onde &lt;b&gt;Caixa &lt;/b&gt;é uma de suas subclasses. Toda vez que a pergunta &#39;&lt;i&gt;é um(a)?&lt;/i&gt;&#39; determinar o relacionamento entre conceitos, deve ser considerado o emprego da herança na modelagem das classes envolvidas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ao mesmo tempo, &lt;b&gt;Cliente &lt;/b&gt;não é um (tipo de) &lt;b&gt;Caixa &lt;/b&gt;ou &lt;b&gt;Funcionario&lt;/b&gt;, portanto constitui uma classe que não faz parte da hierarquia originada em &lt;b&gt;Funcionario&lt;/b&gt;, apesar de constituir um dos tipos presentes no cenário considerado.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Quando uma aplicação é construída por meio de um conjunto de classes organizadas hierarquicamente, a ampliação de suas funcionalidades pode, muitas vezes, ser facilitada com a criação de novas classes baseadas nas classes originais. Assim, a herança constitui um mecanismo onde novos tipos de objetos podem ser rapidamente definidos em termos de outros existentes [12]. Outros tipos de funcionário, tais como &lt;b&gt;Motorista&lt;/b&gt;, &lt;b&gt;Segurança &lt;/b&gt;ou &lt;b&gt;Gerente&lt;/b&gt;, poderiam ser facilmente adicionados atendendo os novos requisitos da aplicação. A figura que segue ilustra esta hierarquia possível.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgepJBRLKI34ZlTfM29CO-Dr9wsSoEH1j4tnGooabiNWOhUgL_vr6AqP4pUem4ZiouydtTqBzXvWWz6cppIfW0W1XhPTPN1krxmuIUf-rmCja1YvrrikIUMWD1ibYmSolfmxXPdzHlMX-M/s1600/hierarquia-funcionario.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;198&quot; data-original-width=&quot;466&quot; height=&quot;135&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgepJBRLKI34ZlTfM29CO-Dr9wsSoEH1j4tnGooabiNWOhUgL_vr6AqP4pUem4ZiouydtTqBzXvWWz6cppIfW0W1XhPTPN1krxmuIUf-rmCja1YvrrikIUMWD1ibYmSolfmxXPdzHlMX-M/s320/hierarquia-funcionario.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Também deve ser destacado que este mecanismo permite que o conceito de reusabilidade seja verdadeiramente empregado, pois classes tomadas como base podem ser reutilizadas na definição de outras sem que seu código tenha que ser reproduzido ou modificado [6][7]. O emprego da herança evita a cópia direta de código, o que reduz substancialmente a propagação de erros quando os trechos de programação copiados se mostram inapropriados ou incorretos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Existem duas formas de herança: a herança simples, onde uma única classe é tomada como base na criação de uma subclasse; e a herança múltipla, na qual duas ou mais classes são, simultaneamente, tomadas como base para definição de novas classes derivadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A &lt;i&gt;herança simples&lt;/i&gt; é tratada neste &lt;i&gt;post&lt;/i&gt;, enquanto a &lt;i&gt;herança múltipla&lt;/i&gt; será discutida num próximo.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Herança simples&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A &lt;i&gt;herança simples&lt;/i&gt; é aquela onde a &lt;i&gt;subclasse &lt;/i&gt;(classe filha ou classe derivada) é criada a partir de uma única &lt;i&gt;superclasse &lt;/i&gt;(classe pai ou classe base), a qual compartilhará seus atributos públicos e protegidos. Esta forma de herança também pode ser conhecida como &lt;i&gt;extensão simples&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A linguagem de programação Java oferece apenas a &lt;i&gt;herança simples&lt;/i&gt;, cuja sintaxe requerida para expressar a criação deste tipo de relação é:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public NomeSubclasse extends NomeSuperclasse {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; // corpo da subclasse&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A palavra reservada &lt;i&gt;extends &lt;/i&gt;indica no nome da classe tomada como superclasse na declaração de uma nova subclasse.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Já C# oferece tanto a herança simples, como a múltipla. A sintaxe envolvida na criação de uma nova classe através do mecanismo da herança simples em C# é :&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class &amp;lt;NomeClasseDerivada&amp;gt; : &amp;lt;NomeSuperclasse&amp;gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; // corpo da subclasse&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Aqui o símbolo de pontuação &#39;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;:&lt;/span&gt;&#39; permite determinar o nome da classe tomada como superclasse na declaração de uma nova subclasse.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Tanto em Java como em C#, ao usar a sintaxe indicada acima, a subclasse passa a compartilhar todos os membros públicos e protegidos presentes na superclasse. Assim, os atributos e métodos presentes na superclasse podem ser livremente utilizados na programação da subclasse e, também das subclasses desta. Mas as instâncias da superclasse e da subclasse tem acesso apenas aos elementos públicos da superclasse.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isto significa que um membro declarado público em uma classe sempre será acessível para todas as instâncias desta classe, para todas as subclasses e todas as instâncias de sua subclasses.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os membros protegidos de uma classe poderão ser sempre utilizados na programação de subclasse e das subclasses das subclasses, mas nunca serão acessíveis para os objetos da classe, nem os objetos de quaisquer subclasses.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Finalmente, os elementos privados presentes na superclasse são completamente inacessíveis, o que evidencia a utilidade do níveis de acesso existentes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Apesar das subclasses herdarem todos os membros públicos e protegidos de suas superclasses, os construtores, mesmo que públicos, não são herdados pelas subclasses, exigindo que novos construtores sejam supridos quando necessário. Sempre é importante destacar que, naturalmente, cada superclasse pode dar origem a um número qualquer de subclasses e, estas a outras subclasses.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A classe Java que segue, denominada Superclasse, declara três atributos a, b e positive; respectivamente dos tipos int, double e boolean; com acesso public, protected e private.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O atributo público &lt;i&gt;a&lt;/i&gt; não possui métodos de acesso, pois não existem restrições para seu uso. Já o atributo protegido &lt;i&gt;b&lt;/i&gt;, embora existam restrições para seus valores, quando tem conteúdo positivo, tal informação deve ser indicada pelo atributo privado &lt;i&gt;positive&lt;/i&gt; como &lt;i&gt;true&lt;/i&gt;, enquanto se &lt;i&gt;b&lt;/i&gt; é negativo, &lt;i&gt;positive&lt;/i&gt; deve ser &lt;i&gt;false&lt;/i&gt;. Para garantir que estes dois atributos estejam corretamente relacionados, &lt;i&gt;b&lt;/i&gt; é protegido e seu método de mutação &lt;i&gt;setB(double)&lt;/i&gt; garante o valor adequado de &lt;i&gt;positive&lt;/i&gt; para qualquer valor de &lt;i&gt;b&lt;/i&gt;. O atributo &lt;i&gt;positive&lt;/i&gt;, portanto, não pode sofrer ajustes diretos, possuindo apenas um método de acesso apropriado para seu tipo &lt;i&gt;boolean&lt;/i&gt;, que é &lt;i&gt;isPositive()&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O único construtor existente garante que a inicialização do atributo &lt;i&gt;b&lt;/i&gt; seja corretamente refletida pelo atributo &lt;i&gt;positive&lt;/i&gt;. O método &lt;i&gt;toString()&lt;/i&gt; facilita consultar o estado dos três atributos da classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Superclasse {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public int a;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;protected double b;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private boolean positive;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Superclasse() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; setB(0.0);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double getB() { return b; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public boolean isPositive() { return positive; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setB(double b) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (b&amp;lt;0) positive = false;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else positive = true;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.b = b;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public String toString() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return String.format(&quot;a = %d\nb = %f\npositive = %s\n&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a, b, positive);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O quadro que segue ilustra se os membros de &lt;b&gt;Superclasse &lt;/b&gt;são acessíveis em seu código, por suas instâncias, no código de suas subclasses e por instâncias de suas subclasses. Os membros originais são aqueles declarados na própria classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWMthHugQ_iaD0KUtsKp2NQzGj6oqn-qMXJOic4KBnhsSioQUTCWZ2weEj26gFI-yq669oLFOH1HkpPN_Q8c8ezdr7ygWXlNlDCYf0O6e8qX6XCfYIIfsbpKtGkv6YVUmkbqh5xbuGA90/s1600/acesso-membros-superclasse.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;227&quot; data-original-width=&quot;771&quot; height=&quot;94&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWMthHugQ_iaD0KUtsKp2NQzGj6oqn-qMXJOic4KBnhsSioQUTCWZ2weEj26gFI-yq669oLFOH1HkpPN_Q8c8ezdr7ygWXlNlDCYf0O6e8qX6XCfYIIfsbpKtGkv6YVUmkbqh5xbuGA90/s320/acesso-membros-superclasse.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O fragmento Java que segue mostra um possível uso da classe &lt;b&gt;Superclasse&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Superclasse obj = new Superclasse();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(obj);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;obj.a = 13;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;obj.setB(-1.5);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(obj);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Sua execução produz a seguinte saída:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;obj ==&amp;gt; a = 0&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;b = 0,000000&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;positive = true&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;obj ==&amp;gt; a = 13&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;b = -1,500000&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;positive = false&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma classe Java derivada de &lt;b&gt;Superclasse&lt;/b&gt;, denominada &lt;b&gt;Subclasse&lt;/b&gt;, poderia ser como segue.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Subclasse extends Superclasse {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public long l;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;protected double d;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private double rate;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Subclasse() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; super();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // emprego explícito do construtor da superclasse&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double getD() { return d; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double getRate() { return rate; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setD(double d) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (d&amp;lt;0) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Valor inválido: &quot; + d);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.d = d;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; rate = b / d;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Na subclasse denominada &lt;b&gt;Subclasse&lt;/b&gt;, é possível ver que três novos atributos foram acrescentados. O atributo de tipo long &lt;i&gt;l&lt;/i&gt;&amp;nbsp;é público, pode ser usado irrestritamente e, por isso, não possui métodos de acesso ou mutação.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O atributo protegido de tipo &lt;i&gt;long &lt;/i&gt;chamado &lt;i&gt;d&lt;/i&gt; só aceita valores positivos, como garante o seu método de mutação associado &lt;i&gt;setD(double)&lt;/i&gt;. Além disso, valores válidos de &lt;i&gt;d&lt;/i&gt; acarretam no armazenamento da razão &lt;i&gt;b/d&lt;/i&gt;, onde &lt;i&gt;b&lt;/i&gt; é um campo protegido da superclasse, tal como &lt;i&gt;d&lt;/i&gt; é nesta classe. O valor da razão é obtido pelo método de acesso &lt;i&gt;getRate()&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O quadro que segue ilustra se os membros de &lt;b&gt;Superclasse &lt;/b&gt;são acessíveis em seu código, por suas instâncias, no código de suas subclasses e por instâncias de suas subclasses. Os membros originais são aqueles declarados na própria classe, enquanto os membros herdados são aqueles oriundos de seus ancestrais (suas superclasses).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9pwtd1uVu5RZG-YbcTSCb5FwvzdUoEgZVKuZAu3PvNPu0phMH8vbztiTewUXfaj9v3U__gTdVf7Oores8zeXJPW6FJ85uCUKJquLE80mf2tRhAkfwJORGZuIW0c9Cg3MgHTjwZs1c69A/s1600/acesso-membros-subclasse.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;403&quot; data-original-width=&quot;774&quot; height=&quot;166&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9pwtd1uVu5RZG-YbcTSCb5FwvzdUoEgZVKuZAu3PvNPu0phMH8vbztiTewUXfaj9v3U__gTdVf7Oores8zeXJPW6FJ85uCUKJquLE80mf2tRhAkfwJORGZuIW0c9Cg3MgHTjwZs1c69A/s320/acesso-membros-subclasse.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Também é importante notar que a classe &lt;b&gt;Subclasse &lt;/b&gt;possui um construtor sem parâmetros, tal qual o &lt;i&gt;default&lt;/i&gt;, que foi adicionado aqui apenas para mostrar o uso explícito de &lt;i&gt;super&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
&lt;br /&gt;super&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A palavra reservada &lt;i&gt;super&lt;/i&gt; indica a superclasse da classe onde onde é usado.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No caso de construtores, &lt;i&gt;super &lt;/i&gt;só pode ser usado na primeira linha de código do construtor, explicitando o acionamento de um construtor (parametrizado ou não) da superclasse, que deve existir. Caso seja acionado o construtor &lt;i&gt;default &lt;/i&gt;(sem parâmetros) da superclasse, a chamada a &lt;i&gt;super()&lt;/i&gt; pode ser omitida.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Aqui é necessário destacar que quando a superclasse possui apenas construtores parametrizados, torna-se necessário&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Em resumo, membros privados não são compartilhados, membros protegidos são acessíveis apenas no código de subclasses e membros públicos são acessíveis pelo código de subclasses e também por instâncias da classe e sua subclasses. Assim, fica a critério do projetista determinar quais os especificadores de acesso serão empregados em cada um dos membros das classes e dos membros adicionais das subclasses.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Usualmente os membros das classes devem ser privados, exceto nos casos onde não existam restrições para seu conteúdo. Métodos de acesso possibilitam usar membros privados indiretamente, garantindo a validade de seu conteúdo e a consistência com outros membros da classe, até mesmo quando não existem restrições.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os membros protegidos são destinados ao controle de aspectos internos da classe, mas que poderiam ser alvo de modificações em subclasses, desde que isto não comprometa a consistência de outros membros da classe. Quando o uso de um membro é muito complexo ou permite tornar o objeto inconsistente, é adequado declará-lo como privado, acrescentando métodos que permitam seu uso indireto e consistente.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
A classe Object&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Existe uma classe, tanto no Java como em C# que é muito importante. No Java, esta classe é &lt;b&gt;Object&lt;/b&gt;, do pacote &lt;i&gt;java.lang&lt;/i&gt;, que dá origem a toda hierarquia de classes do Java. No C# temos a mesma situação, a classe &lt;b&gt;Object&lt;/b&gt; pertence ao &lt;i&gt;namespace&lt;/i&gt; &lt;i&gt;System&lt;/i&gt;. Todas as classes, de maneira direta ou indireta, possuem a classe &lt;b&gt;Object &lt;/b&gt;como ancestral, ou seja, como superclasse. Isto ocorre porque toda vez que se declara uma nova classe, sem indicação explícita de uma classe base, é tomada implicitamente a classe &lt;b&gt;Object &lt;/b&gt;como ancestral direto, o que cria uma raiz única para toda hierarquia de classes do Java ou do C#.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observe que a declaração de um classe &lt;b&gt;Horario&lt;/b&gt;, como abaixo, não indica, explicitamente uma superclasse:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Horario {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private int hora;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private int minuto;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Horario(int hora, int minuto) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; setHora(hora);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; setMinuto(minuto);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public int getHora() { return hora; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public int getMinuto() { return minuto; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setHora(int hora) {&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (hora&amp;lt;0 || hora&amp;gt;23) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Hora invalida: &quot; + hora);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.hora = hora;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setMinuto(int minuto) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (minuto&amp;lt;0 || minuto&amp;gt;59) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Minuto invalido: &quot; + minuto);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.minuto = minuto;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Mas realmente esta declaração corresponde a:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Java&lt;br /&gt;public class Horario extends Object {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; :&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// C#&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Horario : Object {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; :&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
Assim, todos os objetos Java, incluindo qualquer tipo de &lt;i&gt;array&lt;/i&gt;, compartilham os recursos disponíveis na classe &lt;b&gt;Object&lt;/b&gt;, cuja API inclui elementos destinados à:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;semântica de comparação (métodos &lt;i&gt;equals(Object)&lt;/i&gt; e &lt;i&gt;hashcode()&lt;/i&gt;);&lt;/li&gt;
&lt;li&gt;coleta de lixo (método &lt;i&gt;finalize()&lt;/i&gt;);&lt;/li&gt;
&lt;li&gt;reflexão (método &lt;i&gt;getClass()&lt;/i&gt;);&lt;/li&gt;
&lt;li&gt;representação textual (método &lt;i&gt;toString()&lt;/i&gt;); e&lt;/li&gt;
&lt;li&gt;sincronização de threads (métodos &lt;i&gt;wait()&lt;/i&gt;, &lt;i&gt;notify()&lt;/i&gt; e &lt;i&gt;notifyAll()&lt;/i&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Em C# a situação é idêntica. Além disso, temos duas consequências importantes do fato de qualquer classe ser derivada de &lt;b&gt;java.lang.Object&lt;/b&gt;&amp;nbsp;ou de &lt;b&gt;System.Object&lt;/b&gt;:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;É a herança da classe &lt;b&gt;Object&lt;/b&gt; que define uma infraestrutura comum a todos os objetos, possibilitando que acionem os métodos públicos lá definidos, como &lt;i&gt;toString()&lt;/i&gt; e os demais.&lt;/li&gt;
&lt;li&gt;Como toda classe é derivada de Object, todas as instâncias, quaisquer sejam suas classes específicas, podem ser tratadas como instâncias de &lt;b&gt;Object&lt;/b&gt;, justificando porque muitas classes da API Java lidam com o tipo &lt;b&gt;Object&lt;/b&gt;, pois isto permite operar com qualquer tipo de objeto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h3&gt;
Modificador final&lt;/h3&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O modificador &lt;i&gt;final&lt;/i&gt; pode ser aplicado a uma declaração de atributo, método ou classe. Nestas três situações ele indica que a declaração onde se aplica é a definitiva, ou seja, que substituições ou modificações não serão aceitas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma classe declarada como &lt;i&gt;final &lt;/i&gt;não pode ser tomada como base de outra, ou seja, uma classe &lt;i&gt;final &lt;/i&gt;não permite o uso da herança na construção de novas subclasses.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim, se a classe &lt;b&gt;Horario &lt;/b&gt;fosse declarada como:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public final class Horario extends Object {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; :&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Seria incorreto fazer:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class HorarioDetalhado extends Horario {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; :&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se tal código for compilado, será produzido o erro:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;HorarioDetalhado.java:1: error: cannot inherit from final Horario&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class HorarioDetalhado extends Horario {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ^&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;1 error&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Geralmente classes são feitas finais por motivos de segurança, quando não se deseja que terceiros modifiquem as classes existentes por meio de subclasses, garantindo a integridade do projeto.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Argumentos de um método que não devem ser modificados podem ser declarados como &lt;i&gt;final &lt;/i&gt;na própria lista de parâmetros, mas como podem ser copiados e modificados indiretamente, o emprego desta declaração é meramente convencional, para comunicar tal intenção aos usuários do método.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso de &lt;i&gt;final &lt;/i&gt;em atributos, quando associado ao modificador &lt;i&gt;static&lt;/i&gt;, permite definir constantes, como mostrado no post Membros estáticos. Mas isoladamente impede que tal atributo seja modificado em subclasses. Da mesma forma, métodos declarados como final não poderão ser substituídos nas subclasses da classe onde foram declarados.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Estas duas últimas situações serão detalhadas no &lt;i&gt;post&lt;/i&gt; sobre &lt;a href=&quot;http://tecnopode.blogspot.com.br/2018/03/poo-p-21.html&quot;&gt;sobreposição&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Considerações finais&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A herança simples é uma das características mais utilizadas da orientação a objeto na construção de sistemas, pois facilita o projeto ao permitir que classes contendo a infraestrutura de outras tenham seus membros compartilhados, seletivamente conforme determinado pelos seus especificadores de acesso, possibilitando a construção de outras, sem necessidade de copiar código, o que agiliza o desenvolvimento e simplifica as atividades de manutenção.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-19.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-19.html&quot;&gt;POO-P-19-Especificadores e Modificadores&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com.br/2018/03/poo-p-21.html&quot;&gt;POO-P-21-Sobreposição&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/03/poo-p-20.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;h4&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[12] GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J.. Design Patterns: Elements of Reusable Object-Oriented Software. Reading, MA: Addison-Wesley, 1995.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/03/poo-p-20.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-3453850214724522853</guid><pubDate>Sun, 11 Mar 2018 21:49:00 +0000</pubDate><atom:updated>2018-03-15T15:09:59.559-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Plena-19-Membros Estáticos</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-18.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-18.html&quot;&gt;POO-P-18-Especificadores e Modificadores&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-20.html&quot;&gt;POO-P-20-Herança Simples&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-19.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Os membros estáticos são aqueles declarados com o modificador &lt;i&gt;static&lt;/i&gt;, de maneira que tanto atributos/campos como métodos/operações possam ser definidas desta forma. Desta maneira é preciso uma conceituação mais precisa das implicações de seu uso para possibilita seu emprego adequado.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin0dMePpldNjRXylVgrswhRrTQWr_YJuYPatVHhqrgrbJU-ILlh27wVPvUzu5lO1d72qWfNWlNuQCiwb3DDnv-HcOiKXrllnJaqUHYeSfcH5oSOQ8JuJIQxXbOdPyA38r2UL1VQ4bAiT8/s1600/Static-and+non-Static-Method-rules.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;300&quot; data-original-width=&quot;844&quot; height=&quot;113&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin0dMePpldNjRXylVgrswhRrTQWr_YJuYPatVHhqrgrbJU-ILlh27wVPvUzu5lO1d72qWfNWlNuQCiwb3DDnv-HcOiKXrllnJaqUHYeSfcH5oSOQ8JuJIQxXbOdPyA38r2UL1VQ4bAiT8/s320/Static-and+non-Static-Method-rules.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como visto, as linguagens Java e C# possuem vários especificadores e modificadores (como no &lt;i&gt;post&lt;/i&gt; anterior &lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-18.html&quot;&gt;Especificadores e Modificadores&lt;/a&gt;), dentre os quais existe um denominado &lt;i&gt;static&lt;/i&gt;. O uso deste modificador altera o comportamento dos membros assim declarados, tornando membros de instância em membros de classe, como veremos a seguir.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Membros de instância&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma classe pode declarar vários membros:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Variáveis-membro (campos ou atributos) e&lt;/li&gt;
&lt;li&gt;Funções-membro (métodos ou operações).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Estes membros, naturalmente, só podem ser utilizados pelas instâncias da classes, ou seja:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Cada objeto instanciado tem cópias exclusivas das variáveis-membro para seu uso individual; e&lt;/li&gt;
&lt;li&gt;As funções-membro, acionadas pelos objetos instanciados, utilizam apenas as variáveis-membro de suas respectivas instâncias.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por isso, tais membros são denominados de &lt;i&gt;&lt;b&gt;membros de instância&lt;/b&gt;&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Consideremos a classe &lt;b&gt;Point &lt;/b&gt;dada a seguir.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Point {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public double x;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public double y;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public void reflectX() { y = - y; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public void reflectY() { x = - x; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Objetos do tipo &lt;b&gt;Point &lt;/b&gt;podem ser instanciados como no fragmento abaixo, que usa o construtor &lt;i&gt;default &lt;/i&gt;suprido pelo compilador:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Point p1 = new Point();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Point p2 = new Point();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Depois de criados, os objetos podem ser acessados por meio de suas referências, no caso &lt;i&gt;p1&lt;/i&gt; e &lt;i&gt;p2&lt;/i&gt;, o que permite acessar as variáveis-membro &lt;i&gt;x&lt;/i&gt; e &lt;i&gt;y&lt;/i&gt; que são públicas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;p1.x =&amp;nbsp; 5.5;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;p1.y = 3.0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;p2.x = -1.5;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;p2.y = 6.7;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Cada instância armazena seus próprios valores, retendo, portanto, apenas o seu próprio estado e, assim, o uso de métodos só afeta a instância onde são acionados.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;P1: &quot; + p1.x + &quot;,&quot;+ p1.y);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;P2: &quot; + p2.x + &quot;,&quot;+ p2.y);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;p1.reflectY();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;p2.reflectX();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;P1: &quot; + p1.x + &quot;,&quot;+ p1.y);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;P2: &quot; + p2.x + &quot;,&quot;+ p2.y);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Com isso fica claro que operações executadas numa instância não afetam quaisquer outras instâncias (do mesmo tipo ou de outros).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Membros de classe&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Quando um membro de uma classe (variável ou método) é declarado como &lt;i&gt;static&lt;/i&gt;, ele é modificado de maneira que deixa de pertencer às instâncias da classe, passando a pertencer a própria classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim uma variável-membro ou campo declarado como &lt;i&gt;static &lt;/i&gt;torna-se uma variável de classe, um &lt;b&gt;&lt;i&gt;membro de classe&lt;/i&gt;&lt;/b&gt; ou um campo estático. Da mesma maneira, um método de instância ou&amp;nbsp;operação torna-se um método de classe ou método estático.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso do modificador &lt;i&gt;static &lt;/i&gt;não afeta os especificadores de acesso, de modo que &lt;i&gt;static &lt;/i&gt;pode ser combinado com &lt;i&gt;public&lt;/i&gt;, &lt;i&gt;protected &lt;/i&gt;ou &lt;i&gt;private&lt;/i&gt;, conforme desejado pelo programador.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por outro lado, os construtores não podem, em qualquer circunstância, ser declarados como estáticos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Analise a classe &lt;b&gt;Cruise &lt;/b&gt;dada a seguir. Observe a existência de um campo estático denominado &lt;i&gt;MAX &lt;/i&gt;e de um método estático chamado &lt;i&gt;maxRate(double)&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Cruise {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public static double MAX;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public double velocity;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public boolean overMax () {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return velocity &amp;gt; MAX;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public static double maxRate(double v) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return v/MAX;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Objetos do tipo &lt;b&gt;Cruise &lt;/b&gt;podem ser instanciados normalmente, com uso do construtor &lt;i&gt;default&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Cruise c1 = new Cruise();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Cruise c2 = new Cruise();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso dos membros não estáticos não é afetado pela presença dos elementos estáticos, ou seja, é possível fazer:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;c1.velocity =&amp;nbsp; 81.5;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;c2.velocity = 105.7;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;if (c1.overMax()) System.out.println(c1.velocity);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;if (c2.overMax()) System.out.println(c2.velocity);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// se executado este trecho exibe as velocidades 81.5 e 105.7.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O campo estático &lt;i&gt;MAX &lt;/i&gt;é um membro de classe, portanto comum a todas as instâncias. Seu uso deve ser feito por meio do nome da classe, como segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Cruise.MAX = 100;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O novo valor de &lt;i&gt;MAX &lt;/i&gt;é conhecido por todas as instâncias da classe, que tem acesso ao seu novo conteúdo. Assim, se executado&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;if (c1.overMax()) System.out.println(c1.velocity);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;if (c2.overMax()) System.out.println(c2.velocity);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// agora este trecho exibe apenas a velocidade 105.7!&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O método &lt;i&gt;overMax()&lt;/i&gt;, não estático, emprega internamente a variável de instância &lt;i&gt;velocity&lt;/i&gt;, a qual é comparada a variável de classe &lt;i&gt;MAX&lt;/i&gt;. Na primeira execução, &lt;i&gt;velocity &lt;/i&gt;do objeto &lt;i&gt;c1&lt;/i&gt; tem valor 81.5, &lt;i&gt;velocity&lt;/i&gt; do objeto &lt;i&gt;c2&lt;/i&gt; tem valor 105.7, enquanto &lt;i&gt;MAX&lt;/i&gt;, não inicializada, tem valor 0; produzindo os resultados 81.5 e 105.7, ambos valores maiores que &lt;i&gt;MAX&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Alterando o valor da variável de classe &lt;i&gt;MAX &lt;/i&gt;para 100 e executando novamente o método &lt;i&gt;overMax()&lt;/i&gt; para as duas instâncias, temos que &lt;i&gt;velocity &lt;/i&gt;do objeto &lt;i&gt;c1 &lt;/i&gt;ainda tem valor 81.5, &lt;i&gt;velocity &lt;/i&gt;do objeto &lt;i&gt;c2 &lt;/i&gt;ainda tem valor 105.7, mas &lt;i&gt;MAX&lt;/i&gt;, com novo valor 100; produz o resultado 105.7, única velocidade maior que &lt;i&gt;MAX&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso de campos e métodos estáticos, conforme a recomendação da plataforma, deve usar o nome qualificado da classe, tal como:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Cruise.MAX = 100;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Cruise.maxRate(120);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Apesar disso, o uso de elementos estáticos por meio de instâncias, como segue, produz, quando muito, avisos por parte do compilador, pois o que define o acesso é, de fato, o especificador de acesso empregado.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;c1.MAX = 120;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;c2.maxRate(40);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O modificador &lt;i&gt;static &lt;/i&gt;altera o comportamento do membro, que deixa de pertencer a instância, passando para o domínio da classe, acarretando em um conjunto de implicações que determinam a forma com que pode ser explorado.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Usos comuns de membros static&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso do modificador &lt;i&gt;static&lt;/i&gt; possibilita usos como:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Compartilhamento de informação entre instâncias de uma mesma classe, diretamente por meio de variáveis estáticas; ou indiretamente por meio de métodos estáticos que podem oferecer operações baseadas em valores comuns existentes entre as instâncias de uma classe.&lt;/li&gt;
&lt;li&gt;Criação simplificada de biblioteca de funções, quando não é necessária a retenção de estado de objetos (feito por variáveis de instância)&lt;/li&gt;
&lt;li&gt;Definição de constantes, que podem preservar de maneira imutável valores (e até mesmo referências de instâncias) considerados importantes em um programa.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Compartilhamento de informação&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os membros estáticos pertencem à classe, ou seja, eles são únicos e não dependem da existência de instâncias da classe (i.e., objetos) para serem acessados, apenas respeitando os especificadores de acesso combinados, sem quaisquer restrições adicionais.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Externamente, o acesso dos membros estáticos passa a ser qualificado pela própria classe, conforme sua visibilidade. Internamente o acesso dos membros estáticos é como qualquer outro.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim, se existe a classe &lt;b&gt;Estatica &lt;/b&gt;como dado a seguir:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Estatica {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public static int sval = 10;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private int ival = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public static void reset() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sval = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public int getIVal() { return ival; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public void setIVal(int i) { ival = i; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É possível usar seus membros estáticos desta maneira:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Uso de campo:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Estatica.sval = 33;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Uso de método:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Estatica.reset();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Mas o uso dos membros não estáticos requer instâncias válidas:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Estatica e1 = new Estatica();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;e1.setIVal(10);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(e1.getIVal());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim todas as instâncias tem acesso aos membros estáticos únicos associados às suas próprias classes. Desta maneira, torna-se possível compartilhar valores entre instâncias por meio de variáveis estáticas, pois é como se fossem variáveis &quot;globais&quot; de um tipo específico.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A classe &lt;b&gt;Estatica2 &lt;/b&gt;utiliza um membro estático denominado &lt;i&gt;N&lt;/i&gt; que mantém o número de objetos da própria classe, incrementando-o na instanciação e decrementando-o na destruição de objetos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Estatica2 {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; private static int N = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public Estatica2 () {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; N++;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; protected void finalize() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; N--;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; public static int instances() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return N;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Esta classe pode ser usada como segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Exibe 0&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(Estatica2.instances());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Estatica2 obj1 = new Estatica2();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Exibe 1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(Estatica2.instances());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Estatica2 obj2 = new Estatica2();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Exibe 2&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(Estatica2.instances());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;obj1 = null; // GC pode atuar!&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Exibe 1 ou 2, conforme atuação do GC&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(Estatica2.instances());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Biblioteca de funções&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como os métodos estáticos não utilizam campos mutáveis de suas classes, podem oferecer operações independentes, cujo resultado se baseia, estritamente, nos argumentos recebidos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um conjunto de métodos estáticos relacionados, ou seja, cujas operações pertençam a um mesmo domínio, podem ser agrupados em uma única classe, a qual se comporta como uma biblioteca de funções&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um exemplo desta aplicação, na própria API do Java é a classe &lt;b&gt;java.lang.Math&lt;/b&gt;, que só contém métodos estáticos que oferecem funções matemáticas independentes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A classe &lt;b&gt;Conversão&lt;/b&gt;, que segue, também contém apenas métodos estáticos relacionados a conversão de temperaturas entre diferentes unidades.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Conversao {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// conversão C --&amp;gt; F&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static double C2F (double c) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return 9*c/5 + 32;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// conversão F --&amp;gt; C&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static double F2C (double f) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return 5*(f-32)/9;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso desta classe não requer instâncias, pois os seus métodos podem ser acionados diretamente:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;double x = 100;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;double y= Conversao.C2F(x);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;C = &quot; + x + &quot; =&amp;gt; F = &quot; + y);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;y = 32;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;x = Conversao.F2C(y);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;F = &quot; + y + &quot; =&amp;gt; C = &quot; + x);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;C = 24&quot; + &quot; =&amp;gt; F = &quot; + Conversao.C2F(24));&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Definição de constantes&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A linguagem Java não contém um modificador próprio para definição de constantes (como const em linguagem C++). Mas tal efeito pode ser obtido pela combinação de dois modificadores na declaração de variáveis:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;static&lt;/i&gt;, que indica que membro pertence à classe;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;final&lt;/i&gt;, que indica que membro não pode ser alterado, nem mesmo em subclasses.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Exemplos de declaração de constantes são:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public static final double PI = 3.1415926;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public final static int MAX = 123;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;static public final byte MASK = 0b01001001;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observe que a inicialização é obrigatória na declaração de constantes. Além disso, a ordem com que os modificadores e especificadores são aplicados não altera o efeito produzido.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outro aspecto importante, é que a convenção de código Java solicita que os nomes das constantes seja grafado exclusivamente com letras maiúsculas, eventualmente com&amp;nbsp; uso de _ (underline) para separação de palavras.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Restrições dos membros &lt;i&gt;static&lt;/i&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Campos e métodos estáticos só podem utilizar:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Constantes literais;&lt;/li&gt;
&lt;li&gt;Outros elementos estáticos;&lt;/li&gt;
&lt;li&gt;Objetos e membros não estáticos de objetos diretamente instanciados em seu escopo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
De maneira geral, um membro estático não pode utilizar um elemento não estático se não for garantida sua existência (instanciação) no mesmo escopo.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Importação estática&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Introduzida na versão 5 do Java, esta característica permite o uso de constantes declaradas em classes externas sem necessidade de sua qualificação (indicação do nome da classe).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por exemplo, a classe &lt;b&gt;Math &lt;/b&gt;contém constantes usualmente empregadas (de forma qualificada) como &lt;i&gt;Math.PI&lt;/i&gt; ou &lt;i&gt;Math.E&lt;/i&gt;, como no exemplo que segue.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// SEM importação estática&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import java.lang.*;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class SemImportStatic {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static void main(String args[]) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; double raio = Double.parseDouble(args[0]);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // uso da constante qualificada&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; double perim = 2 * Math.PI * raio;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.print(&quot;raio = &quot; + raio);&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;, perim = &quot; + perim);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Com uso da importação estática, torna-se possível não qualificar tais constantes, usadas diretamente como &lt;i&gt;PI &lt;/i&gt;ou &lt;i&gt;E&lt;/i&gt;, como na versão modificada do exemplo acima com uso desta alternativa.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// COM importação estática&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import static java.lang.Math.*;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class ComImportStatic {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static void main(String args[]) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; double raio = Double.parseDouble(args[0]);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // uso da constante qualificada&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; double perim = 2 * PI * raio;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.print(&quot;raio = &quot; + raio);&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;, perim = &quot; + perim);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A importação estática não tem impacto expressivo no código e, por isso, não é usada com muita frequência.&lt;br /&gt;
&lt;br /&gt;
Concluindo, o uso de membros estáticos, como visto, é bastante conveniente para criação de um mecanismo simples de compartilhamento entre instâncias de uma classe, além de permitir a criação simplificada de bibliotecas de funções. Por estas razões, os membros estáticos são empregados frequentemente no código.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-18.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-18.html&quot;&gt;POO-P-18-Especificadores e Modificadores&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-20.html&quot;&gt;POO-P-20-Herança Simples&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-19.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/03/poo-p-19.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-6360692338528001112</guid><pubDate>Thu, 08 Mar 2018 03:00:00 +0000</pubDate><atom:updated>2018-03-11T18:50:35.613-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Plena-18-Especificadores e Modificadores</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-17.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-17.html&quot;&gt;POO-P-17-Associações-agregação&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-19.html&quot;&gt;POO-P-19-Membros estáticos&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-18.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;As linguagens de programação Java e C# possuem um conjunto especial de palavras reservadas cuja aplicação afeta como os membros de uma classe podem ser utilizados ou, até mesmo, como funcionam. São os especificadores e modificadores da linguagem.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwcU2TkN-40FfPLK-ye3XDt0lwSRSryP1xvUI0ptMyKz1MmrfBIypesdbWMLY8gompNlIhI8HQuu1QvgoC8TBmb3N7tGU21WG0HrfKcB7e5yIA-nJrVMxZdlYDxOglmMtqyoJMJep2X2k/s1600/java-reserved-words.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;389&quot; data-original-width=&quot;704&quot; height=&quot;176&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwcU2TkN-40FfPLK-ye3XDt0lwSRSryP1xvUI0ptMyKz1MmrfBIypesdbWMLY8gompNlIhI8HQuu1QvgoC8TBmb3N7tGU21WG0HrfKcB7e5yIA-nJrVMxZdlYDxOglmMtqyoJMJep2X2k/s320/java-reserved-words.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Especificadores&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os especificadores existentes estabelecem a visibilidade do membro onde se aplicam, ou seja, determinam o seu acesso e, por isso, são conhecidos também como especificadores de acesso [2][4][5][6][7]. As linguagens de programação Java e C# possuem três especificadores de acesso: &lt;i&gt;public&lt;/i&gt;, &lt;i&gt;protected&lt;/i&gt;, &lt;i&gt;private&lt;/i&gt;, visto no &lt;i&gt;post &lt;/i&gt;sobre &lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/01/poo-f-08.html&quot;&gt;Encapsulamento&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
public&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Determina o acesso público, no qual os membros de uma classe têm utilização interna e externa irrestrita. Como ficam expostos na interface das classes, podem ser usados livremente pelas suas instâncias de maneira que os atributos públicos têm seus conteúdos acessados e alterados sem qualquer restrição; e os métodos públicos podem ser acionados arbitrariamente.&lt;/div&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
private&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Estabelece o acesso privado, ou seja, define que o método ou atributo de classe assim declarado tem apenas uso interno, não sendo acessível externamente. Provê a ocultação dos membros assim declarados, servindo usualmente para compor a infraestrutura de uma classe.&lt;/div&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
protected&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Indicar que membros de uma classe que não podem ser utilizados por meio de suas instâncias, mas apenas na construção de novas classes. Os membros protegidos, compõem uma interface de programação da classe, ou seja, um conjunto de atributos e operações destinados exclusivamente aos programadores que usarão tal classe como base para criação de outras.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como visto no post sobre Encapsulamento, existe um quarto nível de acessibilidade denominado pacote (package) que não possui uma palavra reservada própria [4][7]. É o acesso padrão (implícito), quando outro especificador não é indicado. Seu efeito é tornar o membro público para as demais classes e instâncias presente no mesmo pacote, mas private para quaisquer outras.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O quadro que segue mostra o efeito da aplicação dos especificadores de acesso aos membros de uma classe, considerando as situações de implementação (codificação) e instanciação (criação de objetos dentro de programas).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTWa8DdcvO8-MPqTXqG3EzhCqZdGtZFkpaLt1Fv3FOhM7FgazQCdjRY4NocjF0-QvM64n_xymEvTaj_uXqw4oQ-F3ivMUhyQ4y0FrV2aU3XaAcP1KcDOmmytDYdbrP4-h_VjJGbAmNKkY/s1600/acessibilidade.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;150&quot; data-original-width=&quot;484&quot; height=&quot;99&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTWa8DdcvO8-MPqTXqG3EzhCqZdGtZFkpaLt1Fv3FOhM7FgazQCdjRY4NocjF0-QvM64n_xymEvTaj_uXqw4oQ-F3ivMUhyQ4y0FrV2aU3XaAcP1KcDOmmytDYdbrP4-h_VjJGbAmNKkY/s320/acessibilidade.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Modificadores&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os modificadores determinam o funcionamento do membro, isto é, seu comportamento durante a execução dos programas, assim afetam como acontece a geração do seu respectivo código. Existem vários modificadores nas linguagens Java e C#: abstract, final, native, static, strictfp, synchronized, transient e volatile.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O quadro abaixo resume os efeitos provocados pelo uso destes modificadores, assim como sua aplicação típica.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioPkGR2VIAxS8BlF1KGhxQpgLX7axaHifhM_sF2F53HQzgQhssDzM-hNkoOkmnM1-i2WA72UXUJlv1Hvq3RhBh52yVmssllkbusk6tON5bWOHbdBghhTD4KNy4VhCV4U869QNi1REQrDU/s1600/modificadores.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;935&quot; data-original-width=&quot;1405&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioPkGR2VIAxS8BlF1KGhxQpgLX7axaHifhM_sF2F53HQzgQhssDzM-hNkoOkmnM1-i2WA72UXUJlv1Hvq3RhBh52yVmssllkbusk6tON5bWOHbdBghhTD4KNy4VhCV4U869QNi1REQrDU/s320/modificadores.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O modificador &lt;i&gt;static&lt;/i&gt;, cujo uso é bastante comum, será tratado no próximo &lt;i&gt;post&lt;/i&gt;, que aborda os membros estáticos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os modificadores &lt;i&gt;abstract &lt;/i&gt;e &lt;i&gt;final &lt;/i&gt;serão abordados nos &lt;i&gt;posts &lt;/i&gt;envolvendo herança e classes abstratas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os modificadores &lt;i&gt;synchronized &lt;/i&gt;e &lt;i&gt;volatile&lt;/i&gt;, destinados a programação com threads; &lt;i&gt;transient&lt;/i&gt;, para uso junto a serialização; &lt;i&gt;strictfp&lt;/i&gt;, para indicação de regras mais estritas para processamento de cálculos com uso de números em ponto flutuante; assim como &lt;i&gt;native&lt;/i&gt;, empregado com o &lt;i&gt;Java Native Inteface&lt;/i&gt; (JNI); são muito específicos e não serão abordados nesta série.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Particularidades do Java&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A linguagem de programação Java, em particular, não possui os modificadores signed e unsigned existentes em outras, assim todos os seus tipos primitivos numéricos (byte, short, int, long, float e double) sempre podem representar valores positivos e negativos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A notação ... (elipse) funciona como um modificador especial para tornar variável a lista de argumentos fornecida para um método (ou &lt;i&gt;varargs&lt;/i&gt;) [7]. Seu uso permite que um método receba um número variável e arbitrário de valores, de maneira mais flexível que a recepção de &lt;i&gt;arrays&lt;/i&gt;, pois seu uso admite o uso do método sem argumentos, com qualquer número de argumentos separados por vírgula (como uma lista) ou também um array.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O método que segue é do tipo &lt;i&gt;varargs&lt;/i&gt;, ou seja, pode receber qualquer número de argumentos do tipo &lt;i&gt;int&lt;/i&gt;, somando-os e retornando o resultado da soma.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public int somar(int ... args) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;int total = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;for (int i=0; i&amp;lt;args.length; i++) { total += args[i]; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;return total;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observe que, internamente, os argumentos variáveis são tratados como se fizessem parte de um array, para o qual o número de elementos é indicado por &lt;i&gt;length&lt;/i&gt;. Segue alguns exemplos de uso deste método.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int t1 = somar(); // uso válido, que retorna zero&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int t2 = somar(0, 12, 34, 56);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int array[] = { 1, 2, 3, 4 };&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int t3 = somar(array);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Finalmente, os métodos podem receber outros parâmetros, desde que aquele modificado com ... seja o último de sua assinatura.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Particularidades do C#&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A linguagem de programação C# possui alguns modificadores próprios, como &lt;i&gt;ref&lt;/i&gt;, &lt;i&gt;out &lt;/i&gt;e &lt;i&gt;param&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por padrão a passagem de parâmetros em C# ocorre por valor, ou seja, uma cópia do valor ou do objeto indicado como argumento do método é passada como valor de seus parâmetros, de modo que se tal parâmetro é alterado dentro do método, nada ocorre com o valor original passado como argumento.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O modificador &lt;i&gt;ref &lt;/i&gt;indica que o parâmetro será passado por referência, ou seja, o método receberá o endereço do valor ou objeto, de modo que sua alteração no interior do método acarreta mudanças no argumento usado para acionar o método, pois na verdade se trata da mesma variável ou objeto.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O modificador &lt;i&gt;out&lt;/i&gt;, semelhante a &lt;i&gt;ref&lt;/i&gt;, faz com que o parâmetro seja passado por referência, mas não necessita ser inicializado, ou seja, é geralmente utilizado para carregar valores para fora do método, possibilitando a existência de múltiplos valores de retorno. Por outro lado, parâmetros out devem ser inicializados dentro dos métodos onde são declarados.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Também existe modificador &lt;i&gt;params&lt;/i&gt;, o qual permite que um método receba um número variável e arbitrário de valores, de maneira mais flexível que a recepção de &lt;i&gt;arrays&lt;/i&gt;, pois seu uso admite o uso do método sem argumentos, com qualquer número de argumentos separados por vírgula (como uma lista) ou também um &lt;i&gt;array&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O método que segue tem sua lista de parâmetros modificada com &lt;i&gt;params&lt;/i&gt;, permitindo que receba qualquer número de argumentos do tipo int, somando-os e retornando o resultado da soma.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public int somar(params int args) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;int total = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;foreach (int v in args) { total += v; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;return total;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observe que, como em Java, os argumentos variáveis são tratados como se fizessem parte de um array, possibilitando o uso de &lt;i&gt;foreach&lt;/i&gt;. Segue alguns exemplos de uso deste método.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int t1 = somar(); // uso válido, que retorna zero&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int t2 = somar(0, 12, 34, 56);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int array[] = { 1, 2, 3, 4 };&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int t3 = somar(array);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Finalmente, os métodos podem receber outros parâmetros, desde que aquele modificado com params seja o último de sua assinatura.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Uso combinado de especificadores e modificadores&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os modificadores podem ser usados junto dos especificadores de acesso [7], por exemplo:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;private static int MAX;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public static final double AVO = 6.22E23;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public static void main(String[] args) { ... }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;protected transient boolean state;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public volatile long count;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;private native byte AX;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public strictfp double computeSerie(double[] data) { ... }&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public synchronized void turn() { ... }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public abstract Object[] toArray() { ... }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Desta forma, muitas possibilidades diferentes podem ser escolhidas pelo programador.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-17.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-17.html&quot;&gt;POO-P-17-Associações-agregação&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/03/poo-p-19.html&quot;&gt;POO-P-19-Membros estáticos&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-18.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/03/poo-p-18.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-3748837775556527914</guid><pubDate>Mon, 05 Mar 2018 03:00:00 +0000</pubDate><atom:updated>2018-03-08T09:03:56.755-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Plena-17-Associações-agregação de objetos</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-16.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com.br/2018/03/poo-p-16.html&quot;&gt;POO-P-16-Associações-composição&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com.br/2018/03/poo-p-18.html&quot;&gt;POO-P-18-Especificadores e Modificadores&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-17.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;A implementação de sistemas OO envolve o uso de vários objetos inter-relacionados, ou seja, múltiplas instâncias de tipos diferentes, cujas as relações requeridas, lógicas ou de negócios, são obtidas por meio de construções conhecidas como associações.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC0mWwJm8-pHdorltDIAXybzprK4GGW2w-AT1E9NthpoKOXqHeaNYg98TSFC_sQFQ_P55vsqEs2TFlWzhr_pBSeAyIByWZo6c6ki_gx4LT7BPdjj9dMSgrAeQAsbKghYALqYiEEqsMcmo/s1600/assoc-agreg-comp.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;366&quot; data-original-width=&quot;567&quot; height=&quot;206&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC0mWwJm8-pHdorltDIAXybzprK4GGW2w-AT1E9NthpoKOXqHeaNYg98TSFC_sQFQ_P55vsqEs2TFlWzhr_pBSeAyIByWZo6c6ki_gx4LT7BPdjj9dMSgrAeQAsbKghYALqYiEEqsMcmo/s320/assoc-agreg-comp.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As associações ou vínculos podem existir entre objetos diferentes, de um mesmo tipo ou de tipos diferentes [2], permitindo a realização de serviços ou a execução de operações, materializando construções ou relacionamentos entre as entidades envolvidas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Além das &lt;i&gt;associações binárias&lt;/i&gt;, isto é, das associações diretas entre duas classes, vistas no &lt;i&gt;post&lt;/i&gt; &lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-f-15.html&quot;&gt;Associações&lt;/a&gt;, existem as associações todo/parte que são muito importantes devido a grande frequência de sua ocorrência.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As &lt;i&gt;associações todo/parte&lt;/i&gt; permitem expressão a relação existente entre as partes de um todo. Um dos tipos comuns de associação todo/parte é a &lt;i&gt;composição&lt;/i&gt;, vista no &lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-f-16.html&quot;&gt;post anterior&lt;/a&gt;. O outro tipo comum é a &lt;i&gt;agregação&lt;/i&gt;, tratado a seguir.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Agregações&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma característica fundamental de uma agregação (&lt;i&gt;agregate&lt;/i&gt;) é que o objeto agregado (o todo) pode, potencialmente, existir sem seus constituintes (as partes).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp;Considere:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Um empresa sem funcionários.&lt;/li&gt;
&lt;li&gt;Um banco sem correntistas.&lt;/li&gt;
&lt;li&gt;Um clube sem sócios.&lt;/li&gt;
&lt;li&gt;Um proprietário sem propriedades.&lt;/li&gt;
&lt;li&gt;Um &lt;i&gt;container&lt;/i&gt; vazio.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Embora possa parecer estranho, tais situações são tanto legalmente, como fisicamente possíveis. Isto torna as agregações bastante diferentes das composições, mesmo sendo um outro tipo de associação todo/parte.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Além disso, a qualquer instante de tempo, um &lt;i&gt;objeto constituinte&lt;/i&gt; (parte) pode participar de qualquer número de &lt;i&gt;agregados&lt;/i&gt; distintos. Observe que uma pessoa pode manter várias contas correntes, possuir diversas propriedades e bens, além de ser sócia de vários clubes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O tempo de vida dos objetos constituintes (partes) é usualmente diferente do tempo de suas agregações, tanto maior, como menor. Isto significa que podemos ter agregados (todos) que duram mais que suas partes (membros), tais como agremiações esportivas seculares, que duram mais que seus membros. Também é possível a situação inversa, onde as partes duram mais que a agregação (todo); como um grupo de pessoas que realiza uma viagem ou empresas que duram menos do que seus proprietários ou funcionários.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As agregações tendem a ser homeômeras ou homomorfas, ou seja, as partes constituintes do agregado são, geralmente, do mesmo tipo. É frequente que as agregações sejam usadas para expressar relações entre entidades.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nos diagramas de classes UML as associações todo/parte do tipo agregação usam diamantes abertos, posicionados do lado do objeto agregado. Tipicamente existe apenas um tipo associado devido a homomorfia, com multiplicidade 0..* ou 0..n. O figura que segue ilustra este tipo de associação.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl6koq1wrwjudqPh8IDSil63pX35KmQXPrflSdJF_R94nkz3Y1WAsFD2vW9he6W9eV6A0sVvjqU7Enxsvxp3TE9sfBEjtHVxzpl-L1REZhfJz5vRr-DiFwXL-LfbROk1sAdlRJPiEgQF8/s1600/agregacao-clube.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;234&quot; data-original-width=&quot;588&quot; height=&quot;127&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl6koq1wrwjudqPh8IDSil63pX35KmQXPrflSdJF_R94nkz3Y1WAsFD2vW9he6W9eV6A0sVvjqU7Enxsvxp3TE9sfBEjtHVxzpl-L1REZhfJz5vRr-DiFwXL-LfbROk1sAdlRJPiEgQF8/s320/agregacao-clube.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As associações numa agregação, tal como ocorre na composição, também podem ser navegáveis. A escolha da navegabilidade unidirecional e seu sentido, ou da navegabilidade bidirecional entre o objeto agregado e seus objetos participantes deve levar em conta:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;O quão frequentemente a agregação precisa ser navegada de parte a parte.&lt;/li&gt;
&lt;li&gt;A necessidade de remoção de participantes específicos.&lt;/li&gt;
&lt;li&gt;Que os objetos participantes podem ser reutilizados em outras agregações (situação onde se sugere que os participantes possam referencias o objeto agregado).&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;Outro aspecto bastante comum e similar às composições é que as mensagens enviadas ao objeto agregado se propaguem para todos os seus participantes.&lt;/span&gt;&lt;br /&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;Exemplo de Agregação&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Considere a classe simples Java/C# que segue, a qual possui operações de acesso e mutação do atributo nome, que não pode ser vazio ou nulo; e um construtor que exige um nome.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Socio {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private String nome;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Socio(String nome) { setNome(nome); }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public String getNome() { return nome; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setNome(String nome) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (nome == null || nome.length()==0) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Nome nao pode ser nulo ou vazio.&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.nome = nome;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Esta classe &lt;b&gt;Socio&lt;/b&gt; será usada em associação a uma classe &lt;b&gt;Clube&lt;/b&gt;, cujo código Java é dado a seguir.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Clube {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private ArrayList&amp;lt;Socio&amp;gt; sociedade;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Clube() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sociedade = new ArrayList&amp;lt;&amp;gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void addSocio(Socio socio) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (socio == null) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Socio nao pode ser nulo.&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sociedade.add(socio);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public int numOfSocios() { return sociedade.size(); }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Socio getSocio(int n) { return sociedade.get(n); }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Socio removeSocio(int n) { return sociedade.remove(n); }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um objeto do tipo &lt;b&gt;Clube&lt;/b&gt; pode ser criado como segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Clube clube = new Clube():&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nesta situação, a instância clube criada não contém qualquer sócio, ou seja, é um agregado vazio. Isto pode ser verificado com:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;Num. socios clube = &quot; + clube.numOfSocios());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Novos sócios podem ser adicionados livremente com:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Socio s1 = new Socio(&quot;Peter&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Socio s2 = new Socio(&quot;César&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;clube.addSocio(s1);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;clube.addSocio(s2);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;clube.addSocio(new Socio(&quot;Benedito&quot;));&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isto mostra que os objetos &lt;b&gt;Clube&lt;/b&gt; (todo) são agregações de &lt;b&gt;Socio&lt;/b&gt; (participante), podendo conter zero ou mais instâncias de seus participantes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os participantes podem ser eventualmente removidos da agregação com:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Socio socioRemovido = clube.removeSocio(1);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observe que o índice fornecido para o método &lt;i&gt;removeSocio(int)&lt;/i&gt; é um inteiro entre [0, &lt;i&gt;numOfSocios()&lt;/i&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Composição e Agregação&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Tendo visto as duas formas mais comuns de associações todo/parte, é conveniente compará-las resumidamente:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Composições&lt;/i&gt; representam associações todo/parte, onde todas as partes (componentes), de tipos iguais ou diferentes, devem existir na quantidade adequada para que o todo possa ser considerado completo. Composições são adequadas para expressar o inter-relacionamento sistêmico entre elementos.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Agregações&lt;/i&gt; expressam associações todo/parte, onde as partes (participantes/constituintes/membros) são geralmente do mesmo tipo, mas que podem participar, simultaneamente, de várias agregações diferentes. As agregações podem estar vazias e, ainda assim, existirem, pois comumente expressam relações entre o todo e suas partes.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwRphk9AXYXRVempn38e-7ovWzqx5LXyuv5RoANHAhldtfJN4WslNFIn_tgvq7csuYWqZGSae5IGTxKxDTCa_HMxhnDql0KjP3ieM_OqDGMVs1VGhClsVsHYnhTfC5RXBoh76jTZCJIvo/s1600/associa%25C3%25A7%25C3%25B5es-todo-parte-resumo.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;339&quot; data-original-width=&quot;558&quot; height=&quot;194&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwRphk9AXYXRVempn38e-7ovWzqx5LXyuv5RoANHAhldtfJN4WslNFIn_tgvq7csuYWqZGSae5IGTxKxDTCa_HMxhnDql0KjP3ieM_OqDGMVs1VGhClsVsHYnhTfC5RXBoh76jTZCJIvo/s320/associa%25C3%25A7%25C3%25B5es-todo-parte-resumo.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Considerações finais&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É impossível construir sistemas nos quais não existam associações entre as classes identificadas. Cada tipo de associação permite estabelecer uma relação distinta entre suas partes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As associações binárias permitem estabelecer vínculos entre classes, geralmente denotando uma relação de uso. Também podem existir associações ternárias ou de maior cardinalidade; e até mesmo classe modeladas com o papel de representar associações particulares.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nas associações, cada classe envolvida possui um papel e uma multiplicidade, o que permite modelar as situações existentes no mundo real. Em particular, as construções todo/parte, ou seja, composições e agregações, representam situações especiais das associações.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As composições permitem representar sistemas de objetos, onde todos os componentes devem estar presentes para que seja válida. Já as agregações possibilitam representar relações entre objetos, podem estar vazias ou conter um número variável de participantes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Conhecer e empregar corretamente as associações é fundamental na POO!&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-16.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com.br/2018/03/poo-p-16.html&quot;&gt;POO-P-16-Associações-composição&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com.br/2018/03/poo-p-18.html&quot;&gt;POO-P-18-Especificadores e Modificadores&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-17.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/03/poo-p-17.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-6475267553183760893</guid><pubDate>Thu, 01 Mar 2018 03:00:00 +0000</pubDate><atom:updated>2018-03-05T00:09:11.966-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Plena-16-Associações-composição de objetos</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-15.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-15.html&quot;&gt;POO-P-15-Associações&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com.br/2018/03/poo-p-17.html&quot;&gt;POO-P-17-Associações:agregação&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-16.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Um sistema OO contém vários objetos inter-relacionados, ou seja, instâncias de tipos diferentes associadas de uma maneira apropriada para produzir os resultados desejados. Assim, as diversas associações existentes entre os objetos de um sistema explicitam as relações lógicas ou de negócios que existem entre seus objetos e, exatamente por isso, devem ser adequadamente representadas.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju9_v1jOlf5IAc3b9hePyoTZP3rQc3S-bDe1mXToW7hX9wiZkRocuaoZzqcNWFMsuAsrHfkZX8JXERe7RyG6dFhO-TiW-GUxpyJddcwZ_p4EUkKmTv_QRq-s4Ic6Nq0i1LspFU6gaJkF8/s1600/bike-exploded-view.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;876&quot; data-original-width=&quot;1024&quot; height=&quot;273&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju9_v1jOlf5IAc3b9hePyoTZP3rQc3S-bDe1mXToW7hX9wiZkRocuaoZzqcNWFMsuAsrHfkZX8JXERe7RyG6dFhO-TiW-GUxpyJddcwZ_p4EUkKmTv_QRq-s4Ic6Nq0i1LspFU6gaJkF8/s320/bike-exploded-view.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As associações ou vínculos podem existir entre objetos diferentes, de um mesmo tipo ou de tipos diferentes [2]. Estes ligações constituem os relacionamentos específicos entre tais objetos, o que é muito importante, pois em geral efetivam um serviço ou materializam uma construção.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por exemplo, uma biblioteca possui livros e usuários, que são entidades de tipos distintos. O empréstimo de um livro, que é o serviço prestado pela biblioteca, vincula um livro específico a um usuário particular, ou seja, cria uma associação livro-usuário.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
De maneira semelhante, a construção de um avião corresponde a ligação de vários elementos, como fuselagem, asas, trens de pouso, motor, etc. Também existe uma associação necessária entre tais elementos para constituir uma aeronave.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No &lt;i&gt;post &lt;/i&gt;anterior, que tratou das &lt;i&gt;associações&lt;/i&gt;, foram vistas as situações gerais onde um objeto está associado a um ou mais objetos. A quantidade de objetos associados é dita cardinalidade ou multiplicidade da associação. Além disso, a maneira com que as associações são construídas permite a que navegação seja unidirecional ou bidirecional.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Também existem associações especiais, conhecidas como associações todo/parte, que relacionam as partes de um todo. Em função do tipo de relação existente entre o conjunto de todos os elementos e suas partes, existem dois tipos particulares de associações todo/parte que merecem um estudo mais detalhado porque ocorrem com muita frequência no desenvolvimento de sistemas OO. São as composições, assunto tratado a seguir; e as agregações, que serão abordadas no próximo post.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Composições&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Numa composição (&lt;i&gt;composite&lt;/i&gt;), o &lt;i&gt;objeto composto&lt;/i&gt; não pode existir como um todo sem que todos os seus &lt;i&gt;componentes&lt;/i&gt; estejam presentes, pois ele não estaria íntegro ou completo [2][6].&amp;nbsp;Considere, rapidamente, uma caneta esferográfica sem sua carga de tinta; uma bicicleta sem guidão; ou um telefone celular sem sua bateria; são exemplos de objetos incompletos que não podem ser utilizados, nem desempenhar seus papeis. Completando tais conjuntos, temos composições válidas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Existe também outra questão envolvendo o tempo de vida do objeto composto (o todo) e dos objetos componentes (suas partes):&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;O &lt;i&gt;tempo de vida&lt;/i&gt; de um &lt;i&gt;objeto composto&lt;/i&gt; não pode ultrapassar o &lt;i&gt;tempo de vida&lt;/i&gt; de seus &lt;i&gt;componentes&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;No entanto, o tempo de um, vários ou todos os objetos componentes (as partes) pode ser maior que a vida do objeto composto.&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;Considerando uma bicicleta, como um todo - completa, ela não pode existir sem uma ou duas de suas rodas, sem seu selim ou guidão. Mas as partes da bicicleta podem existir, mesmo que não montadas como uma bicicleta (ou seja, existem mesmo sem constituir um todo).&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Além disso, a qualquer tempo, um objeto componente só pode fazer parte um objeto composto específico. O guidão, o selim e cada parte da bicicleta só podem estar em uma bicicleta em particular. Retirar a roda de uma bicicleta, faz que ela deixe de ser um todo; montando tal roda para completar outra bicicleta, surge outro objeto composto; mas a roda em questão é um objeto único, que só pode estar numa bicicleta ou nenhuma.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Também é muito comum que as composições sejam, geralmente, &lt;i&gt;heterômeras &lt;/i&gt;ou &lt;i&gt;heteromorfas&lt;/i&gt;, ou seja, objetos compostos cujas partes não são semelhantes, isto é, feitos de partes de tipos diferentes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É comum que as composições sejam usadas para expressar o interrelacionamento sistêmico entre elementos que devem coexistir para funcionarem adequadamente como um sistema.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Num diagrama de classes UML adicionamos um &lt;i&gt;diamante preenchido&lt;/i&gt; nas associações todo/parte do tipo composição, posicionando-o do lado do objeto composto. Por conta da própria heteromorfia, as multiplicidades de cada componente podem ser diferentes, como ilustrado a seguir.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitT6KGrS0wgAMnCIS2M1Om1mVwJy47jQ80UfG3On9XIzTYrwuPrbGnKEZabppv6AMPo0Z6wPLPuTVzphwdidpMOPueOn_DVI_lUmAVc0rRnRB9crFNQXvNyVhp1WKBVH5R9eUCAIaoFtQ/s1600/composicao-bicicleta.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;190&quot; data-original-width=&quot;556&quot; height=&quot;109&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitT6KGrS0wgAMnCIS2M1Om1mVwJy47jQ80UfG3On9XIzTYrwuPrbGnKEZabppv6AMPo0Z6wPLPuTVzphwdidpMOPueOn_DVI_lUmAVc0rRnRB9crFNQXvNyVhp1WKBVH5R9eUCAIaoFtQ/s320/composicao-bicicleta.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As associações numa composição também podem ser navegáveis. Mas a escolha do desenho da navegabilidade entre o objeto composto e seus objetos componentes deve levar em conta:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;O quão frequentemente a composição precisa ser navegada de parte a parte.&lt;/li&gt;
&lt;li&gt;Se os objetos componentes serão reutilizados em outras composições (situação onde se recomenda que os componentes não façam referência ao objeto composto).&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;Outro aspecto bastante comum é que as mensagens enviadas ao objeto composto se propaguem para todos os seus componentes.&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Exemplo de Composição&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Considere as classes Java/C# que seguem, nas quais não foram incluídos quaisquer membros, exceto &lt;i&gt;toString()&lt;/i&gt;, para simplificação do exemplo. Tais classes são os componentes de uma bicicleta.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Roda {&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public String toString() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return getClass().getName();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Quadro {&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public String toString() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return getClass().getName();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Selim {&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public String toString() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return getClass().getName();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Guidao {&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public String toString() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return getClass().getName();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A implementação da operação &lt;i&gt;toString()&lt;/i&gt; de todos os tipos componentes da bicicleta é idêntica e produz uma &lt;b&gt;String&lt;/b&gt; contendo o nome da classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como uma bicicleta é um objeto composto, o qual só pode estar completo com a presença de todos os seus componentes, a classe Java/C# que segue representa uma possível implementação de &lt;b&gt;Bicicleta&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Bicicleta {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private Roda rodaDianteira, rodaTraseira;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private Quadro quadro;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private Selim selim;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private Guidao guidao;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Bicicleta(Roda rd, Roda rt, Quadro q, Selim s, Guidao g) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (rd == null || rt == null || rd == rt) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Bicicleta requer duas rodas.&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (q == null) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Bicicleta requer um quadro.&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (s == null) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Bicicleta requer um selim.&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (g == null) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Bicicleta requer um guidao.&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; rodaDianteira = rd; rodaTraseira = rt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; quadro = q;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; selim = s;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; guidao = g;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Roda getRodaDianteira() { return rodaDianteira; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Roda getRodaTraseira() { return rodaTraseira; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Quadro getQuadro() { return quadro; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Selim getSelim() { return selim; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Guidao getGuidao() { return guidao; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public String toString() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String.format(&quot;%s:\n\t%s,\n\t%s,\n\t%s,\n\t%s,\n\t%s\n&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; getClass().getName(), rodaDianteira, rodaTraseira,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; quadro, selim, guidao);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os membros privados &lt;i&gt;rodaDianteira&lt;/i&gt;, &lt;i&gt;rodaTraseira&lt;/i&gt;, &lt;i&gt;quadro&lt;/i&gt;, &lt;i&gt;selim &lt;/i&gt;e &lt;i&gt;guidao &lt;/i&gt;são as associações requeridas pelo tipo composto &lt;b&gt;Bicicleta&lt;/b&gt;. São declaradas privadas para garantir que não sejam substituídas por &lt;i&gt;null&lt;/i&gt;, o que tornaria a composição inválida com a ausência de qualquer um de seus componentes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O construtor toma como argumentos os componentes exigidos para a composição, validando e rejeitando componentes nulos. Apenas quando fornecidas duas instâncias distintas de &lt;b&gt;Roda&lt;/b&gt;, uma instância de &lt;b&gt;Quadro&lt;/b&gt;, de &lt;b&gt;Selim &lt;/b&gt;e de &lt;b&gt;Guidao&lt;/b&gt;, torna-se possível a instanciação de um objeto &lt;b&gt;Bicicleta&lt;/b&gt;, como no fragmento que segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Bicicleta b = new Bicicleta(new Roda(), new Roda(),&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; new Quadro(), new Selim(), new Guidao());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(b);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Quando executado, este fragmento produz:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Bicicleta:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Roda,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Roda&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Quadro&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Selim&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Guidao&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As operações de acesso getter permitem acessar e, portanto, navegar, unidirecionalmente, da instância de &lt;b&gt;Bicicleta &lt;/b&gt;para as suas instâncias componentes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O método &lt;i&gt;toString()&lt;/i&gt; de &lt;b&gt;Bicicleta &lt;/b&gt;produz uma &lt;b&gt;String &lt;/b&gt;que concatena o nome da classe do tipo &lt;b&gt;Bicicleta &lt;/b&gt;e, também, os nomes das classes de seus componentes, cujos métodos &lt;i&gt;toString()&lt;/i&gt; são implicitamente acionados quando suas referências são usadas para suprir um argumento de tipo &lt;i&gt;%s&lt;/i&gt;, que indica um tipo &lt;b&gt;String&lt;/b&gt;. Este método mostra uma possível forma de propagação de mensagens entre o objeto composto e seus componentes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Considerações Finais&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As composições representam associações todo/parte, onde todas as partes (componentes), de tipos iguais ou diferentes, devem existir na quantidade adequada para que o todo possa ser considerado completo.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Composições são adequadas para expressar o inter-relacionamento sistêmico entre elementos, como mostrado no exemplo do tipo &lt;b&gt;Bicicleta &lt;/b&gt;(composição) e seus componentes &lt;b&gt;Roda&lt;/b&gt;, &lt;b&gt;Quadro&lt;/b&gt;, &lt;b&gt;Selim &lt;/b&gt;e &lt;b&gt;Guidao&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É praticamente impossível construir sistemas onde não existam associações, sendo que as composições são frequentemente utilizadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-15.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-15.html&quot;&gt;POO-P-15-Associações&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com.br/2018/03/poo-p-17.html&quot;&gt;POO-P-17-Associações:agregação&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-16.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/03/poo-p-16.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-6634649327669370929</guid><pubDate>Mon, 26 Feb 2018 03:00:00 +0000</pubDate><atom:updated>2018-03-01T18:12:53.540-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Plena-15-Associações</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-14.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-14.html&quot;&gt;POO-P-14-Objetos que usam objetos&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com.br/2018/03/poo-p-16.html&quot;&gt;POO-P-16-Associações:composições&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-15.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;No mundo real, os muitos tipos de objetos que existem aparecem tanto de maneira isolada, como elementos independentes, como associados a outros objetos. As técnicas de construção de sistemas por meio da Programação Orientada a Objetos (POO) contemplam maneiras para representar as diferentes associações que podem existir entre os objetos.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG-RzDHewS61TUwdiSY-xeaUrW92AEpGMwkIFWvfdXBfntdF_HriPZGDZ6EdZJ84LR4o0bCWUBxT1UjwYpOivk-y2eiPQTgl4_0AnMhMpI0gjtcjBDBawHoyXFhjsZEJCTV1z9iNNw8sQ/s1600/associa%25C3%25A7%25C3%25B5es-uml-00.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;291&quot; data-original-width=&quot;503&quot; height=&quot;185&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG-RzDHewS61TUwdiSY-xeaUrW92AEpGMwkIFWvfdXBfntdF_HriPZGDZ6EdZJ84LR4o0bCWUBxT1UjwYpOivk-y2eiPQTgl4_0AnMhMpI0gjtcjBDBawHoyXFhjsZEJCTV1z9iNNw8sQ/s320/associa%25C3%25A7%25C3%25B5es-uml-00.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Associações&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma &lt;i&gt;associação&lt;/i&gt; representa um vínculo (ou ligação) possível entre instâncias de classes, ou seja, entre objetos que podem ser tanto de um mesmo tipo, como de tipos diferentes [2].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O vínculo existente entre instâncias representa um relacionamento de natureza específica, como:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Um aluno de um curso e as disciplinas ou módulos que cursou;&lt;/li&gt;
&lt;li&gt;Um usuário de uma biblioteca e um livro por ele emprestado;&lt;/li&gt;
&lt;li&gt;Uma propriedade imóvel e seu proprietário;&lt;/li&gt;
&lt;li&gt;Um sócio ou um membro de um clube ou agremiação;&lt;/li&gt;
&lt;li&gt;As rodas de um veículo ou partes de uma máquina.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim, as associações podem e, de fato, devem ser documentadas em qualquer projeto, pois representam os relacionamentos requeridos entre as entidades do seu modelo (de negócio, de dados, etc).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A &lt;i&gt;Unified Modeling Language&lt;/i&gt;&amp;nbsp;(UML) é uma linguagem gráfica que possui vários diagramas para representar as visões diferentes de um projeto de software [2][8]. O &lt;i&gt;diagrama de classes&lt;/i&gt; UML, em particular, possibilita a representação gráfica de classes, seus atributos e suas operações; possuindo também todos os elementos necessários para expressar as associações existentes entre elas, como ilustrado na figura que segue.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-z5eJ_bqsP3xVeoatAOZrMxA-XUEmXEkQRzaRbBmYkDPKBXMJLe5S0MTcbajnebXz-hJQWct8WKS0A4LWx8epU50QsBk09g2q6rWJggit7DY2JSVAMb5a_NUtNlwpk66DJrW2hBVgRDk/s1600/associa%25C3%25A7%25C3%25B5es-uml-01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;350&quot; data-original-width=&quot;643&quot; height=&quot;174&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-z5eJ_bqsP3xVeoatAOZrMxA-XUEmXEkQRzaRbBmYkDPKBXMJLe5S0MTcbajnebXz-hJQWct8WKS0A4LWx8epU50QsBk09g2q6rWJggit7DY2JSVAMb5a_NUtNlwpk66DJrW2hBVgRDk/s320/associa%25C3%25A7%25C3%25B5es-uml-01.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O diagrama exibido contém duas classes, &lt;b&gt;Pessoa&lt;/b&gt; e &lt;b&gt;Veiculo&lt;/b&gt;, representados por retângulos com três divisões: uma para a identificação da classe (seu nome e, opcionalmente, seu pacote/&lt;i&gt;namespace&lt;/i&gt;); uma para os atributos da classe; e outra para as operações da classes. Os atributos e operações são precedidos por um símbolo que indica sua visibilidade: &#39;+&#39; para elementos públicos, &#39;#&#39; para elementos protegidos e &#39;-&#39; para elementos privados; sendo que a ausência de símbolo denota visibilidade de nível pacote.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Também podem existir ligações entre classes, como mostra a figura abaixo, que destaca a ligação entre a classe &lt;b&gt;Pessoa&lt;/b&gt; e a classe &lt;b&gt;Veiculo&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbaOj_ESEi9cJ3nSqfULO3UK67CLehgWmr5lriSEGMB5RyhgF-17NRg1GjvNvI4XxiSFl6JQdiHCLH3XzbgbPiCKKN3uCFXRlYnIa-qo8nIfzEUrtDXrKCybckOsCICh1bwzYlprwIIK0/s1600/associa%25C3%25A7%25C3%25B5es-uml-02.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;145&quot; data-original-width=&quot;520&quot; height=&quot;89&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbaOj_ESEi9cJ3nSqfULO3UK67CLehgWmr5lriSEGMB5RyhgF-17NRg1GjvNvI4XxiSFl6JQdiHCLH3XzbgbPiCKKN3uCFXRlYnIa-qo8nIfzEUrtDXrKCybckOsCICh1bwzYlprwIIK0/s320/associa%25C3%25A7%25C3%25B5es-uml-02.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A associação (ligação) entre as classes &lt;b&gt;Pessoa&lt;/b&gt; e &lt;b&gt;Veiculo&lt;/b&gt; é denominada propriedade. Cada extremidade também é identificada, o que permite estabelecer como se dá o vínculo de propriedade especificamente para cada tipo (classe) envolvida:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Pessoa tem frota de 0..* (zero ou mais) veículos; e&lt;/li&gt;
&lt;li&gt;Veículo tem 1 (um) proprietário.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A indicação numérica existente em cada extremo de uma associação é a &lt;i&gt;cardinalidade&lt;/i&gt; ou &lt;i&gt;multiplicidade&lt;/i&gt; da relação, que pode ser:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;0..1 -- zero ou um;&lt;/li&gt;
&lt;li&gt;0..* -- zero ou mais (qualquer número);&lt;/li&gt;
&lt;li&gt;1 -- (apenas) um;&lt;/li&gt;
&lt;li&gt;1..* -- um ou mais do que um; e&lt;/li&gt;
&lt;li&gt;* -- qualquer número.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim, tal diagrama pode ser lido como:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Pessoas&lt;/i&gt; e &lt;i&gt;veículos&lt;/i&gt; têm um vínculo denominado &lt;i&gt;propriedade&lt;/i&gt;. Uma &lt;i&gt;pessoa&lt;/i&gt; possui uma &lt;i&gt;frota&lt;/i&gt; (de veículos), com zero até muitos veículos. Um &lt;i&gt;veículo&lt;/i&gt; possui apenas um &lt;i&gt;proprietário&lt;/i&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Importância das associações&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Modelar as associações entre classes constitui a espinha dorsal da análise técnica que se denomina modelagem de informações. Assim, os diagramas de classes que contêm associações permitem obter informações sobre várias perspectivas da modelagem:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Uma associação ou relacionamento é nomeada por uma forma verbal: &quot;propriedade&quot; pode ser também &quot;&lt;i&gt;possuído por&lt;/i&gt;&quot;.&lt;/li&gt;
&lt;li&gt;A multiplicidade de relações que é possível, incluindo a ausência de relação (0) quando permitida.&lt;/li&gt;
&lt;li&gt;Os nomes das associações e dos papéis não são obrigatórios na UML, mas mostram-se muito úteis na etapa de implementação e na interpretação dos diagramas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Associação básica ou binária&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O diagrama que segue mostra associação básica ou binária entre (classes) &lt;b&gt;Pessoa&lt;/b&gt; e &lt;b&gt;Cachorro&lt;/b&gt;, a qual é denominada &lt;b&gt;PosseDeCachorro&lt;/b&gt;:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Um Cachorro tem 0..1 (zero ou um) dono (Pessoa).&lt;/li&gt;
&lt;li&gt;Uma Pessoa possui 0..* (qualquer número) de Cachorros.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg88sOAKvZ4VFpKM2IcLoIEim_ASyXTOI0f3cPq8uv4w-grd92Vu1jh7ph3rfijn2WYKL6x-mqgH4jtNmH-gyFl2GKR_QHV4_3R3fRh5gc2CkFp-eE_iT0xvvIWdTHMzSENdQf83NFeyVY/s1600/associa%25C3%25A7%25C3%25B5es-uml-03.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;57&quot; data-original-width=&quot;502&quot; height=&quot;35&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg88sOAKvZ4VFpKM2IcLoIEim_ASyXTOI0f3cPq8uv4w-grd92Vu1jh7ph3rfijn2WYKL6x-mqgH4jtNmH-gyFl2GKR_QHV4_3R3fRh5gc2CkFp-eE_iT0xvvIWdTHMzSENdQf83NFeyVY/s320/associa%25C3%25A7%25C3%25B5es-uml-03.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Associação representada por Classe&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma associação entre classes, tal como a básica entre &lt;b&gt;Pessoa&lt;/b&gt; e &lt;b&gt;Cachorro&lt;/b&gt;, pode também ser representada por uma classe (dita de associação). Desta maneira, a relação &lt;b&gt;PosseDeCachorro&lt;/b&gt;, entre &lt;b&gt;Pessoa&lt;/b&gt; e &lt;b&gt;Cachorro&lt;/b&gt;, poderia ser expressa assim.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEharw0tvPdrYxZnAafxsEv8f_c8U9-n_8pEfX5odZS_ABUJW0j1r0xE0xBHwbHBbUqvMwCww4ZtyVBMjEEAI1rgjJRhlfQuDCF9lsABbsQ8u1UuwE_j6X7ShB_1eo7D49lWdTvcKLyQHqk/s1600/associa%25C3%25A7%25C3%25B5es-uml-04.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;133&quot; data-original-width=&quot;404&quot; height=&quot;105&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEharw0tvPdrYxZnAafxsEv8f_c8U9-n_8pEfX5odZS_ABUJW0j1r0xE0xBHwbHBbUqvMwCww4ZtyVBMjEEAI1rgjJRhlfQuDCF9lsABbsQ8u1UuwE_j6X7ShB_1eo7D49lWdTvcKLyQHqk/s320/associa%25C3%25A7%25C3%25B5es-uml-04.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Navegabilidade&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É um conceito da UML reservado inteiramente para modelos de implementação orientados a objeto.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A &lt;i&gt;navegabilidade&lt;/i&gt; é indicada por setas acrescentadas nas linhas que representam as associações. Ela mostra quando um objeto pode se referir ao outro associado, o que permite acessá-lo, ou seja, navegar até tal objeto. Com isso é possível executar operações relacionadas à associação em si.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A navegação pode ser unidirecional e bidirecional, assim entre duas classes existem três possibilidades de navegação, como mostra a figura que segue, onde se vê a navegação unidirecional de &lt;b&gt;Pessoa&lt;/b&gt; para &lt;b&gt;Cachorro&lt;/b&gt;, a navegação unidirecional de &lt;b&gt;Cachorro&lt;/b&gt; para &lt;b&gt;Pessoa&lt;/b&gt;, e também bidirecional entre &lt;b&gt;Pessoa&lt;/b&gt; e &lt;b&gt;Cachorro&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGp0rkECqM5mZetVwYBkMta1_HlGkVCZ47zOcDiUxYnaYav2R6JW-4MxALnyv6r4R9j-LmVeTGBJDdjVajAasGciRSWbijcEjaXLQkD-OL2bNEMmKhz-dyJqOpncgkvXsGc_OKiy727b4/s1600/associa%25C3%25A7%25C3%25B5es-uml-05.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;375&quot; data-original-width=&quot;503&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGp0rkECqM5mZetVwYBkMta1_HlGkVCZ47zOcDiUxYnaYav2R6JW-4MxALnyv6r4R9j-LmVeTGBJDdjVajAasGciRSWbijcEjaXLQkD-OL2bNEMmKhz-dyJqOpncgkvXsGc_OKiy727b4/s320/associa%25C3%25A7%25C3%25B5es-uml-05.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Associação, Navegabilidade e Código OO&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Cada forma de associação e sua possível multiplicidade tem uma expressão própria em termos de código.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para ilustrarmos como o código OO pode ser construído para representar as associações de navegação uni e bidirecional, com diferentes multiplicidades, considere a existência das classes &lt;b&gt;A&lt;/b&gt; e &lt;b&gt;B&lt;/b&gt;, como segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class A {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// atributos, operações e construtores&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class B {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// atributos, operações e construtores&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Neste momento, não é necessário conhecermos e considerarmos os eventuais atributos, operações e construtores pertencentes a estas classes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Navegação unidirecional&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se for desejada uma associação denominada papel, unidirecional, de cardinalidade 0..1 (zero ou um), com navegação de &lt;b&gt;A&lt;/b&gt; para &lt;b&gt;B&lt;/b&gt;, devemos ter:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class A {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// associação de A para B, 0..1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public B papel;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// atributos, operações e construtores&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class B {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// atributos, operações e construtores&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Este código possibilita que:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Quando o atributo papel de uma instância da classe &lt;b&gt;A&lt;/b&gt; é nulo, temos a situação de nenhum objeto do tipo &lt;b&gt;B&lt;/b&gt; está associado ao primeiro (&lt;i&gt;multiplicidade = 0&lt;/i&gt;).&lt;/li&gt;
&lt;li&gt;Quando o atributo papel de uma instância da classe &lt;b&gt;A&lt;/b&gt; contém uma referência válida, temos a situação de um objeto do tipo &lt;b&gt;B&lt;/b&gt; associado ao primeiro (&lt;i&gt;multiplicidade = 1&lt;/i&gt;).&lt;/li&gt;
&lt;li&gt;Quando a instância de &lt;b&gt;A&lt;/b&gt; contém um referência válida, é possível navegar do objeto&amp;nbsp; de tipo &lt;b&gt;A&lt;/b&gt; para o objeto de tipo &lt;b&gt;B&lt;/b&gt;. O contrário não é possível, assim temos uma navegação unidirecional.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Então, temos que este código permite que cada instância de &lt;b&gt;A&lt;/b&gt; possa, livremente, ser associada a zero ou uma instância de &lt;b&gt;B&lt;/b&gt;, permitindo a navegação de &lt;b&gt;A&lt;/b&gt; para &lt;b&gt;B&lt;/b&gt; apenas (é a classe que possui um campo para representar a associação que possibilita suas instâncias de acessar a - navegar para - instância associada).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para inverter o sentido da navegação, bastaria colocar o atributo de navegação na outra classe, ou seja, para uma associação denominada papel, unidirecional, de cardinalidade 0..1 (zero ou um), com navegação de &lt;b&gt;B&lt;/b&gt; para &lt;b&gt;A&lt;/b&gt;, devemos ter:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class A {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// atributos, operações e construtores&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class B {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// associação de B para A, 0..1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public A papel;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// atributos, operações e construtores&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As características desta associação são as mesmas, apenas com a navegabilidade invertida.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para navegação bidirecional, o campo de associação deve estar presente nas duas classes, como segue.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class A {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// associação de A para B, 0..1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public B papel;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// atributos, operações e construtores&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class B {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// associação de B para A, 0..1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public A papel;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// atributos, operações e construtores&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O exemplo acima permite a navegação bidirecional entre &lt;b&gt;A&lt;/b&gt; e &lt;b&gt;B&lt;/b&gt;, mantendo a multiplicidade 0..1 em cada extremidade da associação.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No entanto, esta estrutura de código não é robusta. Cabe ao programador garantir a consistência entre quaisquer associações construídas!&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Considerações finais&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como um sistema OO contém vários objetos interrelacionados, é necessário representar adequadamente as diferentes associações que podem existir entre os objetos, isto é, os vínculos entre instâncias de tipos diferentes, pois tais associações explicitam as relações lógicas ou de negócios que existem entre tais objetos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim é muito importante modelar as associações entre classes, atividade essencial na análise técnica que se denomina modelagem de informações, a qual culmina num projeto orientado a objetos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As associações, com sua identificação, cardinalidade e possibilidade de navegação expressam o uso típico que os objetos fazem dos demais. Particularmente existem as associações todo/parte, dentre as quais a composição e a agregação merecem estudo mais cuidadoso, a ser visto nos próximos &lt;i&gt;posts&lt;/i&gt;!&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-14.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-14.html&quot;&gt;POO-P-14-Objetos que usam objetos&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com.br/2018/03/poo-p-16.html&quot;&gt;POO-P-16-Associações:composições&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-15.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/02/poo-p-15.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-2912414435076139302</guid><pubDate>Thu, 22 Feb 2018 03:00:00 +0000</pubDate><atom:updated>2018-02-26T09:14:20.561-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Plena-14-Objetos que usam objetos</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-f-13.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-f-13.html&quot;&gt;POO-F-13-Tratamento de exceções&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-15.html&quot;&gt;POO-P-15-Associações&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-14.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;A Programação Orientada a Objetos (POO) é uma técnica de construção de sistemas onde um conjunto de objetos se inter-relacionam&amp;nbsp;para produzir os resultados desejados. Todo objeto é uma ocorrência de uma classe, combinando dados e operações específicas, de maneira a definir um conjunto particular de responsabilidades.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDw6KyyXqogIp5byo8dJ9NAbi01_EpGu3CuknIs3Cf2APVoWgIItb8FEvNs1FZjVNqfSWo_f1WqA14AA6yDCzCL0HthculIbguEDwTXiTkuIOYutw3xDjVa9jpPjFBJLPO-cZafxmywvU/s1600/flashlight-exploded-view.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;250&quot; data-original-width=&quot;455&quot; height=&quot;175&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDw6KyyXqogIp5byo8dJ9NAbi01_EpGu3CuknIs3Cf2APVoWgIItb8FEvNs1FZjVNqfSWo_f1WqA14AA6yDCzCL0HthculIbguEDwTXiTkuIOYutw3xDjVa9jpPjFBJLPO-cZafxmywvU/s320/flashlight-exploded-view.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A construção de sistemas orientados a objetos (OO) é bastante interessante, pois como os objetos têm suas responsabilidades delimitadas, é possível que as classes que os originam sejam utilizados em situações diferentes, ou seja, a OO promove a reusabilidade de código.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outro aspecto positivo é que a manutenção do código se torna mais simples, pois, dependendo da qualidade do projeto, podem ser feitas modificações apenas nas classes relacionadas a objetos específicos, sem que isso implique em alterações em outras classes, ou seja, nas demais partes do sistema [7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Divisão de responsabilidades&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Existe um importante princípio no projeto de software que é conhecido como coesão (&lt;i&gt;cohesion&lt;/i&gt;) ou divisão de responsabilidades (&lt;i&gt;responsability division&lt;/i&gt;). Segundo este princípio, um módulo, uma classe ou um componente de software deve ter uma, e apenas uma, responsabilidade.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Tal responsabilidade deve ser claramente definida, de maneira que, num projeto OO, cada classe deva ser escrita, modificada e mantida para apenas um propósito, representando um tipo único de entidade ou de ator.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Quando uma classe possui muitas responsabilidades é usualmente difícil compreender seu papel, o que torna sua manutenção é mais complicada; além disso, será pouco provável seu reuso, devido a combinação peculiar de responsabilidade.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por outro lado, quando uma classe é bem coesa, isto é, quanto é centrada numa responsabilidade única, somente uma razão específica leva à sua modificação, o que&amp;nbsp; simplifica e flexibiliza a realização de mudanças no futuro, pois provavelmente tais alterações não criarão impactos em outras entidades do sistema.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Embora possa existir alguma dificuldade em dividir as responsabilidades que surgem num problema, tal trabalho de separar é compensado pelas facilidades em evoluir.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Problema-Exemplo&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma empresa especializada na instalação de pisos e carpetes precisa, com grande frequência, calcular a área e o perímetro dos espaços onde tais acabamentos serão instalados, pois tais informações possibilitam determinar a lista de materiais necessários, da qual deriva o orçamento e, depois, o pedido e entrega dos itens envolvidos para realização do serviço. Tais espaços, tipicamente salas e quartos, são tipicamente retangulares.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim, um programa simples que determina a área de tais espaços é bastante útil para agilizar o cálculo da área do piso a ser instalado e também o perímetro de rodapés. Existem outros detalhes neste serviço, que serão omitidos por serem menos importantes, de maneira que o problema seja reduzido a &quot;&lt;i&gt;como determinar a área e perímetro de uma sala retangular&lt;/i&gt;&quot;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O retângulo é uma entidade do problema, o que sugere a existência de uma classe &lt;b&gt;Retangulo&lt;/b&gt;. Um programa simples pode ser construído para obter os dados necessários para criar um objeto retângulo e, com este, determinar as informações requeridas de área e perímetro.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Então é necessário modelar uma classe &lt;b&gt;Retangulo&lt;/b&gt;, para o cálculo de área e perímetro; e outra para o programa em si, que interage com o usuário. Isto separa as responsabilidades identificadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Modelagem da classe Retangulo&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma sala ou área retangular é um retângulo, formado por quatro lados perpendiculares, onde os lados opostos têm a mesma medida: a medida maior (de dois dos lados opostos) será denominada &lt;i&gt;comprimento &lt;/i&gt;e a medida menor (dos outro lados) de &lt;i&gt;largura&lt;/i&gt;. Da geometria sabemos que:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;área = comprimento * largura&lt;/li&gt;
&lt;li&gt;perímetro = 2 * (comprimento + largura)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A representação mais simples de um retângulo é uma dupla de medidas (&lt;i&gt;comprimento &lt;/i&gt;e &lt;i&gt;largura&lt;/i&gt;), pois os seus quatro ângulos são sempre 90°. Isto indica que &lt;i&gt;comprimento &lt;/i&gt;e &lt;i&gt;largura &lt;/i&gt;são atributos (ou campos) desta entidade (da classe &lt;b&gt;Retangulo&lt;/b&gt;), cujos valores são números reais (ou de tipo &lt;i&gt;double&lt;/i&gt;) e positivos, ou seja, &lt;i&gt;comprimento&amp;gt;0.0&lt;/i&gt; e &lt;i&gt;largura&amp;gt;0.0&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como tais atributos tem uma restrição (são apenas positivos), mas o tipo &lt;i&gt;double &lt;/i&gt;aceita valores positivos e negativos, devem ser privados, evitando seu acesso direto e indiscriminado. Métodos de acesso ou &lt;i&gt;getters &lt;/i&gt;podem ser providos para que o valor de comprimento e largura de um retângulo sejam obtidos e conhecidos; assim como métodos de alteração ou &lt;i&gt;setters &lt;/i&gt;devem ser inclusos para que seja possível modificar as medidas do retângulo, respeitando as regras dadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como não é possível definir (e portanto existir) um retângulo sem estas duas medidas, o construtor da classe deve exigir dois argumentos reais para suprí-las. Não deve ser incluso um construtor &lt;i&gt;default&lt;/i&gt;, pois não parece existir um retângulo de medida padrão.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Métodos adicionais podem calcular a área e o perímetro, sem demandar outros dados, pois apenas as medidas de &lt;i&gt;comprimento &lt;/i&gt;e &lt;i&gt;largura &lt;/i&gt;são necessárias. Tais métodos podem ser denominados area ou &lt;i&gt;getArea&lt;/i&gt;, &lt;i&gt;perimetro &lt;/i&gt;ou &lt;i&gt;getPerimetro&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Esta análise resulta numa classe Java que pode ser como segue.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Retangulo {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// atributos&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private double comprimento, largura;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// construtor parametrizado exige dimensões&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Retangulo (double comprimento, double largura)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws RuntimeException {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; setComprimento(comprimento);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; setLargura(largura);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// métodos de ajuste/mutação&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setComprimento (double comprimento)&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws RuntimeException {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // verifica dimensão&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (comprimento&amp;lt;=0) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Comprimento invalido: &quot; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + comprimento);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // dimensão ok&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.comprimento = comprimento;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setLargura (double largura)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws RuntimeException {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // verifica dimensão&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (largura&amp;lt;=0) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Largura invalida: &quot; + largura);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // dimensão ok&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.largura = largura;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// métodos de acesso/observação&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double getComprimento () { return comprimento; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double getLargura () { return largura; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double area() { return comprimento*largura; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double perimetro() { return 2*(comprimento+largura); }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// método de acesso &quot;padronizado&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public String toString() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return String.format(&quot;Retangulo[C:%.2d x L:%.2d]&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; comprimento, largura);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um objeto do tipo &lt;b&gt;Retangulo &lt;/b&gt;pode ser instanciado com:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Retangulo ret1 = new Retangulo(4.20, 2.70);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As medidas podem ser modificadas com os métodos &lt;i&gt;setter&lt;/i&gt;:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;ret1.setComprimento(4.30);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;ret1.setLargura(2.75);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As medidas podem ser obtidas individualmente com os métodos &lt;i&gt;getter&lt;/i&gt;:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;double c = ret1.getComprimento();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;double l = ret1.getLargura();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma &lt;b&gt;String&lt;/b&gt; que descreve o objeto pode ser obtida com &lt;i&gt;toString()&lt;/i&gt;:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// uso direto - explícito&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;String desc = ret1.toString();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// uso indireto - implícito&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(ret1);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A área e o comprimento podem ser obtidas com:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
double area = ret1.area();&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
double perim = ret1.perimetro();&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Caso medidas inválidas sejam fornecidas, na instanciação ou na alteração de uma das medidas do retângulo, será lançada uma exceção do tipo &lt;b&gt;RuntimeException&lt;/b&gt;:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// na instanciação&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Retangulo ret2 = new Retangulo(-2, 3.5);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;|&amp;nbsp; java.lang.RuntimeException thrown: Comprimento invalido: -2.0&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;|&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at Retangulo.setComprimento (#1:15)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;|&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at Retangulo.&amp;lt;init&amp;gt; (#1:7)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;|&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at (#2:1)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// na alteração&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;ret1.setComprimento(0);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;|&amp;nbsp; java.lang.RuntimeException thrown: Comprimento invalido: 0.0&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;|&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at Retangulo.setComprimento (#1:15)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;|&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at (#4:1)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Com isso dispomos de uma classe &lt;b&gt;Retangulo&lt;/b&gt;, que modela adequadamente as entidades deste tipo e cujas instâncias podem representar convenientemente salas retangulares, provendo os serviços de cálculo da área e do perímetros destas salas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Modelagem do programa&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O programa mais simples que permite resolver o problema de determinar a área e o perímetro de uma sala retangular precisa:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ol&gt;
&lt;li&gt;obter as medidas da sala (comprimento e largura), solicitando-as para o usuário;&lt;/li&gt;
&lt;li&gt;criar um objeto de tipo &lt;b&gt;Retangulo&lt;/b&gt; com as medidas dadas;&lt;/li&gt;
&lt;li&gt;obter a área e o perímetro da sala por meio do uso do objeto &lt;b&gt;Retangulo&lt;/b&gt;;&lt;/li&gt;
&lt;li&gt;exibir os resultados (área e o perímetro da sala).&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma classe denominada &lt;b&gt;APS&lt;/b&gt; (Área e Perímetro da Sala) é um programa Java válido se contiver um método &lt;i&gt;main(String[])&lt;/i&gt;, como o que segue, que realiza as ações listadas acima.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import java.util.Scanner;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class APS {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static void main(String[] args) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // obtém medidas da sala&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Scanner teclado = new Scanner(System.in);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.print(&quot;Sala--comprimento: &quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; double comprimento = teclado.nextDouble();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.print(&quot;Sala--largura: &quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; double largura = teclado.nextDouble();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // cria objeto Retangulo&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Retangulo sala = new Retangulo(comprimento, largura);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // obtém área e perímetro da sala&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; double area = sala.area();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; double perimetro = sala.perimetro();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // exibe resultados&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;Sala--area = &quot; + area);&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;Sala--perimetro = &quot; + perimetro);&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // finalização do programa&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; teclado.close();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Quando executado, este programa produz resultados como:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;gt;java APS&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Sala--comprimento: 4,3&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Sala--largura: 2,75&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Sala--area = 11.825&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Sala--perimetro = 14.1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Considerações finais&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Embora simples, esta solução permite o cálculo da área e do perímetros de uma sala retangular. Além disso, devemos observar que:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;A classe &lt;b&gt;APS &lt;/b&gt;realiza a interação com o usuário, ou seja, solicita valores e exibe resultados.&lt;/li&gt;
&lt;li&gt;A classe &lt;b&gt;APS &lt;/b&gt;não tem conhecimento de como os resultados são obtidos (como são calculados), mas utiliza um objeto de outra classe (&lt;b&gt;Retangulo&lt;/b&gt;) que é capaz de realizar tais cálculos.&lt;/li&gt;
&lt;li&gt;A classe &lt;b&gt;APS &lt;/b&gt;é como um cliente da classe &lt;b&gt;Retangulo&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;A classe &lt;b&gt;Retangulo &lt;/b&gt;não realiza qualquer interação com usuário (não existe leitura de valores ou exibição de mensagens), possibilitando seu uso por qualquer tipo de programa (de console, GUI ou web).&lt;/li&gt;
&lt;li&gt;Cada classe tem suas próprias responsabilidades: mudanças na interação com usuário não afetam a classe &lt;b&gt;Retangulo&lt;/b&gt;; mudanças na classe &lt;b&gt;Retangulo &lt;/b&gt;- desde que não modifiquem sua interface - não afetam seus clientes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Esta divisão de responsabilidades acaba por criar uma organização dos elementos da aplicação, isto é, das classes componentes deste sistema que é conhecida como organização em camadas, uma arquitetura bastante conhecida e consagrada.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A figura que segue ilustra o modelo de camadas tradicional:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhudqefT7Y58KeflxIe5pm5t__idj5oq-cY2GK-CTG0p1EOU6YesP8IhUt4NVDbzIBv0vq9ycLN8wjj-XzG_cJEM3wnIg2qPBrcRplbnhBqf2GkUtjKs3WhyphenhyphenSND2IY2hF0WNl9PM-UFXzk/s1600/camadas.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;363&quot; data-original-width=&quot;463&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhudqefT7Y58KeflxIe5pm5t__idj5oq-cY2GK-CTG0p1EOU6YesP8IhUt4NVDbzIBv0vq9ycLN8wjj-XzG_cJEM3wnIg2qPBrcRplbnhBqf2GkUtjKs3WhyphenhyphenSND2IY2hF0WNl9PM-UFXzk/s320/camadas.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Considerando apenas as camadas não opcionais, temos:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Presentation Layer&lt;/i&gt;, ou &lt;i&gt;Camada de Apresentação&lt;/i&gt;, que é responsável pela interação da aplicação com seus usuários. Esta camada contém a interface da aplicação.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Logic Layer&lt;/i&gt;, ou &lt;i&gt;Camada de Lógica&lt;/i&gt; ou &lt;i&gt;de Regras de Negócio&lt;/i&gt;, contém os elementos necessários para a realização das operações e transações requeridas pela aplicação.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Persistence Layer&lt;/i&gt;, ou &lt;i&gt;Camada de Persistência&lt;/i&gt;, tem como responsabilidade prover os serviços de armazenamento e recuperação dos dados da aplicação, envolvendo bancos de dados, sistemas de arquivos e outros elementos presentes em sistemas locais, em rede, centralizados ou em nuvem.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nosso exemplo é aderente a esta arquitetura, pois:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Classe &lt;b&gt;APS &lt;/b&gt;constitui a camada de apresentação da aplicação, interagindo com o usuário na obtenção de dados e exibição de resultados.&lt;/li&gt;
&lt;li&gt;Classe &lt;b&gt;Retangulo &lt;/b&gt;faz parte da camada de lógica, pois é responsável pelas operações da aplicação (cálculo da área e do perímetro de salas retangulares).&lt;/li&gt;
&lt;li&gt;Não existem elementos da camada de persistência, pois nossa aplicação não armazena dados, o que revela uma fragilidade justificável por sua simplicidade.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um outro aspecto importante deste exemplo é que a utilização de um objeto por parte de um segundo objeto pode indicar uma associação entre tais objetos, ou seja um vínculo ou um relacionamento. Este é o assunto do próximo post!&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-f-13.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-f-13.html&quot;&gt;POO-F-13-Tratamento de exceções&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com.br/2018/02/poo-p-15.html&quot;&gt;POO-P-15-Associações&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-14.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/02/poo-p-14.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-8913106858067854784</guid><pubDate>Mon, 19 Feb 2018 03:00:00 +0000</pubDate><atom:updated>2018-02-22T08:52:46.207-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Fundamentos-13-Tratamento de exceções</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-12.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-12.html&quot;&gt;POO-F-12-Exceções e seu tratamento&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-14.html&quot;&gt;POO-P-14-Objetos que usam objetos&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-13.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;As linguagens OO modernas utilizam as exceções para realizar o tratamento de qualquer situação anormal ou erro no código dos programas. As exceções são objetos especiais que sinalizam a ocorrência de problemas que devem ser tratados pelo programador, possibilitando a criação de código mais robusto e também seguro.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como vimos, no Java, as exceções são objetos da família da classe &lt;b&gt;java.lang.Exception&lt;/b&gt;, que tanto sinalizam a ocorrência de uma anormalidade, como também carregam informações adicionais sobre o problema encontrado. Embora a ocorrência das exceções, como o próprio nome indica, não seja algo normal ou desejado, são previsíveis no projeto como o recebimento de argumentos inválidos, entradas de dados inconsistentes, recursos (arquivos ou urls) não encontrados ou indisponíveis, assim como o time-out das operações executadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O tratamento de exceções é, portanto, uma necessidade da programação OO.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Fluxo do tratamento de exceções&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso das exceções envolve um ciclo de tratamento simples: identificação do problema, criação, lançamento e tratamento.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h3&gt;
Identificação do problema&lt;/h3&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Vários tipos de problemas podem ocorrer durante a execução de um problema, como um dado que não é validado ou um recurso não localizado ou indisponível. Se o problema pode ser resolvido localmente, não precisamos lançar mão do mecanismo de exceções.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h3&gt;
Criação de exceção&lt;/h3&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Mas quando o problema detectado não pode ser resolvido no mesmo local (no mesmo método ou contexto onde foi identificado), deve ser criada uma exceção, do tipo adequado, eventualmente com informações adicionais do problema. A criação de uma exceção é uma operação de instanciação, que envolve o operador &lt;b&gt;new &lt;/b&gt;e a classe de exceção selecionada [4][7]. As exceções criadas podem ser do tipo monitorado (&lt;i&gt;checked exception&lt;/i&gt;) ou não monitorado (&lt;i&gt;unchecked exception&lt;/i&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h3&gt;
&lt;br /&gt;Lançamento de exceção&lt;/h3&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
De posse de um objeto de exceção de qualquer tipo, é possível lançar tal exceção (&lt;i&gt;to throw an exception&lt;/i&gt;), com uso da diretiva &lt;i&gt;throw&lt;/i&gt;. Isto provoca a entrega do objeto de exceção lançado por &lt;i&gt;throw &lt;/i&gt;no trecho de código do contexto superior (método que invocou a execução do método onde o problema foi encontrado) [4][7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h3&gt;
Tratamento de exceção&lt;/h3&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nos locais do código onde podem ser lançadas exceções não monitoradas (&lt;i&gt;unchecked exceptions&lt;/i&gt;), o programador pode optar pelo seu tratamento local (no contexto de sua ocorrência), pela indicação explícita de seu lançamento (para o contexto superior), ou mesmo não fazer nada (que é prática ruim).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Aqui vale lembrar que caso uma exceção, de qualquer tipo, alcance o nível da JVM, que corresponde ao contexto mais alto, pois ela acionou o programa, a execução é interrompida imediatamente e sinalizada para o usuário [7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Quando são lançadas exceções monitoradas (&lt;i&gt;checked exceptions&lt;/i&gt;), o programador deve optar ou pelo seu tratamento local, ou pela indicação explícita de seu lançamento para o contexto superior. Assim as exceções monitoradas exigem melhores práticas de programação!&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se a opção for o lançamento explícito, o método onde a exceção ocorre deverá empregar uma cláusula &lt;i&gt;throw&lt;/i&gt; para indicar o lançamento da exceção, como visto no &lt;i&gt;post&lt;/i&gt; anterior &lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-12.html&quot;&gt;Exceções e seu lançamento&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se a opção for o tratamento local, será necessário apanhar a exceção (&lt;i&gt;to catch an exception&lt;/i&gt;) com uso de diretivas &lt;i&gt;try&lt;/i&gt; associadas com cláusulas &lt;i&gt;catch&lt;/i&gt; ou &lt;i&gt;finally&lt;/i&gt;, como segue.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
&lt;br /&gt;Tratamento de Exceções&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para tratarmos as exceções usamos a diretiva try, que em sua forma mais simples, emprega cláusulas &lt;i&gt;catch&lt;/i&gt;, com a sintaxe abaixo:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;try {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// bloco de código monitorado&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;} catch (Exception e) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// bloco de código de tratamento&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Cada par de chaves { e } delimita um bloco de código.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Aquele que segue a diretiva &lt;i&gt;try &lt;/i&gt;é considerado o bloco de código monitorado, no qual se localizam as instruções do programa (acionamento de métodos ou outras operações) onde pode ocorrer uma ou mais exceções.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O outro bloco, que segue a cláusula &lt;i&gt;catch&lt;/i&gt;, é o bloco de tratamento de exceções, onde as exceções de um tipo específico são apanhadas e tratadas com o código ali presente.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As exceções lançadas no bloco de código não monitorado que não apanhadas pelo bloco de tratamento de exceções seguem o fluxo usual para o contexto superior.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se não ocorre qualquer exceção no bloco de código monitorado (bloco &lt;i&gt;try&lt;/i&gt;), o bloco &lt;i&gt;catch&lt;/i&gt; não é executado, ou seja, a execução sem exceções do programa desvia do bloco &lt;i&gt;catch&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Mas quando ocorre uma exceção no bloco &lt;i&gt;try&lt;/i&gt;, a execução é imediatamente desviada para o bloco &lt;i&gt;catch&lt;/i&gt; que trata o tipo específico da exceção.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Em ambos os casos a execução continua após a diretiva &lt;i&gt;try/catch&lt;/i&gt;, exceto quando são executadas operações de retorno, ou ocorre o encerramento do programa, ou ainda novas exceções são lançadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observe o programa Java que segue, onde o método main converte o primeiro argumento recebido, de &lt;b&gt;String&lt;/b&gt; para inteiro, exibindo uma contagem simples.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Contagem {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static void main (String args[]) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; int max = Integer.parseInt(args[0]);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i=0; i&amp;lt;max; i++) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.print(i + &quot; &quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Neste programa, se o usuário não fornece um argumento ou fornece um argumento inválido (que não corresponde a um valor inteiro), o programa é interrompido, com a exibição de várias mensagens que podem confundir o usuário.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por exemplo, execução do programa &lt;b&gt;Contagem &lt;/b&gt;sem argumentos:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;gt;java Contagem&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Exception in thread &quot;main&quot; java.lang.ArrayIndexOutOfBoundsException: 0&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at Contagem.main(Contagem.java:3)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ou, outro exemplo, execução do programa &lt;b&gt;Contagem&lt;/b&gt; com um argumento inválido:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;gt;java Contagem Jandl&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Exception in thread &quot;main&quot; java.lang.NumberFormatException: For input string: &quot;Jandl&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at java.base/java.lang.Integer.parseInt(Integer.java:652)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at java.base/java.lang.Integer.parseInt(Integer.java:770)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; at Contagem.main(Contagem.java:3)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Neste exemplo, se o usuário não fornece um argumento válido na linha de comando, podem ocorrer dois tipos de exceção na linha:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int max = Integer.parseInt(args[0]);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se não existe argumento (nada é digitado além do nome da classe), ocorre a exceção: &lt;b&gt;ArrayIndexOutOfBoundsException&lt;/b&gt;, que mostra que tentamos usar uma posição do &lt;i&gt;array &lt;/i&gt;cujo índice não é válido (no caso o índice 0 que corresponde ao primeiro argumento.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se o argumento existe mas é inválido (não corresponde a um valor inteiro), ocorre a exceção: &lt;b&gt;NumberFormatException&lt;/b&gt;, que indica que a conversão realizada não pode ser concluída devido ao argumento incorreto fornecido (no caso o valor que o usuário digitou).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para resolver o problema, a linha onde ocorre a exceção deve ser substituída por um trecho que inclua o tratamento de erro. Ou seja, deveríamos substituir:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int max = Integer.parseInt(args[0]);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Pelo trecho dado a seguir:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int max = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;try {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;max = Integer.parseInt(args[0]);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;} catch (Exception e) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// tratamento da exceção&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Com isso, uma opção melhor para obtermos um programa mais robusto e adequado para o usuário seria como segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Contagem {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static void main (String args[]) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; int max = 0; // use zero ou outro valor default&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// código que ESTÁ sujeito a exceções&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; try {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;max = Integer.parseInt(args[0]);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// tratamento da exceção&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&quot;É necessário um argumento inteiro válido!&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.exit(-1); // finalização do programa devido ao erro&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// código que NÃO ESTÁ está sujeito a exceções&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i=0; i&amp;lt;max; i++) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.print(i + &quot; &quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Com este programa, caso não seja fornecido um argumento ou caso seja inválido, será exibida uma mensagem melhor para o usuário, como nos exemplos que seguem:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;gt;java Contagem&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;É necessário um argumento inteiro válido!&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;gt;java Contagem Jandl&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;É necessário um argumento inteiro válido!&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;gt;java Contagem 7&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;0 1 2 3 4 5 6&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nesta situação, foi escolhido o tratamento de &lt;b&gt;Exception&lt;/b&gt;, o tipo mais genérico de exceção, que inclui todas as outras, ou seja, inclui as exceções específicas deste programa que são &lt;b&gt;ArrayIndexOutOfBoundsException &lt;/b&gt;e &lt;b&gt;NumberFormatException&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Note que o uso de exceções evita poluir o código que se deseja executar com testes e validações diversas, feitas com diretivas &lt;i&gt;if&lt;/i&gt; e &lt;i&gt;switch&lt;/i&gt;, além de funções de validação. O bloco de código monitorado contém a sequência de instruções necessárias ao programa, construída para quando tudo está correto. Se ocorrem problemas, a execução é desviada para o bloco de tratamento de erros, que apenas lida com o problema encontrado.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Tratamento seletivo de exceções&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outro aspecto muito positivo da diretiva &lt;i&gt;try&lt;/i&gt; é que são permitidas várias cláusulas &lt;i&gt;catch&lt;/i&gt;, para exceções diferentes. Assim é possível atrelar dois ou mais blocos de tratamento diferentes para o tratamento de cada exceção possível.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A única regra para isso é primeiro apanhar as exceções mais específicas e depois as mais genéricas, assim tratar a exceção &lt;b&gt;Exception&lt;/b&gt; será sempre a última opção, quando necessário.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O programa &lt;b&gt;Contagem &lt;/b&gt;agora pode ter um tratamento de exceções bem sofisticado.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Contagem {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static void main (String args[]) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; int max = 0; // use zero ou outro valor default&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// código que ESTÁ sujeito a exceções&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; try {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;max = Integer.parseInt(args[0]);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// tratamento de um tipo exceção&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (ArrayIndexOutOfBoundsException e) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;System.out.println(“Faltou argumento.”);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;max = 3; // aqui usamos um valor default,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// sem finalizar o programa&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// tratamento de outro tipo exceção&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (NumberFormatException e) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(“Argumento invalido.”);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;System.exit(-1); // aqui finalizamos o programa&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// código que NÃO ESTÁ está sujeito a exceções&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i=0; i&amp;lt;max; i++) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.print(i + &quot; &quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observe que cada exceção possível de ocorrer tem um trecho de código associado, por meio de cláusula &lt;i&gt;catch&lt;/i&gt;, que realiza seu tratamento. Apenas um bloco &lt;i&gt;catch&lt;/i&gt; é executado, sendo desviados os demais. Outro aspecto positivo é não não necessários testes (com diretivas &lt;i&gt;if&lt;/i&gt; ou &lt;i&gt;switch&lt;/i&gt;) para determinar o tipo de erro e selecionar seu tratamento.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se o trecho de código do tratamento torna-se grande, pode ser criado um método de tratamento específico, que separa ainda mais a ocorrência do erro de seu tratamento.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Objetos de exceção apanhados&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Deve ser observado que a variável e declarada nos blocos de tratamento de exceção, pode ter qualquer nome determinado pelo programador, como &lt;i&gt;exc&lt;/i&gt;, &lt;i&gt;excecao &lt;/i&gt;ou outro.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Esta variável permite o acesso e uso do objeto exceção apanhado, o que permite, por exemplo, obter uma &lt;b&gt;String&lt;/b&gt; com a mensagem de erro associada ao tipo da exceção:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;String msg = e.getMessage();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Tais mensagens podem conter detalhes que podem tanto ser exibidos para o usuário, quando é conveniente e adequado fornecer informações adicionais do problema; como também armazenados em arquivos de registro (&lt;i&gt;logs&lt;/i&gt;), para análise posterior.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Também é possível imprimir a rota da exceção no console, isto é, o caminho percorrido pelo programa até a ocorrência da exceção:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;e.printStackTrace();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Tal rota também pode ser obtida e processada de outras maneiras, mas isto deixa de ser básico e foge ao escopo desta lição!&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Considerações finais&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As exceções permitem um tratamento simples do ponto de vista de programação, mas bastante sofisticado quando consideradas as escolhas possíveis entre seu tratamento local e seu envio para contextos superiores.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Recomenda-se que a ocorrência de erros sempre seja sinalizada com o lançamento de exceções, o que possibilita a separação clara entre o código normal (aquele executado na ausência de erros) e o código de tratamento de erros. Novamente é necessário que tal separação é uma grande vantagem, pois permite, a partir do ponto onde ocorreu exceção, desviar o fluxo de processamento para um contexto superior ou outro ponto mais adequado do programa; mas sem uso de variáveis globais, funções de erro, códigos de erro genéricos e outras técnicas improvisadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O tratamento seletivo de erros também possibilita melhor organização do código, o que facilita seu reuso e, principalmente, sua manutenção.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-12.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-12.html&quot;&gt;POO-F-12-Exceções e seu tratamento&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-p-14.html&quot;&gt;POO-P-14-Objetos que usam objetos&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-13.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/02/poo-f-13.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-5775305348961414719</guid><pubDate>Thu, 15 Feb 2018 02:00:00 +0000</pubDate><atom:updated>2018-03-28T23:51:54.068-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Fundamentos-12-Exceções e seu lançamento</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-11.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-11.html&quot;&gt;POO-F-11-Autorreferência this&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-13.html&quot;&gt;POO-F-13-Tratamento de exceções&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-12.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Na plataforma de programação Java, assim como em outras linguagens OO modernas, a política de tratamento de problemas ocorridos durante a execução de um programa utiliza a estratégia de criação, lançamento e tratamento de exceções e erros.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ917Q2oIJy2VFVsuf3QslgW1XImc61D7ixf4khVFH_MEb2pJmZH3Y5cXRv3YclMVktJRa7hgPkqp1hHoIi7yPZJuER3nHdvO_buMK-CkViNlkRTpeUmHxN3Ldx50eRRMET6TVIS-ONFQ/s1600/java-try-catch.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;328&quot; data-original-width=&quot;754&quot; height=&quot;139&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ917Q2oIJy2VFVsuf3QslgW1XImc61D7ixf4khVFH_MEb2pJmZH3Y5cXRv3YclMVktJRa7hgPkqp1hHoIi7yPZJuER3nHdvO_buMK-CkViNlkRTpeUmHxN3Ldx50eRRMET6TVIS-ONFQ/s320/java-try-catch.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Então, é essencial realizar a distinção entre:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Exceções, que são problemas de severidade variável, tratáveis pelo programador; e&lt;/li&gt;
&lt;li&gt;Erros, problemas de severidade alta que não tratáveis pelo programador.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Exceções e Erros&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma exceção (&lt;i&gt;exception&lt;/i&gt;) é um objeto especial, de uma classe específica pertencente a hierarquia da API Java, a classe &lt;b&gt;Exception &lt;/b&gt;do pacote &lt;i&gt;java.lang&lt;/i&gt;, que é destinada a sinalização de situações que podem ser tratadas pelo programador [4][7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isto significa que &lt;i&gt;uma exceção indica a ocorrência de uma anormalidade no código&lt;/i&gt;, a qual poderia ser solucionada pelo próprio programa, por meio do uso de um dado alternativo, de uma outra estratégia de cálculo, pela obtenção de um novo dado junto ao usuário do programa, ou eventualmente outra ação considerada apropriada.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um erro (&lt;i&gt;error&lt;/i&gt;) é também um objeto especial, de outra classe específica pertencente a hierarquia Java que é &lt;b&gt;java.lang.Error&lt;/b&gt;, mas reservada para indicar situações severas ou complexas, que não deveriam ser tratadas pelo programador [4][7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim, um erro ocorrido durante a execução do código muito provavelmente não pode ser solucionado pelo próprio programa, pois pode ter origem num defeito do hardware, num problema junto ao sistema operacional ou ainda na própria máquina virtual Java (JVM).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Enquanto uma exceção pode estar relacionada a um problema previsível, que pode ser resolvido com algum cuidado extra no projeto do sistema; um erro é uma situação rara, imprevista, severa e crítica, cuja prudência recomenda apenas informar o ocorrido e parar imediatamente o programa.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As exceções (exceptions) geralmente estão relacionadas a situações que, embora anormais, são previsíveis no projeto como o recebimento de argumentos inválidos, entradas de dados inconsistentes, recursos (arquivos ou urls) não encontrados ou indisponíveis, assim como o time-out das operações executadas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Já os erros (errors) estão sempre associados a situações anormais, atípicas e não previsíveis pelo programador, tais como erros internos da JVM, falhas oriundas do mal funcionamento do hardware (processador e memória), defeitos (bugs) no sistema operacional, assim inconsistências decorrentes de ataques ao sistema.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por conta disso, o termo tratamento de exceções é visto com frequência, sendo uma necessidade comum da programação. Já o tratamento de erros é raro e, por esta razão, não será tratado neste material.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;h4&gt;
A classe Throwable&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Na hierarquia de classes da API Java existe a classe &lt;b&gt;Throwable&lt;/b&gt;, do pacote &lt;i&gt;java.lang&lt;/i&gt;, que é a superclasse de todos os erros e exceções da linguagem Java, como mostra a figura que segue. Apenas objetos deste tipo ou de suas subclasses são lançados pela JVM e podem ser lançados pelo uso da diretiva &lt;i&gt;throw&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU3zwEqyJyxNWagfojIPoNofhyphenhyphenmyt1y6lAD3_3Fma4WhzCfTuge5KblGMbiu8ZVKi1GtQOwG8-y7S1y15ysZEDnWduRnqFL38d5BzGI6dhGieF7SrKmzqZ-atNmhwGZdqasdxZnHGo8Ko/s1600/java-throwable-hierarchy.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;243&quot; data-original-width=&quot;346&quot; height=&quot;224&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU3zwEqyJyxNWagfojIPoNofhyphenhyphenmyt1y6lAD3_3Fma4WhzCfTuge5KblGMbiu8ZVKi1GtQOwG8-y7S1y15ysZEDnWduRnqFL38d5BzGI6dhGieF7SrKmzqZ-atNmhwGZdqasdxZnHGo8Ko/s320/java-throwable-hierarchy.gif&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
De maneira análoga, apenas objetos deste tipo, ou de suas subclasses, podem ser apanhados por cláusulas &lt;i&gt;catch&lt;/i&gt;, que fazem parte da diretiva &lt;i&gt;try&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A diretiva &lt;i&gt;try &lt;/i&gt;e a cláusula &lt;i&gt;catch&lt;/i&gt;, ou simplesmente &lt;i&gt;try/catch&lt;/i&gt;, compõem uma das formas mais comuns do tratamento de exceções. Já a diretiva &lt;i&gt;throw &lt;/i&gt;serve para que um programa sinalize a ocorrência de uma situação anormal por meio de do lançamento de uma exceção [7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Funcionamento das exceções&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As exceções são criadas nos locais onde as situações problemáticas são encontradas no código do programa. Assim, como qualquer objeto, as exceções devem ser criadas e depois lançadas para o contexto superior (trecho de código que invocou a execução do trecho específico onde o problema foi encontrado) [7]. A figura que segue ilustra o funcionamento das exceções.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0GI__krEs56pYCekFUAu-9dYWUZXDpeZKUckKHXVRfKf_UFz72ozZKvcNGiMmrdisr___U4o00U751LPGBr2qv-VjcKOfdfwe2vPF_42VkDtvvrYAHwLwqlYcb_Lxes7mXWvcXWTvQas/s1600/exce%25C3%25A7%25C3%25B5es-mecanismo.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;290&quot; data-original-width=&quot;432&quot; height=&quot;214&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0GI__krEs56pYCekFUAu-9dYWUZXDpeZKUckKHXVRfKf_UFz72ozZKvcNGiMmrdisr___U4o00U751LPGBr2qv-VjcKOfdfwe2vPF_42VkDtvvrYAHwLwqlYcb_Lxes7mXWvcXWTvQas/s320/exce%25C3%25A7%25C3%25B5es-mecanismo.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isto significa que as exceções podem ser monitoradas e tratadas em locais diferentes do código (em diferentes contextos superiores), ou seja, a ocorrência anormal pode ser tratada em outro local específico do código do programa, melhorando sua organização.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A ideia central é que quando um erro ou problema ocorre, é criada e lançada uma exceção (&lt;i&gt;to throw an exception&lt;/i&gt;). A exceção é sempre lançada para um contexto superior, isto é, para quem acionou o trecho de código problemático, separando o problema de seu tratamento. Para tratar uma exceção é necessário apanhá-la (&lt;i&gt;to catch an exception&lt;/i&gt;). Exceções apanhadas podem ser relançadas para outro contexto superior. Caso o contexto mais alto alcance o nível da JVM, nível onde o programa foi acionado, a execução é interrompida imediatamente e sinalizada para o usuário [7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A grande vantagem do uso do lançamento e tratamento de exceções é a possibilidade de colocar o tratamento do problema em contextos (ou escopos) diferentes. Assim, seu emprego evita o uso de códigos de erro genéricos; ou de variáveis globais para sinalização, identificação e tratamento de erros. A experiência já mostrou que o tratamento de exceções é uma estratégia muito flexível para lidar com os problemas do código de qualquer programa [4][7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Classes de exceção&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Existem muitas classes de exceção no Java, mas a classe básica é &lt;b&gt;java.lang.Exception&lt;/b&gt;, que indica um problema de natureza geral. Todas as demais classes de exceção são derivadas de &lt;b&gt;Exception&lt;/b&gt;, por isso tem sempre o sufixo &lt;b&gt;Exception&lt;/b&gt; em seus nomes, como nos exemplos que seguem, onde os nomes dos tipos das exceções também indicam seu propósito específico:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;ArrayIndexOutOfBoundsException&lt;/b&gt;, sinaliza o uso de índices inválidos em arrays;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IOException&lt;/b&gt;, indica problemas em operações de entrada e saída;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NullPointerException&lt;/b&gt;, ocorre quando uma referência nula (&lt;i&gt;null&lt;/i&gt;) é usada ao invés de um objeto válido;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NumberFormatException&lt;/b&gt;, aponta problemas de representação (formato) de valores numéricos;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RuntimeException&lt;/b&gt;, serve para indicar erros gerais durante a execução de um trecho do código do programa.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A exceção &lt;b&gt;java.lang.RuntimeException&lt;/b&gt; é bastante importante, pois toda a família derivada desta exceção tem tratamento opcional, ou seja, são exceções consideradas não monitoradas (&lt;i&gt;unchecked exceptions&lt;/i&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Lançamento de exceções com cláusula throw&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para lançar uma exceção basta instanciar um objeto de exceção to tipo desejado e lançá-lo, por exemplo:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;throw new Exception();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Usualmente as classes de exceção aceitam mensagens como argumento de seus construtores, como:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;throw new NumberFormatException(“Valor inválido”);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Tais mensagens podem incluir detalhes do problema ocorrido, que podem ser usados em na parte do programa destinada ao tratamento da exceção.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim, na ocorrência de um problema na execução do código, sugere-se fortemente o lançamento de uma exceção de tipo adequado, que pode ser escolhida entre as muitas existentes na API Java.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Tipos de exceções&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Existem dois tipos de exceções: as exceções não monitoradas (&lt;i&gt;unchecked exceptions&lt;/i&gt;) e as exceções monitoradas (&lt;i&gt;checked exceptions&lt;/i&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As exceções não monitoradas (&lt;i&gt;unchecked exceptions&lt;/i&gt;) são aquelas em que o tratamento com &lt;i&gt;try/catch &lt;/i&gt;não é obrigatório. Estas exceções são implicitamente lançadas por diversos métodos presentes na API Java (o compilador não faz menção a sua ocorrência), assim como por métodos que podem ser criados pelos programadores. De alguma forma, sinalizam problemas eventuais, considerados de menor severidade.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Já as exceções monitoradas (&lt;i&gt;checked exceptions&lt;/i&gt;) são aquelas em que o tratamento com &lt;i&gt;try/catch&lt;/i&gt; é obrigatório, pois sua severidade é maior, requerendo tratamento. Estas exceções são explicitamente lançadas por muitos métodos presentes na API Java, de modo que o compilador indica como erro a ausência de tratamento próprio. Como antes, o programador pode criar métodos que lancem este tipo de exceção.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Independentemente de serem monitoradas ou não monitoradas, todas as exceções do Java, quando ocorrem, são lançadas para o contexto superior e, se alcançam a JVM, provocam a interrupção do programa. Apenas o tratamento é considerado opcional no caso de exceções não monitoradas (&lt;i&gt;unchecked exceptions&lt;/i&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Lançamento de exceções não monitoradas&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O código dos programas Java tipicamente se encontra distribuído nos métodos que compõem as classes dos objetos usados. Assim, quando o código de um método produz ou (explicitamente) lança exceções não monitoradas, não é obrigatório o tratamento local nem a indicação explícita de seu lançamento, como no método&amp;nbsp;&lt;i&gt;converteESoma(String, String)&lt;/i&gt;, que segue, que recebe dois argumentos do tipo &lt;b&gt;String&lt;/b&gt;, convertendo-se em números reais e retornando sua soma.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public double converteESoma(String s1, String s2) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double d1 = Double.parseDouble(s1);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double d2 = Double.parseDouble(s2);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;return d1 + d2;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Dois tipos de exceções podem ser lançadas por este método:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;NullPointerException&lt;/b&gt;, quando o argumento &lt;i&gt;s1&lt;/i&gt;, ou o argumento &lt;i&gt;s2&lt;/i&gt; é &lt;i&gt;null&lt;/i&gt;, isto é, não indica um objeto válido;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NumberFormatException&lt;/b&gt;, quando o argumento &lt;i&gt;s1&lt;/i&gt;, ou o argumento &lt;i&gt;s2&lt;/i&gt; é um objeto válido do tipo &lt;b&gt;String&lt;/b&gt;, mas que não tem o formato adequado de um número em ponto flutuante ou inteiro.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A primeira exceção ocorre se fizermos:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;converteESoma(null, &quot;13&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;converteESoma(&quot;-7.56&quot;, null);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;converteESoma(null, null);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Já a segunda exceção ocorre quando algum dos argumentos não é uma &lt;b&gt;String &lt;/b&gt;com um número válido:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;converteESoma(&quot;&quot;, &quot;64&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;converteESoma(&quot;19.85&quot;, &quot;dois&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;converteESoma(&quot;0,23534&quot;, &quot;3/4&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observe que no código deste método, o lançamento destes dois tipos de exceção é implícito, ou seja, sem o uso da diretiva &lt;i&gt;throw&lt;/i&gt;. Além disso, o código do método não trata a ocorrência destas exceções, nem faz qualquer indicação de seu lançamento.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isto é possível porque as exceções lançadas são do tipo não monitorado (&lt;i&gt;unchecked exceptions&lt;/i&gt;), que não exigem o tratamento da exceção ou indicação explícita de seu lançamento.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nestas situações o programador deve avaliar e antever as possibilidades de ocorrências de exceções em métodos como este.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Uso da cláusula throws&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A cláusula &lt;i&gt;throws&lt;/i&gt; pode ser aplicada em um método para indicar explicitamente as exceções possivelmente lançadas em seu código, desobrigando seu tratamento local, quaisquer sejam seus tipos (&lt;i&gt;checked&lt;/i&gt; ou &lt;i&gt;unchecked&lt;/i&gt;). O mesmo método &lt;i&gt;converteESoma(String, String)&lt;/i&gt; poderia ser modificado como:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public double converteESoma(String s1, String s2)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; throws NumberFormatException, NullPointerException {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double d1 = Double.parseDouble(s1);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double d2 = Double.parseDouble(s2);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;return d1 + d2;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A cláusula throws, que segue a lista de argumentos do método, lista as exceções, monitoradas ou não monitoradas, que podem ser lançadas pelo método. Isto auxilia o programador a prever os problemas decorrentes do uso do método, além de desonerar o tratamento das exceções listadas no código do próprio método.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No caso de exceções não monitoradas (&lt;i&gt;unchecked exceptions&lt;/i&gt;), sua indicação com a cláusula &lt;i&gt;throws &lt;/i&gt;não é obrigatória, mas torna explícito seu lançamento possível, auxiliando o programador.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No caso de exceções monitoradas (&lt;i&gt;checked exceptions&lt;/i&gt;), sua indicação com a cláusula &lt;i&gt;throws&lt;/i&gt; é obrigatória quando não são tratadas no código do método.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Lançamento de exceções monitoradas&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No código dos métodos das classes de um programa também podem ocorrer exceções monitoradas (&lt;i&gt;checked exceptions&lt;/i&gt;), isto é, situações anormais que devem ser tratadas pelo programador. Exemplos deste tipo de exceção são as operações de entrada e saída envolvendo o sistema de arquivos, ou de escrita e leitura em dispositivos de rede.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se o código de um método produz exceções monitoradas, ou tais exceções são tratadas localmente, ou são explicitamente indicadas com o uso da cláusula &lt;i&gt;throws&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No exemplo que segue, o método &lt;i&gt;contaLinhasArquivo(String)&lt;/i&gt; recebe um argumento do tipo &lt;b&gt;String&lt;/b&gt; contendo o nome do arquivo, abrindo-o e percorrendo-o para a contagem de suas linhas, fechando-o e retornando o resultado.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public int contaLinhasArquivo(String arquivo)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; throws IOException {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;int linhas = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;BufferedReader br = new BufferedReader(&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; new FileReader(arquivo));&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;return linhas;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Embora apenas um fragmento deste método seja exibido para simplificação do exemplo, podemos observar que a operação de abertura do arquivo pode lançar uma exceção do tipo &lt;b&gt;IOException&lt;/b&gt;. Tal exceção é indicada na lista da cláusula thr&lt;i&gt;o&lt;/i&gt;ws do método, explicitando sua ocorrência e adiando seu tratamento para um contexto superior.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se o argumento arquivo, do tipo &lt;b&gt;String&lt;/b&gt;, for &lt;i&gt;null&lt;/i&gt;, poderá ser lançada uma exceção &lt;b&gt;NullPointerException&lt;/b&gt;, mas que é do tipo não monitorada, não requerendo indicação explícita de lançamento, tão pouco tratamento.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se for preferível o tratamento local, surge uma diretiva &lt;i&gt;try/catch&lt;/i&gt;, envolvendo o trecho onde uma exceção a ser tratada pode ocorrer, como esquematizado abaixo.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public int contaLinhasArquivo(String arquivo) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;int linhas = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;try {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; BufferedReader br = new BufferedReader(&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new FileReader(arquivo));&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; :&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;} catch (IOException ioe) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // tratamento de erros&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;return linhas;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Com o tratamento local, não se emprega a cláusula throws para a exceção tratada.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Na próxima lição veremos como efetuar o tratamento de exceções por meio da diretiva &lt;i&gt;try &lt;/i&gt;e suas cláusulas &lt;i&gt;catch &lt;/i&gt;e &lt;i&gt;finally&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-11.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-11.html&quot;&gt;POO-F-11-Autorreferência this&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-13.html&quot;&gt;POO-F-13-Tratamento de exceções&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-12.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/02/poo-f-12.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-4744129167945696778</guid><pubDate>Mon, 12 Feb 2018 21:26:00 +0000</pubDate><atom:updated>2018-02-14T22:57:54.358-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Fundamentos-11-Autorreferência this</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-10.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-10.html&quot;&gt;POO-F-10-Pacotes e Namespaces&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-12.html&quot;&gt;POO-F-12-Tratamento de Exceções&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-11.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Todo objeto, em Java, C# ou C++, dispõe de uma referência para si próprio que é representada por meio da palavra reservada &lt;i&gt;this&lt;/i&gt;, conhecida também como referência &lt;i&gt;this &lt;/i&gt;ou autorreferência.&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
A autorreferência &lt;i&gt;this &lt;/i&gt;tem duas aplicações bastante típicas: a primeira é possibilitar a diferenciação de campos da classe de variáveis locais ou parâmetros formais; a segunda é permitir que um método retorne uma referência para o próprio objeto[1][4][5][6][7][9].&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhStRoqoqZI-_pBmWmyck-cN21StuRfhoXYt2PYwptl9xZqFOitzew_YfQ_pkW_74cIFnBs0FJfkJqRGNsar98vOrTgs0jsXvS1Cwu84PimHJ3SoxFUTZIs-JLM6c5PXiy5NwUhHzGmZpQ/s1600/java-this-01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;154&quot; data-original-width=&quot;421&quot; height=&quot;117&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhStRoqoqZI-_pBmWmyck-cN21StuRfhoXYt2PYwptl9xZqFOitzew_YfQ_pkW_74cIFnBs0FJfkJqRGNsar98vOrTgs0jsXvS1Cwu84PimHJ3SoxFUTZIs-JLM6c5PXiy5NwUhHzGmZpQ/s320/java-this-01.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;
Diferenciação de elementos&lt;/h4&gt;
Quando um método de uma classe utiliza métodos ou campos não estáticos da própria classe, implicitamente está sendo usada a referência &lt;i&gt;this &lt;/i&gt;[4][7]. Observe os métodos e os construtores da classe &lt;b&gt;Horario &lt;/b&gt;que segue.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Horario {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// atributos int de acesso restrito (privado)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private int hor, min, seg;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// métodos de acesso (leitura) dos campos restritos&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public int getHoras () { return hor; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public int getMinutos () { return min; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public int getSegundos () { return seg; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// métodos de alteração (escrita) dos campos restritos&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setHoras (int hor) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(hor&amp;lt;0 || hor&amp;gt;23) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Hora invalida: &quot; + hor);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.hor = hor;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setMinutos (int min) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(min&amp;lt;0 || min&amp;gt;59) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Minutos invalido: &quot; + min);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.min = min;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setSegundos (int seg) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(seg&amp;lt;0 || seg&amp;gt;59) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Segundos invalido: &quot; + seg);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.seg = seg;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setHorario (int hor, int min, int seg) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; setHoras(hor); setMinutos(min); setSegundos(seg);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// construtor parametrizado&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Horario (int hor, int min, int seg) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; setHorario(hor, min, seg);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// construtor default&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Horario () {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this(0, 0, 0);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// representação textual dos objetos Hora&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public String toString () {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return String.format(&quot;%02d:%02d:%02d&quot;,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hor, min, seg);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Observe os métodos &lt;i&gt;setHoras(int)&lt;/i&gt;, &lt;i&gt;setMinutos(int)&lt;/i&gt; e &lt;i&gt;setSegundos(int)&lt;/i&gt;: nos três o parâmetro formal declarado tem o mesmo nome do respectivo campo da classe. O uso explícito de &lt;i&gt;this&lt;/i&gt; permite diferenciar variáveis locais dos campos (variáveis-membro) da classe com mesma denominação.&lt;br /&gt;
&lt;br /&gt;
Quando um método declara uma variável local (ou um parâmetro) com o mesmo nome de um campo da classe, a variável local oculta o campo, ou seja, quando tal nome é usado, é acessada a variável local e não o campo da classe. Analise o fragmento de &lt;i&gt;setHoras(int)&lt;/i&gt;:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;if(hor&amp;lt;0 || hor&amp;gt;23) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;Hora invalida: &quot; + hor);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
A variável &lt;i&gt;hor&lt;/i&gt; assim indicada faz referência ao parâmetro formal do método e não ao campo da classe. Ou seja, este código testa o valor recebido pelo método. Se o valor é adequado, é atribuído ao campo da classe, distinguido da variável local por &lt;i&gt;this&lt;/i&gt;:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// campo da classe recebe valor da variável local&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;this.hor = hor;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Quando não existe conflito entre os nomes presentes no escopo de um método, os campos da classe são usados automaticamente [4][7]. Na verdade, nesta situação ocorre o uso implícito da autorreferencia &lt;i&gt;this&lt;/i&gt;, como no método &lt;i&gt;toString()&lt;/i&gt; da classe &lt;b&gt;Horario&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
A figura que segue ilustra o uso de &lt;i&gt;this&lt;/i&gt; numa outra classe.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib5tZ_ea5ka0uS5LeRly52JbuzBlICmTQK4I4lYZZtF_6i5HV9d2gtRbobkctCk8FB7ERLbQTIcL1jXSywOF7mIBwMN7dpZoo-bzE4EtkBvJQXXt2xYht2ZXjgX6ajC-JWMCcErr2dBCY/s1600/java-this-02.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;398&quot; data-original-width=&quot;476&quot; height=&quot;267&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib5tZ_ea5ka0uS5LeRly52JbuzBlICmTQK4I4lYZZtF_6i5HV9d2gtRbobkctCk8FB7ERLbQTIcL1jXSywOF7mIBwMN7dpZoo-bzE4EtkBvJQXXt2xYht2ZXjgX6ajC-JWMCcErr2dBCY/s320/java-this-02.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
A referência &lt;i&gt;this&lt;/i&gt; também permite distinguir construtores sobrecarregados da classe [7], como feito na classe &lt;b&gt;Horario&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
O construtor &lt;i&gt;Horario(int, int, int)&lt;/i&gt; aciona o método público &lt;i&gt;setHorário(int, int, int)&lt;/i&gt;, que por sua vez aciona os métodos &lt;i&gt;setHoras(int)&lt;/i&gt;, &lt;i&gt;setMinutos(int)&lt;/i&gt; e &lt;i&gt;setSegundos(int)&lt;/i&gt;, os quais validam os componentes do horário.&lt;br /&gt;
&lt;br /&gt;
Já o construtor &lt;i&gt;Horario()&lt;/i&gt; aciona o construtor &lt;i&gt;Horario(int, int, int)&lt;/i&gt; por meio do uso de &lt;i&gt;this&lt;/i&gt;, acompanhado dos argumentos desejados:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;this(0, 0, 0);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Deve ser destacado que esse uso de &lt;i&gt;this&lt;/i&gt; só é possível em construtores e quando feito na primeira linha de código do construtor. Ao mesmo tempo, é evitada a repetição de código em construtores, prática benéfica para facilitar a manutenção da classe.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
Retorno da autorreferência&lt;/h4&gt;
Outra aplicação da autorreferência &lt;i&gt;this&lt;/i&gt; é como retorno de métodos da classe [7].&lt;br /&gt;
&lt;br /&gt;
É comum que métodos retornem novos objetos, como por exemplo, o método &lt;i&gt;substring (int ini, int fim)&lt;/i&gt; da classe &lt;b&gt;java.lang.String&lt;/b&gt;, que retorna um novo objeto do tipo &lt;b&gt;String&lt;/b&gt; contendo o fragmento delimitado pelas posições &lt;i&gt;ini&lt;/i&gt; (incluída) e &lt;i&gt;fim&lt;/i&gt; (não incluída) do texto da &lt;b&gt;String&lt;/b&gt;. O método &lt;i&gt;toUpperCase()&lt;/i&gt; retorna um novo objeto &lt;b&gt;String&lt;/b&gt; apenas com maiúsculas. Por exemplo:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Posição&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;6&amp;nbsp; &amp;nbsp; 11&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;//&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;v&amp;nbsp; &amp;nbsp; v&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;String texto1 = &quot;Peter Jandl Junior&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// texto2 recebe &quot;Jandl&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;String texto2 = texto1.substring(6, 11);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// texto3 recebe JANDL&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;String texto3 = texto2.toUpperCase();&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Quando um método retorna um objeto, é possível, no Java e C#, encadear a chamada de métodos ou concatenar suas chamadas, assim pode ser feito:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;String texto1 = &quot;Peter Jandl Junior&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;String texto3 = texto1.substring(6, 11).toUpperCase();&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Aqui é acionado o método &lt;i&gt;substring(int, int)&lt;/i&gt; do objeto &lt;i&gt;texto1&lt;/i&gt; (do tipo &lt;b&gt;String&lt;/b&gt;), e o método &lt;i&gt;toUpperCase()&lt;/i&gt;, no resultado produzido por &lt;i&gt;substring&lt;/i&gt;, que também é do tipo &lt;b&gt;String&lt;/b&gt;. Cada chamada de método da classe &lt;b&gt;String&lt;/b&gt; produz um resultado &lt;b&gt;String&lt;/b&gt; (ou de outro tipo), de modo que o objeto original não é alterado, pois, por definição de projeto, os objetos da class &lt;b&gt;String&lt;/b&gt; são imutáveis.&lt;br /&gt;
&lt;br /&gt;
Mas existem situações onde os objetos são mutáveis, isto é, podem ser alterados, como os objetos do tipo &lt;b&gt;Horário&lt;/b&gt;, dado anteriormente neste &lt;i&gt;post&lt;/i&gt;. Os métodos &lt;i&gt;setHoras(int)&lt;/i&gt;, &lt;i&gt;setMinutos(int)&lt;/i&gt; e &lt;i&gt;setSegundos(int)&lt;/i&gt; têm retorno do tipo &lt;i&gt;void&lt;/i&gt;, portanto não permitem qualquer espécie de encadeamento.&lt;br /&gt;
&lt;br /&gt;
Considere agora a classe &lt;b&gt;Somador&lt;/b&gt; abaixo.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Somador {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// campo privado com total do somador&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private double total;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// construtores parametrizado e default&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Somador(double valorInicial) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; setTotal(valorInicial);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Somador() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this(0);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// método de acesso&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double getTotal() { return total; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// métodos de alteração&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Somador setTotal(double valor) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; total = valor;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return this;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Somador add(double valor) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; total = total + valor;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return this;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// método de produção&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Somador addToNew(double valor) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Somador novo = new Somador(total);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; novo.add(valor);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return novo;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
A classe &lt;b&gt;Somador&lt;/b&gt; tem como propósito representar um somador (ou um totalizador) de valores reais. Os construtores sobrecarregados permitem tanto criar um somador com um valor inicial predeterminado, como um somador default com valor inicial zero, sem repetição de código.&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// somador com valor inicial = 15.4&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Somador s1 = new Somador(15.4);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// somador com valor inicial = zero&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Somador s2 = new Somador();&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Como o campo &lt;i&gt;total&lt;/i&gt; é privado e, portanto, inacessível, o método de acesso &lt;i&gt;getTotal()&lt;/i&gt; permite consultar o valor &lt;i&gt;total&lt;/i&gt; presente do objeto.&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;Somador s1 = &quot; + s1.getTotal());&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;double aux = s2.getTotal();&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Existem também dois métodos de alteração. O método &lt;i&gt;add(double)&lt;/i&gt; permite adicionar o valor do argumento ao total do objeto, mas ao invés de retornar &lt;i&gt;void&lt;/i&gt; (típico de métodos &lt;i&gt;setter&lt;/i&gt;), retorna a referência do próprio objeto com &lt;i&gt;this&lt;/i&gt; (por isso o tipo de retorno de &lt;i&gt;add(double)&lt;/i&gt; é a própria classe &lt;b&gt;Somador&lt;/b&gt;). Isto permite o encadeamento de métodos:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// com encademento&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Somador s3 = new Somador();&amp;nbsp; &amp;nbsp;// total = 0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;s3.add(1.5).add(3.6).add(-1); // total = 4.1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// sem encademento&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Somador s4 = new Somador(); // total = 0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;s4.add(1.5); // total = 1.5&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;s4.add(3.6); // total = 5.1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;s4.add(-1);&amp;nbsp; // total = 4.1&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
É fácil notar que o uso do encadeamento permite obter construções mais simples. Também deve ser notado que o retorno de &lt;i&gt;this&lt;/i&gt; permite que um mesmo objeto seja afetado (alterado) por uma série de operações encadeadas.&lt;br /&gt;
&lt;br /&gt;
Finalmente, a classe &lt;b&gt;Somador&lt;/b&gt; possui o método &lt;i&gt;addToNew(double)&lt;/i&gt; que é considerado de produção porque retorna um novo objeto, sem alterar o objeto inicial. No código deste método, observe a instanciação de um novo somador com o valor total do objeto existente, depois a adição do valor dado como argumento e o retorno da referência deste novo objeto.&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Somador s5 = s4.addToNew(10.9);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// s5 contém 15.0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// s4 continua com 4.1&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Esta estratégia permite criar operações que tanto retornam novos objetos, como mantém inalterados os objetos iniciais, além de possibilitar o encadeamento de operações.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
Considerações finais&lt;/h4&gt;
O uso da autorreferência &lt;i&gt;this&lt;/i&gt; é bastante conveniente, pois além de permitir a diferenciação de campos da classe de variáveis locais, possibilita que a sobrecarga de construtores, evitando a repetição de código.&lt;br /&gt;
&lt;br /&gt;
Outro aspecto do uso de &lt;i&gt;this&lt;/i&gt; é permitir o retorno da referência do próprio objeto, possibilitando o encadeamento de operações sobre o mesmo objeto.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-10.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-10.html&quot;&gt;POO-F-10-Pacotes e Namespaces&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-12.html&quot;&gt;POO-F-12-Tratamento de Exceções&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-11.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Referências Bibliográficas&lt;/h4&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;br /&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;br /&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;br /&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;br /&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;br /&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;br /&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;br /&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;br /&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;br /&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;br /&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/02/poo-f-11.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-5739035034624353987</guid><pubDate>Wed, 07 Feb 2018 22:08:00 +0000</pubDate><atom:updated>2018-02-12T19:27:15.362-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Fundamentos-10-Pacotes e Namespaces</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-09.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-09.html&quot;&gt;POO-F-09-Getters &amp;amp; Setters&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-11.html&quot;&gt;POO-F-11-Autorreferência this&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-11.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;A medida que a quantidade de código necessária para o desenvolvimento de um sistema aumenta, também cresce a possibilidade de que sejam criadas muitas classes com propósitos específicos. Para organizar melhor o código é conveniente separar as classes conforme seu propósito, organizando grupos funcionais que, no futuro, poderão ser mais facilmente compartilhados. Estamos falando dos &lt;i&gt;pacotes &lt;/i&gt;e dos &lt;i&gt;namespaces &lt;/i&gt;[4][6][7].&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlaA3K7Za1f9-7wtrXohvkDaejkzaoWzGVoMa0mdQ1tHIoDLs2h2kI25_6XNsJb8AWquq-lRC-Kn2R9SFutBZ9SVNIh25tPQY3OaqUtu8taN0uwK1-OHCmJ7vLjf_74fHgNf4RByxseuM/s1600/java-packages.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;655&quot; data-original-width=&quot;1133&quot; height=&quot;184&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlaA3K7Za1f9-7wtrXohvkDaejkzaoWzGVoMa0mdQ1tHIoDLs2h2kI25_6XNsJb8AWquq-lRC-Kn2R9SFutBZ9SVNIh25tPQY3OaqUtu8taN0uwK1-OHCmJ7vLjf_74fHgNf4RByxseuM/s320/java-packages.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Pacotes&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No Java é possível agrupar um conjunto de classes por meio da definição de um &lt;i&gt;pacote &lt;/i&gt;(de classes). Os pacotes são implicitamente criados com o uso da palavra reservada &lt;i&gt;package &lt;/i&gt;na construção de classes, pois seus emprego indica que a classe pertence a um pacote específico [4][7]. A diretiva &lt;i&gt;package &lt;/i&gt;deve ser utilizada como primeira linha de um arquivo-fonte Java:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package exemplo;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Ex1 { /* implementação da classe */ }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os pacotes também podem possuir subpacotes (subdivisões) indicados assim:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package exemplo.divisao;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package exemplo.divisao.outradivisao;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A divisão das classes de um projeto em pacotes é uma estratégia de modularização interessante, pois provê o agrupamento de classes semelhantes, facilita sua distribuição e, permite o reuso destes conjuntos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No Java, as regras de nomenclatura sugerem que os pacotes devem utilizar apenas nomes em letras minúsculas, sendo recomendado que pacotes comerciais utilizem o nome reverso do domínio das empresas, das organizações ou dos indivíduos que detêm seus direitos, tais como:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package br.com.novatec.jgp3;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package br.anchieta.si.jandl;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;package br.edu.fatecjd.ads.peter;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os prefixos &lt;i&gt;java &lt;/i&gt;e &lt;i&gt;javax &lt;/i&gt;estão reservados para denotar pacotes pertencentes à API Java, não sendo permitido seu uso. A figura abaixo&amp;nbsp;ilustra a organização dos pacotes do Java. Lá é possível localizar os pacotes:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/java/lang/package-summary.html&quot; target=&quot;_blank&quot;&gt;java.lang&lt;/a&gt;&lt;/i&gt;, que contém as classes fundamentais do Java;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/java/util/package-summary.html&quot; target=&quot;_blank&quot;&gt;java.util&lt;/a&gt;&lt;/i&gt;, com classes e interfaces utilitárias;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/java/io/package-summary.html&quot; target=&quot;_blank&quot;&gt;java.io&lt;/a&gt;&lt;/i&gt;, com classes e interfaces destinadas à entrada e saída;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/javax/swing/package-summary.html&quot; target=&quot;_blank&quot;&gt;javax.swing&lt;/a&gt;&lt;/i&gt;, que contém componentes para interfaces GUI.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTAktjpbG36Xjr81FgvKLZ-PLjPrVxEM4NiFza8iEZR79aYP6EEdOfQL9QuP8iHwY6pneJK-Qwe9yJxdse9ocBWp0t-HOdHfqWud84TVN6db1veLoi11BSeXCq2pgIf3ghdSJfTjYDaUs/s1600/java-7-package-diagram.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1020&quot; data-original-width=&quot;816&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTAktjpbG36Xjr81FgvKLZ-PLjPrVxEM4NiFza8iEZR79aYP6EEdOfQL9QuP8iHwY6pneJK-Qwe9yJxdse9ocBWp0t-HOdHfqWud84TVN6db1veLoi11BSeXCq2pgIf3ghdSJfTjYDaUs/s320/java-7-package-diagram.png&quot; width=&quot;256&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Diretiva import&lt;/h4&gt;
Para utilizar as classes pertencentes a um pacote é empregada a diretiva &lt;i&gt;import&lt;/i&gt;, no início do arquivo-fonte Java, para indicar quais pacotes e classes serão necessários. Por exemplo:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// importa APENAS a classe ArrayList do pacote java.util&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import java.util.ArrayList;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// importa TODAS as classes do pacote java.util&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import java.util.*;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A importação de todas as classes de um pacote com * (asterisco) não produz qualquer efeito negativo, como aumento do tamanho do código ou performance inferior [7], sendo apenas uma simplificação permitida ao programador. No entanto é recomendada a importação nominal das classes, a qual evita ambiguidades quando pacotes diferentes possuem classes com o mesmo nome (por exemplo, List, dos pacotes &lt;i&gt;java.awt&lt;/i&gt; e &lt;i&gt;java.util&lt;/i&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A importação não é obrigatória, assim é possível fazer uso das classes por meio da qualificação completa de seus nomes, ou seja, indicação do &lt;i&gt;package&lt;/i&gt;&amp;nbsp;(pacote) e do nome da classe nos locais de sua utilização, como segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// uso da classe JFrame do pacote javax.swing&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;javax.swing.JFrame janela = new javax.swing.JFrame(&quot;Janela&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// uso da classe ArrayList do pacote java.util&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;java.util.ArrayList lista = new java.util.ArrayList();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No entanto, a importação é vantajosa por melhorar a legibilidade do código:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// importação da classe&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import javax.swing.JFrame;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// uso da classe&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;JFrame janela = new JFrame(&quot;Janela&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// importação da classe&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import java.util.ArrayList;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// uso da classe&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;ArrayList lista = new ArrayList();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Namespaces&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No C# (e também no C++), classes e outras declarações podem ser organizadas em conjuntos independentes que coexistem em um mesmo programa, dividindo o escopo global em outros menores, denominados &lt;i&gt;namespaces &lt;/i&gt;[6][11].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um &lt;i&gt;namespace &lt;/i&gt;é um bloco de escopo denominado [9], ou seja, um espaço declarativo identificado, cujas definições permitem agrupar conjuntos de classes, objetos e métodos sob um nome.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Podemos declarar um novo bloco de escopo denominado utilizando a palavra reservada &lt;i&gt;namespace &lt;/i&gt;assim:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;namespace identificador {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; // bloco do sub-escopo (ou do namespace)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O identificador do bloco de escopo denominado é semelhante ao utilizado por variáveis, métodos e classes. Neste bloco podemos ter a definição de classes, estruturas e funções bem como a declaração de variáveis ou objetos. Um &lt;i&gt;namespace &lt;/i&gt;simples pode ser definido assim:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;namespace POO { // sub-escopo ou namespace POO&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; long a;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; double b;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; class XMP {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como a modularização é um dos aspectos fundamentais para o desenvolvimento bem sucedido de grandes sistemas, os namespaces são particularmente úteis para realizarem a divisão do escopo global em seções logicamente organizadas, mantendo uma separação conveniente entre as definições contidas nestes sem impedir sua utilização, pois um namespace não implica em restrições de acesso [6].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A diretiva &lt;i&gt;using &lt;/i&gt;(semelhante ao &lt;i&gt;import &lt;/i&gt;do Java) possibilita &#39;conectar&#39; o escopo presente a um &lt;i&gt;namespace &lt;/i&gt;específico, permitindo o acesso direto a seus elementos sem a necessidade de sua qualificação completa.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim, poderíamos ter:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// indicação de namespace desejado&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;using POO;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// uso da classe XMP sem qualificação completa.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;XMP objeto = new XMP();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Considerações finais&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso de &lt;i&gt;pacotes&lt;/i&gt; ou de &lt;i&gt;namespaces&lt;/i&gt; é uma boa prática de programação, já consagrada, que permite a divisão dos elementos de um sistema em módulos que podem ser melhor organizados e convenientemente empregados no desenvolvimento de outros sistemas. Além disso, o próprio agrupamento permite uma melhor compreensão dos elementos presentes, facilitando sua correta utilização.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com/2018/02/poo-f-09.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;https://tecnopode.blogspot.com/2018/02/poo-f-09.html&quot;&gt;POO-F-09-Getters &amp;amp; Setters&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-11.html&quot;&gt;POO-F-11-Autorreferência this&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-11.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/02/poo-f-10.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-1087890631935134702</guid><pubDate>Sat, 03 Feb 2018 14:58:00 +0000</pubDate><atom:updated>2018-02-24T21:29:27.831-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Fundamentos-09-Métodos de Acesso e Alteração</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-08.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-08.html&quot;&gt;POO-F-08-Encapsulamento&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-10.html&quot;&gt;POO-F-10-Pacotes e Espaços de Nomes&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-10.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Na OO, o encapsulamento é o agrupamento de ideias correlacionadas em uma classes. Por meio dos especificadores de acesso, a visibilidade de um membro da classe pode ser modificada, possibilitando o encapsulamento da implementação ou ocultação das informações; e também permite construir mecanismos sofisticados para garantia da integridade dos dados mantidos pelos objetos de uma classe.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3w65Cd9MT5_qd3uBcNmTx2stBvItXe6pPV5FrCf7gLPHvFjFIdorOhF5mixCctrxjTLOV5vXs4yPtVSuSo5iHyAucCxJBmYqru2_bGPjMTtjzH339a2T82iBzxypDyb0WfogJeWdFOgA/s1600/get-set-00.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;242&quot; data-original-width=&quot;577&quot; height=&quot;134&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3w65Cd9MT5_qd3uBcNmTx2stBvItXe6pPV5FrCf7gLPHvFjFIdorOhF5mixCctrxjTLOV5vXs4yPtVSuSo5iHyAucCxJBmYqru2_bGPjMTtjzH339a2T82iBzxypDyb0WfogJeWdFOgA/s320/get-set-00.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Consideremos o problema simples e frequente na programação de garantir que uma variável de tipo conhecido tenha valores limitados a um conjunto ou critério determinado. Por exemplo, considere a classe Java/C# a seguir, cujo propósito é representar um horário, no formato de 24 horas, incluindo apenas horas e minutos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Horario {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; int horas;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; int minutos;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Embora seja claro o propósito de cada um de seus atributos, a forma na qual foram declarados não oferece qualquer mecanismo que assegure a consistência dos seus valores, isto é, a garantia de que seus campos correspondam efetivamente a um horário. Veja, através do fragmento Java/C# apresentado na sequência, que elementos desta classe podem receber valores inválidos na sua inicialização ou outra situação:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Horario h1 = new Horario();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;h1.horas = 33;&amp;nbsp; &amp;nbsp;// valor inválido para horas&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;h1.minutos = 14; // valor válido para minutos&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Horario h2 = new Horario();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;h2.horas = 12;&amp;nbsp; &amp;nbsp;// valor válido para horas&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;h2.minutos = -1; // valor inválido para minutos&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O problema acontece porque os atributos &lt;i&gt;horas&lt;/i&gt; e &lt;i&gt;minutos&lt;/i&gt; declarados na classe são do tipo inteiro e públicos, assim seus usuários podem atribuir quaisquer valores inteiros válidos, ou seja, pertencentes ao intervalo [-2^31, +2^31-1) do tipo int; quando o correto seria manter o campo hora dentro do intervalo [0, 23] e minutos dentro do intervalo [0, 59], ambos bem mais restritos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Este tipo de problema e outros podem ser facilmente resolvidos através do encapsulamento provido pelas classes através de duas medidas:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;restringindo o acesso aos campos cujos valores possuem restrições, declarado-os como privados ou protegidos, de modo que não possam ser utilizados diretamente; e&amp;nbsp;&lt;/li&gt;
&lt;li&gt;implementando métodos especialmente destinados a manipulação destes campos, como meio de garantir que assumam apenas valores consistentes.&lt;/li&gt;
&lt;/ol&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;Os métodos (funções-membro) de qualquer classe são sempre de um dos tipos que segue:&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Criação&lt;/b&gt;&lt;br /&gt;Operações responsáveis pela criação de novos objetos (construtores no Java e C#).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Destruição&lt;/b&gt;&lt;br /&gt;Operações responsáveis pela eliminação de objetos existentes (finalizadores no Java).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Observação&lt;/b&gt;&lt;br /&gt;Operações que informam sobre o estado do objeto, sem modificá-lo.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Mutação&lt;/b&gt;&lt;br /&gt;Operações que alteram o estado do objeto, mantendo-o consistente.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Produção&lt;/b&gt;&lt;br /&gt;Operações que criam novos objetos a partir de objetos existentes.&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;Na classe &lt;/span&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;Horario&lt;/b&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;, os atributos &lt;/span&gt;&lt;i style=&quot;text-align: justify;&quot;&gt;horas &lt;/i&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;e &lt;/span&gt;&lt;i style=&quot;text-align: justify;&quot;&gt;minutos&lt;/i&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;, que representam os componentes do horário, devem ser números inteiros e positivos, limitados aos intervalos hora: [0, 23] e minutos: [0, 59],&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Estas restrições exigem que os atributos horas e minutos sejam declarados privados, evitando que os usuários da classe atribuam valores inválidos. Mas sendo privados, seus valores não poderão ser ajustados ou sequer consultados externamente à classe. Assim lançamos mão de métodos de observação, ou seja, operações públicas que podem informar sobre o valor destes atributos, sem alterá-los; e também métodos de mutação, para que sua alteração possa ser controlada e mantida de acordo com as regras definidas para horários válidos. Analise o código que segue, com a classe &lt;b&gt;Horario &lt;/b&gt;(Java/C#) melhorada:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Horario {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private int horas;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private int minutos;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public int getHoras() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return horas;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public int getMinutos() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return minutos;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setHoras(int h) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (h&amp;lt;0 || h&amp;gt;23) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// lança exceção para indicar condição inválida&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;h inválido: &quot; + h);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; horas = h;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setMinutos(int m) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (h&amp;lt;0 || h&amp;gt;59) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// lança exceção para indicar condição inválida&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;m inválido: &quot; + m);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; minutos = m;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A classe &lt;b&gt;Horario &lt;/b&gt;melhorada exibe três características:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Os atributos &lt;i&gt;horas &lt;/i&gt;e &lt;i&gt;minutos &lt;/i&gt;são privados, portanto não podem ser acessados externamente à classe.&lt;/li&gt;
&lt;li&gt;Cada atributo possui um método de prefixo &lt;i&gt;get&lt;/i&gt; associado: horas e &lt;i&gt;getHoras&lt;/i&gt;; minutos e &lt;i&gt;getMinutos&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Cada atributo também possui um método de prefixo &lt;i&gt;set&lt;/i&gt; associado: horas e &lt;i&gt;setHoras&lt;/i&gt;; minutos e &lt;i&gt;setMinutos&lt;/i&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;Os métodos de prefixo &lt;i&gt;set&lt;/i&gt; são denominados de acesso (ou &lt;i&gt;getter methods&lt;/i&gt;), pois são operações de observação, usualmente públicas, sem parâmetros, que retornam o conteúdo dos atributos relacionados e permitem, assim, consultar externamente tais atributos.&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Já os métodos de prefixo &lt;i&gt;set&lt;/i&gt; são chamados de ajuste (ou &lt;i&gt;setter methods&lt;/i&gt;), pois são operações de mutação, que podem ser públicas, sem valor de retorno e que recebem um parâmetro do mesmo tipo do atributo associado, ajustando o atributo para o valor do argumento recebido, apenas quando o mesmo é válido.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É típico que, quando as regras de validação não são atendidas, que seja lançada uma exceção, mecanismo tradicional nas linguagens de programação OO para indicar erros que devem ser tratados pelo programador, mas sem uso de códigos de erro ou exibição direta de mensagens.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A estrutura sintática típica dos conjuntos atributo-métodos é sempre a mesma:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;private &amp;lt;Tipo&amp;gt; &amp;lt;nomeAtributo&amp;gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public void set&amp;lt;NomeAtributo&amp;gt;(&amp;lt;Tipo&amp;gt;); // setter method&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public &amp;lt;Tipo&amp;gt; get&amp;lt;NomeAtributo&amp;gt;(void); // getter method&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Esta estratégia é muito interessante, por várias razões:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;O atributo privado fica armazenado em segurança dentro da classe.&lt;/li&gt;
&lt;li&gt;A consulta fica condicionada a existência de método &lt;i&gt;get&lt;/i&gt; público associado.&lt;/li&gt;
&lt;li&gt;Se o método &lt;i&gt;get&lt;/i&gt; é protegido, a consulta se limita as subclasses; se private a leitura do atributo deixa de ser possível.&lt;/li&gt;
&lt;li&gt;A alteração fica condicionada a existência de método set público associado e também às regras (de negócio) que devem ser aplicadas.&lt;/li&gt;
&lt;li&gt;As regras de validação dos atributos podem ser complexas e relacionadas com o estado de outros atributos.&lt;/li&gt;
&lt;li&gt;Se o método &lt;i&gt;set&lt;/i&gt; é protegido, o ajuste do atributo só pode ocorrer em subclasses; se private, deixa de ser possível.&lt;/li&gt;
&lt;li&gt;Mudanças nas regras de validação são transparentes, pois não requerem que outras partes do código sejam alteradas (desde que as regras sejam atendidas).&lt;/li&gt;
&lt;/ul&gt;
Quando o atributo é do tipo lógico (&lt;i&gt;boolean&lt;/i&gt;) também pode ser adotada uma variante da estrutura sintática apresentada, que é como segue:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;private boolean &amp;lt;nomeAtributo&amp;gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public void set&amp;lt;NomeAtributo&amp;gt;(&amp;lt;Tipo&amp;gt;); // setter method&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public boolean is&amp;lt;NomeAtributo&amp;gt;(void); // getter method&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Pode ser observado que o método de ajuste/alteração&amp;nbsp;&lt;i&gt;set&lt;/i&gt; tem a mesma forma, mas o método de consulta/observação get foi substituído por outro de prefixo &lt;i&gt;is&lt;/i&gt;, que, semanticamente, é mais coerente com o atributo lógico. Se o atributo &lt;i&gt;boolean&lt;/i&gt; é denominado &lt;i&gt;ligado&lt;/i&gt;, teríamos os métodos &lt;i&gt;setLigado(boolean)&lt;/i&gt; e &lt;i&gt;isLigado()&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Um exemplo completo pode auxiliar na compreensão destes conceitos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Considere a necessidade de uma classe Java/C#, cujos objetos devem armazenar as medidas dos lados de um triângulo qualquer. Tal classe poderia ser declarada como&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Triangulo {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; double ladoA; // lados de um triângulo&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; double ladoB;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; double ladoC;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Embora seja claro o propósito de cada um de seus atributos, na forma com que se apresenta, não oferece qualquer mecanismo que assegure a consistência dos seus valores, isto é, a garantia de que os valores das medidas correspondam efetivamente a um triângulo. Veja, através do fragmento apresentado a seguir, que elementos desta classe podem receber valores inválidos na sua inicialização ou outra situação:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Triangulo triang1 = new Triangulo();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;triang1.ladoA = 5.0; // medidas válidas&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;triang1.ladoB = 2.0; // mas que não formam um triângulo&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;triang1.ladoC = 1.5;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Triangulo triang2 = new Triangulo();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;triang2.ladoA = -2.0; // medida inválida&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;triang2.ladoB = -2.0; // medida inválida&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;triang2.ladoC = 1.5;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Na classe &lt;b&gt;Triangulo&lt;/b&gt;, os atributos &lt;i&gt;ladoA&lt;/i&gt;, &lt;i&gt;ladoB &lt;/i&gt;e &lt;i&gt;ladoC&lt;/i&gt;, que representam os lados do triângulo, devem ser números reais e positivos. Além disso, para que tais medidas representem um triângulo, a soma de quaisquer dois lados deve ser maior do que o lado restante.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Estas restrições exigem que os atributos &lt;i&gt;ladoA&lt;/i&gt;, &lt;i&gt;ladoB&lt;/i&gt; e &lt;i&gt;ladoC &lt;/i&gt;sejam declarados privados. Sendo privados, seus valores não poderão ser diretamento ajustados ou consultados externamente à classe, assim lançamos mão de métodos de acesso (de observação) que podem informar sobre o valor destes atributos; e também métodos de ajuste (de mutação), para que sua alteração possa ser controlada e mantida de acordo com as regras dos triângulos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A classe Java/C# &lt;b&gt;Triangulo &lt;/b&gt;pode ser aperfeiçoada como segue.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Triangulo {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// lados do triângulo&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private double ladoA, ladoB, ladoC;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// métodos de acesso&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double getLadoA() { return ladoA; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double getLadoB() { return ladoB; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public double getLadoC() { return ladoC; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// método de observação&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public boolean isEquilatero() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return ladoA==ladoB &amp;amp;&amp;amp; ladoB==ladoC;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// métodos de ajuste&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setLadoA(double a) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;testaLados(a, ladoB, ladoC);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;ladoA = a;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setLadoB(double b) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;testaLados(ladoA, b, ladoC);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;ladoB = b;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void setLadoA(double b) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;testaLados(LadoA, ladoB, c);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;ladoC = c;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// construtor&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Triangulo(double a, double b, double c) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;testaLados(a, b, c);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // se lados válidos, ajusta atributos&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;ladoA = a;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;ladoB = b;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;      &lt;/span&gt;ladoC = c;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// método auxiliar privado&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;// verifica se medidas dadas forma um triângulo&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private void testaLados(double a, double b, double c) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if ((a&amp;lt;0) || (b&amp;lt;0) || (c&amp;lt;0) ||&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; !(a&amp;lt;b+c) || !(b&amp;lt;a+c) || !(c&amp;lt;a+b)) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// lança exceção para indicar condição inválida&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;lados inválidos: &quot; +&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; a + &quot;, &quot; + b + &quot;, &quot; + c);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É possível notar na classe &lt;b&gt;Triangulo &lt;/b&gt;que os lados do triângulo são representados por três variáveis-membro privadas de tipo double denominadas &lt;i&gt;ladoA&lt;/i&gt;, ladoB e &lt;i&gt;ladoC&lt;/i&gt;. Os métodos de acesso &lt;i&gt;getLadoA&lt;/i&gt;, &lt;i&gt;getLadoB &lt;/i&gt;e &lt;i&gt;getLadoC &lt;/i&gt;permitem consultar as medidas dos lados. O método &lt;i&gt;isEquilatero()&lt;/i&gt;&amp;nbsp;simula a presença de um atributo lógico que indica se o triângulo é ou não equilátero. Como o atributo, de fato, não existe, este método é mais precisamente de observação.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Como validação de cada lado é semelhante, foi criado o método privado &lt;i&gt;testaLados(double, double, double)&lt;/i&gt;, que permite verificar se as medidas são positivas e se formam um triângulo válido. Assim, cada método de ajuste (&lt;i&gt;setLadoA(double)&lt;/i&gt;, &lt;i&gt;setLadoB(double)&lt;/i&gt; e &lt;i&gt;setLadoC(double)&lt;/i&gt;) primeiro efetua o teste da nova medida junto as existentes, para depois armazenar sua alteração.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O construtor parametrizado requer as medidas dos três lados, testando-os e armazenando-os se válidos. Não existe construtor default porque não faz sentido criar um triângulo sem medidas definidas ou mesmo com &lt;i&gt;ladoA=ladoB=ladoC=0&lt;/i&gt;. A instanciação de um objeto do tipo &lt;b&gt;Triangulo &lt;/b&gt;é obtida com:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Triangulo triangulo = new Triangulo(1.6, 2.5, 3.4);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O programa Java listado na sequência mostra como a classe &lt;b&gt;Triangulo &lt;/b&gt;poderia ser usada.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;import java.util.Scanner;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class TestaTriangulo {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static void main(String[] arg) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // declara e instancia objeto tipo Scanner&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Scanner teclado = new Scanner(System.in);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // leitura das medidas dos lados&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.print(&quot;Lado A: &quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; double a = teclado.nextDouble();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.print(&quot;Lado B: &quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; double b = teclado.nextDouble();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.print(&quot;Lado C: &quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; double c = teclado.nextDouble();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // declara e instancia objeto tipo Triangulo&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Triangulo tri = new Triangulo(a, b, c);&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // exibe lados do triangulo&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;Triangulo: &quot; + tri.getLadoA() +&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;, &quot; + tri.getLadoC() + &quot;, &quot; + tri.getLadoC())&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É importante observar a divisão de responsabilidade proporcionada pelas classes &lt;b&gt;Triangulo &lt;/b&gt;e &lt;b&gt;TestaTriangulo&lt;/b&gt;. &lt;b&gt;TestaTriangulo &lt;/b&gt;é um programa que realiza a interface com o usuário (leitura das medidas, criação de objetos auxiliares e exibição de resultados), não se preocupando em validar as medidas dos lados, pois esta é uma responsabilidade da classe Triangulo. Já a classe &lt;b&gt;Triangulo &lt;/b&gt;se ocupa apenas em representar corretamente um triângulo, não se preocupando com a origem dos valores, nem com interação com o usuário. A classe &lt;b&gt;Scanner &lt;/b&gt;se ocupa da leitura dos valores.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A &lt;i&gt;divisão de responsabilidades&lt;/i&gt; é útil porque cada segmento do programa (cada classe) se ocupa de coisa específica e limitada, facilitando o desenvolvimento, o teste e a manutenção do código. Isto é o que chamamos de &lt;i&gt;coesão&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O programa ainda é limitado, pois se medidas inválida forem fornecidas, ocorre uma exceção que impede a continuação do programa. Com o uso do tratamento de exceções, a ser visto nas próximas lições, é possível construir um programa mais adequado para o usuário.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Concluindo, é uma prática de programação consagrada, recomendada pelos manuais de Engenharia de Software, que os atributos de uma classe sejam privados e dotados de métodos de acesso e ajuste, conforme as necessidades da classe (ou seja, conforme as regras de validação - de negócio).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-08.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-08.html&quot;&gt;POO-F-08-Encapsulamento&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-10.html&quot;&gt;POO-F-10-Pacotes e Espaços de Nomes&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-10.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/02/poo-f-09.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-700252448511397830</guid><pubDate>Thu, 01 Feb 2018 01:59:00 +0000</pubDate><atom:updated>2018-02-03T13:00:04.432-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Fundamentos-08-Encapsulamento</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-07.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-07.html&quot;&gt;POO-F-07-Construtores&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-09.html&quot;&gt;POO-F-09-Getters e Setters&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-09.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;O termo encapsulamento se refere ao agrupamento de ideias correlacionadas na forma unidades, módulos ou classes, que passam a ser usadas apenas por meio de seu nome [2]. É um conceito amplo, pois se aplica na construção de métodos, de classes e, portanto, dos objetos, muito importante na OO.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhtpQHCb0q7ban-SKWvTUa4WM7dvIK51XneEO8bvGi-v0sBopH22YihWOGAhrFhSVP4OS0VBJtEHzxObeEt4wKf6h8MJzuPWErryfOrDDQb-WLOvEEB83_JKw8_xeVWdf_Tg3R-xHPOAA/s1600/acessibilidade-0.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;259&quot; data-original-width=&quot;645&quot; height=&quot;128&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhtpQHCb0q7ban-SKWvTUa4WM7dvIK51XneEO8bvGi-v0sBopH22YihWOGAhrFhSVP4OS0VBJtEHzxObeEt4wKf6h8MJzuPWErryfOrDDQb-WLOvEEB83_JKw8_xeVWdf_Tg3R-xHPOAA/s320/acessibilidade-0.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Sabemos que os métodos nada mais são do que funções-membro ou subprogramas que realizam uma tarefa, ou seja, um conjunto organizado de ações relacionadas. Métodos são acionados por meio de seus nomes. Já os objetos novos são criados com o uso do nome de suas classes.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O encapsulamento também determina a representação do objeto, ou seja, possibilita que um objeto seja usado apenas por sua aparência exterior [6], o que pode ser denominado de interface (no sentido de ligação entre as partes -- faces -- externa e interna dos objetos).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Aqui o encapsulamento está muito relacionado a ocultação de informações (data hiding), outra característica da OO, que permite preservar informações importantes dentro do objeto, externando apenas o que se julga conveniente ou necessário. Até mesmo parcelas da própria construção do objeto, ou seja, sua implementação, podem ser escondidas pelo mesmo mecanismo. A ocultação das informações é obtida por meio dos mecanismos de encapsulamento [2][6].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O encapsulamento da implementação ou ocultação das informações, também conhecido como visibilidade ou acessibilidade dos membros de uma classe, é a forma com que seus elementos podem ser vistos e utilizados externamente. Então o encapsulamento define como os membros da classe, isto é, seus atributos, seus métodos e seus construtores da classe poderão ser usados externamente. Aqui é necessário definir mais precisamente os conceitos de interno e externo.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Interno&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
Interno é aquilo que faz parte da construção/implementação da própria classe. No Java e C# é tudo aquilo que está dentro das chaves que delimitam o corpo da classe. Observe a classe &lt;b&gt;Contador&lt;/b&gt;:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class Contador {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double total;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;Contador() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; set(100);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;void inc(double d) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; total = total + d;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;void dec(double d) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; total = total - d;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;void set(double d) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; total = d;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
A variável-membro &lt;i&gt;total&lt;/i&gt;, assim como as funções-membro &lt;i&gt;inc(double)&lt;/i&gt;, &lt;i&gt;dec(double)&lt;/i&gt; e &lt;i&gt;set(double&lt;/i&gt;), bem como o construtor &lt;i&gt;Contador()&lt;/i&gt; são elementos internos da classe &lt;b&gt;Contador&lt;/b&gt;. Alguns membros usam outros membros da classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Externo&lt;/b&gt;&lt;br /&gt;
Externo é o uso que as instâncias da classe fazem dos membros desta em outras partes do programa (certamente em outras classes). O uso externo é realizado pelos &quot;clientes&quot; ou &quot;usuários&quot; da classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Contador cont = new Contador();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;contador.total = 23.5;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;contador.dec(0.5);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Neste fragmento, o construtor &lt;i&gt;Contador()&lt;/i&gt; é usado externamente à classe &lt;b&gt;Contador&lt;/b&gt;, assim como os membros &lt;i&gt;total&lt;/i&gt; e &lt;i&gt;dec(double)&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A ocultação de dados (&lt;i&gt;data hiding&lt;/i&gt;) é muito importante dentro da OO, pois:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;permite esconder detalhes da forma de implementação, permitindo resguardar esforços de desenvolvimento;&lt;/li&gt;
&lt;li&gt;possibilita criar de mecanismos de consistência, que asseguram que os atributos assumam apenas valores restritos a um conjunto desejado;&lt;/li&gt;
&lt;li&gt;garante que operações determinadas sejam realizadas na sequência correta, ou condicionado a estados apropriados do objeto; e&lt;/li&gt;
&lt;li&gt;assegura que as instâncias da classe conheçam apenas aquilo que é necessário para o uso dos objetos criados.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O projetista de uma classe tem assim liberdade para determinar quais elementos serão conhecidos e utilizados, separando-os, por meio da ocultação, daqueles que existem apenas para permitir sua implementação. Assim, atributos, métodos e até mesmo construtores que existem numa classe podem ou não ser visíveis externamente.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Em Java, C#, C++ (e outras linguagens OO) a acessibilidade ou visibilidade dos membros da classe é determinada por especificadores de acesso (&lt;i&gt;access specifiers&lt;/i&gt;), palavras reservadas destas linguagens que definem seu (grau de) encapsulamento: &lt;i&gt;public&lt;/i&gt;, &lt;i&gt;protected&lt;/i&gt; e &lt;i&gt;private&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;public&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A palavra reservada &lt;i&gt;public&lt;/i&gt; determina o acesso público. Com ele, membros de uma classe têm utilização irrestrita e podem ser usados livremente pelas suas instâncias. Atributos (variáveis-membro) públicos podem ter seus conteúdos acessados (lidos) e alterados (escritos) sem qualquer restrição; assim como os métodos públicos podem ser acionados arbitrariamente. Qualquer membro declarado público fica, portanto, exposto.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os membros públicos, vistos em conjunto, compõem a interface da classe, ou seja, são o conjunto de atributos e operações conhecidos e que caracterizam externamente a classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;private&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O acesso privado, indicado pelo especificador de acesso &lt;i&gt;private&lt;/i&gt;, define que um método ou atributo de classe nunca deve ser acessível externamente, ocultando completamente tais membros.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os membros privados usualmente compõem a infraestrutura de uma classe, com atributos e métodos que não precisam ser expostos, mas que contribuem para o funcionamento da classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;protected&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Existe o especificador de acesso &lt;i&gt;protected&lt;/i&gt; destinado a indicar membros de uma classe que não devem ser utilizados por meio de suas instâncias, mas apenas na construção de novas classes. Tais membros, ditos protegidos, compõem uma interface de programação da classe, ou seja, um conjunto de atributos e operações destinados exclusivamente aos programadores que usarão tal classe como base para criação de outras, papel que ficará mais claro quando a herança (&lt;i&gt;inheritance&lt;/i&gt;) for tratada.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
Os especificadores de acesso &lt;i&gt;public&lt;/i&gt;, &lt;i&gt;protected&lt;/i&gt; e &lt;i&gt;private&lt;/i&gt; definem níveis de visibilidade diferentes, ilustrados no quadro seguinte, que considera as situações de implementação (codificação) e instanciação (criação de objetos dentro de programas).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-tE99gvuyL1lk2BTPwFCro9uC7eojtK64So264vSbIMBfIB-mcOtIveLkObISvnSh2QfbF41NW7-KGGHXrrPuxnZeZpp_r6yjJkY_yBQWA6jgXYQIuVobBLXgGCw3F3o9wMM94sniUsI/s1600/acessibilidade.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;150&quot; data-original-width=&quot;484&quot; height=&quot;99&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-tE99gvuyL1lk2BTPwFCro9uC7eojtK64So264vSbIMBfIB-mcOtIveLkObISvnSh2QfbF41NW7-KGGHXrrPuxnZeZpp_r6yjJkY_yBQWA6jgXYQIuVobBLXgGCw3F3o9wMM94sniUsI/s320/acessibilidade.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Existe um quarto nível de acessibilidade que é &lt;i&gt;package&lt;/i&gt; (ou pacote), que não possui uma palavra reservada para indicá-lo. Por padrão, todos os membros de uma classe têm acesso pacote, exceto quando são aplicados os demais especificadores. Esse foi o acesso definido para todos os membros dos exemplos providos até agora.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outra observação importante é que todos os membros de uma classe são acessíveis entre si, isto é, os especificadores de acesso só se aplicam externamente à classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O encapsulamento, entendido como as restrições aplicadas aos membros de uma classe (ou ocultação de dados -- &lt;i&gt;data hiding&lt;/i&gt;), possibilita um controle mais sofisticado para o acesso a tais membros, o que traz várias vantagens [6][7][8]:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;o código se torna mais claro, pois ficam evidentes quais membros oferecem funcionalidades reais e quais são auxiliares;&lt;/li&gt;
&lt;li&gt;são minimizados os erros de programação, tornando as interfaces mais simples;&lt;/li&gt;
&lt;li&gt;classes semelhantes podem exibir uma mesma interface, pois detalhes da implementação permanecem ocultos, facilitando sua utilização;&lt;/li&gt;
&lt;li&gt;proporciona facilidades para extensão (criação de novas classes a partir de classes existentes); e&lt;/li&gt;
&lt;li&gt;oculta a realização de modificações e alterações, pois quando a interface não é afetada, as mudanças são transparentes para os usuários da classe.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O encapsulamento proporciona a separação do projeto (&lt;i&gt;design&lt;/i&gt;) da implementação (&lt;i&gt;coding&lt;/i&gt;), facilidades de modificação e padronização do código. Isto implica em maiores chances de extensão, redução do tempo de desenvolvimento e reusabilidade real, ou seja, as maiores vantagens da programação orientada a objetos [8].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Em Java e C# a declaração de classes também emprega os especificadores de acesso &lt;i&gt;public&lt;/i&gt; (caso mais comum) e &lt;i&gt;private&lt;/i&gt;, mas esse último apenas em situações especiais. Quando uma classe Java é declarada como pública, o arquivo que a contém deve possuir o mesmo nome, para facilitar sua localização.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No exemplo abaixo, a classe denominada &lt;b&gt;Acesso&lt;/b&gt; contém quatro campos inteiros com todos os níveis de acesso (público, protegido, privado e pacote); e dois métodos com níveis público e privado. O único construtor é público, situação típica para possibilitar a criação de objetos das classes (embora possam ser declarados com outras visibilidades).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Arquivo Acesso.java&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class Acesso {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public int publico;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;protected int protegido;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private int privado;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;int pacote;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public Acesso() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; prepare();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public String toString() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return String.format(&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;publico=%d\nprotegido=%d\nprivado=%d\npacote=%d\n&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;publico, protegido, privado, pacote);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;private void prepare() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; publico = 7;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pacote = 5;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; protegido = 3;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; privado = 1;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public void reset() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; publico = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pacote = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; protegido = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; privado++;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observe também que o método privado &lt;i&gt;prepare()&lt;/i&gt; é usado pelo construtor público, pois os especificadores de acesso não estabelecem restrições internas, isto é, entre os membros da própria classe. Já o método &lt;i&gt;reset()&lt;/i&gt; altera os campos protegido, zerando-o, e privado, incrementando-o.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A classe &lt;b&gt;TestaAcesso&lt;/b&gt; possui apenas o método main, que instancia um objeto do tipo &lt;b&gt;Acesso&lt;/b&gt;. Com a variável de instância denominada &lt;i&gt;acesso&lt;/i&gt;, é acionado o método público &lt;i&gt;toString()&lt;/i&gt;, cujo resultado é exibido no console, mostrando o estado inicial do objeto recém-criado. Depois, os campos público e pacote tem seus valores alterado; novamente o estado é exibido; então é acionado o outro método público &lt;i&gt;reset()&lt;/i&gt;; e reexibido o estado do objeto, que retorna a situação inicial.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Arquivo TestaAcesso.java&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;public class TestaAcesso {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static void main(String[] a) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Acesso acesso = new Acesso();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(acesso.toString());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; acesso.publico = 1000;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; acesso.pacote = 777;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(acesso.toString());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; acesso.reset();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(acesso.toString());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Apenas os campos públicos podem ser acessados pelas instâncias da classe. A indicação de campos privados ou protegidos será apontada como erro durante a compilação, impedindo a geração e execução de código inválido.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O programa &lt;b&gt;TestaAcesso&lt;/b&gt;, como em outros fragmentos visto até aqui, mostra como usar um objeto de outra classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Na próxima lição veremos como utilizar os especificadores de acesso para prover o encapsulamento efetivo de elementos de uma classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-07.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-07.html&quot;&gt;POO-F-07-Construtores&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-09.html&quot;&gt;POO-F-09-Getters e Setters&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/02/poo-f-09.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/01/poo-f-08.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-8038506449802093967</guid><pubDate>Sun, 28 Jan 2018 22:25:00 +0000</pubDate><atom:updated>2018-02-07T20:14:33.454-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Fundamentos-07-Construtores</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-06.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-06.html&quot;&gt;POO-F-06-Sobrecarga&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-08.html&quot;&gt;POO-F-08-Encapsulamento&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-08.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;A existência de qualquer tipo de objeto, tanto no mundo real como na POO, exige que ele seja previamente criado, possibilitando que seja usado. As classes são novos tipos de dados definidos pelo programador para descrever entidades reais ou abstratas; que servem como modelo para criação dos objetos do seu tipo.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc26B0iKS6d0acowwdTh_T_PjjL37HIr-vFQ_8r1UYnvsV0c4v9J1_pIJpN7RJRGctoj7zut3WSc6Nh1MMF05i-wrSJ9p2lHcR4x0-cvfQcwvmjwd9mVMzk2veoSkdd2tkYbce60pj7og/s1600/constructor-0.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;283&quot; data-original-width=&quot;602&quot; height=&quot;150&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc26B0iKS6d0acowwdTh_T_PjjL37HIr-vFQ_8r1UYnvsV0c4v9J1_pIJpN7RJRGctoj7zut3WSc6Nh1MMF05i-wrSJ9p2lHcR4x0-cvfQcwvmjwd9mVMzk2veoSkdd2tkYbce60pj7og/s320/constructor-0.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Cada objeto é uma ocorrência de uma classe, ou seja, é uma entidade distinta das demais, capaz de armazenar dados e realizar algumas ações, tal como descrito pelo seu tipo, isto é, por sua classe. Assim, vimos que o processo de criação de objetos implica em aspectos fundamentais da OO [6][7]:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;Todo objeto é de um tipo específico/classe específica.&lt;/li&gt;
&lt;li&gt;Os objetos da mesma classe, ou seja, do mesmo tipo, possuem as mesmas características (atributos) e comportamento (operações).&lt;/li&gt;
&lt;li&gt;Todo objeto criado é distinto dos demais, independente de seus tipos.&lt;/li&gt;
&lt;li&gt;Todo objeto tem um ciclo de vida.&lt;/li&gt;
&lt;li&gt;Todo objeto é único e pode ser distinguido dos demais.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Por conta disso, a criação de objetos é uma operação essencial, denominada instanciação, muito importante na OO, que envolve um operador próprio (&lt;b&gt;&lt;i&gt;new &lt;/i&gt;&lt;/b&gt;nas linguagens de programação Java e C#) e também uma operação especial responsável pela inicialização dos objetos criados, chamada de &lt;i&gt;construtor &lt;/i&gt;[4][7][11].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um &lt;i&gt;construtor &lt;/i&gt;é como um método ou função-membro, mas cuja responsabilidade é prover a preparação dos objetos de sua própria classe, pois os atributos (variáveis-membro) devem ser inicializados de modo adequado para que os objetos sejam consistentes e possam ser usados adequadamente.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Embora os construtores sejam como métodos destinados à inicialização dos objetos da classe, são diferenciados das demais operações por três características [6]:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;possuem, sempre, o exato mesmo nome da classe;&lt;/li&gt;
&lt;li&gt;não declaram um valor de retorno, nem mesmo &lt;i&gt;void&lt;/i&gt;, pois &quot;retornam&quot; um novo objeto de seu tipo; e&lt;/li&gt;
&lt;li&gt;só podem ser acionados por meio do operador de instanciação &lt;b&gt;&lt;i&gt;new&lt;/i&gt;&lt;/b&gt;, ou seja, seu uso fica restrito à criação de novos objetos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
De maneira geral, a instanciação de objetos usa a sintaxe abaixo:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;lt;Classe&amp;gt; objeto = new &amp;lt;construtor&amp;gt;([lista_argumentos]);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Aqui:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Classe &lt;/i&gt;indica o nome da classe que determina o tipo do objeto;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;objeto&lt;/i&gt; é a variável que &quot;contém&quot; o objeto;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;i&gt;new&lt;/i&gt;&lt;/b&gt; é o operador especial de instanciação;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;construtor&lt;/i&gt; é a operação especial da classe que prepara os novos objetos do tipo; e&lt;/li&gt;
&lt;li&gt;&lt;i&gt;lista_argumentos&lt;/i&gt; opcionalmente fornece dados para a criação do novo objeto.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A figura que segue ilustra o uso típico de construtores para uma classe &lt;b&gt;Student&lt;/b&gt;.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzX-l5x8rXasb3cxUYkb0dZ7Sp7gYZRI_anVdX7us1ZX-Ef4o6mqNBbTWjjF86RWp_-KKFojXtDbV7GqcqT2q6FxoKJHSMsdPGKswt14rrT554DPaw8HlIdFOXLxevQBIVTzzq6RgcdAA/s1600/constructor-1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;211&quot; data-original-width=&quot;601&quot; height=&quot;112&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzX-l5x8rXasb3cxUYkb0dZ7Sp7gYZRI_anVdX7us1ZX-Ef4o6mqNBbTWjjF86RWp_-KKFojXtDbV7GqcqT2q6FxoKJHSMsdPGKswt14rrT554DPaw8HlIdFOXLxevQBIVTzzq6RgcdAA/s320/constructor-1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Os construtores retornam uma referência para o objeto criado (que pode ser algo como seu endereço na memória ou um identificador próprio do sistema OO usado) que deve ser armazenada numa variável do tipo do objeto. Após a instanciação, o objeto criado fica disponível para utilização por meio da variável de referência, o que possibilita acessar seus atributos ou acionar seus métodos:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;variavelObjeto.atributo = &amp;lt;expressaoTipoAtributo&amp;gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;variavalObjeto.método([listaParametros]);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os atributos e métodos também podem ser utilizados em expressões compatíveis com o tipo do atributo ou do valor retornado pelo método.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Observe a classe &lt;b&gt;Circulo&lt;/b&gt;, cujo código é equivalente em Java ou C#:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class Circulo {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double raio;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;Circulo() {&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; raio = 1;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double area() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return 3.1415926*raio.raio;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O tipo &lt;b&gt;Circulo &lt;/b&gt;possui todos os elementos possíveis de uma classe [5][6][7][11]:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;um atributo &lt;i&gt;raio&lt;/i&gt;, que descreve uma característica dos objetos tipo círculo;&lt;/li&gt;
&lt;li&gt;uma operação &lt;i&gt;area()&lt;/i&gt;, funcionalidade que provê o cálculo da área do círculo baseada no atributo da classe;&lt;/li&gt;
&lt;li&gt;um construtor &lt;i&gt;Circulo()&lt;/i&gt;, que tem o mesmo nome da classe e inicializa novos objetos deste tipo com o valor padrão 1 para o &lt;i&gt;raio&lt;/i&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Agora objetos do tipo &lt;b&gt;Circulo&lt;/b&gt; podem ser criados e utilizados.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// Java&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Circulo circulo = new Circulo();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;Raio = &quot; + circulo.raio);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(&quot;Area = &quot; + circulo.area());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;//C#&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Circulo circulo = new Circulo();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;circulo.raio = 2.5;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Consule.WriteLine(&quot;Area = &quot; + circulo.area());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Quando declaramos uma classe e não especificamos um construtor, o compilador automaticamente gera um construtor denominado default, que não realiza qualquer ação, apenas permitindo que novos objetos sejam criados. Se o programador fornece qualquer construtor, o compilador não incluir o construtor default.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Embora os atributos (campos) da classe sejam automaticamente inicializados (variáveis numéricas recebem zero, boleanas recebem &lt;i&gt;false &lt;/i&gt;e de tipo objeto recebem &lt;i&gt;null&lt;/i&gt;), é adequado que o programador, explicitamente, acrescente o construtor &lt;i&gt;default &lt;/i&gt;(sem parâmetros) tornando clara a inicialização desejada para novos objetos da classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Tal como métodos, os construtores podem possuir parâmetros, permitindo que a criação dos objetos seja customizada. Assim como para os métodos, a sobrecarga (&lt;i&gt;overload&lt;/i&gt;) também pode ser usada com construtores, é bastante conveniente em casos como este, para estabelecer formas diferentes para a criação de objetos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Com uso da sobrecarga de construtores (&lt;i&gt;constructor overload&lt;/i&gt;), a classe &lt;b&gt;Circulo &lt;/b&gt;pode ser modificada para possuir tanto o construtor &lt;i&gt;default &lt;/i&gt;(sem parâmetros), como um construtor parametrizado com o tamanho do círculo criado.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class Circulo {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double raio;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;Circulo() {&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; raio = 1;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;Circulo(double r) {&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; raio = r;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double area() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return 3.1415926*raio.raio;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Com a presença de construtor parametrizado, a criação de novos objetos do tipo &lt;b&gt;Circulo &lt;/b&gt;passa a exigir a indicação de um argumento que especifica o valor do raio do círculo criado, customizando a criação de objetos. Com isso temos:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Circulo outroCirculo = new Circulo(2.5);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A existência de construtores parametrizados torna mais flexível a criação de objetos, cujos campos podem ser iniciados com valores diversos adequados a cada programa. Somente com o construtor &lt;i&gt;default&lt;/i&gt;, temos duas operações para criar um círculo customizado:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Circulo outroCirculo = new Circulo();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;outroCirculo.raio = 2.5;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É muito importante observar que se forem fornecidos um ou mais construtores parametrizados, o compilador &lt;b&gt;não&lt;/b&gt; gera o construtor &lt;i&gt;default &lt;/i&gt;nesta situação. Quando qualquer construtor é fornecido pelo programador, o compilador não faz a adição automática do construtor &lt;i&gt;default&lt;/i&gt;, de modo que, se desejado, o construtor &lt;i&gt;default &lt;/i&gt;deve ser manualmente introduzido.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Sem o construtor &lt;i&gt;default&lt;/i&gt;, torna-se obrigatório que os argumentos exigidos pelos construtores parametrizados sejam fornecidos. Isto é como afirmar que novos objetos não podem ser criados sem tais dados, o que é consistente com muitas situações da realidade: criar uma conta corrente exige um argumento com o CPF de seu titular; matricular um aluno numa disciplina requer um argumento com seu RA; fazer algum cadastro na web precisa de um endereço de e-mail; e assim por diante.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O uso de construtores permite, então, definir como novos objetos de uma classe serão construídos, possibilitando exigir dados na ocasião de sua instanciação, permitindo tanto sua customização, quanto economizando código no preparo de novas instâncias.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-06.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-06.html&quot;&gt;POO-F-06-Sobrecarga&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-08.html&quot;&gt;POO-F-08-Encapsulamento&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-08.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsoft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/01/poo-f-07.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-3552308380549219386</guid><pubDate>Thu, 25 Jan 2018 02:00:00 +0000</pubDate><atom:updated>2018-01-28T20:26:45.047-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Fundamentos-06-Sobrecarga</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-05.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-05.html&quot;&gt;POO-F-05-Métodos&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-07.html&quot;&gt;POO-F-07-Construtores&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-06.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;A sobrecarga de métodos (&lt;i&gt;method overload&lt;/i&gt;) é a possibilidade de existirem várias operações com o mesmo nome em uma mesma classe [6][7]. É a manifestação mais simples do polimorfismo, uma das características mais importantes da OO.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnZd1DTQIq54V59SRutWlBLsXc6ft-huJNIM7TCVrKz_rPt4XJM9mc6ZsjuN9hvQB2MU182i6cVJagYH0_RD43nqiQ8LEv28U1i3kDktZVgk0uV9kpm7dO-E8D-LhJomtqPlOe62_Np10/s1600/overload-0.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;248&quot; data-original-width=&quot;647&quot; height=&quot;122&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnZd1DTQIq54V59SRutWlBLsXc6ft-huJNIM7TCVrKz_rPt4XJM9mc6ZsjuN9hvQB2MU182i6cVJagYH0_RD43nqiQ8LEv28U1i3kDktZVgk0uV9kpm7dO-E8D-LhJomtqPlOe62_Np10/s320/overload-0.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isto significa que dentro de uma classe podem existir métodos homônimos (com o mesmo nome), mas desde que possuam assinaturas (&lt;i&gt;signatures&lt;/i&gt;) diferentes. A assinatura de um método, ou sua &lt;i&gt;method signature&lt;/i&gt;, é a lista dos tipos de seus parâmetros formais, na exata ordem em que foram declarados, mesmo que existam repetições.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Sendo assim uma operação é considerada sobrecarregada (&lt;i&gt;overloaded&lt;/i&gt;) quando existirem várias declarações envolvendo um mesmo nome, mas sempre com assinaturas diferentes (na quantidade ou no tipo de seus parâmetros).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Considere a classe &lt;b&gt;Contador&lt;/b&gt;, criada com o propósito de armazenar o valor atual de uma contagem, além de prover vários métodos sobrecarregados de incremento, denominados &lt;i&gt;inc&lt;/i&gt;, como no código que segue.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class Contador {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double contagem;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;Contador() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; contagem = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;void inc() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; contagem = contagem + 1;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;void inc(int i) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; contagem = contagem + i;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;void inc(double d) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; contagem = contagem + d;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Neste exemplo, existem três métodos denominados &lt;i&gt;inc&lt;/i&gt;, cujas assinatura são:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;inc(void)&lt;/li&gt;
&lt;li&gt;inc(int)&lt;/li&gt;
&lt;li&gt;inc(double)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Assim, &lt;i&gt;inc&lt;/i&gt; é um método sobrecarregado, dotado de três versões que permitem incrementar o valor da contagem (um atributo interno da classe) com, respectivamente, o valor default um (um incremento unitário portanto), um valor inteiro indicado como argumento; ou um valor &lt;i&gt;double&lt;/i&gt; dado como argumento. O uso do mesmo nome é apropriado por que os três métodos fazem, conceitualmente, a mesma operação de incrementar o valor da contagem, assim a sobrecarga de métodos nesta situação é adequada porque existem maneiras diferentes de realizar-se tal operação.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdCk0J1v5TwehCqzlwaHSogoayOgmRoZHO8xjjla2_VloLIgYD956v0vbuLJufNxLdkPeEwN57KzAM9Qame6zg4HdrgwRkzdbfZ_gQuMO8S9ss8WUmYG11-_UurFhHLqz8s4cxsqD3LPs/s1600/overload-1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;185&quot; data-original-width=&quot;550&quot; height=&quot;107&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdCk0J1v5TwehCqzlwaHSogoayOgmRoZHO8xjjla2_VloLIgYD956v0vbuLJufNxLdkPeEwN57KzAM9Qame6zg4HdrgwRkzdbfZ_gQuMO8S9ss8WUmYG11-_UurFhHLqz8s4cxsqD3LPs/s320/overload-1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Conforme o tipo e valor dos argumentos fornecidos, é selecionado o método adequado na classe, como na figura acima e no fragmento de código que segue.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// cria novo contador iniciado em zero&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Contador cont = new Contador();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// efetua incrementos com operações sobrecarregadas&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;cont.inc(); // incremento unitário default&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;cont.inc(5); // incremento de cinco unidades inteiras&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;cont.inc(3.5); // incremento real de 3.5&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;System.out.println(cont.contagem); // exibe o resultado 9.5&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Destacamos que o valor de retorno não faz parte da assinatura, pois a resolução da sobrecarga, isto é, a seleção do método adequado se dá pelo tipo e número dos argumentos fornecidos. A resolução da sobrecarga emprega uma série de critérios que visa fazer a melhor escolha possível considerando os tipos dos argumentos na chamada e as versões disponíveis da função sobrecarregada, mas a ambiguidade não é permitida, exigindo que cada método sobrecarregado tenha uma assinatura distinta (listas distintas de número e tipos dos parâmetros formais).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outro exemplo do emprego da sobrecarga poderia ser na operação de um sub-array a partir de um array. Dado um array de n posições, um outro inteiro m poderia indicar o tamanho da porção inicial do sub-array (desde que m&amp;lt;=n). Para obter uma porção intermediária do array de n posições, deveriam ser especificados inteiros i e f, onde i&amp;lt;=f&amp;lt;=n. Um sub-array da parte final pode ser obtido com esta mesma operação. Neste caso temos duas versões de obtenção de sub-array:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;uma com dois parâmetros, o array e o tamanho m inteiro da porção inicial a ser extraída;&lt;/li&gt;
&lt;li&gt;outra com três parâmetros, o array, a posição inicial i inteira e a posição final f inteira da porção a ser extraída.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
E qual o tipo do array? Para cada tipo de array deveriam ser fornecidas as duas operações, evitando que o usuário da operação precise realizar coerção entre tipos! Assim, uma classe &lt;b&gt;SubArray&lt;/b&gt; poderia ter este par de métodos para todos os tipos primitivos do Java (&lt;i&gt;byte&lt;/i&gt;, &lt;i&gt;short&lt;/i&gt;, &lt;i&gt;int&lt;/i&gt;, &lt;i&gt;long&lt;/i&gt;, &lt;i&gt;float&lt;/i&gt;, &lt;i&gt;double&lt;/i&gt;, &lt;i&gt;boolean&lt;/i&gt; e &lt;i&gt;char&lt;/i&gt;) e também para o tipo &lt;b&gt;Object&lt;/b&gt;. Em C# a ideia é a mesma.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma versão &quot;incompleta&quot; de &lt;b&gt;SubArray&lt;/b&gt;, apenas para o tipo &lt;i&gt;int&lt;/i&gt;, poderia ser como segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class SubArray {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// obtém subarray inicial com tamanho m (posição m não inclusa)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;int[] subArray(int[] a, int m) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // verifica se tamanho m é válido&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (m &amp;gt; a.length) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&quot;valor invalido de m.&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // aloca novo array&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; int[] aux = new int[m];&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // copia elementos&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for(int p=0; p&amp;lt;m; p++) aux[p] = a[p];&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // retorna resultado&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return aux;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// obtém subarray entre início (i-incluso) e fim (f- não incl)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;int[] subArray(int[] a, int i, int f) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // verifica se posições são válidas&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (i &amp;gt; f || f &amp;gt; a.length) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;valores invalidos de i e/ou f.&quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // aloca novo array&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; int[] aux = new int[f-i];&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // copia elementos&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for(int p=i; p&amp;lt;f; p++) aux[p] = a[p];&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // retorna resultado&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return aux;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para usar esta classe basta:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// dispor de um array (de inteiros)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int[] array = { 0, 1, 2, 3, 4, 5, 6 }; // inicialização automática&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// instanciar objeto da classe SubArray&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;SubArray obj = new SubArray();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// obtém subarray inicial&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;{0,1,2}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int[] subArrayInicio = obj.subArray(array, 3);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// obtém subarray intermediário&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;{3,4,5}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int[] subArrayMeio = obj.subArray(array, 3, 6);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// obtém subarray final&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;{3,4,5,6}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int[] subArrayFim = obj.subArray(array, 3, 7);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;// obtém (sub)array cópia&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;{0,1,2,3,4,5,6}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;int[] arrayCopia = obj.subArray(array, 0, 7);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A classe &lt;b&gt;SubArray&lt;/b&gt; poderia ser melhorada, com uso de métodos estáticos e fatoração do próprio código, evitando a repetição de código semelhante, o que será feito na lição sobre membros estáticos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A sobrecarga também pode ser usada com construtores, como será visto na próxima lição, tornando-a muito conveniente para estabelecer também formas diferentes para a criação de objetos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Concluindo, a sobrecarga (&lt;i&gt;method overload&lt;/i&gt;) é o emprego do mesmo nome para operações sobre parâmetros de diferentes tipos [4][6][7][9], o que representa uma forma do polimorfismo. Seu emprego possibilita a construção de classes versáteis, onde a realização de certas operações admitem várias formas, cada qual conveniente para uma situação da programação, mais apropriada para cada uso.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-05.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-05.html&quot;&gt;POO-F-05-Métodos&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-07.html&quot;&gt;POO-F-07-Construtores&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-06.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/01/poo-f-06.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-72424643251171844.post-8751072185818964245</guid><pubDate>Tue, 23 Jan 2018 02:00:00 +0000</pubDate><atom:updated>2018-01-25T20:36:20.295-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Análise e Desenvolvimento de Sistemas</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Ciência da Computação</category><category domain="http://www.blogger.com/atom/ns#">FATEC</category><category domain="http://www.blogger.com/atom/ns#">IT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">OO</category><category domain="http://www.blogger.com/atom/ns#">Programação</category><category domain="http://www.blogger.com/atom/ns#">SENAC</category><category domain="http://www.blogger.com/atom/ns#">Tech</category><category domain="http://www.blogger.com/atom/ns#">Technology</category><category domain="http://www.blogger.com/atom/ns#">UNIP</category><title>POO::Fundamentos-05-Métodos</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-04.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-04.html&quot;&gt;POO-F-04-Atributos&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-06.html&quot;&gt;POO-F-06-Sobrecarga&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-05.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Sabemos que uma classe é um novo tipo de dados que pode ser definido pelo programador para descrever uma entidade real ou abstrata, ou seja, é um que especifica os objetos de um tipo determinado, por meio de uma descrição genérica de todos os elementos pertencentes ao conjunto que está sendo modelado.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm2nKRpr68KdFuZEjoff78ml_F8CglNOJhReNowH2v-fF5vsXUX214AiP7-ar699mj5JbSc6bLIZ8VOq_BTj4bhv_ZAbY54o0059Wjh4h6hTCp84jSKD2ZnLTsb379jscswmQjPDZBBzQ/s1600/objeto2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;74&quot; data-original-width=&quot;542&quot; height=&quot;43&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm2nKRpr68KdFuZEjoff78ml_F8CglNOJhReNowH2v-fF5vsXUX214AiP7-ar699mj5JbSc6bLIZ8VOq_BTj4bhv_ZAbY54o0059Wjh4h6hTCp84jSKD2ZnLTsb379jscswmQjPDZBBzQ/s320/objeto2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Como ilustrado na figura acima, as classes possuem:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;atributos&lt;/i&gt;, que descrevem as características dos objetos (sua aparência, sua constituição e seu estado); e&lt;/li&gt;
&lt;li&gt;&lt;i&gt;operações&lt;/i&gt;, que descrevem suas ações ou capacidades, realizadas sobre seus próprios atributos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
As classe são, portanto, constituídas por seus atributos (ou campos) e suas operações (ou métodos), os quais são conhecidos como &lt;i&gt;membros da classe&lt;/i&gt; [5][6][7][8]. Assim, os &lt;i&gt;atributos&lt;/i&gt; são as &lt;i&gt;variáveis-membro&lt;/i&gt; e as &lt;i&gt;operações&lt;/i&gt; são as &lt;i&gt;funções-membro&lt;/i&gt; da classe. Portanto, uma classe incorpora o conceito de tipo abstrato de dados, que define um conjunto de valores que representam este tipo, assim como as operações possíveis sobre tais valores [10].&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Enquanto os &lt;i&gt;atributos&lt;/i&gt; permitem armazenar informações relativas aos objetos, os &lt;i&gt;métodos&lt;/i&gt; (operações ou funções-membro) realizam ações sobre estes atributos, permitindo especificar modificações possíveis em um objeto. Isto significa que os métodos conferem um caráter dinâmico aos objetos, pois permitem que exibam um comportamento que, em muitos casos, pode simular ou imitar o comportamento de um objeto real.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outra forma de entender o que são os &lt;i&gt;métodos&lt;/i&gt; é imaginar que os objetos são capazes de enviar e receber mensagens, tais como comandos, de forma programas possam ser construídos com o uso de objetos que interagem entre sim trocando mensagens e&amp;nbsp; proporcionando o comportamento desejado. A metáfora aqui é que a ação de ligar um aparelho, acionando o controle apropriado, corresponde à mensagem &quot;&lt;i&gt;ligar&lt;/i&gt;&quot;. Quando realizamos esta ação no mundo real não é necessário que compreendamos os detalhes de funcionamento do aparelho em questão, mas apenas entender (superficialmente) como operá-lo.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os métodos são funções agregadas em uma classe, ou seja, são blocos de código aos quais se associam um nome, podendo retornar um valor de tipo específico e também receber valores (seus argumentos). Os métodos encapsulam funcionalidades ou capacidades em uma classe, constituindo um repertório de operações disponíveis &#39;naturalmente&#39; para seus objetos [6].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Tal como na matemática, uma função pode declarar parâmetros formais, que serão supridos pelos argumentos fornecidos no uso da função, que tem o papel de entrada de dados para a função. O valor de retorno é o resultado da função, que tem papel de saída da função. Para qualquer valor válido de entrada (&lt;i&gt;domínio&lt;/i&gt; da função) é produzido um valor correspondente (&lt;i&gt;imagem&lt;/i&gt; da função).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Os métodos são acionados por meio das instâncias de sua classe, ou seja, os objetos de seu tipo, produzindo resultados ou transformações nos atributos pertencentes ao objeto que os acionou, sem afetar os demais objetos da classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para usarmos um método de uma classe procedemos de forma análoga ao uso de seus atributos, isto é, escolhemos o objeto através de seu identificador e com o operador seletor (&#39;.&#39;) indicamos qual método deve ser acionado, suprindo os argumentos necessários tal como para funções, assim a chamada de um método tem a forma [4][7]:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;identificadorDoObjeto.nomeDoMétodo(listaDeArgumentos)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma classe &lt;b&gt;Caixa &lt;/b&gt;pode ser definida, em Java ou C# como segue, caracterizando suas dimensões e seu peso.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class Caixa {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double altura, largura, profundidade;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double peso;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Desta maneira, objetos do tipo &lt;b&gt;Caixa &lt;/b&gt;poderiam apenas representar caixas reais, sem prover qualquer outra facilidade.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Mas seria conveniente que a classe &lt;b&gt;Caixa &lt;/b&gt;dispusesse de uma operação para determinar seu volume, pois como esta medida está diretamente associada às dimensões do objeto, que são atributos da classe, é simples seu cálculo, não sendo necessário armazenar tal informação. Para declararmos um método em um classe basta definir uma função dentro do corpo da classe.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class Caixa {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double altura, largura, profundidade;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double peso;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double volume() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; double res = altura * largura * profundidade;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return res;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Devem ser observados os seguintes aspectos neste método:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;double volume () { ... }&lt;/span&gt;&lt;br /&gt;representa a declaração do método, como uma função denominada volume, que retorna um resultado do tipo double. Esta função não toma (não recebe) argumentos.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;return res;&lt;/span&gt;&lt;br /&gt;no código (no corpo) do método, a diretiva return tanto encerra sua execução, retornando ao ponto onde foi acionada, como permite o retorno do resultado da função.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;double res = altura * largura * profundidade;&lt;/span&gt;&lt;br /&gt;no corpo do método é possível tanto declarar-se variáveis locais, cujo escopo é limitado ao corpo do método, como utilizar os atributos/campos da classe.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O método &lt;i&gt;volume()&lt;/i&gt; adiciona uma funcionalidade/capacidade à classe &lt;b&gt;Caixa&lt;/b&gt;, que é determinar seu próprio volume, como um serviço. O código do exemplo é simples, constituído de uma expressão algébrica, mas poderia ser bastante mais complexo, utilizando variáveis de tipo primitivo ou outros objetos para determinar seu resultado.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O programa Java que segue mostra a criação e uso de um objeto do tipo &lt;b&gt;Caixa&lt;/b&gt;, com sua instanciação, definição de suas dimensões (uso dos atributos) e exibição do seu volume (uso do método) [7].&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class TestaCaixa {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;public static void main(String[] arg) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // instanciação do objeto tipo Caixa&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Caixa caixa = new Caixa();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // definição de dimensões (uso dos atributos)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; caixa.altura = 1.0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; caixa.largura = 2.5;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; caixa.profundidade = 3.0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // determinação e exibição do volume (uso do método)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;Volume = &quot; + caixa.volume());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Segue o programa equivalente em C# [11]:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class TestaCaixa {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;static void main() {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // instanciação do objeto tipo Caixa&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Caixa caixa = new Caixa();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // definição de dimensões (uso dos atributos)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; caixa.altura = 1.0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; caixa.largura = 2.5;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; caixa.profundidade = 3.0;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // determinação e exibição do volume (uso do método)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Console.WriteLine(&quot;Volume = &quot; + caixa.volume());&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Quando executados, estes programas exibem, no console, o resultado:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;gt; Volume = 7.5&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Consideremos agora um outro problema, de natureza financeira. É sabido que o valor futuro de um investimento inicial (ou valor presente) é uma função do tempo de aplicação e da taxa de juros, como mostra a relação que segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;ValorFuturo = ValorPresente * (1 + Juros)^Tempo&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Aqui o tempo é número inteiro de períodos de incidência da taxa de juros. Se os juros são diários, o tempo é dado em dias; se os juros são mensais, o tempo é dados em meses; e assim por diante. O valor presente e os juros são valores reais.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Poderia ser modelada uma classe para armazenar o valor presente e a taxa de juros, de maneira que o valor futuro fosse calculado em função do tempo de aplicação. Analise o código Java que segue:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;class Investimento {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double valorPresente;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double juros;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;double valorFuturo(int tempo) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return valorPresente * Math.pow(1 + juros, tempo);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Na classe &lt;b&gt;Investimento&lt;/b&gt;, o método &lt;i&gt;valorFuturo&lt;/i&gt; toma um argumento do tipo int para ser acionado. Tal argumento, denominado tempo, funciona como uma variável local no código do método. Para acionar o método, deve ser fornecido um inteiro, como por exemplo, considerando a existência de um objeto do tipo Investimento denominado investimento:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;investimento.valorFuturo(6);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Esta classe poderia ser usada como mostra o fragmento seguinte:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Investimento inv1 = new Investimento();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;inv1.valorPresente = 1000.00; // Valor inicial = R$1000.00&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;inv1.juros = 0.01; // Juros de 1% ao mês&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;for(int t=1; t&amp;lt;=4; t++) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; System.out.printf(&quot;Mes: %d ValorFuturo=R$%f\n&quot;, t, inv1.valorFuturo(t));&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O resultado deste fragmento é:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Mes: 1 ValorFuturo=R$1010,000000&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Mes: 2 ValorFuturo=R$1020,100000&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Mes: 3 ValorFuturo=R$1030,301000&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Mes: 4 ValorFuturo=R$1040,604010&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Conforme a necessidade do modelo programado, podem ser definidos tantos métodos quantos necessários em uma classe, com nenhum, um ou mais argumentos, utilizando qualquer combinação dos campos da classe e, até mesmo, outros métodos da própria classe, além de variáveis locais de qualquer tipo válido.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isto permite adicionar funcionalidades às classes, o que abre um universo de possibilidades para a programação e uso dos objetos.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table style=&quot;width: 100%px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-04.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;30&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s1600/prev.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-04.html&quot;&gt;POO-F-04-Atributos&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;42%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-06.html&quot;&gt;POO-F-06-Sobrecarga&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; width=&quot;8%&quot;&gt;&lt;a href=&quot;http://tecnopode.blogspot.com/2018/01/poo-f-05.html&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;34&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69LbpUqa6cHCfuV9CXq9FBBVEwQ-sdWE0wt5JLuv4uMedb5wcw0RkezUgCUcVeqstwI_nkBVK_YeB0BL9Cc_x62gfWPDXgVNvR0xgy7YoLVjBwWWdm4BnkrQ4IM2Rk-6ovxZuaSKkSlc/s1600/next.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h4&gt;
Referências Bibliográficas&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a. Ed. São Paulo: Pearson Prentice-Hall, 2005.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[6] JANDL JR., P. Introdução ao C++. São Paulo: Futura, 2003.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[7] JANDL JR., P.. Java - guia do programador. 3a. ed. São Paulo: Novatec, 2015.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[9] STROUSTRUP, B.. The C++ Programming Language. 3rd Ed. Reading: Addison-Wesley, 1997.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[10] LANGSAM, Y.; AUGENSTEIN, M. J.; TENENBAUM, A. M.. Data structures using C and C++. 2nd Ed. Upper Saddle River: Prentice-Hall, 1996.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
[11] WATSON, K.; NAGEL, C.; PEDERSEN, J.H.; REID, J.D.; SKINNER, M.; WHITE, E.. Beginning Microsft Visual C# 2008. Indianapolis: Wiley Publishing, 2008.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://tecnopode.blogspot.com/2018/01/poo-f-05.html</link><author>noreply@blogger.com (Prof. Peter Jandl Jr)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTSyyGPsWZ-tBstyClS73AJvzljmUgajhkNK0w0qNPTxY7_4r0TOk5gnZ3jHJ2QCzkYhMmmxfLzRsy_LqW8r54bZ9oKUqEetBQpam-3WR6VpysKlSL7u9MNkqJQTqiF3mtFPfxw98YX4A/s72-c/prev.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Itatiba - SP, Brasil</georss:featurename><georss:point>-23.0040152 -46.846797299999992</georss:point><georss:box>-23.2378532 -47.169520799999994 -22.770177200000003 -46.524073799999989</georss:box></item></channel></rss>