<?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/tag/analise-de-sistemas/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/tag/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, 01 Oct 2025 19:14:08 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>Erros que cometi ao longo da carreira e lições aprendidas</title>
		<link>https://www.bosontreinamentos.com.br/carreira/erros-que-cometi-ao-longo-da-carreira-e-licoes-aprendidas/</link>
					<comments>https://www.bosontreinamentos.com.br/carreira/erros-que-cometi-ao-longo-da-carreira-e-licoes-aprendidas/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 01 Oct 2025 19:14:08 +0000</pubDate>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Ciência da Computação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<guid isPermaLink="false">https://www.bosontreinamentos.com.br/?p=20990</guid>

					<description><![CDATA[<p>Navegando a Carreira em Tecnologia: Lições Práticas para Evitar Armadilhas Comuns A carreira em tecnologia é frequentemente retratada como uma escalada meteórica, impulsionada por inovação e oportunidades sem fim. No entanto, por trás das histórias de sucesso, existe um percurso repleto de desafios, decisões críticas e, inevitavelmente, erros. A sabedoria não reside em evitar todos os percalços, mas em desenvolver a capacidade de autoavaliação e planejamento para aprender com eles. Neste artigo proponho uma reflexão sobre um conjunto de erros de carreira que cometi ao longo dos anos, baseados em minhas experiências reais, para extrair lições valiosas que possam acelerar o crescimento profissional de outros. Ao longo desta análise, exploraremos as armadilhas mais comuns que podem sabotar uma trajetória promissora. Investigaremos desde a gestão do conhecimento técnico em um cenário de constante mudança até o delicado equilíbrio entre vida profissional e pessoal. Abordaremos também a dinâmica no ambiente de trabalho, a importância de saber quando permanecer e quando partir, e, finalmente, a necessidade fundamental de um planejamento estratégico para construir uma carreira sólida e com propósito. Vamos começar pela primeira e talvez mais traiçoeira armadilha da nossa área: a estagnação tecnológica. O Apego Tecnológico: O Risco de Ficar Para Trás [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/carreira/erros-que-cometi-ao-longo-da-carreira-e-licoes-aprendidas/">Erros que cometi ao longo da carreira e lições aprendidas</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>Navegando a Carreira em Tecnologia: Lições Práticas para Evitar Armadilhas Comuns</h1>
<p>A carreira em tecnologia é frequentemente retratada como uma escalada meteórica, impulsionada por inovação e oportunidades sem fim. No entanto, por trás das histórias de sucesso, existe um percurso repleto de desafios, decisões críticas e, inevitavelmente, erros. A sabedoria não reside em evitar todos os percalços, mas em desenvolver a capacidade de autoavaliação e planejamento para aprender com eles.</p>
<p>Neste artigo proponho uma reflexão sobre um conjunto de erros de carreira que cometi ao longo dos anos, baseados em minhas experiências reais, para extrair lições valiosas que possam acelerar o crescimento profissional de outros.</p>
<p>Ao longo desta análise, exploraremos as armadilhas mais comuns que podem sabotar uma trajetória promissora. Investigaremos desde a gestão do conhecimento técnico em um cenário de constante mudança até o delicado equilíbrio entre vida profissional e pessoal.</p>
<p>Abordaremos também a dinâmica no ambiente de trabalho, a importância de saber quando permanecer e quando partir, e, finalmente, a necessidade fundamental de um planejamento estratégico para construir uma carreira sólida e com propósito.</p>
<p>Vamos começar pela primeira e talvez mais traiçoeira armadilha da nossa área: a estagnação tecnológica.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-20992" src="https://www.bosontreinamentos.com.br/wp-content/uploads/2025/10/Erros-Carreira-TI.webp" alt="Erros cometidos na minha carreira em Tecnologia da Informação" width="700" height="467" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2025/10/Erros-Carreira-TI.webp 700w, https://www.bosontreinamentos.com.br/wp-content/uploads/2025/10/Erros-Carreira-TI-420x280.webp 420w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<h3>O Apego Tecnológico: O Risco de Ficar Para Trás</h3>
<p>No universo da tecnologia, a única constante é a mudança. Ignorar essa verdade não é uma opção, é uma sentença de obsolescência. É por isso que a adaptabilidade é o seu ativo mais valioso. A falha em reconhecer essa realidade leva a dois erros interligados que podem estagnar uma carreira promissora.</p>
<h4>Inércia vs. Perfeccionismo: Os Dois Lados da Estagnação</h4>
<ul>
<li><b>Erro 1 &#8211; Estagnação por Afeição:</b> O primeiro perigo é &#8220;se apaixonar&#8221; por uma tecnologia a ponto de ignorar as tendências do mercado. Um exemplo claro disso é a insistência em paradigmas de programação procedural, como o Pascal, quando a indústria já havia abraçado massivamente a orientação a objetos. Essa resistência à mudança, motivada pelo conforto do conhecido, resulta em um custo altíssimo: a perda de <b>&#8220;várias vagas de trabalho em empresas muito boas&#8221;</b>.<br />
Ficar preso a uma ferramenta específica é como construir uma casa em areia movediça; a base eventualmente cederá.</li>
<li><b>Erro 2 &#8211; A Busca pela Maestria Absoluta:</b> O segundo erro é o oposto da inércia, mas igualmente paralisante: a crença de que é preciso dominar 100% de uma ferramenta antes de ousar aplicá-la profissionalmente. Essa mentalidade perfeccionista ignora um princípio fundamental da nossa área: programação, assim como a tecnologia em geral, <b>&#8220;você aprende na prática&#8221;</b>. <br />
Esperar por uma preparação completa que nunca chega é uma forma sutil de autossabotagem. O conhecimento teórico é o ponto de partida, mas a aplicação precoce é o verdadeiro catalisador para o aprendizado real e a conquista de novas oportunidades.</li>
</ul>
<h4>Síntese da Lição Prática</h4>
<p>Para navegar com sucesso no cenário tecnológico, é preciso adotar uma abordagem equilibrada, que combine vigilância e ação. As lições podem ser destiladas em duas recomendações principais:</p>
<ul>
<li><b>Aprendizagem Contínua Ativa:</b> Mantenha-se &#8220;antenado nas tecnologias novas&#8221; que estão surgindo. Isso exige uma postura proativa e a coragem de &#8220;descartar o que você aprendeu anteriormente&#8221; quando uma abordagem mais eficaz se apresenta. O aprendizado em tecnologia não é um acúmulo linear, mas um processo constante de renovação.</li>
<li><b>Aplicação Imediata:</b> Coloque o conhecimento em prática assim que tiver uma &#8220;certa desenvoltura&#8221;. Não espere saber tudo para começar. O aprendizado se solidifica no campo de batalha, resolvendo problemas reais. O que você já sabe pode ser suficiente para começar, e o resto será desenvolvido ao longo do caminho.</li>
</ul>
<p>Gerenciar o conhecimento técnico é apenas uma parte da equação. A outra é saber gerenciar a própria jornada profissional dentro e entre as empresas, o que nos leva ao próximo dilema.</p>
<h3>O Dilema da Permanência: Equilibrando Lealdade e Crescimento</h3>
<p>A decisão de permanecer ou sair de uma empresa é uma das mais complexas na vida profissional. Não existe uma fórmula única, mas sim um balanço delicado entre estabilidade, crescimento pessoal e relevância no mercado. Tanto a permanência excessiva quanto a mudança constante apresentam riscos que podem minar uma carreira a longo prazo se não forem avaliados com cuidado.</p>
<h4>A Corda Bamba da Lealdade: O Risco de Ficar Demais e o Perigo de Sair Cedo</h4>
<ul>
<li><b>O Risco de Ficar Demais (A Armadilha do Dinossauro Corporativo):</b> Permanecer na mesma empresa e, principalmente, na mesma função por um período excessivamente longo pode levar à obsolescência. Com o tempo, as habilidades desenvolvidas podem se tornar tão específicas para aquele ambiente que &#8220;talvez não tenha mais utilidade fora dali&#8221;. O profissional corre o risco de se tornar um &#8220;dinossauro&#8221;, sentindo que teria uma &#8220;dificuldade gigantesca para conseguir um posto de trabalho em outro lugar&#8221;. A relação de trabalho não pode se resumir a &#8220;simplesmente a receber o salário no fim do mês&#8221;; ela precisa ser uma via de mão dupla de contribuição e crescimento.</li>
<li><b>O Risco de Ficar de Menos:</b> No outro extremo está o &#8220;caça salário&#8221;, o profissional que pula de empresa em empresa a cada poucos meses em busca de um pequeno aumento. Embora a busca por uma remuneração melhor seja legítima, essa atitude, quando desprovida de um compromisso com a entrega de valor, pode ser destrutiva.<br />
A longo prazo, cria-se uma reputação de profissional &#8220;não confiável&#8221;, alguém que &#8220;vai deixar a empresa na mão&#8221; na primeira oportunidade. É crucial ponderar, pois é evidente que &#8220;oportunidades muito boas Elas têm que ser aproveitadas&#8221;, mas a troca constante por ganhos marginais mina a confiança que as empresas depositam em você.</li>
</ul>
<h4>Quando é a Hora de Mudar?</h4>
<p>Para tomar uma decisão informada, é crucial realizar uma autoavaliação periódica, utilizando critérios claros. Considere os seguintes pontos para determinar se é o momento de buscar um novo caminho:</p>
<ol>
<li><b>Fim do Crescimento:</b> Avalie honestamente se você ainda tem espaço para evoluir. Se você percebe que &#8220;não têm oportunidade de crescimento maiores nessa empresa&#8221; e seu desejo de aprender mais não é satisfeito, pode ser um sinal de estagnação.</li>
<li><b>Contribuição Mútua:</b> A relação de trabalho deve ser benéfica para ambos os lados. O ciclo ideal é &#8220;você puder contribuir com ele [a empresa] e se eu puder contribuir com você&#8221;. Quando essa troca cessa e a relação se torna puramente transacional, o engajamento e a motivação tendem a desaparecer.</li>
<li><b>Relevância Externa:</b> Pergunte-se se as suas tarefas e competências atuais estão alinhadas com as demandas do mercado de trabalho. Se a resposta for negativa, você pode estar se tornando um especialista em uma área que está perdendo valor fora dos muros da sua empresa atual.</li>
</ol>
<p>A decisão de ficar ou sair está intrinsecamente ligada à forma como nos comportamos <i>dentro</i> da empresa, especialmente em relação à gestão dos nossos próprios limites, o que nos conduz à próxima reflexão crítica.</p>
<h3>O Custo Oculto do &#8220;Sim&#8221;: Protegendo seu Bem-Estar e Foco</h3>
<p>A cultura de alta performance em tecnologia pode, perigosamente, glamourizar o excesso de trabalho, transformando a exaustão em um símbolo de dedicação. No entanto, essa mentalidade é insustentável e contraproducente. Gerenciar a própria energia, saúde e tempo é uma competência estratégica, um ativo de carreira que, se negligenciado, pode levar ao esgotamento e a consequências irreversíveis.</p>
<h4>O Preço da Dedicação Extrema: Saúde e Foco em Risco</h4>
<ul>
<li><b>O Sacrifício da Saúde:</b> A prática de &#8220;deixar de lado o meu bem-estar pessoal&#8221; para agradar uma empresa é uma armadilha comum. A anedota de trabalhar 24 horas seguidas, &#8220;comendo coxinha no bar da esquina&#8221;, ilustra vividamente as consequências dessa escolha. O sacrifício de sono, alimentação adequada e tempo com a família em nome de um projeto tem um preço alto.<br />
A trágica ironia é que o esforço desmedido do passado agora &#8220;me impede de trabalhar mais hoje&#8221;, mesmo sendo um profissional mais capacitado.<br />
Os mesmos sacrifícios feitos para avançar na carreira acabaram se tornando os maiores obstáculos para o seu potencial futuro.</li>
<li><b>A Incapacidade de Dizer &#8220;Não&#8221;:</b> A dificuldade em recusar tarefas está frequentemente ligada ao medo de &#8220;parecer incompetente&#8221; ou de ser demitido. Essa mesma insegurança é a raiz de outro erro que veremos adiante: o medo de pedir ajuda. Ambas as atitudes nascem do receio da vulnerabilidade. Aceitar responsabilidades além da própria capacidade é uma receita para o fracasso.<br />
Um exemplo disso é o profissional que, ao realizar um &#8220;trabalho X&#8221; com excelência, aceita um &#8220;trabalho Y&#8221; adicional para o qual não estava preparado. O resultado foi um segundo trabalho &#8220;muito mal feito&#8221;, que não apenas desagradou a empresa, mas também culminou na perda do projeto original no qual ele estava indo bem.</li>
</ul>
<h4>Formulação dos Princípios de Autoproteção</h4>
<p>Para construir uma carreira longa e produtiva, é essencial substituir a mentalidade de sacrifício por uma abordagem de sustentabilidade profissional. A tabela abaixo contrasta essas duas visões:</p>
<table border="1">
<tbody>
<tr>
<td style="text-align: center;">
<p><span style="font-size: 14pt;"><strong>Mentalidade Destrutiva</strong></span></p>
</td>
<td style="text-align: center;">
<p><span style="font-size: 14pt;"><strong>Abordagem Profissional Sustentável</strong></span></p>
</td>
</tr>
<tr>
<td>
<p>&#8220;Preciso agradar a empresa a qualquer custo, sacrificando sono, saúde e família.&#8221;</p>
</td>
<td>
<p>&#8220;Minha saúde e meus entes queridos são mais importantes. Um profissional saudável é mais produtivo a longo prazo.&#8221;</p>
</td>
</tr>
<tr>
<td>
<p>&#8220;Aceitar todas as tarefas prova que sou útil e indispensável.&#8221;</p>
</td>
<td>
<p>&#8220;Saber dizer &#8216;não&#8217; para tarefas inviáveis é um sinal de responsabilidade e autoconhecimento.&#8221;</p>
</td>
</tr>
<tr>
<td>
<p>&#8220;A empresa reconhecerá meu sacrifício com uma promoção.&#8221;</p>
</td>
<td>
<p>&#8220;A empresa pode me ver como uma &#8216;máquina de trabalho&#8217; descartável. Meu valor está na qualidade, não no excesso.&#8221;</p>
</td>
</tr>
</tbody>
</table>
<p>A dificuldade em impor limites raramente é apenas sobre carga de trabalho; ela nasce de uma complexa mistura de medo e ego — o medo de parecer incompetente e o ego que nos impede de admitir nossas limitações, uma armadilha que merece sua própria análise.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-20994 size-medium" src="https://www.bosontreinamentos.com.br/wp-content/uploads/2025/10/Erro-Programacao-TI-420x420.webp" alt="Erros ao criar código-fonte em programação" width="420" height="420" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2025/10/Erro-Programacao-TI-420x420.webp 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2025/10/Erro-Programacao-TI-170x170.webp 170w, https://www.bosontreinamentos.com.br/wp-content/uploads/2025/10/Erro-Programacao-TI.webp 700w" sizes="auto, (max-width: 420px) 100vw, 420px" /></p>
<h3>A Armadilha do Ego: Humildade Como Ferramenta de Crescimento</h3>
<p>Em um campo tão intensivo em conhecimento como a tecnologia, o ego pode ser o maior obstáculo ao aprendizado genuíno e à colaboração eficaz. A falsa necessidade de parecer infalível nos impede de fazer a coisa mais importante para o nosso desenvolvimento: admitir o que não sabemos. A humildade, longe de ser um sinal de fraqueza, é uma poderosa ferramenta de crescimento.</p>
<h4>Quando o Orgulho Custa Caro: O Medo de Pedir Ajuda e a Ilusão do Conhecimento</h4>
<ul>
<li><b>Medo de Pedir Ajuda:</b> A recusa em procurar ajuda por &#8220;vergonha&#8221; ou medo de parecer incapaz é um erro clássico e destrutivo. A experiência de transformar um trabalho que &#8220;deveria ser feito em duas horas [em um que] foi feito em duas semanas&#8221; ilustra perfeitamente o resultado: &#8220;stress&#8221;, perda de &#8220;contratos de clientes bravos&#8221; e um desgaste profissional imenso que leva a &#8220;passar vergonha depois&#8221;.<br />
Contrariando a intuição do ego, procurar ajuda não desqualifica um profissional; pelo contrário, demonstra maturidade, acelera a resolução de problemas e promove o aprendizado.</li>
<li><b>A Ilusão do Conhecimento:</b> Outra manifestação do ego é &#8220;achar que sabe mais do que realmente sabe&#8221;. Essa atitude leva a subestimar a complexidade de tecnologias e desafios, resultando em problemas que, inevitavelmente, &#8220;estouram na sua cara&#8221;. A verdadeira sabedoria reside em reconhecer a vastidão do conhecimento e as próprias limitações.<br />
A postura de admitir publicamente, &#8220;eu não sei isso não vou dizer que eu sei&#8221;, é um exemplo de integridade e humildade intelectual que gera confiança e abre portas para o aprendizado.</li>
</ul>
<h4>Princípio da Humildade Intelectual</h4>
<p>A lição fundamental aqui é a prática da humildade intelectual – a consciência clara dos limites do próprio conhecimento. É preciso ter a coragem de &#8220;descer lá no pedestal e admitir: eu não sei isso&#8221;. Esse reconhecimento é o primeiro passo para aprender de verdade. A realidade do nosso setor é que a tecnologia está em constante evolução, e a premissa de que &#8220;ninguém sabe tudo e nem jamais vai saber tudo&#8221; é libertadora. Ela nos permite estar sempre em modo de aprendizado, abertos a novas ideias e à colaboração.</p>
<p>Dominar o ego e abraçar o aprendizado é a base da maturidade profissional. Contudo, essa maturidade só gera resultados consistentes quando é aplicada a uma visão de longo prazo, nos protegendo do erro mais abrangente de todos: navegar a carreira sem um destino em mente.</p>
<h3>Navegando sem Bússola: A Importância de um Plano de Carreira</h3>
<p>Uma carreira em tecnologia não pode ser deixada ao acaso. Sem uma direção clara, corremos o risco de acumular experiências desconexas que não se somam para construir uma especialização valiosa. Um plano de carreira não deve ser visto como um roteiro rígido e imutável, mas como uma bússola que orienta as decisões diárias, garantindo que o esforço contínuo nos leve a um destino profissional desejado.</p>
<h4>A Deriva Profissional: As Consequências de uma Jornada sem Rumo</h4>
<p>Viver &#8220;um tempo ao sabor do vento&#8221; profissionalmente pode parecer libertador no início, mas suas consequências a longo prazo são graves. A experiência de trabalhar com uma &#8220;tecnologia A&#8221; em uma empresa e, em seguida, mudar para outra para trabalhar com &#8220;tecnologia B&#8221; que &#8220;não estava relacionada com a primeira&#8221; é um exemplo clássico. Sem um fio condutor, o resultado é um &#8220;acumulo de conhecimentos esparsos&#8221; em vez de uma especialidade sólida.</p>
<p>A pergunta que fica é bem problemática: &#8220;No final eu ia acabar com o quê? Com nada&#8221;.</p>
<h4>Esboçando seu Caminho</h4>
<p>Lembre-se: construir um plano de carreira não é sobre ter todas as respostas de imediato, mas sim começar a fazer as perguntas certas e a esboçar uma direção. Aqui estão alguns passos iniciais e acionáveis para criar seu roteiro profissional:</p>
<ul>
<li><b>Defina uma Direção Geral:</b> Tenha uma visão, mesmo que ampla, de &#8220;onde você quer chegar daqui a cinco anos, daqui a dez anos&#8221;. Isso ajuda a filtrar oportunidades e a tomar decisões mais alinhadas com seus objetivos.</li>
<li><b>Visualize uma Progressão:</b> Entenda a linha natural de crescimento na sua área de interesse. O caminho de &#8220;estagiário&#8221; para &#8220;desenvolvedor Júnior&#8221;, depois &#8220;pleno&#8221; e &#8220;sênior&#8221; é um exemplo de progressão que ajuda a estruturar as expectativas e os próximos passos.</li>
<li><b>Faça Perguntas Estratégicas:</b> Questione-se regularmente: &#8220;Qual é a sua especialidade? O que você pretende?&#8221;. Essas perguntas forçam a clareza e garantem que você não está apenas reagindo às oportunidades, mas construindo proativamente a carreira que deseja.</li>
</ul>
<p>A criação de um plano de carreira é o que conecta todos os pontos, transformando a jornada de aprendizado e a superação de erros em uma trajetória coerente e com propósito.</p>
<h3>Conclusão: Transformando Erros em Degraus para o Sucesso</h3>
<p>Ao longo desta reflexão, navegamos por cinco áreas críticas onde erros comuns podem desviar uma carreira promissora em tecnologia. Vimos a necessidade vital de aprendizado contínuo para não ficar obsoleto; o delicado equilíbrio entre lealdade e crescimento ao decidir permanecer em um emprego; a importância inegociável de proteger nosso bem-estar e saber dizer &#8220;não&#8221;; a prática da humildade como catalisadora do conhecimento; e, finalmente, a indispensável bússola de um plano de carreira para dar direção aos nossos esforços.</p>
<p>A mensagem central não é lamentar os erros, mas sim utilizá-los como ferramentas poderosas para uma tomada de decisão mais consciente e estratégica no futuro. Cada passo em falso, quando analisado com honestidade, se torna um degrau na escada do nosso desenvolvimento profissional. Eles nos ensinam sobre nossos limites, nossas paixões e o tipo de carreira que verdadeiramente desejamos construir.</p>
<p>O objetivo final é capacitar cada profissional a trilhar seu próprio caminho com mais segurança e clareza. Como diz a mensagem que inspirou este artigo, &#8220;o objetivo aqui [&#8230;] é orientar vocês de modo que vocês tenham carreiras boas, brilhantes e se deem bem na vida&#8221;. Que estas lições sirvam como um guia para que você possa não apenas evitar as armadilhas, mas, acima de tudo, construir uma jornada profissional da qual se orgulhe.</p>
<h3>PARA SABER MAIS</h3>
<p>Assista ao vídeo no canal da Bóson Treinamentos em Tecnologia no qual abordo esse conteúdo:</p>
<p><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/uSiVS6yEJXI?si=71TP-Ua1tfsuPeUs" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/carreira/erros-que-cometi-ao-longo-da-carreira-e-licoes-aprendidas/">Erros que cometi ao longo da carreira e lições aprendidas</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/erros-que-cometi-ao-longo-da-carreira-e-licoes-aprendidas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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>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>Modelagem de Dados &#8211; Tipos de Chaves</title>
		<link>https://www.bosontreinamentos.com.br/modelagem-de-dados/modelagem-de-dados-tipos-de-chaves/</link>
					<comments>https://www.bosontreinamentos.com.br/modelagem-de-dados/modelagem-de-dados-tipos-de-chaves/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 11 Jun 2020 19:42:51 +0000</pubDate>
				<category><![CDATA[Modelagem de Dados]]></category>
		<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=16859</guid>

					<description><![CDATA[<p>Tipos de Chaves em Modelagem de Dados Artigo complementar do Curso Completo de Modelagem de Dados da Bóson Treinamentos no YouTube. Neste artigo vamos explorar um tópico de elevada importância em modelagem de dados: o conceito de chaves e seus tipos, com algumas dicas de como determinar chaves primárias e estrangeiras em uma tabela, e exemplos. O que são Chaves em Bancos de Dados Uma chave consiste em uma ou mais colunas combinadas de uma relação (tabela) cujos valores são usados para identificar de forma exclusiva uma linha ou um conjunto de linhas relacionadas. Uma chave pode ser única, ou seja, identifica uma única linha em uma tabela, ou ainda não-única, permitindo identificar um conjunto de linhas (registros). A seguir listamos as chaves de acordo com essa classificação: Chaves Únicas: Chave Candidata, Chave Composta, Chave Primária, Chave Surrogada (ou&#160;ChaveSubstituta), Chave Alternativa Chave Não-Única (Non-Unique): Chave Estrangeira Vamos detalhar um pouco mais cada tipo de chave a partir de agora. Chave Candidata Atributo ou grupo de atributos com o potencial para se tornarem uma chave primária. Uma chave candidata que não seja usada como chave primária será conhecida como Chave Alternativa. Exemplos: Os campos Num_Matrícula e CPF em uma tabela de [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/modelagem-de-dados/modelagem-de-dados-tipos-de-chaves/">Modelagem de Dados &#8211; Tipos de Chaves</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>Tipos de Chaves em Modelagem de Dados</h2>
<p><em>Artigo complementar do <a href="https://www.youtube.com/watch?v=Q_KTYFgvu1s&amp;list=PLucm8g_ezqNoNHU8tjVeHmRGBFnjDIlxD" target="_blank" rel="noopener">Curso Completo de Modelagem de Dados</a> da Bóson Treinamentos no YouTube.</em></p>
<p>Neste artigo vamos explorar um tópico de elevada importância em modelagem de dados: o conceito de <strong><em>chaves</em></strong> e seus tipos, com algumas dicas de como determinar chaves primárias e estrangeiras em uma tabela, e exemplos.</p>
<h3>O que são Chaves em Bancos de Dados</h3>
<p><span style="font-weight: 400;">Uma <em><strong>chave</strong></em> consiste em uma ou mais colunas combinadas de uma relação (tabela) cujos valores são usados para identificar de forma exclusiva uma linha ou um conjunto de linhas relacionadas.</span></p>
<p><span style="font-weight: 400;">Uma chave pode ser única, ou seja, identifica uma única linha em uma tabela, ou ainda não-única, permitindo identificar um conjunto de linhas (registros). A seguir listamos as chaves de acordo com essa classificação:</span></p>
<ul>
<li><span style="font-weight: 400;">Chaves Únicas: Chave Candidata, Chave Composta, Chave Primária, Chave Surrogada (ou&nbsp;ChaveSubstituta), Chave Alternativa</span></li>
<li><span style="font-weight: 400;">Chave Não-Única (Non-Unique): Chave Estrangeira</span></li>
</ul>
<p>Vamos detalhar um pouco mais cada tipo de chave a partir de agora.</p>
<h3>Chave Candidata</h3>
<ul>
<li style="font-weight: 400;"><span style="font-weight: 400;">Atributo ou grupo de atributos com o potencial para se tornarem uma chave primária.</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Uma chave candidata que não seja usada como chave primária será conhecida como </span><b>Chave Alternativa</b><span style="font-weight: 400;">.</span></li>
</ul>
<p><span style="font-weight: 400;">Exemplos: Os campos Num_Matrícula e CPF em uma tabela de registro de alunos são chaves candidatas, pois podem ser usados como chave primária.</span></p>
<h3>Chave Primária</h3>
<ul>
<li style="font-weight: 400;"><span style="font-weight: 400;">É achave candidata escolhida para ser a </span><b><i>chave principal</i></b><span style="font-weight: 400;"> na relação.</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">A chave primária identifica de forma </span><b><i>exclusiva</i></b><span style="font-weight: 400;"> os registros em uma tabela, não podendo haver repetição de valores nem tampouco valor nulo neste campo.</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Em inglês Primary Key / PK</span></li>
</ul>
<p><span style="font-weight: 400;">Podemos indicar uma chave primária em um modelo de dados com um #, por exemplo <strong>#Cod_Livro</strong>, ou ainda sublinhando o nome do campo, como <strong><span style="text-decoration: underline;">Cod_Livro</span></strong>.</span></p>
<h3>Chave Estrangeira</h3>
<ul>
<li style="font-weight: 400;"><span style="font-weight: 400;">Uma <a href="http://www.bosontreinamentos.com.br/mysql/opcoes-de-chave-estrangeira-mysql/">chave estrangeira</a> é uma coluna de uma tabela que estabelece um </span><b><i>Relacionamento com a Chave Primária</i></b><span style="font-weight: 400;"> (PK) ou coluna </span><b><i>unique</i></b><span style="font-weight: 400;"> de outra tabela relacionada.</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">É a partir da chave estrangeira (Inglês: Foreign key / FK) que sabemos com qual registro em uma tabela B um registro em uma tabela A está relacionado. Assim, por exemplo, é possível saber qual livro foi vendido, em um sistema de uma livraria, pois o campo Cod_Livro (chave primária em uma tabela de cadastro de livros) estará presente em uma tabela de registro de vendas como chave estrangeira, apontando para o registro do livro especificado.</span></li>
</ul>
<h3>Chave Composta</h3>
<ul>
<li style="font-weight: 400;"><span style="font-weight: 400;">Trata-se de uma chave que é composta de dois ou mais atributos (colunas) combinados, formando uma combinação única, cujos valores nunca se repetem (mas podem se repetir isoladamente).</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Uma chave composta geralmente é empregada quando não é possível utilizar uma única coluna de uma tabela para identificar de forma exclusiva seus registros.</span></li>
</ul>
<h3>Chave Surrogada ou Chave Substituta</h3>
<ul>
<li style="font-weight: 400;"><span style="font-weight: 400;">Uma chave surrogada é um valor numérico, único, adicionado a uma relação para servir como chave primária, quando nenhuma chave candidata for identificada.</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Não possui significado para os usuários e geralmente fica escondida nas aplicações.</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">As chaves substitutas são frequentemente usadas no lugar de uma chave primária composta, para simplificação dos relacionamentos.</span></li>
</ul>
<h3><b>Instruções para criação de chaves primárias e estrangeiras</b></h3>
<p>Podemos seguir algumas recomendações simples para identificar e criar chaves primárias e chaves estrangeiras em uma tabela, como por eexmplo:</p>
<ul>
<li style="font-weight: 400;"><span style="font-weight: 400;">Não é possível haver valores duplicados em uma chave primária</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">No geral, não é possível alterar o valor de uma chave primária</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Chaves estrangeiras são baseadas em valores de dados, classificadas como ponteiros lógicos</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Um valor de uma chave estrangeira deve corresponder a um valor existente em uma chave primária associada (ou valor de chave única). Caso contrário, deve ser nulo (NULL)</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Uma chave estrangeira deve referenciar uma chave primária ou uma coluna de chave única.</span></li>
</ul>
<h3><b>Exemplo de chave primária e chave estrangeira</b></h3>
<p>No exemplo a seguir temos três tabelas relacionadas: tbl_Clientes, tbl_Vendas e tbl_Produtos. A tabela de vendas possui duas chaves estrangeiras, que a relacionam com as tabelas de clientes e de produtos, permitindo assim saber qual produto está incluído na venda, e para qual cliente esse produto foi vendido.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16861" title="Relacionamento entre Chave Primária e Chave Estrangeira" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/06/chave-primaria-chave-estrangeira-1024x333.jpg" alt="Relacionamento entre Chave Primária e Chave Estrangeira" width="699" height="227" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/06/chave-primaria-chave-estrangeira-1024x333.jpg 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/06/chave-primaria-chave-estrangeira-420x136.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/06/chave-primaria-chave-estrangeira-768x250.jpg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/06/chave-primaria-chave-estrangeira.jpg 1271w" sizes="auto, (max-width: 699px) 100vw, 699px" /></p>
<h3>O conceito de Domínio</h3>
<ul>
<li style="font-weight: 400;"><span style="font-weight: 400;">O conceito de Domínio em bancos de dados nos permite definir os tipos de dados usados em cada campo de uma tabela ou relação.</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Também permitem especificar valores que são válidos em um campo, de acordo com o tipo de dado e intervalo de valores possível para o tipo.</span></li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16862" title="O conceito de domínio em modelagem de dados" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/06/dominio-bancos-de-dados-conceito.jpg" alt="O conceito de domínio em modelagem de dados" width="701" height="331" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/06/dominio-bancos-de-dados-conceito.jpg 872w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/06/dominio-bancos-de-dados-conceito-420x198.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/06/dominio-bancos-de-dados-conceito-768x363.jpg 768w" sizes="auto, (max-width: 701px) 100vw, 701px" /></p>
<h3>Conclusão</h3>
<p>O conceito de chaves e seus tipos é de crucial importância no desenvolvimento de bancos de dados, pois a partir da determinação do campos que serão chaves primárias e estrangeiras é que poderemos estabelecer os relacionamentos entre as tabelas, em um modelo relacional.</p>
<p>Próximo: Cardinalidades em Relacionamentos</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/modelagem-de-dados/modelagem-de-dados-tipos-de-chaves/">Modelagem de Dados &#8211; Tipos de Chaves</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/modelagem-de-dados/modelagem-de-dados-tipos-de-chaves/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Perfil do Curso de Análise e Desenvolvimento de Sistemas</title>
		<link>https://www.bosontreinamentos.com.br/carreira/perfil-do-curso-de-analise-e-desenvolvimento-de-sistemas/</link>
					<comments>https://www.bosontreinamentos.com.br/carreira/perfil-do-curso-de-analise-e-desenvolvimento-de-sistemas/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 03 Mar 2020 12:46:25 +0000</pubDate>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[Análise de Sistemas]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=16482</guid>

					<description><![CDATA[<p>Curso de Análise e Desenvolvimento de Sistemas &#8211; Informações Gerais Neste artigo vamos falar sobre um dos cursos mais procurados na área de tecnologia: o curso de Análise e Desenvolvimento de Sistemas (ou simplesmente Análise de Sistemas), e o que um Analista faz como profissional de tecnologia. Tipo de curso Este é um curso de Nível Superior em Tecnologia (tecnólogo), ou seja um curso de curta duração que lhe permitirá obter uma graduação (faculdade) e seguir carreira na área da Tecnologia da Informação (T.I.). O que faz um Analista de Sistemas? O Analista de sistemas projeta, desenvolve, codifica, documenta e implanta programas e sistemas para empresas. Também pode realizar auditoria de sistemas já existentes, testar softwares para descobrir erros e falhas, projetar e gerenciar bancos de dados e atualizar / melhorar programas existentes. Pode trabalhar como funcionário em uma empresa ou ainda prestar consultoria, por conta própria ou por meio de empresas especializadas. Duração do curso Em torno de 2 a 3 anos (4 a 6 semestres), podendo variar em função de período ou da instituição. É oferecido tanto em modalidade presencial quanto EAD. O que é importante saber &#8211; aptidões O aluno que estuda análise e desenvolvimento de sistemas [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/carreira/perfil-do-curso-de-analise-e-desenvolvimento-de-sistemas/">Perfil do Curso de Análise e Desenvolvimento de Sistemas</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>Curso de Análise e Desenvolvimento de Sistemas &#8211; Informações Gerais</h2>
<p>Neste artigo vamos falar sobre um dos cursos mais procurados na área de tecnologia: o curso de Análise e Desenvolvimento de Sistemas (ou simplesmente Análise de Sistemas), e o que um Analista faz como profissional de tecnologia.</p>
<h3>Tipo de curso</h3>
<p>Este é um curso de Nível Superior em Tecnologia (tecnólogo), ou seja um curso de curta duração que lhe permitirá obter uma graduação (faculdade) e seguir carreira na área da Tecnologia da Informação (T.I.).</p>
<h3>O que faz um Analista de Sistemas?</h3>
<p>O Analista de sistemas projeta, desenvolve, codifica, documenta e implanta programas e sistemas para empresas. Também pode realizar auditoria de sistemas já existentes, testar softwares para descobrir erros e falhas, projetar e gerenciar bancos de dados e atualizar / melhorar programas existentes.</p>
<p>Pode trabalhar como funcionário em uma empresa ou ainda prestar consultoria, por conta própria ou por meio de empresas especializadas.</p>
<h3>Duração do curso</h3>
<p>Em torno de 2 a 3 anos (4 a 6 semestres), podendo variar em função de período ou da instituição. É oferecido tanto em modalidade presencial quanto EAD.</p>
<h3>O que é importante saber &#8211; aptidões</h3>
<p>O aluno que estuda análise e desenvolvimento de sistemas precisa ter bom raciocínio lógico e facilidade com matemática e cálculos, além, é claro, de gostar de computadores. Curiosidade é um aspecto importante, pois muitas vezes é necessário descobrir novas formas de resolver problemas, além do gosto pelo aprendizado, que nesta área é contínuo e de longo prazo.</p>
<p>Conhecer outras áreas também é importante, como economia, administração e contabilidade, pois é comum que se desenvolvam sistemas e software para essas áreas.<br />
Saber outro idioma, principalmente o inglês, é um diferencial enorme, pois boa parte da literatura e cursos estão nessa língua.</p>
<p>Saber se relacionar e lidar com público, além do trabalho em equipe, são fundamentais, pois o analista precisa saber se comunicar com clientes, usuários e outros stakeholders durante o processo de desenvolvimento de software.</p>
<p>Apesar disso, não há necessidade de saber programar nem tampouco de ter conhecimentos específicos em informática para começar a cursar essa faculdade. O aluno aprenderá tudo o que ele precisa, desde como funciona um computador e como usar um editor de textos até programação em linguagens específicas e tópicos de engenharia de software.</p>
<h3>Grade Curricular Geral</h3>
<p>As disciplinas mais comuns encontradas nos diversos cursos de tecnologia em análise e desenvolvimento de sistemas incluem:</p>
<ul>
<li>Algoritmos e Lógica de Programação</li>
<li>Arquitetura e Organização de Computadores</li>
<li>Administração Geral</li>
<li>Análise Orientada a Objetos e Modelagem de Sistemas</li>
<li>Comunicação e Expressão</li>
<li>Engenharia de Software</li>
<li>Linguagens de Programação (variadas, como Java, C, Python, etc.)</li>
<li>Estruturas de Dados</li>
<li>Sistemas Operacionais</li>
<li>Interface Humano-Computador (IHM)</li>
<li>Programação para Web / Internet (inclui HTML, CSS, JavaScript, PHP)</li>
<li>Desenvolvimento para dispositivos móveis e IoT</li>
<li>Matemática e Estatística</li>
<li>Redes de Computadores (básico)</li>
<li>Segurança da Informação</li>
<li>Modelagem e Projeto de Bancos de Dados</li>
<li>Empreendedorismo</li>
<li>Sistemas Distribuídos</li>
<li>Gestão de Projetos</li>
<li>Qualidade de Software</li>
<li>Gestão e Governança de TI</li>
<li>Microinformática</li>
</ul>
<p>Com algumas pequenas variações, principalmente no tocante às disciplinas optativas ou eletivas, que os alunos podem escolher ao longo do curso.</p>
<h3>Onde é possível trabalhar?</h3>
<p>Basicamente, em todo local que fizer uso de sistemas informatizados &#8211; ou seja, em praticamente toda parte atualmente. Exemplos de empresas que mais necessitam de Analistas de Sistemas são instituições financeiras, industrias, hospitais, consultorias, concessionárias, etc.</p>
<p>O mercado para esse tipo de profissional está bastante aquecido e em constante crescimento, e oportunidades surgem em empresas de todos os tamanhos &#8211; pequeno, médio e grande porte, incluindo grandes multinacionais e empresas públicas.</p>
<p>Você cursa análise e desenvolvimento de sistemas ou é formado na área? Fale a respeito nos comentários logo abaixo!&nbsp;Eu, por exemplo, sou formado exatamente neste curso &#8211; portanto, sou analista de sistemas por formação.</p>
<p>Nos próximos artigos vamos trazer informações sobre outros cursos de graduação, pós-graduação e técnicos, como Sistemas de Informação, Ciência da Computação, Técnico em Informática, Tecnologia em Bancos de Dados e outros.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/carreira/perfil-do-curso-de-analise-e-desenvolvimento-de-sistemas/">Perfil do Curso de Análise e Desenvolvimento de Sistemas</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/perfil-do-curso-de-analise-e-desenvolvimento-de-sistemas/feed/</wfw:commentRss>
			<slash:comments>5</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>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>
	</channel>
</rss>
