<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivo para Análise de Sistemas - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/category/analise-de-sistemas/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/category/analise-de-sistemas/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Wed, 09 Jul 2025 10:47:23 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.6</generator>
	<item>
		<title>O que é um bug em programação?</title>
		<link>https://www.bosontreinamentos.com.br/analise-de-sistemas/o-que-e-um-bug-em-programacao/</link>
					<comments>https://www.bosontreinamentos.com.br/analise-de-sistemas/o-que-e-um-bug-em-programacao/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 03 Apr 2025 19:47:56 +0000</pubDate>
				<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">https://www.bosontreinamentos.com.br/?p=20778</guid>

					<description><![CDATA[<p>O que é um bug em programação? E por que ele pode custar milhões (ou mesmo vidas) Se você estuda ou trabalha em alguma área relacionada à tecnologia, é altamente provável &#8211; quase certeza &#8211; que já se deparou com a expressão &#8220;bug&#8221; ou com algum verbo &#8220;abrasileirado&#8221;, como &#8220;bugar&#8221; ou &#8220;bugado&#8221;. Mas o que significa exatamente isso? Considere a seguinte situação: um comando simples, por exemplo programado para imprimir uma mensagem na tela dez vezes, acaba executando indefinidamente, sem qualquer critério de parada. O sistema permanece responsivo, mas o comportamento é claramente incorreto. Trata-se de um erro lógico comum — chamado de loop infinito — e é um exemplo clássico de bug em programação. Entendendo o conceito de bug Bugs são falhas no código-fonte que levam um programa a se comportar de forma inesperada ou incorreta. Podem resultar em pequenos transtornos, como uma interface mal formatada, ou em consequências graves, como perda de dados, travamentos do sistema e até riscos à segurança &#8211; ou ainda mais graves. Qualquer pessoa que já tenha escrito código, por mais simples que seja, inevitavelmente se depara com esse tipo de problema. Mas o que caracteriza, de fato, um bug? E por que eles [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/o-que-e-um-bug-em-programacao/">O que é um bug em programação?</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>O que é um bug em programação?</h1>
<h3><strong><em>E por que ele pode custar milhões (ou mesmo vidas)</em></strong></h3>
<p>Se você estuda ou trabalha em alguma área relacionada à tecnologia, é altamente provável &#8211; quase certeza &#8211; que já se deparou com a expressão &#8220;bug&#8221; ou com algum verbo &#8220;abrasileirado&#8221;, como &#8220;bugar&#8221; ou &#8220;bugado&#8221;. Mas o que significa exatamente isso?</p>
<p>Considere a seguinte situação: um comando simples, por exemplo programado para imprimir uma mensagem na tela dez vezes, acaba executando indefinidamente, sem qualquer critério de parada. O sistema permanece responsivo, mas o comportamento é claramente incorreto. Trata-se de um erro lógico comum — chamado de loop infinito — e é um exemplo clássico de bug em programação.</p>
<h2>Entendendo o conceito de bug</h2>
<p>Bugs são falhas no código-fonte que levam um programa a se comportar de forma inesperada ou incorreta. Podem resultar em pequenos transtornos, como uma interface mal formatada, ou em consequências graves, como perda de dados, travamentos do sistema e até riscos à segurança &#8211; ou ainda mais graves.</p>
<p>Qualquer pessoa que já tenha escrito código, por mais simples que seja, inevitavelmente se depara com esse tipo de problema.</p>
<p>Mas o que caracteriza, de fato, um bug? E por que eles continuam sendo tão prevalentes mesmo com os avanços nas ferramentas de desenvolvimento e boas práticas de engenharia de software? </p>
<p>Ao contrário do que muitos pensam, computadores não “pensam” ou “entendem” intenções. Eles fazem exatamente o que mandamos — o problema é que nem sempre mandamos a coisa certa. Eles costumam surgir por erro humano: um código mal projetado, uma lógica mal pensada ou até mesmo por uma simples distração na digitação.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-20779 size-full" title="Infográfico: O que é um Bug" src="https://www.bosontreinamentos.com.br/wp-content/uploads/2025/04/bug-infografico.jpg" alt="Infográfico: O que é um Bug" width="467" height="711" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2025/04/bug-infografico.jpg 467w, https://www.bosontreinamentos.com.br/wp-content/uploads/2025/04/bug-infografico-276x420.jpg 276w" sizes="auto, (max-width: 467px) 100vw, 467px" /></p>
<h2>A origem do termo &#8220;bug&#8221;</h2>
<p>A palavra bug (que literalmente significa &#8220;inseto&#8221; em inglês) foi popularizada pela almirante Grace Hopper em 1947. Durante a manutenção de um computador eletromecânico Mark II, uma mariposa foi encontrada presa em um relé, provocando falhas. O inseto foi cuidadosamente colado no diário de bordo com a legenda: &#8220;<em>First actual case of bug being found</em>&#8221; (em português, &#8220;Primeiro caso real de um bug sendo encontrado&#8221;).</p>
<p>A partir de então, o termo passou a ser usado para qualquer tipo de erro ou falha que ocorra em sistemas computacionais, não só de hardware, mas também (e hoje, principalmente) de software.</p>
<div id="attachment_20787" style="width: 510px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-20787" class="wp-image-20787 size-full" src="https://www.bosontreinamentos.com.br/wp-content/uploads/2025/04/bug-original-mark-I.jpg" alt="Primeiro bug de computador encontrado" width="500" height="317" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2025/04/bug-original-mark-I.jpg 500w, https://www.bosontreinamentos.com.br/wp-content/uploads/2025/04/bug-original-mark-I-420x266.jpg 420w" sizes="auto, (max-width: 500px) 100vw, 500px" /><p id="caption-attachment-20787" class="wp-caption-text">Primeiro &#8220;bug&#8221; de computador encontrado &#8211; literalmente. Mariposa presa em um relé em um painel do Mark II durante um teste na Universidade de Harvard, em 09 de setembro de 1947. Os operadores que a encontraram a afixaram no livro de registros do computador, com a frase &#8220;Primeiro caso real de um bug sendo encontrado&#8221;</p></div>
<h2>Os três principais tipos de bug</h2>
<p>Os bugs nem sempre se manifestam da mesma forma. Alguns são fáceis de identificar, outros podem passar despercebidos por muito tempo. Os principais tipos incluem:</p>
<h3>1. Erros de sintaxe</h3>
<p>São falhas na escrita do código — algo como esquecer de fechar aspas, colocar um ponto e vírgula onde não devia (ou não colocar), ou ainda digitar comandos inválidos. A boa notícia? São geralmente detectados imediatamente na hora da compilação ou interpretação, ou mesmo apontados pelo IDE antes mesmo de tentar executar o programa para testá-lo.</p>
<h3>2. Erros de execução (runtime)</h3>
<p>Esses erros só aparecem quando o programa está rodando. Um exemplo clássico é a tentativa de divisão de um número por zero. O código-fonte parece correto, a aplicação roda normalmente, realiza cálculos com precisão, até que&#8230; bum!,  a execução para bruscamente quando uma tentativa de divisão por zero ocorre, podendo ocasionar desde a parada da execução da aplicação até o travamento completo do sistema.</p>
<h3>3. Erros semânticos (ou de lógica)</h3>
<p>São os mais traiçoeiros e difíceis de detectar. O programa roda, executa tudo sem travar, apresenta a saída para o usuário, mas os resultados estão errados — e às vezes ninguém percebe. Um caso comum ocorre com determinados cálculos matemáticos &#8211; o sistema efetua os cálculos solicitados, mas por conta de um bug lógico o resultado apresentado é incorreto, e o usuário pode não perceber o problema.</p>
<p>Esse tipo de erro pode causar grandes transtornos, desde perdas financeiras até acidentes fatais.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-20781 size-full" title="Infográfico: Tipos de Bugs em programação" src="https://www.bosontreinamentos.com.br/wp-content/uploads/2025/04/infografico-tipos-bugs.jpg" alt="Infográfico: Tipos de Bugs em programação" width="475" height="715" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2025/04/infografico-tipos-bugs.jpg 475w, https://www.bosontreinamentos.com.br/wp-content/uploads/2025/04/infografico-tipos-bugs-279x420.jpg 279w" sizes="auto, (max-width: 475px) 100vw, 475px" /></p>
<h2>Quando um bug deixa de ser só um incômodo</h2>
<p>Se você acha que um bug é só um erro inofensivo que causa irritação, pense de novo. Bugs já causaram prejuízos bilionários e, em casos extremos, até mortes.</p>
<p>Citemos alguns exemplos notáveis:</p>
<ul>
<li><strong>Nuclear Gandhi</strong>: No jogo Sid Meier’s Civilization (1991), um erro no sistema de agressividade das civilizações fazia com que o personagem do pacifista Mahatma Gandhi, inicialmente programado com o menor nível possível de agressividade, se tornasse extremamente beligerante após adoção de políticas democráticas. Devido a um <em>underflow</em> (valor abaixo do mínimo) no valor da variável, seu nível de agressividade era reduzido para um valor negativo, que acabava sendo interpretado como o valor máximo permitido.<br />
O resultado: um Gandhi obcecado por armas nucleares — um bug icônico da história dos games. Divertido? Sim. Mas ainda um bug.</li>
<li><strong>Therac-25</strong>: Entre 1985 e 1987, um equipamento de radioterapia de nome Therac-25, usado no tratamento de câncer, apresentou falhas críticas causadas por erros de programação em seu sistema de controle. Devido à ausência de verificações adequadas e à confiança excessiva em software, o dispositivo permitia que doses de radiação muito acima do limite seguro fossem aplicadas nos pacientes em tratamento.<br />
Seis pacientes morreram por exposição acidental a níveis fatais de radiação. </li>
<li><strong>Mars Climate Orbiter</strong>: Em setembro de 1999, a NASA perdeu contato com a sonda Mars Climate Orbiter pouco antes de sua inserção na órbita do planeta Marte. A falha ocorreu porque um módulo do software produzia dados de impulso na unidade libras-força (sistema imperial), enquanto outro módulo esperava receber esses dados em newtons (sistema métrico).<br />
A ausência de conversão entre unidades resultou em um erro de trajetória fatal, fazendo com que a sonda descesse demais na atmosfera marciana e fosse destruída. O prejuízo estimado ultrapassou US$ 327 milhões.</li>
<li><strong>Guitar Hero II</strong>: Em 2007, uma atualização lançada para o jogo Guitar Hero II em sua versão para o console Xbox 360 causou problemas sérios de estabilidade em diversos aparelhos. Alguns dispositivos passaram a apresentar falhas críticas após a atualização, incluindo travamentos frequentes e, em muitos casos, o temido &#8220;<em>Red Ring of Death</em>&#8221; (Anel Vermelho da Morte) — um erro fatal de hardware que inutilizava o console. Embora o bug fosse de software, seu impacto foi sentido no hardware, resultando em muitas unidades defeituosas.</li>
</ul>
<div id="attachment_20788" style="width: 410px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-20788" class="wp-image-20788 size-full" src="https://www.bosontreinamentos.com.br/wp-content/uploads/2025/04/therac-25-maquina-bug.webp" alt="" width="400" height="296" /><p id="caption-attachment-20788" class="wp-caption-text">Máquina para tratamento de câncer Therac-25</p></div>
<h2>Como lidar com bugs: a arte da depuração</h2>
<p>O processo de encontrar e corrigir bugs é conhecido como <em>debugging</em> (em português, <strong>depuração</strong>). Ferramentas chamadas depuradores (ou debuggers) ajudam a examinar o código linha por linha, inspecionar variáveis e identificar o ponto exato em que tudo começa a dar errado.</p>
<p>Ambientes de desenvolvimento (IDEs) modernos geralmente vêm com depuradores embutidos, tornando essa tarefa um pouco menos ingrata e mais fácil de realizar.</p>
<p><img loading="lazy" decoding="async" class="wp-image-20780 size-full aligncenter" title="Infográfico: melhores práticas para evitar bugs" src="https://www.bosontreinamentos.com.br/wp-content/uploads/2025/04/infografico-bugs-melhores-praticas.jpg" alt="Infográfico: melhores práticas para evitar bugs" width="440" height="683" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2025/04/infografico-bugs-melhores-praticas.jpg 440w, https://www.bosontreinamentos.com.br/wp-content/uploads/2025/04/infografico-bugs-melhores-praticas-271x420.jpg 271w" sizes="auto, (max-width: 440px) 100vw, 440px" /></p>
<h2>Prevenção de bugs: manipulação de exceções</h2>
<p>Outro recurso fundamental é o tratamento de exceções. Trata-se de prever que algo pode dar errado (como dividir um número por zero em um cálculo) e preparar o programa para lidar com isso de forma antecipada, sem falhar completamente. Linguagens de alto nível como Java, Python e C# têm mecanismos específicos para isso, como os blocos try&#8230;catch.</p>
<p><strong>Exemplo em Java:</strong></p>
<pre><strong>import java.util.Scanner;</strong>
<strong>public class Divisao {</strong>
<strong>  public static void main(String[] args) {</strong>
<strong>    Scanner entrada = new Scanner(System.in);</strong>
<strong>    System.out.print("Digite o valor de a: ");</strong>
<strong>    int a = entrada.nextInt();</strong>
<strong>    System.out.print("Digite o valor de b: ");</strong>
<strong>    int b = entrada.nextInt();</strong>
<strong>    int c = a / b; <span style="color: #339966;">// BUG EM POTENCIAL: pode lançar ArithmeticException se b = 0</span></strong>
<strong>    System.out.println("Resultado = " + c);</strong>
<strong>    entrada.close();</strong>
<strong>  }</strong>
<strong>}</strong></pre>
<p>Neste exemplo, se o usuário digitar o valor zero ao entrar com o valor de b, será feita uma divisão por zero ao executar o cálculo da variável c. Qualquer outra divisão funcionará, exceto essa.</p>
<p>Ou seja, se b for igual a zero, o programa lançará uma exceção do tipo <em>ArithmeticException</em> e será encerrado abruptamente. Esse é um exemplo clássico de erro de tempo de execução (<em>runtime error</em>), causado por não tratar uma condição excepcional comum.</p>
<p>Como tratar isso? Uma solução é realizar a manipulação dessa exceção, como segue:</p>
<pre><strong>import java.util.Scanner;</strong>
<strong>public class DivisaoSegura {</strong>
<strong>  public static void main(String[] args) {</strong>
<strong>    Scanner entrada = new Scanner(System.in);</strong>
<strong>    System.out.print("Digite o valor de a: ");</strong>
<strong>    int a = entrada.nextInt();</strong>
<strong>    System.out.print("Digite o valor de b: ");</strong>
<strong>    int b = entrada.nextInt();</strong>
<strong>    try {</strong>
<strong>      int c = a / b;</strong>
<strong>      System.out.println("Resultado = " + c);</strong>
<strong>    }
    catch (ArithmeticException e) {</strong>
<strong>      System.out.println("Não é possível dividir por zero.");</strong>
<strong>      System.out.println(e);</strong>
<strong>    }</strong>
<strong>    entrada.close();</strong>
<strong>  }</strong>
<strong>}</strong></pre>
<p>Neste caso a exceção (erro) ArithmeticException foi tratada por meio do uso de um bloco <em>try .. catch</em>, que impedirá o travamento do sistema caso seja fornecido o valor zero à variável b, exibindo em vez disso a mensagem mais amigável &#8220;<em>Não é possível dividir por zero</em>&#8221; ao usuário..</p>
<h2>Testes: prevenindo problemas</h2>
<p>A melhor forma de combater bugs é evitá-los desde o início. Testes de software — tanto manuais quanto automatizados — são parte essencial do desenvolvimento. Eles verificam se o programa atende aos requisitos e ajudam a identificar falhas antes que elas possam causar estragos maiores.</p>
<p>Entre os tipos de testes mais comuns estão:</p>
<ul>
<li>Testes unitários: verificam o funcionamento de partes específicas do código.</li>
<li>Testes de integração: checam se os módulos interagem corretamente.</li>
<li>Testes de sistema: avaliam o sistema como um todo.</li>
<li>Testes de aceitação: garantem que o software atende ao que o cliente espera.</li>
</ul>
<h2>Bugs no mundo real: onde menos se espera</h2>
<p>É importante lembrar que nem só de software vive o mundo dos bugs. Hardware também pode apresentar falhas semelhantes, como erros de projeto em placas, aquecimento excessivo ou falhas elétricas. Mas no fim das contas, tudo parte da mesma raiz: uma falha humana durante a concepção ou implementação de um projeto.</p>
<h2>Conclusão: errar é humano, depurar é essencial</h2>
<p>Bugs fazem parte da vida de qualquer programador. Não há como evitá-los completamente, mas é possível preveni-los, detectá-los rapidamente e corrigi-los antes que causem problemas sérios.</p>
<p>Com boas práticas de codificação, testes constantes e ferramentas adequadas, dá para dormir mais tranquilo. Ou ao menos, sem sonhar com mariposas voando entre os relés.</p>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/o-que-e-um-bug-em-programacao/">O que é um bug em programação?</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/analise-de-sistemas/o-que-e-um-bug-em-programacao/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>O que é uma API &#8211; Conceitos de Computação</title>
		<link>https://www.bosontreinamentos.com.br/analise-de-sistemas/o-que-e-uma-api-conceitos-de-computacao/</link>
					<comments>https://www.bosontreinamentos.com.br/analise-de-sistemas/o-que-e-uma-api-conceitos-de-computacao/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 17 Mar 2023 10:53:28 +0000</pubDate>
				<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Desenvolvimento de Software]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Web]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=17107</guid>

					<description><![CDATA[<p>O que é uma API A sigla API significa Application Programming Interface, ou Interface de Programação de Aplicações, em português. É um conjunto de protocolos, rotinas e ferramentas que permitem que diferentes aplicativos de software se comuniquem entre si. As APIs agem como intermediárias entre aplicativos de software, permitindo que eles troquem dados e acessem as funcionalidades uns dos outros. Uma API define um conjunto específico de regras e padrões para a construção de aplicativos de software, especificando como os componentes de software devem interagir uns com os outros. Ela fornece uma maneira padronizada para diferentes aplicativos acessarem e compartilharem dados e serviços, sem exigir que os desenvolvedores desses aplicativos entendam os detalhes de implementação subjacentes. Trata-se de uma forma de comunicação entre duas aplicações de computador, que permite a troca de informações por meio de uma rede, como a Internet, usando uma linguagem em comum, que as aplicações conseguem entender. A empresa ou organização que oferece uma API é chamada de fornecedor da API. Arquitetura de uma API Para que serve uma API? Uma API fornece acesso a dados e serviços que permitem o rápido desenvolvimento de aplicações dos mais variados tipos. As APIs são amplamente utilizadas no desenvolvimento [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/o-que-e-uma-api-conceitos-de-computacao/">O que é uma API &#8211; Conceitos de Computação</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>O que é uma API</h2>
<p>A sigla API significa <em><strong>Application Programming Interface</strong></em>, ou <strong>Interface de Programação de Aplicações</strong>, em português. É um conjunto de protocolos, rotinas e ferramentas que permitem que diferentes aplicativos de software se comuniquem entre si.</p>
<p>As APIs agem como intermediárias entre aplicativos de software, permitindo que eles troquem dados e acessem as funcionalidades uns dos outros.</p>
<p>Uma API define um conjunto específico de regras e padrões para a construção de aplicativos de software, especificando como os componentes de software devem interagir uns com os outros.</p>
<p>Ela fornece uma maneira padronizada para diferentes aplicativos acessarem e compartilharem dados e serviços, sem exigir que os desenvolvedores desses aplicativos entendam os detalhes de implementação subjacentes.</p>
<p>Trata-se de uma forma de comunicação entre duas <strong>aplicações</strong> de computador, que permite a troca de informações por meio de uma rede, como a Internet, usando uma linguagem em comum, que as aplicações conseguem entender.</p>
<p>A empresa ou organização que oferece uma API é chamada de <em>fornecedor da API</em>.</p>
<div id="attachment_18908" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18908" class="wp-image-18908 size-large" title="Arquitetura de uma API" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/API-arquitetura-1024x353.png" alt="Arquitetura de uma API" width="1024" height="353" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/API-arquitetura-1024x353.png 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/API-arquitetura-420x145.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/API-arquitetura-768x265.png 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/API-arquitetura.png 1139w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-18908" class="wp-caption-text">Arquitetura de uma API</p></div>
<h3>Para que serve uma API?</h3>
<p>Uma API fornece acesso a dados e serviços que permitem o rápido desenvolvimento de aplicações dos mais variados tipos.</p>
<p>As APIs são amplamente utilizadas no desenvolvimento de software para permitir a integração entre diferentes sistemas de software, facilitar a troca e o compartilhamento de dados e agilizar o processo de desenvolvimento.</p>
<p>Elas são comumente usadas para desenvolver aplicativos da web e móveis, bem como para integrar serviços de terceiros e fontes de dados em aplicativos de software existentes.</p>
<h3>Especificações de APIs</h3>
<p>As APIs seguem uma especificação, o que na prática significa que:</p>
<ul>
<li>O fornecedor da API descreve exatamente as funcionalidades que a API irá oferecer</li>
<li>O fornecedor também descreve quando as funcionalidade estarão disponíveis, e quando existe a possibilidade de alterações nestas funcionalidades</li>
<li>O fornecedor da API também por estabelecer restrições técnicas ao uso da API, como limites de uso de banda, quantidade de acessos permitidos por uma aplicação, entre outras.</li>
<li>Os desenvolvedores (usuários) concordam em usar a API da forma como ela é descrita, seguindo as regras estabelecidas pelo fornecedor da API.</li>
</ul>
<p>O fornecedor da API pode também:</p>
<ul>
<li>Fornecer mecanismos para acesso à API</li>
<li>Fornecer documentação para ajudar a entender como ela funciona e como usá-la</li>
<li>Distribuir programas de exemplo para auxiliar os desenvolvedores interessados na API</li>
</ul>
<p>entre outros.</p>
<p>Algumas APIs são abertas a todos os desenvolvedores, algumas apenas para colaboradores e parceiros e outras são empregadas apenas internamente em uma empresa, por exemplo facilitando a comunicação e colaboração entre os times de desenvolvimento.</p>
<h3>Tipos de APIs</h3>
<p>As APIs podem ser públicas ou privadas, dependendo do público-alvo e da finalidade.</p>
<ul>
<li>APIs públicas são projetadas para serem usadas por desenvolvedores externos e normalmente são disponibilizadas por meio de documentação e portais de desenvolvedores.</li>
<li>Já as APIs privadas, por outro lado, são usadas dentro de uma organização ou por um conjunto específico de usuários e normalmente não são expostas a desenvolvedores externos.</li>
</ul>
<h3>Exemplos de APIs</h3>
<p>Existem muitos exemplos de APIs públicas que são amplamente utilizadas por desenvolvedores para criar aplicativos da web e móveis, bem como para integrar serviços de terceiros e fontes de dados em aplicativos de software existentes. A seguir listo alguns exemplos:</p>
<ul>
<li><strong>API do Google Maps</strong>: A <a href="https://cloud.google.com/apis" target="_blank" rel="noopener">API do Google Maps</a> permite que os desenvolvedores integrem o Google Maps em seus aplicativos, fornecendo aos usuários recursos como geocodificação, direções e atualizações de tráfego em tempo real.</li>
<li><strong>API do Twitter</strong>: A <a href="https://developer.twitter.com/en/docs/twitter-api" target="_blank" rel="noopener">API do Twitter</a> permite que os desenvolvedores acessem dados e funcionalidades do Twitter, como pesquisar tweets, postar tweets e recuperar informações do usuário.</li>
<li><strong>API do Facebook</strong>: A <a href="https://developers.facebook.com/docs/pages/" target="_blank" rel="noopener">API do Facebook</a> permite integração da funcionalidade do Facebook em seus aplicativos, como permitir que os usuários façam login com suas contas do Facebook, recuperar informações do usuário e postar nprópria rede social.</li>
<li><strong>API OpenWeatherMap</strong>: A <a href="https://openweathermap.org/api" target="_blank" rel="noopener">API OpenWeatherMap</a> fornece aos desenvolvedores acesso a dados meteorológicos de todo o mundo, incluindo condições atuais do clima e tempo, previsões e dados históricos.</li>
<li><strong>API do GitHub</strong>: A <a href="https://docs.github.com/en/rest" target="_blank" rel="noopener">API do GitHub</a> permite que o acesso às funcionalidades do GitHub, como gerenciamento de repositórios, criação de requisições e recuperação de informações do usuário.</li>
</ul>
<h3>Conclusão</h3>
<p>No geral, as APIs desempenham um papel crucial no desenvolvimento de software moderno, permitindo que os desenvolvedores criem aplicativos de software mais robustos e interconectados que podem se comunicar e trocar dados perfeitamente entre si.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/o-que-e-uma-api-conceitos-de-computacao/">O que é uma API &#8211; Conceitos de Computação</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/analise-de-sistemas/o-que-e-uma-api-conceitos-de-computacao/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>7 Linguagens de Programação Funcional para aprender em 2022</title>
		<link>https://www.bosontreinamentos.com.br/analise-de-sistemas/7-linguagens-de-programacao-funcional-para-aprender-em-2022/</link>
					<comments>https://www.bosontreinamentos.com.br/analise-de-sistemas/7-linguagens-de-programacao-funcional-para-aprender-em-2022/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 07 Jun 2022 14:37:00 +0000</pubDate>
				<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Programação Funcional]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18208</guid>

					<description><![CDATA[<p>7 Linguagens de Programação Funcional para aprender em 2022 Aprender novas linguagens de programação é uma tarefa comum na carreira de um desenvolvedor de software. Comumente precisamos usar linguagens diferentes em novos projetos, e algumas áreas da tecnologia se beneficiam do emprego de linguagens específicas, que possuem recursos mais adaptados a determinadas tarefas, como Ciência de Dados, Computação em Nuvem, Automação de Tarefa e outras. Vamos falar neste artigo sobre uma categoria de linguagens muito especial- as linguagens de programação funcional, que são muito empregadas nas áreas supracitadas, entre outras. Mas antes, vamos entender oque é programação funcional. O que é Programação Funcional? Programação funcional é um paradigma na programação no qual podemos executar toda a codificação de uma aplicação usando apenas funções (matemáticas). Ao contrário de paradigmas como a programação orientada a objetos, na programação funcional nos preocupamos apenas com &#8220;o que é&#8221; em vez de &#8220;como&#8221; resolver um problema. Com a programação funcional, aprender novas ferramentas, paradigmas e perspectivas é um processo mais suave e simples e geralmente resulta em um código mais limpo e organizado. Assim, podemos dizer que linguagens de programação funcional oferecem uma forma &#8220;compacta&#8221; de programação. Alguns dos recursos oferecidos por essas linguagens incluem o [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/7-linguagens-de-programacao-funcional-para-aprender-em-2022/">7 Linguagens de Programação Funcional para aprender em 2022</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>7 Linguagens de Programação Funcional para aprender em 2022</h2>
<p>Aprender novas linguagens de programação é uma tarefa comum na carreira de um desenvolvedor de software. Comumente precisamos usar linguagens diferentes em novos projetos, e algumas áreas da tecnologia se beneficiam do emprego de linguagens específicas, que possuem recursos mais adaptados a determinadas tarefas, como Ciência de Dados, Computação em Nuvem, Automação de Tarefa e outras.</p>
<p>Vamos falar neste artigo sobre uma categoria de linguagens muito especial- as linguagens de programação funcional, que são muito empregadas nas áreas supracitadas, entre outras. Mas antes, vamos entender oque é programação funcional.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-18218 size-medium" title="O que é Linguagem de Programação Funcional" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/linguagem-programacao-funcional-420x416.png" alt="O que é Linguagem de Programação Funcional" width="420" height="416" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/linguagem-programacao-funcional-420x416.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/linguagem-programacao-funcional-768x760.png 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/linguagem-programacao-funcional-1024x1013.png 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/linguagem-programacao-funcional.png 1035w" sizes="auto, (max-width: 420px) 100vw, 420px" /></p>
<h3>O que é Programação Funcional?</h3>
<p>Programação funcional é um paradigma na programação no qual podemos executar toda a codificação de uma aplicação usando apenas funções (matemáticas). Ao contrário de paradigmas como a <a href="http://www.bosontreinamentos.com.br/analise-de-sistemas/conceitos-gerais-de-programacao-orientada-a-objetos/">programação orientada a objetos</a>, na programação funcional nos preocupamos apenas com &#8220;o que é&#8221; em vez de &#8220;como&#8221; resolver um problema.</p>
<p>Com a programação funcional, aprender novas ferramentas, paradigmas e perspectivas é um processo mais suave e simples e geralmente resulta em um código mais limpo e organizado.</p>
<p>Assim, podemos dizer que linguagens de programação funcional oferecem uma forma &#8220;compacta&#8221; de programação. Alguns dos recursos oferecidos por essas linguagens incluem o reuso de código e as melhorias de eficiência resultantes, uma legibilidade comparativamente melhor e uma sintaxe bastante simples de depurar.</p>
<p>Além disso, a maioria das linguagens de programação funcionais se integram e trabalham muito bem em tarefas voltadas à ciência de dados.</p>
<p>Vamos às 7 linguagens de programação funcional recomendadas que podem ser úteis em sua carreira como programador, e que valem a pena aprender neste ano.</p>
<h3>7 Linguagens de Programação Funcional</h3>
<h4>1. Clojure</h4>
<p>Linguagem de programação de uso geral, compatível com Java Virtual Machine (JVM) e que evita duplicação durante chamadas ao <a href="http://www.bosontreinamentos.com.br/category/java/">Java</a>. É altamente acessível e interativa para um estilo de programação multithread. Apesar de ser uma linguagem compilada, oferece vários recursos importantes que são suportados em tempo de execução.</p>
<p>Site oficial: <a href="https://clojure.org/" target="_blank" rel="noopener">https://clojure.org/</a></p>
<h4>2. Elixir</h4>
<p>Uma linguagem de programação que suporta concorrência elevada e com baixa latência, é comumente empregada na construção de aplicativos escaláveis ​​e versáteis, com suporte adicional para baixa latência e tolerância a falhas.</p>
<p>Caso você precise projetar um aplicativo para atender a uma grande quantidade de solicitações, Elixir é uma linguagem altamente recomendada, por combinar os melhores recursos e características de linguagens como Clojure, Erlang e Ruby, oferecendo suporte a aplicações com threads múltiplas (multithread).</p>
<p>Site oficial: <a href="https://elixir-lang.org/" target="_blank" rel="noopener">https://elixir-lang.org/</a></p>
<h4>3. Haskell</h4>
<p>O Haskell é uma linguagem de programação funcional avançada, com uma sintaxe declarativa e que pode ser digitada estaticamente. Isso significa que se trata de uma linguagem do tipo de compilação, e essa linguagem fornece mensagens de erro quando a sintaxe está errada, auxiliando muito o processo de debugging do código.</p>
<p>No geral, é empregada na criação de programas de alto desempenho, pois é excelente no quesito otimização. A avaliação dos argumentos facilita a composição abrangente e um melhor controle dos construtos.</p>
<p>Site oficial: <a href="https://www.haskell.org/" target="_blank" rel="noopener">https://www.haskell.org/</a></p>
<h4>4. Scala</h4>
<p>A linguagem Scala combina recursos tanto de linguagens estáticas quanto de linguagens dinâmicas, sendo usada para criar pipelines de dados e projetos de Big Data. Possuindo um ecossistema gigante de bibliotecas, seus tipos estáticos ajudam a evitar bugs em aplicações complexas.</p>
<p>Muito compatível com Java e a JVM, fornece programação totalmente funcional com funções classificadas como objetos de primeira classe.</p>
<p>Site oficial: <a href="https://www.scala-lang.org/" target="_blank" rel="noopener">https://www.scala-lang.org/</a></p>
<h4>5. Elm</h4>
<p>A linguagem Elm, não tão conhecida quanto as outras nessa lista, é mais adequada para a criação de aplicativos Web e também apps <a href="http://www.bosontreinamentos.com.br/category/html/">HTML</a>, e possui características interessantes como refatoração bastante simplificada, pois ela possui um compilador muito inteligente.</p>
<p>Alimentados por uma estrutura bem arquitetada, os aplicativos em Elm são renderizados muito rapidamente.</p>
<p>A linguagem possui alta interoperabilidade com <a href="http://www.bosontreinamentos.com.br/category/programacao-em-javascript/">JavaScript</a> e permite leitura fácil de seu código, podendo ser aplicada a diferentes projetos sem a necessidade de refazer o padrão que o código possuía anteriormente.</p>
<p>Site oficial: <a href="https://elm-lang.org/" target="_blank" rel="noopener">https://elm-lang.org/</a></p>
<h4>6. F#</h4>
<p>O F# (&#8220;<em>F sharp</em>&#8220;) é uma linguagem de programação de código aberto e multiplataforma, usada principalmente para escrever código robusto. Trata-se de uma versão funcional da <a href="http://www.bosontreinamentos.com.br/category/csharp/">linguagem C#</a> (da Microsoft) e possui uma sintaxe fácil de entender. Possui suporte a correspondência de padrões e programação assíncrona com um conjunto diversificado de tipos de dados.</p>
<p>O F# pode realizar transformação de dados com a ajuda de funções porque segue um paradigma de programação funcional orientado a dados.</p>
<p>Site oficial: <a href="https://fsharp.org/" target="_blank" rel="noopener">https://fsharp.org/</a></p>
<h4>7. Erlang</h4>
<p>O Erlang é uma linguagem de programação orientada a processos que emprega usa processos leves. A beleza desta linguagem está em sua capacidade de criar funções que se comunicam entre si.<br />
É considerada a melhor linguagem de programação para aplicações baseadas em mensagens, como por exemplo aplicativos de bate-papo (chat apps), filas de mensagens e aplicativos da blockchain.</p>
<p>Os programas escritos em Erlang acabam sendo altamente responsivos devido ao gerenciamento automatizado de armazenamento e coleta de lixo (garbage collection) da linguagem implementados por processo.</p>
<p>Site oficial: <a href="https://www.erlang.org/" target="_blank" rel="noopener">https://www.erlang.org/</a></p>
<h3>Referências</h3>
<p>Adaptado de <a href="https://www.analyticsinsight.net/top-10-functional-programming-languages-to-know-in-2022/" target="_blank" rel="noopener">https://www.analyticsinsight.net/top-10-functional-programming-languages-to-know-in-2022/</a></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/7-linguagens-de-programacao-funcional-para-aprender-em-2022/">7 Linguagens de Programação Funcional para aprender em 2022</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/analise-de-sistemas/7-linguagens-de-programacao-funcional-para-aprender-em-2022/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>7 erros que todo programador deve evitar ao desenvolver software</title>
		<link>https://www.bosontreinamentos.com.br/analise-de-sistemas/7-erros-que-todo-programador-deve-evitar-ao-desenvolver-software/</link>
					<comments>https://www.bosontreinamentos.com.br/analise-de-sistemas/7-erros-que-todo-programador-deve-evitar-ao-desenvolver-software/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 08 Mar 2022 18:18:54 +0000</pubDate>
				<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18130</guid>

					<description><![CDATA[<p>7 erros que todo Programador deve evitar Programação de computadores é uma tarefa que pode ser altamente complexa, cheia de detalhes minuciosos, e altamente propensa a erros. E, no geral, a maioria dos problemas associados a software se refere a código mal escrito, que não segue normas ou padrões, e que foi criado sem o devido cuidado. Em outras palavras, boa parte dos bugs em software são causados pelos próprios desenvolvedores &#8211; evidentemente, sem intenção. Por isso é essencial prestar a máxima atenção ao trabalho realizado quando um software ou sistema de softwares é construído. Muitos problemas podem ser evitados se algumas regras simples forem seguidas desde o início do ciclo de vida de desenvolvimento de um software. A seguir listamos sete erros comuns que são cometidos com frequência por programadores, e que podem &#8211; e devem &#8211;  ser evitados desde o início. Erros comuns ao desenvolver software 1. Não planejar antes de começar a codificar. Os programas devem ser planejados de antemão &#8211; é para isso que serve a fase de análise. A coleta de requisitos, avaliação, pseudocódigos, fluxogramas, são todas ferramentas e técnicas que auxiliam no planejamento de como o software deverá ser desenvolvido na sequência, e que [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/7-erros-que-todo-programador-deve-evitar-ao-desenvolver-software/">7 erros que todo programador deve evitar ao desenvolver software</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>7 erros que todo Programador deve evitar</h2>
<p>Programação de computadores é uma tarefa que pode ser altamente complexa, cheia de detalhes minuciosos, e altamente propensa a erros. E, no geral, a maioria dos problemas associados a software se refere a código mal escrito, que não segue normas ou padrões, e que foi criado sem o devido cuidado. Em outras palavras, boa parte dos bugs em software são causados pelos próprios desenvolvedores &#8211; evidentemente, sem intenção.</p>
<p>Por isso é essencial prestar a máxima atenção ao trabalho realizado quando um software ou sistema de softwares é construído. Muitos problemas podem ser evitados se algumas regras simples forem seguidas desde o início do ciclo de vida de desenvolvimento de um software.</p>
<p>A seguir listamos sete erros comuns que são cometidos com frequência por programadores, e que podem &#8211; e devem &#8211;  ser evitados desde o início.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-18145" title="Erros cometidos por programadores" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/03/programador-erro-software-1024x984.png" alt="Erros cometidos por programadores" width="400" height="384" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2022/03/programador-erro-software-1024x984.png 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/03/programador-erro-software-420x404.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/03/programador-erro-software-768x738.png 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/03/programador-erro-software.png 1077w" sizes="auto, (max-width: 400px) 100vw, 400px" /></p>
<h3>Erros comuns ao desenvolver software</h3>
<h3><em><strong>1. Não planejar antes de começar a codificar</strong>.</em></h3>
<p>Os programas devem ser planejados de antemão &#8211; é para isso que serve a fase de análise. A coleta de requisitos, avaliação, pseudocódigos, fluxogramas, são todas ferramentas e técnicas que auxiliam no planejamento de como o software deverá ser desenvolvido na sequência, e que impactam significativamente todo o processo.</p>
<p>Software mal planejado significa, invariavelmente, software que precisará ser reescrito futuramente &#8211; e o impacto disso se dá no tempo de desenvolvimento estendido, custo do produto aumentado e, muito comumente, na (má) imagem passada pelo desenvolvedor ou empresa que desenvolve o software aos clientes.</p>
<h3><em>2. Não escrever código limpo.</em></h3>
<p>O código deve ser legível, seguir boas práticas de programação e de padrões de projetos (<em>design patterns</em>), ser organizado e bem-formatado.</p>
<p>Isso inclui usar uma <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/05-logica-de-programacao-declaracao-e-atribuicao-de-valores-a-variaveis/">convenção de nomes adequada para variáveis</a>, métodos, eventos, funções, etc.. Os nomes devem expressar a intenção do elemento representado, serem inequívocos, claros e o mais sucintos possível.</p>
<p>Além disso, é importante documentar o código por meio de comentários (mas sem exagero &#8211; não escreva um livro dentro do código-fonte!).</p>
<p>Como disse Martin Fowler, autor e desenvolvedor que ajudou a criar o Manifesto para o Desenvolvimento de <a href="https://youtu.be/KaBPJDPRLAo" target="_blank" rel="noopener">Software Ágil</a>:</p>
<blockquote><p>&#8220;Qualquer idiota pode escrever um código que um computador consegue entender. Bons programadores escrevem código que os humanos conseguem entender.&#8221;</p></blockquote>
<p>A qualidade do código é sempre fundamental.</p>
<p>Dica de leitura sobre o assunto (link afiliado):<a href="https://www.amazon.com.br/codificador-limpo-conduta-programadores-profissionais/dp/8576086476?&amp;linkCode=li3&amp;tag=bosontreiname-20&amp;linkId=427582e7e5af11c990da454d0f10983d&amp;language=pt_BR&amp;ref_=as_li_ss_il" target="_blank" rel="noopener"><img decoding="async" class="aligncenter" src="//ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;ASIN=8576086476&amp;Format=_SL250_&amp;ID=AsinImage&amp;MarketPlace=BR&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=bosontreiname-20&amp;language=pt_BR" border="0" /></a><img loading="lazy" decoding="async" style="border: none !important; margin: 0px !important;" src="https://ir-br.amazon-adsystem.com/e/ir?t=bosontreiname-20&amp;language=pt_BR&amp;l=li3&amp;o=33&amp;a=8576086476" alt="" width="1" height="1" border="0" /></p>
<h3><em>3. Reinventar a roda.</em></h3>
<p>É sempre tentador e desafiador criar nossos próprios algoritmos e bibliotecas, como algoritmos de busca, ordenação, bibliotecas de cálculos e funções variadas. Mas isso, normalmente, é altamente trabalhoso, toma um grande tempo de nosso trabalho, e pode acarretar a inserção de erros variados nos programas que estamos criando. Obviamente precisamos escrever código para nossos projetos, mas se algumas das funcionalidades que necessitamos já existem, na forma de código já pronto, talvez seja uma melhor opção usá-los.</p>
<p>Tente, sempre que possível, usar as bibliotecas e classes escritas por terceiros, pois no geral trata-se de código escrito e otimizado por um grupo de profissionais, cuja probabilidade de apresentar erros é baixa, e assim você poupa um tempo enorme ao não precisar escrever código que já existe pronto e testado.</p>
<p>Além, é claro, da alta probabilidade de seu próprio código apresentar uma série de falhas e bugs.</p>
<p>Reuso de código é a regra!</p>
<h3><em>4. Não realizar testes e não pensar em manipulação de erros no código.</em></h3>
<p>Se o programa funciona para você, não significa que irá funcionar sempre para o usuário &#8211; talvez haja alguma falha oculta, ou uma maneira específica de usar a aplicação que traga à tona problemas não previstos. Melhor detectar, tratar e eliminar essas possíveis falhas antes de entregar o produto ao usuário, para evitar problemas mais graves e custosos.</p>
<p>Para tal você deve lançar mão de ao menos duas técnicas: a manipulação de exceções (erros) dentro do código, e a realização de testes de software, dos mais variados tipos (unitários, de integração, etc.).</p>
<p>Pode ser trabalhoso (e aparentemente custoso) escrever rotinas de testes ou de manipulação de exceções, mas muito menos do que corrigir bugs em software já finalizado e em produção (além de ser, no final das contas, mais barato).</p>
<h3><em>5. Somente copiar e adaptar código, sem entender como ele funciona</em></h3>
<p>É extremamente comum, em desenvolvimento de software, que o programador procure trechos de código e algoritmos em sites de busca (como o famoso <a href="https://pt.stackoverflow.com/" target="_blank" rel="noopener">Stack Overflow</a>), e use os códigos encontrados em sua aplicação, tentando adaptá-los.</p>
<p>Até aí, nenhum problema &#8211; afinal, isso é uma espécie de &#8220;reuso de código&#8221; por meio de compartilhamento. O problema surge quando o programador não procura realmente entender como o código opera &#8211; quais as ideias empregadas, técnicas específicas da linguagem, como a lógica foi organizada. Isso impede que o profissional aprenda com o exemplo e seja capaz de, futuramente, escrever por si próprio código sem a necessidade de &#8220;copiar e colar&#8221;.</p>
<p>Use os códigos compartilhados na Internet à vontade, mas procure aprender como eles foram feitos para que você também seja capaz de escrevê-los &#8211; afinal, para que os algoritmos compartilhados existam é necessário que alguém saiba como fazê-los &#8211; e esse alguém pode ser você, em algum momento.</p>
<h3><em>6. Não efetuar backup de seus arquivos-fonte.</em></h3>
<p>O <a href="https://youtu.be/te81S98xuUM" target="_blank" rel="noopener">backup</a> é de crucial importância, e isso se aplica a quem trabalha com desenvolvimento, e também a quem trabalha com tecnologia em geral, e mesmo a quem não trabalha diretamente com tecnologia, mas usa computadores em suas atividades.</p>
<p>Além de backups (local/nuvem), aprenda a usar sistemas de controle de versão, como o Git ou SVN (Github é um ótimo começo).</p>
<p>Por exemplo, assista ao Minicurso de Git da Bóson Treinamentos em Tecnologia no YouTube para uma introdução ao assunto de controle de versão:</p>
<p><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/videoseries?list=PLucm8g_ezqNq0dOgug6paAkH0AQSJPlIe" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>Leitura recomendada (link afiliado):<br />
<a href="https://www.amazon.com.br/Git-Guia-Pr%C3%A1tico-Richard-Silverman-ebook/dp/B07QCCX7CX?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;crid=S597QJY9KFBL&amp;keywords=git&amp;qid=1646762201&amp;s=books&amp;sprefix=git%2Cstripbooks%2C218&amp;sr=1-1&amp;linkCode=li3&amp;tag=bosontreiname-20&amp;linkId=6e0be09d77f4b9321dc934e77712ac72&amp;language=pt_BR&amp;ref_=as_li_ss_il" target="_blank" rel="noopener"><img decoding="async" class="aligncenter" src="//ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;ASIN=B07QCCX7CX&amp;Format=_SL250_&amp;ID=AsinImage&amp;MarketPlace=BR&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=bosontreiname-20&amp;language=pt_BR" border="0" /></a><img loading="lazy" decoding="async" style="border: none !important; margin: 0px !important;" src="https://ir-br.amazon-adsystem.com/e/ir?t=bosontreiname-20&amp;language=pt_BR&amp;l=li3&amp;o=33&amp;a=B07QCCX7CX" alt="" width="1" height="1" border="0" /></p>
<p>E por último, mas não menos importante:</p>
<h3><em>7. Não praticar todos os dias (ou quase todos).</em></h3>
<p>Programação é uma atividade prática, que envolve o emprego de uma série de conhecimentos, ferramentas e técnicas, muitas vezes de alta complexidade, e somente a prática constante e focada pode garantir seu aprendizado adequado e o desenvolvimento satisfatório de código funcional, em tempo hábil, e com poucos erros.</p>
<p>Além disso, como em tecnologia em geral o aprendizado é constante, devido à velocidade na qual as tecnologias são desenvolvidas e atualizadas, a necessidade de prática de forma sistemática se torna ainda mais evidente.</p>
<p>Como disse o famoso cientista da computação Alan Turing:</p>
<blockquote><p>&#8220;Programação é uma habilidade adquirida pela prática e pelo exemplo, e não por meio de livros.&#8221;</p></blockquote>
<h3>Conclusão</h3>
<p>Evitar que erros ocorram durante o desenvolvimento de software é uma tarefa desafiadora, mas há muitas formas de minimizarmos problemas, desde que sejam seguidas algumas recomendações simples, como as apresentadas neste artigo.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/7-erros-que-todo-programador-deve-evitar-ao-desenvolver-software/">7 erros que todo programador deve evitar ao desenvolver software</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/analise-de-sistemas/7-erros-que-todo-programador-deve-evitar-ao-desenvolver-software/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Aprender a programar em sua própria língua ou em inglês &#8211; o que é melhor?</title>
		<link>https://www.bosontreinamentos.com.br/analise-de-sistemas/aprender-a-programar-em-sua-propria-lingua-ou-em-ingles-o-que-e-melhor/</link>
					<comments>https://www.bosontreinamentos.com.br/analise-de-sistemas/aprender-a-programar-em-sua-propria-lingua-ou-em-ingles-o-que-e-melhor/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 11 Aug 2020 20:42:42 +0000</pubDate>
				<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Carreira]]></category>
		<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=16914</guid>

					<description><![CDATA[<p>Aprender a programar em português ou em inglês? Uma pergunta que sempre aparece em todo início de curso de lógica de programação é a indagação &#8220;devemos começar a aprender a programar em português ou direto em inglês?&#8220;. A ideia por trás desse questionamento é a de que o emprego de ferramentas de aprendizado de programação (para iniciantes) em português (ou em sua língua nativa) pode &#8211; ou não &#8211; ser mais produtivo do que tentar ensinar programação usando diretamente o idioma inglês (e, talvez, uma linguagem &#8220;comum&#8221; para tal).  O tópico rende uma razoável discussão, e é evidente que para algumas pessoas o idioma inglês não é empecilho para o aprendizado de programação, ao passo que outras conseguem absorver melhor os conceitos de lógica envolvidos com mais facilidade se o ensino empregar sua própria língua, como por exemplo usando Portugol (para falantes de português) e aplicações como o VisualG ou o Scratch traduzido. Um artigo postado por Benjamin Mako Hill no website Copyrighteous (https://mako.cc/copyrighteous/), citado no curso Scratch: Programming for Teachers, da Universidade de Delft, na Holanda (via plataforma edX), discute o assunto, trazendo dados interessantes de pesquisas diversas e de testes de hipóteses levantadas pelos autores do estudo.  A seguir [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/aprender-a-programar-em-sua-propria-lingua-ou-em-ingles-o-que-e-melhor/">Aprender a programar em sua própria língua ou em inglês &#8211; o que é melhor?</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Aprender a programar em português ou em inglês?</h2>
<p>Uma pergunta que sempre aparece em todo início de curso de lógica de programação é a indagação &#8220;<em>devemos começar a aprender a programar em português ou direto em inglês?</em>&#8220;. A ideia por trás desse questionamento é a de que o emprego de ferramentas de aprendizado de programação (para iniciantes) em português (ou em sua língua nativa) pode &#8211; ou não &#8211; ser mais produtivo do que tentar ensinar programação usando diretamente o idioma inglês (e, talvez, uma linguagem &#8220;comum&#8221; para tal). </p>
<p>O tópico rende uma razoável discussão, e é evidente que para algumas pessoas o idioma inglês não é empecilho para o aprendizado de programação, ao passo que outras conseguem absorver melhor os conceitos de lógica envolvidos com mais facilidade se o ensino empregar sua própria língua, como por exemplo usando Portugol (para falantes de português) e aplicações como o <a href="https://visualg3.com.br/" target="_blank" rel="noopener">VisualG</a> ou o <a href="https://scratch.mit.edu/" target="_blank" rel="noopener">Scratch</a> traduzido.</p>
<p>Um artigo postado por Benjamin Mako Hill no website <strong>Copyrighteous</strong> (<a href="https://mako.cc/copyrighteous" target="_blank" rel="noopener">https://mako.cc/copyrighteous</a>/), citado no curso <a href="https://courses.edx.org/courses/course-v1:DelftX+ScratchTENGX+1T2019/course/" target="_blank" rel="noopener">Scratch: Programming for Teachers, da Universidade de Delft</a>, na Holanda (via plataforma edX), discute o assunto, trazendo dados interessantes de pesquisas diversas e de testes de hipóteses levantadas pelos autores do estudo.  A seguir trazemos o artigo na íntegra, traduzido.</p>
<h3>Aprendendo a codificar na própria língua</h3>
<p><em>Artigo distribuído sob licença <a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank" rel="noopener">Creative Commons Attribution-ShareAlike</a>.</em></p>
<p>Publiquei recentemente um artigo com <a href="http://unmad.in/" target="_blank" rel="noopener">Sayamindu Dasgupta</a> que fornece evidências em apoio à ideia de que as crianças podem aprender a codificar mais rapidamente quando estão programando em sua própria linguagem.</p>
<p>Milhões de jovens de todo o mundo estão aprendendo a programar. Freqüentemente, durante suas experiências de aprendizagem, esses jovens estão usando linguagens de programação baseadas em blocos visuais como Scratch, <a href="http://appinventor.mit.edu/explore/" target="_blank" rel="noopener">App Inventor</a> e <a href="https://studio.code.org/courses" target="_blank" rel="noopener">Code.org Studio</a>.</p>
<p>Em linguagens de programação baseadas em blocos, os codificadores manipulam blocos visuais e encaixáveis ​​que representam construções de código em vez de símbolos textuais e comandos encontrados em linguagens de programação mais tradicionais.</p>
<p>Os símbolos textuais usados ​​em quase todas as linguagens de programação não baseadas em blocos são extraídos do inglês &#8211; considere as declarações “if” e os loops “for” como exemplos comuns. Por outro lado, palavras-chave em idiomas baseados em blocos são frequentemente traduzidas para diferentes idiomas humanos.</p>
<p>Por exemplo, dependendo da preferência de idioma do usuário, um conjunto idêntico de instruções de computação no Scratch pode ser representado em muitas línguas humanas diferentes:</p>
<div id="attachment_16915" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-16915" class="wp-image-16915" title="Exemplos de um pequeno trecho do código Scratch mostrado em quatro idiomas humanos diferentes: inglês, italiano, norueguês bokmål e alemão." src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/scratch-blocos-traduzidos-1024x288.png" alt="Blocos do Scratch Traduzidos" width="800" height="225" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/scratch-blocos-traduzidos.png 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/scratch-blocos-traduzidos-420x118.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/scratch-blocos-traduzidos-768x216.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-16915" class="wp-caption-text">Exemplos de um pequeno trecho do código Scratch mostrado em quatro idiomas humanos diferentes: inglês, italiano, norueguês bokmål e alemão.</p></div>
<p>Embora minha pesquisa com Sayamindu Dasgupta se concentre na aprendizagem, tanto Sayamindu quanto eu trabalhamos em tecnologias de linguagem local antes de voltar para a academia (ambiente escolar). Como resultado, estávamos ambos interessados ​​em como a crescente tradução de linguagens de programação poderia estar tornando mais fácil para crianças que não falam inglês aprenderem a codificar.</p>
<p>Afinal, um grande número de <a href="http://theirworld.org/news/why-teaching-in-mother-tongue-could-help-500m-children" target="_blank" rel="noopener">pesquisas em educação</a> mostrou que a educação nos primeiros estágios é mais eficaz quando o ensino é feito na língua que o aluno fala em casa. Com base nessa pesquisa, formulamos a hipótese de que crianças que aprendem a codificar com linguagens de programação baseadas em blocos traduzidas para suas línguas maternas terão melhores resultados de aprendizagem do que crianças que usam os blocos em inglês.</p>
<p>Procuramos testar essa hipótese no Scratch, uma comunidade de aprendizagem informal construída em torno de uma linguagem de programação baseada em blocos. Fomos ajudados pelo fato de o Scratch ser traduzido para vários idiomas e ter um <a href="https://scratch.mit.edu/statistics/#countries" target="_blank" rel="noopener">grande número de alunos de todo o mundo</a>.</p>
<p>Para medir o aprendizado, trabalhamos sobre alguns de <a href="https://medium.com/mit-media-lab/studying-the-relationship-between-remixing-learning-c1df54c302df" target="_blank" rel="noopener">nossos próprios trabalhos anteriores</a> e analisamos os repertórios de blocos cumulativos dos alunos &#8211; semelhante a um vocabulário de código. Ao observar o repertório de blocos cumulativos de um aluno ao longo do tempo, podemos medir a rapidez com que seu vocabulário de código está crescendo.</p>
<p>Usando esses dados, comparamos a taxa de crescimento do repertório de blocos cumulativos entre alunos de países que não falam inglês usando Scratch em inglês e alunos dos mesmos países usando Scratch em seu idioma local. Para identificar quem não fala inglês, consideramos usuários do Scratch que relataram ser provenientes de cinco países que não falam inglês: Portugal, Itália, Brasil, Alemanha e Noruega.</p>
<p>Escolhemos esses cinco países porque cada um deles tem um idioma muito falado que não é o inglês e porque o Scratch está quase totalmente traduzido para esse idioma.</p>
<p>Mesmo depois de controlar uma série de fatores como envolvimento social no site do Scratch, produtividade do usuário e tempo gasto em projetos, descobrimos que os alunos desses países que usam o Scratch em seu idioma local têm uma taxa maior de crescimento cumulativo do repertório de blocos do que seus homólogos usando Scratch em inglês.</p>
<p>Esse crescimento mais rápido ocorreu apesar de ter um repertório de bloqueio inicial mais baixo. O gráfico abaixo mostra nossos resultados para dois alunos “prototípicos” que começam com o mesmo repertório de blocos inicial: um aluno que usa a interface em inglês e um segundo aluno que usa sua língua nativa.</p>
<div id="attachment_16916" style="width: 643px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-16916" class="wp-image-16916 size-full" title="Resumo dos resultados do nosso modelo para dois indivíduos prototípicos." src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/scratch-resultados-localizacao.png" alt="Gráfico de Localização Scratch" width="633" height="450" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/scratch-resultados-localizacao.png 633w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/scratch-resultados-localizacao-420x299.png 420w" sizes="auto, (max-width: 633px) 100vw, 633px" /><p id="caption-attachment-16916" class="wp-caption-text">Resumo dos resultados do nosso modelo para dois indivíduos prototípicos.</p></div>
<p>Nossos resultados estão de acordo com o que as teorias da educação têm a dizer sobre a aprendizagem na própria língua. Nossas descobertas também representam uma boa notícia para designers de linguagens de programação baseadas em bloco que gastaram uma quantidade considerável de esforços para tornar suas linguagens de programação traduzíveis. Também é uma boa notícia para os voluntários que passaram muitas horas traduzindo blocos e interfaces de usuário.</p>
<p>Embora encontremos suporte para nossa hipótese, devemos enfatizar que nossos achados são limitados e incompletos. Por exemplo, porque nos concentramos em estimar as diferenças entre os alunos do Scratch, nossas comparações são entre crianças que conseguiram usar o Scratch com sucesso.</p>
<p>Antes de o Scratch ser traduzido, crianças com pouco conhecimento prático de inglês ou da escrita latina podem não ter sido capazes de usar o Scratch. Por causa da tradução, muitas dessas crianças agora são capazes de aprender a codificar.</p>
<h3>Referências</h3>
<p>&#8220;<strong><em>Learning to Code in One’s Own Language</em></strong>&#8221; &#8211; <a href="https://mako.cc/copyrighteous/scratch-localization-and-learning" target="_blank" rel="noopener">https://mako.cc/copyrighteous/scratch-localization-and-learning</a></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/aprender-a-programar-em-sua-propria-lingua-ou-em-ingles-o-que-e-melhor/">Aprender a programar em sua própria língua ou em inglês &#8211; o que é melhor?</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/analise-de-sistemas/aprender-a-programar-em-sua-propria-lingua-ou-em-ingles-o-que-e-melhor/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Conceitos de Programação Orientada a Objetos</title>
		<link>https://www.bosontreinamentos.com.br/analise-de-sistemas/conceitos-de-programacao-orientada-a-objetos/</link>
					<comments>https://www.bosontreinamentos.com.br/analise-de-sistemas/conceitos-de-programacao-orientada-a-objetos/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 24 Sep 2019 13:18:35 +0000</pubDate>
				<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=3754</guid>

					<description><![CDATA[<p>Programação Orientada a Objetos (POO) Programação Orientada a Objetos &#8211; POO (Object-Oriented Programming &#8211; OOP) é um paradigma de programação que usa tipos de dados personalizados. Em vez de operar apenas com tipos de dados primitivos, podemos construir novos tipos de dados, conforme nossa necessidade. Esses novos tipos de dados, que chamamos de classes, podem conter estruturas semelhantes a funções, denominadas métodos, e variáveis internas, chamadas de atributos. As classes dão origem a objetos, em um processo denominado instanciação. Os objetos são os “blocos de construção” de software na OO. Vantagens da Orientação a Objetos Fornece uma estrutura modular para a construção de programas Objetos podem ser reutilizados em aplicações diferentes O software se torna mais fácil de manter O desenvolvimento é mais rápido, devido ao reuso de código Encapsulamento: não é necessário conhecer a implementação interna de um objeto para poder usá-lo Objeto Trata-se de uma ocorrência específica de uma classe; é uma “instância de classe”. Os objetos são a base da OO (Orientação a Objetos). Os objetos representam entidades do mundo real, como aviões, pessoas, contas correntes, etc., mas também podem representar outros conceitos, como gráficos (círculos, quadrados, cones, esferas, etc.) Um objeto possui características próprias (atributos) e [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/conceitos-de-programacao-orientada-a-objetos/">Conceitos de Programação Orientada a Objetos</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2><b>Programação Orientada a Objetos (POO)</b></h2>
<p>Programação Orientada a Objetos &#8211; POO (Object-Oriented Programming &#8211; OOP) é um paradigma de programação que usa tipos de dados personalizados. Em vez de operar apenas com tipos de dados primitivos, podemos construir novos tipos de dados, conforme nossa necessidade.</p>
<p>Esses novos tipos de dados, que chamamos de <em><strong>classes</strong></em>, podem conter estruturas semelhantes a funções, denominadas <em><strong>métodos</strong></em>, e variáveis internas, chamadas de <em><strong>atributos</strong></em>. As classes dão origem a <em><strong>objetos</strong></em>, em um processo denominado <em><strong>instanciação</strong></em>.</p>
<p>Os objetos são os “blocos de construção” de software na OO.</p>
<h3>Vantagens da Orientação a Objetos</h3>
<ul>
<li>Fornece uma estrutura modular para a construção de programas</li>
<li>Objetos podem ser reutilizados em aplicações diferentes</li>
<li>O software se torna mais fácil de manter</li>
<li>O desenvolvimento é mais rápido, devido ao reuso de código</li>
<li>Encapsulamento: não é necessário conhecer a implementação interna de um objeto para poder usá-lo</li>
</ul>
<h3><b>Objeto</b></h3>
<p>Trata-se de uma ocorrência específica de uma classe; é uma “instância de classe”.</p>
<p>Os objetos são a base da OO (Orientação a Objetos).</p>
<p>Os objetos representam entidades do mundo real, como aviões, pessoas, contas correntes, etc., mas também podem representar outros conceitos, como gráficos (círculos, quadrados, cones, esferas, etc.)</p>
<p>Um objeto possui características próprias (atributos) e executa determinadas ações (métodos), sendo esses atributos e métodos provenientes da classe que origina o objeto.</p>
<p><b>Abstração</b></p>
<p>Abstrair significa selecionar aspectos específicos de um problema a ser analisado, deixando de lado outros aspectos. É a  representação de uma entidade do mundo real na forma de idéias.</p>
<p>As entidades abstraídas podem se comunicar entre si, por meio da troca de Mensagens.</p>
<p>De acordo com o autor Correia (2006):</p>
<blockquote>
<p>“Pelo princípio da abstração, nós isolamos os objetos que queremos representar do ambiente complexo em que se situam, e nesses objetos representamos somente as características que são relevantes para o problema em questão”.</p>
</blockquote>
<p><b>Mensagens</b></p>
<p>Os objetos se comunicam a partir da troca de mensagens.</p>
<p>Uma mensagem é um sinal enviado de um objeto a outro, o qual requisita um serviço, usando uma operação programada no objeto chamado. Por exemplo, para que um objeto execute um método, é necessário enviar a este objeto uma mensagem solicitando a execução do método desejado.</p>
<p>As mensagens somente ocorrem entre objetos que possuem uma Associação.</p>
<p>As mensagens também são programadas. Quando uma mensagem é recebida, uma operação é invocada no objeto chamado.</p>
<p>Há vários formatos de mensagens: procedures (subs e functions), passagem de sinais entre threads, acionamento de eventos, etc.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-3755 size-full" title="Mensagens em Programação Orientada a Objetos" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/06/orientação-objetos-mensagens-e1550576829225.jpg" alt="Mensagens em Programação Orientada a Objetos" width="420" height="116" /></p>
<h2><b>O que são Classes</b></h2>
<p>Uma Classe é uma coleção de objetos que são descritos com os mesmos atributos e as mesmas operações. Uma classe representa uma ideia ou conceito e classifica objetos que tenham propriedades similares.</p>
<p>As classes são os blocos de construção mais importantes dos sistemas orientados a objetos, e devem possuir responsabilidades bem definidas dentro da aplicação.</p>
<p>Uma classe é um tipo personalizado de dados.</p>
<p>Desta forma, uma classe é um tipo abstrato de dados, um “molde” para a criação de objetos. Cada classe criada se torna um novo tipo disponível para declarar variáveis e criar objetos</p>
<p>Por convenção, começamos o nome de uma classe com letra maiúscula, e capitalizamos cada palavra subsequente que o compuser.</p>
<p>As classes representam os blocos de construção mais importantes dos sistemas orientados a objetos, e devem possuir responsabilidades bem definidas dentro da aplicação.</p>
<p>Uma classe é como se fosse um tipo abstrato de dados, um “molde” para a criação de objetos.</p>
<p>Um objeto é, portanto, um “<b>Instância de uma Classe</b>”</p>
<p>As classes possuem<strong> atributos</strong> e <strong>métodos</strong>.  Atributos são características da classe, que são comuns a todos os objetos derivados, e que podem apresentar valores diversos. Já os Métodos são as operações possíveis em uma classe (nos objetos instanciados a partir dela).</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-3756 size-full" title="Orientação a Objetos - Classes, Métodos e Atributos" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/06/classes-atributos-métodos-e1550576844501.jpg" alt="Orientação a Objetos - Classes, Métodos e Atributos" width="328" height="99" /></p>
<p><b>Atributo de Classe</b></p>
<p>Ou Propriedade: Característica particular de uma ocorrência de uma classe, como por exemplo o nome e a idade de uma pessoa.</p>
<p>Existem dois tipos principais de propriedades:</p>
<ul>
<li>Estáticas: Mantém o mesmo valor durante toda a sua existência. Por exemplo, a data de nascimento de uma pessoa é uma propriedade estática, pois mantém o mesmo valor durante toda a existência do objeto instanciado.</li>
<li>Dinâmicas: Podem ter valores que variam com o passar do tempo. A idade de uma pessoa pode ser considerada um atributo dinâmico, pois pode variar ao longo do tempo.</li>
</ul>
<p><b>Método</b></p>
<p>É a lógica contida em uma classe para atribuir-lhe comportamentos. São as funções e procedimentos contidos na classe.</p>
<p>O ato de invocar um método é a passagem de mensagens para o objeto.</p>
<p>Toda classe possui um método especial chamado de método construtor, que inicializa o objeto instanciado.</p>
<p>As classes também usam métodos destruidores para finalizar os objetos após seu uso.</p>
<p>Um método é uma sequência de declarações (comandos) que possui um nome de identificação. É similar a uma função ou procedimento.</p>
<p>Um método possui um nome e um corpo onde ficam os comandos que serão executados quando o método for chamado, e também podem receber dados para processamento (<i>parâmetros</i>) e retornar informações.</p>
<p>Os métodos são a forma principal de passagem de mensagens entre objetos. Um método deve executar sempre uma operação única. Os métodos também precisam ter um tipo de retorno, que pode ser um tipo de valor, de referência ou ainda void (não retornam valor).</p>
<h3>Classe &#8211; Notação UML para representação</h3>
<p>A seguir temos a forma padrão para representação de uma classe usando um diagrama de classes UML:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-15652 size-full" title="Classe UML" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/09/classe-UML.png" alt="Classe UML" width="271" height="265" /></p>
<h3><b>Instância de Classe</b></h3>
<p>É o objeto, uma ocorrência específica de uma classe.</p>
<p>As classes originam instâncias sob requisição, no processo denominado Instanciação. O projetista / analista cria a classe. A classe é então usada para criar objetos em tempo de execução.</p>
<p>Veja a seguir um exemplo de criação de classe na linguagem C#. É declarado um atributo da classe Caixa &#8211; <strong>lado</strong> &#8211; e um método &#8211; <strong>Volume()</strong>:</p>
<table style="height: 187px;" width="368">
<tbody>
<tr>
<td>
<div><strong><span style="color: #ff0000;">class Caixa {</span></strong></div>
<div style="padding-left: 30px;"><strong><span style="color: #ff0000;">double lado;</span></strong></div>
<div style="padding-left: 30px;"><strong><span style="color: #ff0000;">double Volume()</span></strong></div>
<div style="padding-left: 30px;"><strong><span style="color: #ff0000;">{</span></strong></div>
<div style="padding-left: 60px;"><strong><span style="color: #ff0000;">return lado * lado * lado;</span></strong></div>
<div style="padding-left: 30px;"><strong><span style="color: #ff0000;">}</span></strong></div>
<div><strong><span style="color: #ff0000;">}</span></strong></div>
</td>
</tr>
</tbody>
</table>
<h3><b>Herança</b></h3>
<p>Herança, em orientação a objetos, é a capacidade de um novo objeto tomar atributos e operações de um objeto existente.</p>
<p>Assim, podemos criar classes mais complexas sem que precisemos repetir código.</p>
<p>Aqui, a palavra-chave é <strong>Reuso de código</strong>, e é uma das metas a se atingir ao desenvolver software. O reuso permite reduzir o esforço dispendido no desenvolvimento de software ao reaproveitarmos códigos de uma classe na criação de outras classes.</p>
<p>A Herança é, portanto,  um conceito extremamente importante em Orientação a Objetos.</p>
<p>Usamos a herança, por exemplo, para evitar repetição ao definirmos classes com características em comum e que são relacionadas entre si.</p>
<p>A herança é um relacionamento entre classes, que permite que uma classe “adquira” os membros (atributos e métodos) de outra classe.</p>
<p>Um exemplo clássico de herança seria a classificação de mamíferos no reino animal.</p>
<p>Homens, Baleias e Gatos são mamíferos, que compartilham muitas características entre si, mas claramente possuem atributos que os diferem uns dos outros.</p>
<h4>Como podemos modelar Baleias, Gatos e Humanos em um software?</h4>
<p>Podemos criar classes distintas para cada animal, mas essas classes teriam muitos comportamentos (“métodos”) em comum entre eles, como Respirar, Mamar e Reproduzir-se, o que ocasionaria repetição desnecessária de código.</p>
<p>Usamos então Herança para resolver esse problema. Podemos criar uma classe chamada Mamífero que possua as características comuns a todos os animais mamíferos, e então criar as classes Humano, Baleia e Gato herdando essas funcionalidades e também implementando as funcionalidades específicas de cada animal, como Falar, Nadar e Miar.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-19611" title="Herança de Classes em Orientação a Objetos" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/09/heranca-classes-orientacao-objetos.jpg" alt="Herança de Classes em Orientação a Objetos" width="700" height="302" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2015/09/heranca-classes-orientacao-objetos.jpg 975w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/09/heranca-classes-orientacao-objetos-420x181.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/09/heranca-classes-orientacao-objetos-768x331.jpg 768w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>O quadro a seguir mostra duas classes, Humano e Gato, que herdam os atributos e métodos da superclasse Mamífero, e implementam seus próprios atributos e métodos adicionais: atributos nome e sobrenome e métodos andar() e falar() para a classe Humano, e os atributos raça e nome e métodos andar() e miar() para a classe Gato:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-19614" title="Herança de Classes - POO" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/09/heranca-classes-orientacao-objetos-exemplo-2.jpg" alt="Herança de Classes - POO" width="750" height="438" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2015/09/heranca-classes-orientacao-objetos-exemplo-2.jpg 909w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/09/heranca-classes-orientacao-objetos-exemplo-2-420x245.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/09/heranca-classes-orientacao-objetos-exemplo-2-768x449.jpg 768w" sizes="auto, (max-width: 750px) 100vw, 750px" /></p>
<p>&nbsp;</p>
<h3><b>Encapsulamento</b></h3>
<p>Encapsulamento é a combinação de atributos e operações dentro de uma classe, deixando visível apenas o que é necessário para a comunicação entre dois objetos, como por exemplo alguns detalhes da implementação ou ainda a lógica de um método.</p>
<p>O encapsulamento permite ocultar a complexidade do código. Não é necessário entender como a operação funciona para poder utilizá-la. Um exemplo clássico é o de um motorista conduzindo um veículo. O motorista não precisa saber exatamente como um motor funciona internamente para poder dirigir o automóvel &#8211; o detalhes da &#8220;implementação&#8221; do motor ficam ocultos do motorista.</p>
<p>O encapsulamento protege os dados, permitindo o acesso a eles apenas a partir de métodos específicos e autorizados.</p>
<p>Desta forma, os objetos encapsulados podem ser comparados uma caixa preta: conhecemos  asua interface externa, porém não precisamos nos preocupar com o que acontece internamente na caixa.</p>
<p><b>Encapsulamento &#8211; Níveis de Acesso</b></p>
<p>Há três níveis principais de acesso dos objetos:</p>
<ul>
<li>Público</li>
<li>Privado</li>
<li>Protegido</li>
</ul>
<p>Vamos discutir em mais detalhes esses níveis de acesso em uma lição especial sobre o assunto.</p>
<h3><b>Polimorfismo</b></h3>
<p>Uma operação de um objeto qualquer pode assumir vários comportamentos dependendo da chamada recebida, tratando e devolvendo respostas ao chamador.</p>
<p>Poli = Muitos; Morphos = Formas. Portanto, Polimorfismo = “múltiplas formas”.</p>
<p>Portanto, o polimorfismo ocorre quando um objeto tem um comportamento diferente para uma mesma ação. Por exemplo, usando nosso exemplo de classes de animais, nas classes Gato e Humano existe um comportamento (método) em comum: Andar. Porém, cada uma dessas classes implementa o método Andar de forma diferente &#8211; os gatos andam em quatro patas, enquanto os humanos andam em duas. Ambos podem percorrer a mesma distância andando, ou seja, executando o método andar, mas o farão de forma diferente entre si.</p>
<p>Então, dependendo de como um método é invocado, seu comportamento será diferente.</p>
<p>Neste artigo publicamos uma pequena introdução à Orientação a Objetos. Nos próximos artigos desta série vamos nos aprofundar nesses assuntos, e apresentar muitos outros conceitos relativos a esse tópico.</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/conceitos-de-programacao-orientada-a-objetos/">Conceitos de Programação Orientada a Objetos</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/analise-de-sistemas/conceitos-de-programacao-orientada-a-objetos/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title>18 Dicas para aprendizado de Programação de Computadores</title>
		<link>https://www.bosontreinamentos.com.br/carreira/18-dicas-para-aprendizado-de-programacao-de-computadores/</link>
					<comments>https://www.bosontreinamentos.com.br/carreira/18-dicas-para-aprendizado-de-programacao-de-computadores/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 14 Mar 2018 19:30:29 +0000</pubDate>
				<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Carreira]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=11603</guid>

					<description><![CDATA[<p>Dicas para aprendizado de Programação Aprender programação de computadores não é exatamente uma tarefa simples. No geral, é necessário um grande esforço para que um estudante consiga aprender a programar de forma satisfatória, ao longo de um intervalo de tempo que pode variar de vários meses a vários anos. Além disso, muitas pessoas creem que aprender a programar se resume apenas a aprender a usar uma linguagem de programação. Mas isso está muito longe da verdade! Quando usamos a expressão &#8220;Programação de Computadores&#8221;, na verdade, o que estamos dizendo é &#8220;Desenvolvimento de Sistemas&#8221;. Assim, programar vai além de simplesmente aprender Java, JavaScript, C ou outra linguagem qualquer. Um Desenvolvedor de Sistemas, idealmente, precisa possuir conhecimentos diversos, como: Linguagens de programação Análise e modelagem de sistemas Testes de software Trabalhar com ferramentas diversas, como IDEs especializados e compiladores Conhecer diversas bibliotecas e frameworks Saber trabalhar em equipe &#8211; &#8220;times&#8221; Ser autodidata (sim, você vai ter de aprender muita coisa por si só) Conhecer teoria de bancos de dados e implementação física Gerenciamento de Projetos Muita coisa não? Se apenas aprender uma linguagem já estava dando trabalho, imagine aprender tudo isso! Mas vamos com calma. Ninguém disse que é necessário aprender tudo [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/carreira/18-dicas-para-aprendizado-de-programacao-de-computadores/">18 Dicas para aprendizado de Programação de Computadores</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Dicas para aprendizado de Programação</h2>
<p>Aprender programação de computadores não é exatamente uma tarefa simples. No geral, é necessário um grande esforço para que um estudante consiga aprender a programar de forma satisfatória, ao longo de um intervalo de tempo que pode variar de vários meses a vários anos.</p>
<p>Além disso, muitas pessoas creem que aprender a programar se resume apenas a aprender a usar uma linguagem de programação. Mas isso está muito longe da verdade! Quando usamos a expressão &#8220;Programação de Computadores&#8221;, na verdade, o que estamos dizendo é &#8220;Desenvolvimento de Sistemas&#8221;. Assim, programar vai além de simplesmente aprender Java, JavaScript, C ou outra linguagem qualquer.</p>
<p>Um Desenvolvedor de Sistemas, idealmente, precisa possuir conhecimentos diversos, como:</p>
<ul>
<li>Linguagens de programação</li>
<li>Análise e modelagem de sistemas</li>
<li>Testes de software</li>
<li>Trabalhar com ferramentas diversas, como IDEs especializados e compiladores</li>
<li>Conhecer diversas bibliotecas e frameworks</li>
<li>Saber trabalhar em equipe &#8211; &#8220;times&#8221;</li>
<li>Ser autodidata (sim, você vai ter de aprender muita coisa por si só)</li>
<li>Conhecer teoria de bancos de dados e implementação física</li>
<li>Gerenciamento de Projetos</li>
</ul>
<p>Muita coisa não? Se apenas aprender uma linguagem já estava dando trabalho, imagine aprender tudo isso!</p>
<p>Mas vamos com calma. Ninguém disse que é necessário aprender tudo isso de uma vez e em poucos dias. Na verdade, seu aprendizado nesta área da computação será contínuo, e infindável. Você vai estudar e aprender enquanto atuar nessa área. Agora, é claro que, o quanto antes você aprender as disciplinas citadas, melhor será para sua carreira. E como fazer isso, na prática?</p>
<p>Neste post minha ideia é ilustrar algumas técnicas que estudantes da área de desenvolvimento de sistemas podem usar para melhorar seu aprendizado em programação e disciplinas correlatas, do ponto de vista prático. Não pretendo dizer coisas como &#8220;você tem de estudar bastante&#8221;, ou &#8220;não desista, você chega lá&#8221;. Isso é, obviamente,  extremamente importante, mas eu já falei a respeito desse aspecto do esforço e da dificuldade de aprendizado neste <a href="https://www.youtube.com/watch?v=Ou1m66rvJyE" target="_blank" rel="noopener noreferrer">vídeo da Bóson Treinamentos</a>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-11637" title="Codar e aprender programação de computadores" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/codar-aprender-programação-e1526220792410.jpeg" alt="Codar e aprender programação de computadores" width="600" height="320" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/codar-aprender-programação-e1526220792410.jpeg 1260w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/codar-aprender-programação-e1526220792410-420x224.jpeg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/codar-aprender-programação-e1526220792410-768x410.jpeg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/03/codar-aprender-programação-e1526220792410-1024x546.jpeg 1024w" sizes="auto, (max-width: 600px) 100vw, 600px" /></p>
<h3>Técnicas de Estudo para Programação</h3>
<p>Para aprender de forma mais eficiente e melhorar seus conhecimentos de programação, sugiro as seguintes técnicas e dicas, de acordo com minha própria experiência:</p>
<ol style="list-style-type: lower-alpha;">
<li>Codar ao menos duas horas por dia (de duas a quatro é o ideal) e descansar um dia por semana. Menos do que duas horas é insuficiente para que seja possível estudar um assunto e praticá-lo de forma satisfatória. Mas tome cuidado: estudar por muito tempo em sequência (por exemplo, 10 horas seguidas) também não é muito efetivo, e pode levar a um esgotamento extremamente prejudicial no médio prazo. Tenha parcimônia e respeite seus próprios limites. E não deixe de descansar um dia por semana &#8211; aproveite esse dia para fazer outras atividades fora da programação, como passear, ir ao cinema, jogar futebol, ir à praia ou outra coisa divertida e salutar.</li>
<li>Escreva MUITO código. Não importa se seu código é bom, se é ruim, feio ou elegante, o que você precisa fazer nesta etapa (como um iniciante) é escrever o máximo de código que você puder. Não importa se você vai escrever algoritmos simples, apenas escreva, teste e depure até que seja trivial para você codar.</li>
<li>Fique calmo ao debugar problemas que apareçam em seu código (eles vão aparecer com certeza!) e use os recursos disponíveis na Internet para ajudar a resolvê-los. Se enervar por conta de um código que não funciona como deveria é a melhor forma de não aprender a programar.</li>
<li>Quando estiver com dúvidas, e não conseguir resolver um problema por si próprio, não entre em pânico: procure ajuda. Seja em fóruns, grupos de estudos, na escola ou com seus colegas, procure descobrir o que está errado em seu código, e após descobrir o problema, tente consertá-lo sem copiar e colar nenhum código &#8211; reescreva seu algoritmo aplicando a solução encontrada &#8211; ver dica seguinte.</li>
<li>Não &#8220;copie e cole&#8221; código &#8211; se você o fizer, nunca aprenderá realmente a escrever seus próprios algoritmos. Suponha que você tenha encontrado uma solução para um problema em um site da Internet, como um fórum, ou o Stack Overflow. Leia a solução encontrada, procure entender o raciocínio por trás de quem a escreveu, tire dúvidas com as pessoas e, então, tente escrever sua própria solução, sem simplesmente reutilizar a encontrada.</li>
<li>Faça pausas regulares a cada 40 minutos a 1 hora para tomar um café, um suco, relaxar, etc, durante uns 5 a 10 minutos (no máximo).</li>
<li>Enquanto estiver codificando, fique longe do smartphone, feche o Facebook e não fale com ninguém pelo Whatsapp. Saia das redes sociais (exceto os fóruns de desenvolvedores!). Se concentre no que está fazendo no momento.</li>
<li>Escreva programas para vê-los funcionar. Não importa se o código que você escreveu é da melhor qualidade &#8211; nesta etapa, o que você precisa é escrever programas que FUNCIONEM, pois assim você saberá que está realmente aprendendo a escrever algoritmos e verá seu trabalho dando frutos, o que é muito motivador. </li>
<li>Quando você conseguir escrever programas que funcionem, aprenda a refatorá-los &#8211; reescreva seu código de modo a deixá-lo mais limpo, organizado e eficiente. Desta forma, em pouco tempo você estará escrevendo código elegante e funcional desde o início de um projeto.</li>
<li>Use e abuse de Comentários em seu código. Faça esse favor a si mesmo e aos colegas que irão trabalhar com você. Desta forma, você não corre o risco de não se lembrar o que um algoritmo ou trecho de código faz seis meses depois de tê-lo escrito &#8211; e poupa o trabalho de analisar código-fonte de forma desnecessária a si e aos membros de seu time de desenvolvimento &#8211; ou quem vier depois.</li>
<li>Aprenda um pouco sobre áreas relacionadas que citamos anteriormente, como Gerenciamento de Projetos, Testes, Hardware de Computadores, etc., pois esses conhecimentos complementam o estudo de programação e ampliam sua visão para o entendimento e a resolução de problemas. E, principalmente, aprende a ANALISAR problemas antes de tentar escrever códigos para resolvê-los. Se você não entender exatamente a natureza de um problema e suas ramificaç~eos e dependências, como pretende solucioná-lo?</li>
<li>Domine um IDE ou editor de códigos. Preferencialmente, um que não tenha demasiados recursos &#8211; mas também não é preciso usar somente o bloco de notas ou o editor vi. Algo como os editores Notepad++ ou o Sublime Text são excelentes nessa etapa. Se foque no código, e tente evitar recursos como auto-completar nessa fase de seu aprendizado. Após ter aprendido a usar um IDE, não é má ideia mudar para outro IDE e aprender a usá-lo também.</li>
<li>Sempre registre o que você está estudando &#8211; e aprendendo. Escreva com usas próprias palavras o que você estudou e aprendeu em um caderno, por exemplo, pois isso ajuda a fixar em sua mente os conceitos e a lembrar deles no longo prazo. Sim, em um caderno, mídia física, fora do computador.</li>
<li>Tente ensinar alguém que sabe menos que você. Essa é uma forma excelente de aprender. Inclusive, é uma das famosas técnicas de Richard Feynman para aprender &#8220;qualquer coisa&#8221; &#8211; sobre as quais já falamos no vídeo sobre <a href="https://www.youtube.com/watch?v=Y_n4gbcbF_o" target="_blank" rel="noopener noreferrer">As Técnicas de Estudo de Richard Feynman</a>.</li>
<li>Tutoriais em Vídeo &#8211; YouTube, Udemy, CBT Nuggets, etc.; É muito comum assistir a cursos e tutoriais em vídeo atualmente &#8211; nós mesmos temos mais de 1200 vídeos publicados no <a href="https://www.youtube.com/user/bosontreinamentos/" target="_blank" rel="noopener noreferrer">canal da Bóson Treinamentos no YouTube</a>!. Porém, é preciso tomar muito cuidado com essa modalidade de estudo. Quando assistimos a um vídeo sobre determinado assunto, é comum a ilusão de termos aprendido o tópico explicado. Porém, assistir a um vídeo é uma atividade passiva &#8211; você precisa <em><strong>treinar</strong></em> o que foi visto para garantir o aprendizado do assunto. Ver alguém falando, por exemplo, sobre estruturas de repetição em Python não significa que você tenha aprendido o assunto &#8211; é necessário abrir o IDE e exercitar-se escrevendo e testando códigos e algoritmos, e criando aplicações diversas.</li>
<li>Codifique à mão. Escrever algoritmos usando papel e caneta permite aumentar sua proficiência e é um método muito efetivo para aprender a programar-  na verdade, para aprender qualquer coisa. Escrever à mão requer cuidado, precisão e atenção, o que no geral leva a uma maior absorção do conteúdo estudado. Era assim que estudávamos há alguns anos, quando nem sempre tínhamos acesso a computadores em casa. Além disso, muitas entrevistas de emprego incluem testes de escrita de algoritmos &#8211; escritos à mão. </li>
<li>Leia livros sobre teoria de desenvolvimento de sistemas e programação de computadores. Não livros sobre como usar as linguagens, mas como funciona o processo de desenvolvimento de software. Aprender a filosofia por trás das tecnologias é realmente muito importante para que você possa adquirir habilidade e proficiência. </li>
<li>Se sua dificuldade for em entender lógica de programação, não hesite em usar uma linguagem visual, mesmo que feita para crianças. Scratch é uma ótima linguagem para esse fim. Algumas pessoas tem mais facilidade de aprender de forma visual, e se esse for seu caso, vá em frente.</li>
</ol>
<p>E lembre-se sempre: Jamais se compare com os outros. Seu objetivo é aprender a programar bem, e não mensurar o quanto os outros sabem. Não é uma disputa. Se seu colega de sala ou de trabalho conhece muito mais de programação do que você, ou tem muito mais facilidade para aprender, isso não importa. O que importa é o quanto você está aprendendo. Na verdade, ter colegas por perto que saibam muito mais do que nós é muito bom &#8211; estar rodeado de pessoas com grande conhecimento é uma ótima forma de crescermos profissionalmente. Olhe para eles como uma inspiração,e  como uma oportunidade de aprender a trabalhar em equipe.</p>
<p>E não tenha pressa. O domínio do conhecimento sobre desenvolvimento de software virá com o devido tempo.</p>
<p>Espero que essas dicas para Aprendizado de Programação possam ser úteis e ajudar os estudantes a melhorar o desempenho em seus estudos e seu trabalho.</p>
<p>Até mais!</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/carreira/18-dicas-para-aprendizado-de-programacao-de-computadores/">18 Dicas para aprendizado de Programação de Computadores</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/carreira/18-dicas-para-aprendizado-de-programacao-de-computadores/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
		<item>
		<title>Conceitos gerais de Programação Orientada a Objetos &#8211; 01</title>
		<link>https://www.bosontreinamentos.com.br/analise-de-sistemas/conceitos-gerais-de-programacao-orientada-a-objetos/</link>
					<comments>https://www.bosontreinamentos.com.br/analise-de-sistemas/conceitos-gerais-de-programacao-orientada-a-objetos/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 05 Jul 2017 12:37:09 +0000</pubDate>
				<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=9413</guid>

					<description><![CDATA[<p>Programação Orientada a Objetos &#8211; Alguns conceitos explicados Olá pessoal! Neste artigo vou explicar, de forma sucinta, alguns dos principais conceitos presentes na disciplina de Programação Orientação a Objetos. Meu intuito não é o de me aprofundar nesses conceitos, mas sim de apresentá-los inicialmente, como uma espécie de sumário, de modo a apresentar e esclarecer algumas ideias fundamentais da matéria. Posteriormente vamos nos aprofundar em cada conceito, inclusive com exemplos de aplicações nas linguagens de programação mais comuns da atualidade. Definição Programação Orientada a Objetos &#8211; POO (Object-Oriented Programming &#8211; OOP) é um método de programação (estilo) que usa tipos de dados personalizados. Em vez de operar apenas com tipos de dados primitivos, podemos construir novos tipos de dados, conforme nossa necessidade (necessidade da aplicação). Esses novos tipos de dados, que chamamos de classes, podem conter estruturas semelhantes a funções, denominadas métodos, e variáveis internas, chamadas de atributos. As classes são estruturas semelhantes a strucutures e unions, utilizadas em programação estruturada, porém tem características diferenciadas, como: Classes possuem suas próprias funções (métodos) Podem ter dados privados ou protegidos Podem herdar características de outras classes para absorver sua funcionalidade Cada classe pode agir como se fosse uma entidade completamente separada do [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/conceitos-gerais-de-programacao-orientada-a-objetos/">Conceitos gerais de Programação Orientada a Objetos &#8211; 01</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Programação Orientada a Objetos &#8211; Alguns conceitos explicados</h2>
<p>Olá pessoal! Neste artigo vou explicar, de forma sucinta, alguns dos principais conceitos presentes na disciplina de Programação Orientação a Objetos. Meu intuito não é o de me aprofundar nesses conceitos, mas sim de apresentá-los inicialmente, como uma espécie de sumário, de modo a apresentar e esclarecer algumas ideias fundamentais da matéria.</p>
<p>Posteriormente vamos nos aprofundar em cada conceito, inclusive com exemplos de aplicações nas linguagens de programação mais comuns da atualidade.</p>
<h3>Definição</h3>
<p><strong>Programação Orientada a Objetos</strong> &#8211; POO (Object-Oriented Programming &#8211; OOP) é um método de programação (estilo) que usa tipos de dados personalizados. Em vez de operar apenas com tipos de dados primitivos, podemos construir novos tipos de dados, conforme nossa necessidade (necessidade da aplicação).</p>
<p>Esses novos tipos de dados, que chamamos de <strong>classes</strong>, podem conter estruturas semelhantes a funções, denominadas <em><strong>métodos</strong></em>, e variáveis internas, chamadas de <em><strong>atributos</strong></em>.</p>
<p>As classes são estruturas semelhantes a strucutures e unions, utilizadas em programação estruturada, porém tem características diferenciadas, como:</p>
<ul>
<li>Classes possuem suas próprias funções (métodos)</li>
<li>Podem ter dados privados ou protegidos</li>
<li>Podem herdar características de outras classes para absorver sua funcionalidade</li>
<li>Cada classe pode agir como se fosse uma entidade completamente separada do resto do programa</li>
</ul>
<p>Uma das principais ideias em orientação a objetos é o conceito de Abstração, que consiste em esconder do usuário os detalhes de um processo. Em OOP, o programador (que é o usuário) não precisa conhecer todos os detalhes de implementação intrincados de uma classe, basta que saiba como utilizá-la em seu programa.</p>
<h3>Membros de Classe</h3>
<p>Existem dois tipos de membros (elementos internos) em uma classe: atributos e métodos.</p>
<ul>
<li><strong>Atributos</strong>: &#8220;Conteineres&#8221;&nbsp;onde um objeto armazena dados, de forma similar a Variáveis. Armazenam informações sobre um objeto. Por exemplo, um objeto &#8220;Pessoa&#8221; pode ter um atributo &#8220;<em>Nome</em>&#8221; e um atributo &#8220;<em>Altura</em>&#8221; para armazenar essas duas propriedades de uma pessoa em particular.</li>
<li><strong>Métodos</strong>: São funções e procedimentos vinculados a um objeto, as quais permitem que o objeto realize (ou sofra) ações. Por exemplo, um objeto Pessoa pode ter os métodos &#8220;<em>andar()&#8221;</em>, &#8220;<em>comer()&#8221;</em> e &#8220;<em>dormir()&#8221;</em>, que descrevem como essas ações são realizadas. Note o uso dos parênteses para descrever o nome do método.</li>
</ul>
<h3>Tipos de linguagens OO (Orientadas a Objetos)</h3>
<p>Existem, fundamentalmente, dois tipos de linguagens orientadas a objetos:</p>
<ul>
<li>OO Suportada: Tratam-se de linguagens procedurais que possuem um componente de programação OO inserido. Como exemplos, podemos citar as linguagens PHP, Visual Basic, COBOL&nbsp;e Objective C.</li>
<li>OO Pura: São linguagens nativamente orientadas a objetos, como Java, Scala, Smalltalk e C#. Algumas dessas linguagens, como o Java, possuem alguns elementos&nbsp;procedurais disponíveis.</li>
</ul>
<h3>Níveis de acesso</h3>
<p>Os níveis de acesso em uma classe determinam a visibilidade de seus componentes (métodos e atributos). Temos três níveis de acesso no geral:</p>
<ul>
<li><strong>Público</strong>: Elementos acessíveis a todo o código da aplicação, em toda a parte.</li>
<li><strong>Privado</strong>: Um elemento privado pode apenas ser acessado pelo próprio objeto (internamente) ou por funções &#8220;amigáveis&#8221;.</li>
<li><strong>Protegido</strong>: Um elemento protegido somente é acessível pelo próprio objeto e por objetos herdeiros dele.</li>
</ul>
<p>Além disso, o acesso pode ser classificado em:</p>
<ul>
<li>Acesso em nível de classe (estático): Os membros pertencem ao objeto, e não à instância</li>
<li>Acesso em nível de instância (não-estático): Os membros pertencem À instância e não ao objeto.</li>
</ul>
<p>As instâncias não possuem os métodos e atributos estáticos do objeto que representam.</p>
<h3>Métodos Construtor e Destrutor</h3>
<p>Tratam-se de dois métodos especiais que possuem funções bem-definidas em um objeto.</p>
<ul>
<li>Método Construtor: É um método que é executado automaticamente quando uma classe é instanciada (objeto é criado), sendo utilizada normalmente para inicializar determinados atributos do objeto. Pode aceitar parâmetros para criar um objeto de forma personalizada, e permite a manipulação de campos (atributos) estáticos.</li>
<li>Método Destrutor: Este método é executado automaticamente quando uma instância existente de uma classe (objeto) é destruída (eliminada da memória). Também manipula atributos estáticos.</li>
</ul>
<h3>Setters e Getters</h3>
<p>Um Setter é um método especial que permite configurar indiretamente valores dentro de um objeto&nbsp;(atributos).&nbsp;</p>
<p>Um Getter é outro método especial, usado para obtermos de forma indireta os valores armazenados dentro do objeto.</p>
<p>Ambos previnem o acesso direto à informações privadas do objeto, permitindo o acesso controlado aos dados.</p>
<h3>Polimorfismo</h3>
<p>O conceito de Polimorfismo é a habilidade em uma linguagem de permitir que múltiplos tipos da dados apareçam e sejam utilizados como outro tipo. Podemos classificar as&nbsp;linguagens de duas formas com relação a tipos de dados:</p>
<ul>
<li>Fortemente tipada: Os tipos de dados sempre derivam de um outro tipo.</li>
<li>Fracamente tipadas: Os tipos de dados são implicitamente polimórficos.</li>
</ul>
<p>Para que serve o polimorfismo?</p>
<ul>
<li>Desenvolvedores não precisam conhecer os tipos de dados (internamente) ao codificar.</li>
<li>Os tipos de dados serão reconhecidos e manipulados em tempo de execução (processo denominado <strong>dynamic binding</strong>)</li>
<li>Tipos diferentes de dados podem compartilhar os mesmos operadores, por meio de um processo chamado de <strong>Sobrecarga de Operadores</strong>.</li>
</ul>
<p>Com a sobrecarga de operadores, uma mesma classe pode fornecer múltiplos métodos para manipular diferentes operadores.</p>
<p>O polimorfismo permite, por exemplo, que as funções de atributos ou métodos sejam modificados quando uma classe é criada herdando de outra classe-pai. Esse é&nbsp;um dos pilares da&nbsp;Programação Orientada a Objetos.</p>
<h3>Sobrecarga de Métodos</h3>
<p>Podemos também sobrecarregar métodos, o que significa que podemos fornecer múltiplos métodos com uma variedade de parâmetros, tornando-os mais genéricos. Por exemplo, podemos ter um método que, ao receber duas strings, as concatena, formando uma terceira, mas se receber dois inteiros realiza sua soma em vez de concatená-los.&nbsp;</p>
<h3>Method Overriding</h3>
<p>Este conceito diz respeito à substituição de um método em uma classe por uma função externa, quando de seu uso.</p>
<p>Os métodos que podem ser sobrescritos assim são chamados de <strong>Métodos Virtuais</strong>.</p>
<h3>Recursão aberta</h3>
<p>É a habilidade de uma linguagem de programação que permite o acesso a membros de uma instância do objeto. Tipicamente, é usada com palavras-chave específicas e construída em nomes de variáveis.</p>
<p>Por exemplo, temos palavras-chave como <strong>this</strong>, <strong>self</strong>, <strong>me</strong>, que são ponteiros para a instância real na qual eles são utilizados.</p>
<p>É isso aí! Vimos neste tutorial alguns conceitos iniciais importantes para o estudo de Programação Orientada a Objetos.</p>
<p>Na parte 02 deste tutorial vamos tratar de mais conceitos, como Delegates, Namespaces e Encapsulamento, entre outros.</p>
<h3>&nbsp;</h3>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/conceitos-gerais-de-programacao-orientada-a-objetos/">Conceitos gerais de Programação Orientada a Objetos &#8211; 01</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/analise-de-sistemas/conceitos-gerais-de-programacao-orientada-a-objetos/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>78% das empresas usam Software Open Source</title>
		<link>https://www.bosontreinamentos.com.br/analise-de-sistemas/78-das-empresas-usam-software-open-source/</link>
					<comments>https://www.bosontreinamentos.com.br/analise-de-sistemas/78-das-empresas-usam-software-open-source/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 13 May 2015 12:54:17 +0000</pubDate>
				<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=2367</guid>

					<description><![CDATA[<p>78% das empresas usam Software Open Source A Black Duck Software, um provedor de soluções de software open source (OSS) e a  North Bridge, uma empresa de capital de risco, anunciaram os resultados da nona Pesquisa sobre o Futuro do Código Aberto. Eles descobriram que as empresas estão adotando software open source em massa, mas não estão gerenciando esse software de forma satisfatória. Lou Shipley, CEO da Black Duck, disse em uma declaração &#8220;Nos resultados desse ano, se tornou mais evidente que as empresas precisam de gerenciamento e governança do código aberto para alcançar seu uso completo. Isso é crítico para reduzir riscos legais, operacionais e de segurança em potencial, ao mesmo tempo em que permite às companhias colher todos os benefícios que o software de código aberto fornece&#8221;. The Future of Open Source 2015 Algumas das informações obtidas com essa pesquisa podem ser sumarizadas como segue: 78% dos respondentes disseram que suas empresas executam parte ou todas as suas operações em software open source e 66% disseram que suas empresas criam softwares para seus clientes baseados em código aberto. Esta estatística mais que dobrou desde 2010, quando 42% dos respondentes à pesquisa disseram que usam open source para tocar [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/78-das-empresas-usam-software-open-source/">78% das empresas usam Software Open Source</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>78% das empresas usam Software Open Source</h2>
<p>A <a href="http://www.blackducksoftware.com/" target="_blank" rel="noopener">Black Duck Software</a>, um provedor de soluções de software open source (OSS) e a  <a href="http://www.northbridge.com/" target="_blank" rel="noopener">North Bridge</a>, uma empresa de capital de risco, anunciaram os resultados da nona <a href="https://www.blackducksoftware.com/future-of-open-source" target="_blank" rel="noopener">Pesquisa sobre o Futuro do Código Aberto</a>. Eles descobriram que as empresas estão adotando software open source em massa, mas não estão gerenciando esse software de forma satisfatória.</p>
<p>Lou Shipley, CEO da Black Duck, disse em uma declaração &#8220;Nos resultados desse ano, se tornou mais evidente que as empresas precisam de gerenciamento e governança do código aberto para alcançar seu uso completo. Isso é crítico para reduzir riscos legais, operacionais e de segurança em potencial, ao mesmo tempo em que permite às companhias colher todos os benefícios que o software de código aberto fornece&#8221;.</p>
<div id="attachment_2368" style="width: 377px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2368" class="size-full wp-image-2368" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/05/open-source-codigo-aberto.png" alt="open-source-futuro" width="367" height="249" /><p id="caption-attachment-2368" class="wp-caption-text">The Future of Open Source 2015</p></div>
<p>Algumas das informações obtidas com essa pesquisa podem ser sumarizadas como segue:</p>
<ul>
<li>78% dos respondentes disseram que suas empresas executam parte ou todas as suas operações em software open source e 66% disseram que suas empresas criam softwares para seus clientes baseados em código aberto. Esta estatística mais que dobrou desde 2010, quando 42% dos respondentes à pesquisa disseram que usam open source para tocar seu negócio ou em seus ambientes de TI.</li>
<li>93% dissearm que o uso de open source por suas empresas aumentou ou permaneceu no mesmo patamar no ano passado</li>
<li>64% das empresas atualmente participam em projetos open source &#8211; em contraste com 50% em 2014. Para os próximos 2 ou 3 anos, espera-se que 88% das empresas aumentem suas contribuições para projetos de código aberto.</li>
<li>Sotfwares open source tem se tornado a abordagem padrão para o software com ais de 66% dos respondentes dizendo que levam em consideração softwares open source antes de tentar outras opções.</li>
</ul>
<p>Além disso, a pesquisa também revelou que:</p>
<ul>
<li>55% acreditam que software de código aberto são mais seguros quando comparados com soluções de software proprietário.</li>
<li>58% pensam que o open-source são mais dimensionáveis e 43% disseram que o open source fornece uma facilidade de implantação superior à de softwares proprietários.</li>
<li>Ao avaliar tecnologias de segurança para uso interno, 45% disseram que as opções open source são as primeiras a serem consideradas.</li>
</ul>
<p>Olhando para o futuro, aqueles que responderam à pesquisa vêem Cloud computing (39%), big data (35%), sistemas operacionais (33%), e a Internet das Coisas &#8211; IoT (31%) sendo impactadas por software de de código aberto nos próximos 2 ou 3 anos.</p>
<p>Estes números parecem baixos apesar disso. Por exemplo, à exceção de produtos de nuvem da Microsoft e VMware, praticamente todo o resto em termos de cloud é software opensource. Na verdade, a Microsoft também aderiu ao software open source em usa nuvem Azure com o Docker e a VMware tem sua própria nuvem OpenStack. Provavelmente a nuvem rodará OSS.</p>
<p>Porém, antes de ficarmos muito animados proclamando que o software open source “venceu”  e o software proprietário irá morrer, devemos levar em conta que as empresas ainda não possuem políticas formais de gerenciamento de open source. A pesquisa também descobriu que:</p>
<ul>
<li>Mais de 55% dos respondentes disseram que suas empresas não possuem procedimentos ou políticas formais para o uso de software open source. Além disso, apenas 27% possuem uma política formal de contribuições dos funcionários a projetos OSS.</li>
<li>Apenas 16% possuem um processo de aprovação de código automatizado e menos de 42% mantém um inventório de componentes open source.</li>
<li>Mais de 50% não estão satisfeitos com sua habilidade em compreender as vulnerabilidades de segurança conhecidas em componentes open-source, e apenas 17% planejam monitorar código open source para descobrir vulnerabilidades de segurança.</li>
</ul>
<div id="attachment_2369" style="width: 301px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2369" class="size-full wp-image-2369" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/05/open-source-initiative.png" alt="Open Source Initiative" width="291" height="245" /><p id="caption-attachment-2369" class="wp-caption-text">Open Source Initiative</p></div>
<p>Tudo isso é preocupante, mas há um problema ainda maior: as empresas muitas vezes vêem o software open source como algo “mágico” que é totalmente livre de problemas de segurança. É esse tipo de crença cega que levou, por exemplo, à falha de segurança <a href="http://www.heartbleed.com" target="_blank" rel="noopener">Heartbleed</a>.</p>
<p>De qualquer forma, é excelente que o software de código aberto esteja se tornando um favorito nas empresas. As empresas parecem finalmente estarem vendo o valor do modelo de desenvolvimento de software open source. Mas isso deve ser feito com  cuidado e planejamento para evitar problemas e trazer soluções de forma satisfatória.</p>
<p>Para saber mais sobre open source, visite o site da <a href="http://opensource.org/" target="_blank" rel="noopener">Open Source Initiative</a>.</p>
<p>Fonte:  <a href="http://www.zdnet.com/article/its-an-open-source-world-78-percent-of-companies-run-open-source-software/" target="_blank" rel="noopener">ZDNet</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/analise-de-sistemas/78-das-empresas-usam-software-open-source/">78% das empresas usam Software Open Source</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/analise-de-sistemas/78-das-empresas-usam-software-open-source/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
