<?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>UFSM - Feed Customizado RSS</title>
			<atom:link href="https://www.ufsm.br/busca?rss=true&#038;tags=eng-software" rel="self" type="application/rss+xml" />
			<link>https://www.ufsm.br</link>
			<description>Universidade Federal de Santa Maria</description>
			<lastBuildDate>Fri, 24 Jul 2026 21:45:19 +0000</lastBuildDate>
			<language>pt-BR</language>
			<sy:updatePeriod>hourly</sy:updatePeriod>
			<sy:updateFrequency>1</sy:updateFrequency>
			<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>/app/themes/ufsm/images/icons/favicon.ico</url>
	<title>UFSM</title>
	<link>https://www.ufsm.br</link>
	<width>32</width>
	<height>32</height>
</image> 
						<item>
				<title>Gamificação como estratégia para o ensino de engenharia de software</title>
				<link>https://www.ufsm.br/pet/sistemas-de-informacao/2025/12/02/gamificacao-como-estrategia-para-o-ensino-de-engenharia-de-software</link>
				<pubDate>Tue, 02 Dec 2025 13:24:38 +0000</pubDate>
						<category><![CDATA[Destaques]]></category>
		<category><![CDATA[Redações]]></category>
		<category><![CDATA[Eng. Software]]></category>
		<category><![CDATA[jogos]]></category>

				<guid isPermaLink="false">https://www.ufsm.br/pet/sistemas-de-informacao/?p=3667</guid>
						<description><![CDATA[Quando um aluno começa a estudar Engenharia de Software, raramente imagina que grande parte do trabalho envolve muito mais do que escrever código. É preciso planejar projetos, dividir tarefas, priorizar atividades e lidar com mudanças inesperadas, tudo ao mesmo tempo. Muitas vezes, o ensino desses conteúdos acontece por meio de aulas teóricas e longos textos, [&hellip;]]]></description>
							<content:encoded><![CDATA[  <!-- wp:tadv/classic-paragraph -->
<p><span style="font-weight: 400">Quando um aluno começa a estudar Engenharia de Software, raramente imagina que grande parte do trabalho envolve muito mais do que escrever código. É preciso planejar projetos, dividir tarefas, priorizar atividades e lidar com mudanças inesperadas, tudo ao mesmo tempo. Muitas vezes, o ensino desses conteúdos acontece por meio de aulas teóricas e longos textos, que não representam o ritmo e a dinâmica de um time de desenvolvimento real. É aí que entra a gamificação: transformar o aprendizado em uma experiência mais próxima do mercado, porém em um ambiente seguro para errar e experimentar.</span></p>
<p><span style="font-weight: 400">Gamificação significa usar elementos de jogos, como metas, desafios, pontuações e recompensas em atividades que não são jogos. Em sala de aula, ela pode mudar completamente a forma como um estudante participa da própria aprendizagem. Em vez de apenas assistir a uma explicação sobre como funciona um quadro Kanban, por exemplo, o aluno pode vivenciar o processo em um tabuleiro, movendo tarefas, tomando decisões sob pressão e sentindo na prática o impacto de atrasos e gargalos.</span></p>
<p><span style="font-weight: 400">Essa ideia tem ganhado espaço no ensino de Engenharia de Software justamente porque aproxima a teoria do mundo real. Uma equipe que participa de um jogo sobre métodos ágeis precisa colaborar, dialogar e negociar prioridades: habilidades essenciais para quem vai trabalhar com tecnologia. Enquanto isso, conceitos abstratos se tornam mais concretos: o WIP deixa de ser uma sigla estranha e passa a ser um limite que, se ignorado, afunda o desempenho da equipe.</span></p>
<p><span style="font-weight: 400">O ponto central da gamificação não é competir para ver quem ganha mais pontos. Na verdade, o que mais importa é refletir sobre as escolhas. Em uma dinâmica que simula sprints semanais, se a equipe decide começar tarefas demais ao mesmo tempo, vai logo perceber que as entregas atrasam e o fluxo trava. Quando isso acontece em um jogo, dá para pausar, conversar e tentar diferente na rodada seguinte, aprendizado que dificilmente aconteceria só ouvindo o professor explicar.</span></p>
<p><span style="font-weight: 400">E engajar os alunos é outra vantagem importante. Muitos estudantes relatam que conteúdos como processos de software, métricas e metodologias ágeis podem parecer desmotivadores no início (Freitas; Andrade, 2017). Quando esses mesmos temas aparecem em cartas, desafios e pequenas missões, a atenção aumenta, a curiosidade desperta e a participação na aula se transforma em algo natural.</span></p>
<p><span style="font-weight: 400">Um exemplo simples: ao invés de apenas falar que “testes são essenciais”, o professor coloca no jogo cartas de “bug crítico”, “falha de comunicação” ou “cliente alterou o requisito”. A equipe que ignora o teste sente imediatamente as consequências, porque perde pontos, tempo ou funcionalidades. Assim, o conceito deixa de ser um conselho abstrato e passa a ser uma necessidade evidente.</span></p>
<p><span style="font-weight: 400">Toda essa dinâmica também ajuda os alunos a desenvolverem competências que o mercado valoriza cada vez mais. Comunicação, organização, pensamento crítico e tomada de decisão sob pressão são trabalhados o tempo todo durante jogos educacionais. E quanto mais desafiador for o cenário simulado, mais próximos os participantes ficam do que vão vivenciar como profissionais.</span></p>
<p><span style="font-weight: 400">Claro que gamificação não é solução mágica. Para funcionar bem, os jogos precisam ter objetivos claros, regras equilibradas e conexão direta com os conteúdos do curso. Quando o foco vira apenas “se divertir”, o aprendizado se perde. Por isso, o papel do professor continua essencial: conduzir discussões, estimular reflexões e mostrar como cada ação no jogo se relaciona com a Engenharia de Software.</span></p>
<p><span style="font-weight: 400">Mesmo assim, os resultados têm sido muito positivos em escolas e universidades ao redor do mundo. Pesquisas na área mostram que alunos aprendem mais e se sentem mais confiantes quando conseguem testar ideias e ver imediatamente o impacto de suas escolhas, algo que a gamificação proporciona com naturalidade (Kapp, 2012; Werbach; Hunter, 2012).</span></p>
<p><span style="font-weight: 400">No fim das contas, gamificar o ensino não significa transformar a faculdade em uma sala de jogos. Significa tornar o estudo mais real, mais prático e mais humano. Se o futuro dos profissionais de tecnologia exige colaboração, adaptação e aprendizado contínuo, nada melhor do que começar a desenvolver essas habilidades de forma divertida e significativa desde a graduação.</span></p>
<p style="text-align: right"><strong>Autora: Vitória Luiza Camara</strong></p>
<h3><b>Referências</b></h3>
<p><span style="font-weight: 400">Deterding, S. et al. </span><i><span style="font-weight: 400">From game design elements to gamefulness: defining gamification.</span></i><span style="font-weight: 400"> ACM, 2011.</span></p>
<p><span style="font-weight: 400">Freitas, S.; Andrade, F. </span><i><span style="font-weight: 400">Gamificação na educação.</span></i><span style="font-weight: 400"> Pimenta Cultural, 2017.</span></p>
<p><span style="font-weight: 400">Kapp, K. M. </span><i><span style="font-weight: 400">The gamification of learning and instruction.</span></i><span style="font-weight: 400"> Pfeiffer, 2012.</span></p>
<p><span style="font-weight: 400">Pressman, R. S.; Maxim, B. R. </span><i><span style="font-weight: 400">Engenharia de Software: uma abordagem profissional.</span></i><span style="font-weight: 400"> AMGH, 2016.</span></p>
<p><span style="font-weight: 400">Werbach, K.; Hunter, D. </span><i><span style="font-weight: 400">For the win.</span></i><span style="font-weight: 400"> Wharton Digital Press, 2012.</span></p>
<!-- /wp:tadv/classic-paragraph -->]]></content:encoded>
													</item>
						<item>
				<title>Engenharia de software e inteligência artificial: o papel do gestor na era digital</title>
				<link>https://www.ufsm.br/pet/sistemas-de-informacao/2025/12/01/engenharia-de-software-e-inteligencia-artificial-o-papel-do-gestor-na-era-digital</link>
				<pubDate>Mon, 01 Dec 2025 12:03:26 +0000</pubDate>
						<category><![CDATA[Destaques]]></category>
		<category><![CDATA[Redações]]></category>
		<category><![CDATA[Eng. Software]]></category>
		<category><![CDATA[IA]]></category>

				<guid isPermaLink="false">https://www.ufsm.br/pet/sistemas-de-informacao/?p=3664</guid>
						<description><![CDATA[Quando alguém pede um sistema novo, quase nunca começa falando em códigos, servidores ou bancos de dados. Um dono de restaurante diz que precisa “parar de perder pedidos do delivery”. Uma escola quer “controlar melhor as notas e faltas dos alunos”. Uma clínica deseja “marcar consultas sem confusão de horários”. A engenharia de software entra [&hellip;]]]></description>
							<content:encoded><![CDATA[  <!-- wp:tadv/classic-paragraph -->
<p><span style="font-weight: 400">Quando alguém pede um sistema novo, quase nunca começa falando em códigos, servidores ou bancos de dados. Um dono de restaurante diz que precisa “parar de perder pedidos do delivery”. Uma escola quer “controlar melhor as notas e faltas dos alunos”. Uma clínica deseja “marcar consultas sem confusão de horários”. A engenharia de software entra justamente nesse cenário: é o conjunto de princípios, métodos e ferramentas usados para pegar esses pedidos genéricos e transformá-los em sistemas reais, que funcionam todos os dias. Na prática, isso significa detalhar fluxos de tela, definir regras de negócio, planejar integrações com outros sistemas, decidir como serão feitos testes e prever o que acontece quando algo dá errado. Em vez de ficar apenas na ideia “quero um app”, a engenharia de software organiza tudo em requisitos, tarefas e entregas que a equipe técnica consegue implementar.</span></p>
<p><span style="font-weight: 400">Nesse processo, o gestor de software ocupa uma posição central. Ele está o tempo todo entre dois mundos: de um lado, o cliente, que fala em prazos, orçamento e problemas do negócio; de outro, a equipe técnica, que fala em arquitetura, APIs, performance e segurança. Em uma reunião com o cliente, por exemplo, o gestor precisa traduzir “quero um sistema rápido e fácil de usar” em algo verificável, como “tempo médio de resposta abaixo de dois segundos nas principais telas” ou “fluxo de compra em até três cliques”. Em seguida, leva isso para a equipe como metas técnicas, discute opções de implementação e, se necessário, volta ao cliente com alternativas: uma versão inicial mais simples, uma versão completa em prazo maior ou um pacote de funcionalidades dividido em fases.</span></p>
<p><img class="alignnone size-full wp-image-3665" src="https://www.ufsm.br/app/uploads/sites/791/2025/12/image1.jpg" alt="" width="1536" height="1024" /></p>
<p><span style="font-weight: 400">Alinhar expectativas é justamente amarrar esses dois lados de forma clara. Imagine um cliente que diz: “Quero um aplicativo igual ao do banco X, mas pronto em três meses e com metade do orçamento”. Sem uma boa engenharia de software, esse pedido vira frustração na certa. Com um gestor atento, o processo é diferente: primeiro, ele pergunta o que exatamente o cliente admira no app do banco X (é a segurança? a facilidade de uso? o chat com atendente?). Depois, traduz isso em prioridades, mostra o custo de cada bloco de funcionalidade e propõe um escopo realista para a primeira versão. O cliente sai sabendo o que será entregue, o que ficará para futuras evoluções e quais trade-offs foram escolhidos. A equipe, por sua vez, recebe um plano concreto, com tarefas definidas e critérios de aceite objetivos.</span></p>
<p><span style="font-weight: 400">Antes da era da inteligência artificial, boa parte desse trabalho de coordenação dependia de esforço manual. Para organizar um único projeto, o gestor passava horas alimentando planilhas, cruzando e-mails, copiando trechos de atas de reunião e atualizando ferramentas de gestão. Se o cliente mudava uma prioridade, era preciso ajustar cronograma, redistribuir tarefas, avisar todo mundo e revisar documentos. Quando alguém novo entrava na equipe, levava dias para entender o histórico do projeto, porque as informações estavam espalhadas em várias conversas e arquivos. Em muitos casos, o gestor acabava preso em atividades operacionais, com pouco tempo para análises mais profundas ou para acompanhar de perto o impacto do software no negócio.</span></p>
<p><img class="alignnone size-full wp-image-3666" src="https://www.ufsm.br/app/uploads/sites/791/2025/12/image2.jpg" alt="" width="1536" height="1024" /></p>
<p><span style="font-weight: 400">Com a inteligência artificial aplicada à gestão, parte desses gargalos começou a ser reduzida. Hoje, ferramentas de gestão de projetos conseguem sugerir automaticamente quais tarefas devem ser priorizadas em um sprint, levando em conta prazo, dependências e capacidade da equipe. Em um projeto de aplicativo de entregas, por exemplo, o sistema pode indicar que é mais seguro finalizar primeiro o fluxo de cadastro de entregadores e o módulo de pagamentos, porque são áreas críticas para o funcionamento do negócio. O gestor deixa de refazer o planejamento do zero a cada mudança e passa a revisar recomendações, ajustando o que fizer sentido para o contexto.</span></p>
<p><span style="font-weight: 400">A IA também ajuda a manter o contexto de clientes sempre à mão. Plataformas de CRM e atendimento integradas a modelos de linguagem conseguem resumir, em poucos parágrafos, meses de interações: reuniões realizadas, reclamações recorrentes, sugestões de melhoria, decisões de escopo. Antes de conversar com o responsável por uma rede de academias, por exemplo, o gestor pode pedir um resumo do histórico daquele cliente e receber uma síntese clara: quais funcionalidades já foram entregues, quais problemas surgiram, que pedidos ficaram pendentes. Em vez de procurar manualmente em e-mails e documentos, ele entra na conversa preparado, com um roteiro mais objetivo e com respostas mais rápidas.</span></p>
<p><span style="font-weight: 400">No relacionamento com a equipe técnica, a IA também se torna aliada. Ferramentas de colaboração conseguem ler longas discussões em um ticket de suporte e gerar um resumo dos principais pontos, o que facilita a vida de quem assume o caso no meio do caminho. Assistentes de reunião gravam a conversa, geram uma transcrição e destacam automaticamente decisões tomadas e próximos passos, como “criar protótipo da nova tela até sexta” ou “valiar impacto da mudança na API de pagamentos”. A partir disso, o gestor consegue transformar rapidamente esses itens em tarefas, atribuir responsáveis e ajustar prazos, sem depender de anotações soltas ou da memória de quem participou.</span></p>
<p><span style="font-weight: 400">Outra frente importante é o uso da IA para monitorar riscos e evitar retrabalho. Com base no histórico de projetos da empresa, modelos preditivos podem alertar quando um conjunto de tarefas está grande demais para caber em um ciclo de entrega, quando uma equipe está sobrecarregada ou quando um aumento repentino no número de erros em produção indica problemas de qualidade. Em um sistema de reservas de hotel, por exemplo, a IA pode detectar que as falhas estão concentradas em um módulo recém-alterado e sugerir que o gestor priorize testes adicionais ali antes de liberar novas funcionalidades. Em vez de descobrir o problema apenas depois que clientes começam a reclamar, a equipe age preventivamente.</span></p>
<p><span style="font-weight: 400">Nada disso significa que a IA substitui o papel do gestor ou da engenharia de software. As ferramentas ajudam a organizar tarefas, resumir conversas e apontar padrões que seriam difíceis de enxergar manualmente, mas elas não definem sozinhas qual é o objetivo do projeto, até onde o orçamento pode ir ou que riscos a empresa está disposta a assumir. Quem continua fazendo essas escolhas é o gestor, com base em diálogo com o cliente, com a equipe e com a direção do negócio. A diferença é que, com apoio da IA, ele toma essas decisões com mais informação, menos improviso e mais tempo para pensar estrategicamente.</span></p>
<p><span style="font-weight: 400">Pesquisas em gestão de projetos e engenharia de software têm mostrado justamente esse caráter complementar da IA. Estudos recentes apontam que ferramentas inteligentes são eficazes para automatizar rotinas, apoiar análises de risco e sugerir alocação de recursos, enquanto o julgamento humano permanece essencial na definição de prioridades e na mediação entre interesses técnicos e de negócio. Em paralelo, trabalhos acadêmicos exploram o uso de modelos de linguagem para apoiar atividades como captura de requisitos, geração de casos de teste e análise de incidentes em produção, sempre com o profissional no centro do processo. Para quem se interessa por tecnologia e gestão, enxergar essa convergência é um passo importante: a engenharia de software continua sendo a base que dá forma aos projetos, e a inteligência artificial surge como uma camada adicional que amplia a capacidade do gestor de organizar tarefas, manter o contexto de clientes e conduzir conversas difíceis com mais clareza e segurança.</span></p>
<p style="text-align: right"><strong>Autor: Leonardo Silva da Veiga Marinho Barbosa </strong></p>
<p><b>Referências</b></p>
<ul>
<li style="font-weight: 400"><span style="font-weight: 400">PRESSMAN, R. S.; MAXIM, B. R. Engenharia de Software: uma abordagem profissional. 8. ed. McGraw-Hill, 2016.</span><span style="font-weight: 400"><br /></span></li>
<li style="font-weight: 400"><span style="font-weight: 400">SOMMERVILLE, I. Engenharia de Software. 10. ed. Pearson, 2016.</span><span style="font-weight: 400"><br /></span></li>
<li style="font-weight: 400"><span style="font-weight: 400">PMI – Project Management Institute. </span><i><span style="font-weight: 400">Pulse of the Profession: AI Innovators</span></i><span style="font-weight: 400">. PMI, 2023.</span><span style="font-weight: 400"><br /></span></li>
<li style="font-weight: 400"><span style="font-weight: 400">NENNI, M. E. et al. How Artificial Intelligence Will Transform Project Management. </span><i><span style="font-weight: 400">Journal of Management Control</span></i><span style="font-weight: 400">, 2024.</span><span style="font-weight: 400"><br /></span></li>
<li style="font-weight: 400"><span style="font-weight: 400">VERGARA, D. et al. Trends and Applications of Artificial Intelligence in Project Management. </span><i><span style="font-weight: 400">Electronics</span></i><span style="font-weight: 400">, 2025.</span><span style="font-weight: 400"><br /></span></li>
<li style="font-weight: 400"><span style="font-weight: 400">LI, X. et al. AI Tools for Predictive Analytics, Risk Assessment and Decision-Making in Project Management. </span><i><span style="font-weight: 400">International Journal of Academic Management Research</span></i><span style="font-weight: 400">, 2024.</span></li>
</ul>
<p> </p>
<!-- /wp:tadv/classic-paragraph -->

<!-- wp:tadv/classic-paragraph /-->]]></content:encoded>
													</item>
						<item>
				<title>Métodos ágeis aliados a organização pessoal</title>
				<link>https://www.ufsm.br/pet/sistemas-de-informacao/2021/05/18/metodos-ageis-aliados-a-organizacao-pessoal</link>
				<pubDate>Tue, 18 May 2021 18:41:09 +0000</pubDate>
						<category><![CDATA[Destaques]]></category>
		<category><![CDATA[Redações]]></category>
		<category><![CDATA[Eng. Software]]></category>

				<guid isPermaLink="false">https://www.ufsm.br/pet/sistemas-de-informacao/?p=3144</guid>
						<description><![CDATA[Opa, e aí pessoas, tudo bem? Nessa edição do PET Redação falaremos sobre os usos das abordagens ágeis como ferramenta para a organização pessoal, um método excepcional para se disciplinar e transpor por completo a barreira das rotinas desregradas e da famosa procrastinação. Como alguns do curso já viram ou irão ver na disciplina de [&hellip;]]]></description>
							<content:encoded><![CDATA[  <!-- wp:tadv/classic-paragraph -->
<p>Opa, e aí pessoas, tudo bem? Nessa edição do PET Redação falaremos sobre os <strong>usos das abordagens ágeis como ferramenta para a organização pessoal</strong>, um método excepcional para se disciplinar e transpor por completo a barreira das rotinas desregradas e da famosa procrastinação.</p>
<p><br />Como alguns do curso já viram ou irão ver na disciplina de Engenharia de Software, a história da criação das metodologias ágeis começou com a falta de um método próprio de criação para o desenvolvimento de software, que passava a utilizar o método cascata, modelado e planejado em função do ciclo da engenharia convencional e que não funcionava tão bem para a nossa indústria. No entanto, alguns grupos utilizavam metodologias diferentes e que eram eficientes, criadas por eles mesmos, e que iam na contramão dos chamados métodos pesados. Foi aí que surgiu a ideia de realizar uma reunião, que contou com a presença de 17 desenvolvedores praticantes desses métodos chamados de leves, onde houve um consenso acerca das práticas mais comuns e que melhor funcionavam no desenvolvimento de software, e que culminou na criação do Manifesto Ágil e na dissipação de seus valores e princípios, em fevereiro de 2001.</p>
<p><br />Com o lançamento do Manifesto Ágil, houve grande popularização e criação de novas ferramentas que utilizavam esses métodos, fazendo com que o sucesso das metodologias ágeis partisse para além do campo do desenvolvimento de software. Esse é o caso do SCRUM e também do Kanban, que inicialmente foi criado pelo Sistema Toyota de Produção e adotado para os outros tipos de indústria, e que hoje serão nossos alvos nessa redação.</p>
<p style="text-align: left"><strong>SCRUM</strong><br />Basicamente o SCRUM é uma ferramenta de feedbacks contínuos, onde os projetos são divididos em sprints (ciclos de trabalho com curta duração). As atividades são definidas e priorizadas no início de cada sprint através de uma reunião de planejamento com a equipe, tendo reuniões diárias para informar o que foi feito no dia anterior e identificar o que impediu de algo ser feito e, ao final da sprint, apresentar o que foi concluído durante uma retrospectiva das tarefas.<br /><img class="aligncenter wp-image-3138 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/05/1.png" alt="" width="1920" height="1207" /><br />Fonte: https://www.scrum.org/resources/what-is-scrum</p>
<p><strong>KANBAN</strong><br />Já no Kanban, a gestão funciona mais visualmente, os quadros de Kanban auxiliam no controle de fluxos, no equilíbrio dos processos e ajudam a limitar a quantidade de trabalho, deixando para que as pessoas coloquem as suas necessidades e o time como um todo vai realizando as tarefas conforme os espaços disponíveis. Através do quadro, o gestor do projeto e a equipe vão realizando e priorizando o que deve ser feito.</p>
<p><img class="aligncenter wp-image-3139 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/05/2.png" alt="" width="1772" height="945" /></p>
<p><strong>USOS E VANTAGENS</strong><br />Como essas abordagens são destinadas à equipes de trabalho, a adaptação irá ser fundamental para o uso pessoal. Com isso iremos separar os recursos apresentados na explicação acima para desenvolver a nossa organização e gerar benefícios tais como: aumento da produtividade, tomada de decisões no tempo certo, economizar tempo e ajudar no foco no controle de qualidade na execução das tarefas.</p>
<p><strong>SCRUM</strong><br />Feedback continuo – Pode ser feito durante as atividades, inspecionando melhor cada uma delas e a maneira de estarem sendo feitas, bem como avaliar se tudo está indo de acordo com os conformes.</p>
<ul>
<li><strong>Sprints</strong> – A criação das sprints pode ser dada aos domingos e através da organização das atividades a serem desempenhadas durante a semana.</li>
<li><strong>Reunião diária</strong> – A reunião diária pode ser feita ao final de cada dia realizando a checagem das tarefas concluídas e do que deu errado durante o processo, visando melhor a execução ou priorizar as tarefas.</li>
<li><strong>Retrospectiva</strong> – A retrospectiva pode ser realizada no fim de cada semana, a fim de verificar tudo o que foi feito e corrigir possíveis empecilhos decorridos ao longo do sprint, a fim de corrigir e evoluir a organização das tarefas recorrentes.</li>
</ul>
<p><br /><strong>KANBAN</strong></p>
<ul>
<li><strong>Criar o quadro</strong> – O quadro deve ser organizado por colunas e cartões, variando o número e o nome das colunas - de acordo com a sua própria necessidade - e os cartões podem ser diferenciados por prioridade ou tipo de trabalho. Tudo depende do seu jeito de realizar as tarefas.</li>
<li><strong>Preencher com as atividades</strong> – O preenchimento das atividades deve ser feito baseando-se no trabalho selecionado antecipadamente durante a realização do seu sprint semanal ou mensal. Vale ressaltar que, para um bom controle de fluxos, deve haver um limite de atividades em execução, geralmente limitadas a 2 itens na fila.</li>
<li><strong>Organizar as prioridades</strong> – As colunas “a fazer” e “fazendo” são flexíveis, podendo ser alteradas a qualquer momento de acordo com as suas prioridades no processo, portanto, é necessário haver prioridade na execução das tarefas para que a produtividade aumente, mesmo que você não opte por usar cartões com cores diferentes.</li>
</ul>
<p><br /><strong>TRELLO</strong><br />Existem diversas ferramentas que auxiliam na organização das atividades através da criação de quadros de Kanban. No entanto, iremos utilizar a plataforma Trello para organização pessoal por ser intuitiva, gratuita e possuir diversos modelos de quadros feitos para as mais diferentes áreas do conhecimento.</p>
<p>Bom, após acessar o site da Trello, ter criado sua conta, dado um nome a sua nova área de trabalho e escolhido o tipo de área de trabalho, partiremos para a criação do primeiro quadro seguindo esses passos.<br />Clicar na segunda opção apresentada durante a introdução conforme mostra na foto.</p>
<p><img class="aligncenter wp-image-3140 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/05/3.png" alt="" width="574" height="635" /><br /><br />Agora você pode decidir entre escolher um modelo da galeria ou criar o seu próprio, nesse caso optamos por criar o nosso.</p>
<p><img class="aligncenter wp-image-3141 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/05/4.jpg" alt="" width="869" height="420" /></p>
<p>Após clicar em “Criar novo quadro” irá surgir uma pequena janela onde você irá preencher de acordo com a sua preferência.</p>
<p><img class="aligncenter wp-image-3142 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/05/5.jpg" alt="" width="629" height="211" /><br /><br />As colunas e cartões são facilmente adicionados e alterados com apenas alguns cliques.</p>
<p><img class="aligncenter wp-image-3143 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/05/6.png" alt="" width="1915" height="646" /><br /><br />Podendo os cartões de atividades serem distinguidos através de cores de etiquetas e adicionar detalhes, anexos, comentários, datas de entrega e checklist de subtarefas.</p>
<p><img class="aligncenter wp-image-3137 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/05/7.png" alt="" width="1118" height="873" /></p>
<p>Por fim, cabe a sua imaginação absorver os conhecimentos dessas metodologias à sua vida pessoal e, assim, gerar bons frutos. Bons estudos e boas organizações!!!</p>
<p><strong>Referencias e links uteis:</strong></p>
<ul>
<li><a href="http://agilemanifesto.org/iso/ptbr/manifesto.html">Página do Manifesto Ágil</a></li>
<li><a href="https://www.scrum.org/resources/what-is-scrum">SCRUM</a></li>
<li><a href="https://pt.wikipedia.org/wiki/Scrum_(desenvolvimento_de_software)">Página da Wikipedia sobre o SCRUM</a></li>
<li><a href="https://pt.wikipedia.org/wiki/Kanban">Página da Wikipedia sobre o Kanban</a></li>
<li><a href="https://blog.trello.com/kanban-101">Artigo no blog da Trello sobre o Kanban</a></li>
<li><a href="https://www.youtube.com/watch?v=efZlpew90Nk&amp;list=RDCMUCu8WMGtHrGgTjz1m7rg_oew&amp;start_radio=1&amp;rv=efZlpew90Nk&amp;t=3">Decifrando Agile – Playlist no Youtube do canal do Andriele Ribeiro</a></li>
</ul>
<p style="text-align: right">Matheus Garcia Escobar</p>
<!-- /wp:tadv/classic-paragraph -->]]></content:encoded>
													</item>
						<item>
				<title>SOLID</title>
				<link>https://www.ufsm.br/pet/sistemas-de-informacao/2021/02/11/principios-da-programacao-orientada-a-objetos</link>
				<pubDate>Thu, 11 Feb 2021 18:50:34 +0000</pubDate>
						<category><![CDATA[Destaques]]></category>
		<category><![CDATA[Redações]]></category>
		<category><![CDATA[Eng. Software]]></category>

				<guid isPermaLink="false">https://www.ufsm.br/pet/sistemas-de-informacao/?p=3100</guid>
						<description><![CDATA[SOLID é um acrônimo dos cinco primeiros princípios da programação orientada a objetos e design de código identificados por Robert C. Martin (ou Uncle Bob) por volta do ano 2000. O acrônimo SOLID foi introduzido por Michael Feathers, após observar que os cinco princípios poderiam se encaixar nesta palavra, as siglas significam:   S &#8211; [&hellip;]]]></description>
							<content:encoded><![CDATA[  <!-- wp:tadv/classic-paragraph -->
<section id="h.6f0a740aecda56f0_12" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_9" class="hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd mGzaTb baZpAe">
<p class="CDt4Ke zfr3Q" dir="ltr">SOLID é um acrônimo dos cinco primeiros princípios da programação orientada a objetos e design de código identificados por<a class="XqQF9c rXJpyf" href="http://www.google.com/url?q=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FRobert_C._Martin&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNGwY89xjuelDQd9sN3r7XoEG7sHrQ" target="_blank" rel="noopener"> Robert C. Martin</a> (ou Uncle Bob) por volta do ano 2000. O acrônimo SOLID foi introduzido por<a class="XqQF9c rXJpyf" href="https://www.google.com/url?q=https%3A%2F%2Ftwitter.com%2Fmfeathers&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNEfvgbR171BN44QMuifThaOvwlI2g" target="_blank" rel="noopener"> Michael Feathers</a>, após observar que os cinco princípios poderiam se encaixar nesta palavra, as siglas significam:</p>
<div id="h.yoe4dd4fouc0" class="GV3q8e aP9Z7e"> </div>
<div class="CjVfdc"><strong>S - Single Responsibility Principle </strong><strong>(Princípio da Responsabilidade Única)</strong></div>
<p class="CDt4Ke zfr3Q" dir="ltr">Este princípio nos diz que “uma classe deve ter um, e somente um, motivo para mudar", porém pode ser aplicado a funções, componentes, entidades, etc. Esse princípio declara que uma classe deve ser especializada em um único assunto e possuir apenas uma responsabilidade dentro do software, ou seja, a classe deve ter uma única tarefa ou ação para executar. Comumente quando estamos programando orientado a objetos, acabam violando este princípio e muitas vezes criamos classes que fazem de tudo, chamadas na literatura de “God Class”, inicialmente tudo deve funcionar bem, porém quando for necessário realizar uma alteração nessa classe, será difícil modificar umas de suas funcionalidades sem comprometer outras partes do sistema.</p>
<p class="CDt4Ke zfr3Q" dir="ltr">Abaixo temos um exemplo de código que não usa o princípio da responsabilidade única, quando olhamos inicialmente o código não encontramos nenhum problema, já que o método “UsuarioValido” trata algo relacionado ao usuário, o método “temCargo” trata do cargo de um usuário, porém vamos imaginar que ocorra um problema no método “temCargo”, não só os usuários não vão conseguir realizar o login no sistema, como todas as funcionalidade relacionada a este método irão parar de funcionar, e o mesmo ocorre com o método “usuarioValido”. Para este código pode-se dizer que a classe usuário tem pelo menos três motivos para mudar seus atributos getters e setters, o método “usuarioValido” e o método “temCargo”, ferindo o princípio da responsabilidade única, deixando a classe menos coesa e com um nível alto de acoplamento.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_28" class="yaqOZd">
<div class="IFuOkc"> </div>
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_25" class="hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb jXK9ad D2fZ2 OjCsFc wHaque">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd baZpAe">
<div class="t3iYD"><img class="aligncenter wp-image-3088 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/02/solid2.jpg" alt="" width="698" height="833" /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_40" class="yaqOZd">
<div class="IFuOkc"> </div>
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_37" class="hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb jXK9ad D2fZ2 OjCsFc wHaque">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd baZpAe">
<div class="t3iYD"><img class="aligncenter wp-image-3089 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/02/solid3.png" alt="" width="958" height="291" /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_44" class="yaqOZd">
<div class="IFuOkc"> </div>
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_41" class="hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd mGzaTb baZpAe">
<p class="CDt4Ke zfr3Q" dir="ltr">Uma possível solução para o problema acima é:</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_52" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_49" class="hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb jXK9ad D2fZ2 OjCsFc wHaque">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd baZpAe">
<div class="t3iYD"><img class="aligncenter wp-image-3090 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/02/solid4.jpg" alt="" width="695" height="635" /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_64" class="yaqOZd">
<div class="IFuOkc"> </div>
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_61" class="hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb jXK9ad D2fZ2 OjCsFc wHaque">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd baZpAe">
<div class="t3iYD"><img class="aligncenter wp-image-3091 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/02/solid5.png" alt="" width="1266" height="791" /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_68" class="yaqOZd">
<div class="IFuOkc"> </div>
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_65" class="hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd mGzaTb baZpAe">
<p class="CDt4Ke zfr3Q" dir="ltr">Note que agora cada responsabilidade foi separada em uma classe, pois se um problema ocorre em algumas destas partes, o problema não irá se espalhar pelo sistema, deste modo facilitando os testes, descobrimento de novos bugs e deixando a aplicação mais coesa e menos acoplada.</p>
<div class="CjVfdc">
<div class="PPhIP rviiZ">
<div class="U26fgb mUbCce fKz7Od LRAOtb rm120e" role="presentation" aria-describedby="h.3496jqlua20h" aria-label="Copiar link do título" data-tooltip="Copiar link do título" aria-hidden="true" data-tooltip-position="top" data-tooltip-vertical-offset="12" data-tooltip-horizontal-offset="0">
<div class="VTBa7b MbhUzd"> </div>
</div>
</div>
<strong>O - Open Close Principle (Princípio Aberto Fechado)</strong></div>
<p class="CDt4Ke zfr3Q" dir="ltr">Este princípio nos diz que “Objetos ou entidades devem estar abertos para extensão, mas fechados para modificação”, ou seja, quando novos comportamentos e recursos precisam ser adicionados no software, devemos estender e não alterar o código fonte original. Abaixo temos um exemplo de classes que representam contratos de funcionários.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_72" class="yaqOZd">
<div class="IFuOkc"> </div>
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_69" class="hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb jXK9ad D2fZ2 OjCsFc wHaque">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd baZpAe">
<div class="t3iYD"><img class="aligncenter wp-image-3092 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/02/solid6.jpg" alt="" width="672" height="549" /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_76" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_73" class="hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd mGzaTb baZpAe">
<p class="CDt4Ke zfr3Q" dir="ltr">A classe “FolhaDePagamento” precisa verificar o funcionário para aplicar a regra de negócio correta na hora do pagamento. Supondo que a empresa cresceu e resolveu trabalhar com funcionários PJ, obviamente seria necessário modificar essa classe e consequentemente o princípio Open-Closed do SOLID seria quebrado. A modificação mais comum seria adicionar um <strong>IF </strong>e verificar o novo tipo de funcionário PJ, aplicando as regras para essa nova funcionalidade, mas é exatamente este o problema, ao alterar uma classe já existente para adicionar um novo comportamento, corremos um sério risco de introduzir bugs em algo que já estava funcionando. Abaixo temos uma possível solução para este problema.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_80" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_77" class="hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb jXK9ad D2fZ2 OjCsFc wHaque">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd baZpAe">
<div class="t3iYD"><img class="aligncenter wp-image-3093 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/02/solid7.jpg" alt="" width="611" height="531" /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_84" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_81" class="hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd mGzaTb baZpAe">
<p class="CDt4Ke zfr3Q" dir="ltr">Agora a classe “FolhaDePagamento” não precisa mais saber quais métodos chamar para calcular. Ela será capaz de calcular o pagamento corretamente de qualquer novo tipo de funcionário que seja criado no futuro,desde que ele implemente a interface "Remuneravel” , sem qualquer necessidade de alteração do seu código fonte. Este princípio é base para um dos design patterns mais conhecidos, o Strategy.</p>
<div class="CjVfdc">
<div class="PPhIP rviiZ">
<div class="U26fgb mUbCce fKz7Od LRAOtb rm120e" role="presentation" aria-describedby="h.nhuknxhizof0" aria-label="Copiar link do título" data-tooltip="Copiar link do título" aria-hidden="true" data-tooltip-position="top" data-tooltip-vertical-offset="12" data-tooltip-horizontal-offset="0">
<div class="VTBa7b MbhUzd"> </div>
</div>
</div>
<strong>L - Liskov Substitution Principle (Princípio da substituição de Liskov)</strong></div>
<p class="CDt4Ke zfr3Q" dir="ltr">Este princípio nos diz que “Uma classe derivada deve ser substituível por sua classe base”, ou de maneira mais simples, se um objeto B é um subtipo de um outro objeto A, este objeto A pode substituir B em qualquer lugar no código, sem que este código pare de funcionar, veja o exemplo abaixo:</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_88" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_85" class="hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb jXK9ad D2fZ2 OjCsFc wHaque">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd baZpAe">
<div class="t3iYD"><img class="aligncenter wp-image-3094 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/02/solid8.jpg" alt="" width="589" height="794" /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_92" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_89" class="hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd mGzaTb baZpAe">
<p class="CDt4Ke zfr3Q" dir="ltr">Estamos passando como parâmetro tanto a classe pai como a classe derivada e (entretanto) o código continua funcionando da forma esperada. Alguns exemplos de violação do princípio de Liskov são: sobrescrever/implementar um método que não faz nada, lançar uma exceção inesperada ou retornar valores de tipos diferentes da classe base. Para não violar o Liskov Substitution Principle, além de estruturar muito bem as suas abstrações, em alguns casos, você precisará usar a injeção de dependência e também usar outros princípios do SOLID, como por exemplo, o Princípio Aberto Fechado e o Princípio da Segregação da Interface, será abordado no próximo tópico.</p>
<p class="CDt4Ke zfr3Q" dir="ltr">Seguir o LSP nos permite usar o polimorfismo com mais confiança. Podemos chamar nossas classes derivadas referindo-se à sua classe base sem preocupações com resultados inesperados.</p>
<div class="CjVfdc">
<div class="PPhIP rviiZ">
<div class="U26fgb mUbCce fKz7Od LRAOtb rm120e" role="presentation" aria-describedby="h.gvsdqprgo5tu" aria-label="Copiar link do título" data-tooltip="Copiar link do título" aria-hidden="true" data-tooltip-position="top" data-tooltip-vertical-offset="12" data-tooltip-horizontal-offset="0">
<div class="VTBa7b MbhUzd"> </div>
</div>
</div>
<strong>I - Interface Segregation Principle (Princípio da Segregação da Interface)</strong></div>
<p class="CDt4Ke zfr3Q" dir="ltr">O princípio da segregação da interface nos diz que “uma classe não deve ser forçada a implementar interfaces e métodos que não irá utilizar”. Esse princípio basicamente diz que é melhor criar interfaces mais específicas ao invés de termos uma única interface genérica. O exemplo abaixo mostra como algumas aves são tratadas dentro de um jogo.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_96" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_93" class="hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb jXK9ad D2fZ2 OjCsFc wHaque">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd baZpAe">
<div class="t3iYD"><img class="aligncenter wp-image-3095 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/02/solid9.jpg" alt="" width="674" height="770" /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_108" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_105" class="hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd mGzaTb baZpAe">
<p class="CDt4Ke zfr3Q" dir="ltr">Percebam que ao criar a interface Aves, atribuímos comportamentos genéricos e isso acabou forçando a classe Pinguim implementar o método “setAltitude”, do qual ela não deveria ter, já que pinguins não voam. A solução recomendada então é criar uma interface mais específica.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_112" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_109" class="hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb jXK9ad D2fZ2 OjCsFc wHaque">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd baZpAe">
<div class="t3iYD"><img class="aligncenter wp-image-3096 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/02/solid10.jpg" alt="" width="675" height="782" /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_116" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_113" class="hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd mGzaTb baZpAe">
<p class="CDt4Ke zfr3Q" dir="ltr">No exemplo acima, retiramos o método “setAltitude” da interface Aves e adicionamos em uma interface derivada “AvesQueVoam”<em>.</em> Isso nos permitiu isolar os comportamentos das aves de maneira correta dentro do jogo.</p>
<div class="CjVfdc">
<div class="PPhIP rviiZ">
<div class="U26fgb mUbCce fKz7Od LRAOtb rm120e" role="presentation" aria-describedby="h.acoxn53v297m" aria-label="Copiar link do título" data-tooltip="Copiar link do título" aria-hidden="true" data-tooltip-position="top" data-tooltip-vertical-offset="12" data-tooltip-horizontal-offset="0">
<div class="VTBa7b MbhUzd"> </div>
</div>
</div>
<strong>D - Dependency Inversion Principle (Princípio da Inversão de dependência)</strong></div>
<p class="CDt4Ke zfr3Q" dir="ltr">Antes de tudo, vale lembrar que o termo inversão de dependência não deve ser confundido com o padrão de projeto injeção de dependência.</p>
<p class="CDt4Ke zfr3Q" dir="ltr">O princípio da inversão de dependência nos diz que devemos “Depender de abstrações e não de implementações“, Uncle Bob ainda fala que “módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender da abstração e abstrações não devem depender de detalhes, detalhes devem depender de abstrações”. O exemplo abaixo demonstra o princípio da inversão de dependência sendo quebrado.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_120" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_117" class="hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb jXK9ad D2fZ2 OjCsFc wHaque">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd baZpAe">
<div class="t3iYD"><img class="aligncenter wp-image-3097 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/02/solid11.jpg" alt="" width="688" height="802" /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_124" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_121" class="hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd mGzaTb baZpAe">
<p class="CDt4Ke zfr3Q" dir="ltr">No exemplo acima, podemos perceber que além de quebrar outros princípios do SOLID, a classe concreta Interruptor depende de uma outra classe concreta (Ventilador). O interruptor deveria ser capaz de acionar qualquer dispositivo independente de ser um ventilador, uma lâmpada ou até mesmo um carro. Uma possível solução para este problema seria:</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_128" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_125" class="hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb jXK9ad D2fZ2 OjCsFc wHaque">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd baZpAe">
<div class="t3iYD"><img class="aligncenter wp-image-3098 size-full" src="https://www.ufsm.br/app/uploads/sites/791/2021/02/solid12.png" alt="" width="445" height="819" /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP">
<div class="JNdkSc-SmKAyb">
<div class=""> </div>
</div>
</div>
</div>
</div>
</section>
<section id="h.6f0a740aecda56f0_132" class="yaqOZd">
<div class="mYVXT">
<div class="LS81yb VICjCf">
<div class="hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc">
<div class="JNdkSc-SmKAyb">
<div class="">
<div class="oKdM2c Kzv0Me">
<div id="h.6f0a740aecda56f0_129" class="hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc">
<div class="jXK9ad-SmKAyb">
<div class="tyJCtd mGzaTb baZpAe">
<p class="CDt4Ke zfr3Q" dir="ltr">Percebam que agora a classe concreta Interruptor depende da abstração de um “IDispositivo” e não mais de uma classe concreta.</p>
<div class="CjVfdc">
<div class="PPhIP rviiZ">
<div class="U26fgb mUbCce fKz7Od LRAOtb rm120e" role="presentation" aria-describedby="h.1vye2nev64c7" aria-label="Copiar link do título" data-tooltip="Copiar link do título" aria-hidden="true" data-tooltip-position="top" data-tooltip-vertical-offset="12" data-tooltip-horizontal-offset="0">
<div class="VTBa7b MbhUzd"> </div>
</div>
</div>
<strong>Problemas comuns que o SOLID pode evitar:</strong></div>
<ul class="n8H08c UVNKR">
<li class="TYR86d wXCUfe zfr3Q">
<p class="CDt4Ke zfr3Q" dir="ltr">Dificuldade na testabilidade / criação de testes de unidade;</p>
</li>
<li class="TYR86d wXCUfe zfr3Q">
<p class="CDt4Ke zfr3Q" dir="ltr">Código macarrônico, sem estrutura ou padrão;</p>
</li>
<li class="TYR86d wXCUfe zfr3Q">
<p class="CDt4Ke zfr3Q" dir="ltr">Dificuldades de isolar funcionalidades;</p>
</li>
<li class="TYR86d wXCUfe zfr3Q">
<p class="CDt4Ke zfr3Q" dir="ltr">Duplicação de código, uma alteração precisa ser feita em N pontos;</p>
</li>
<li class="TYR86d wXCUfe zfr3Q">
<p class="CDt4Ke zfr3Q" dir="ltr">Fragilidade, o código quebra facilmente em vários pontos após alguma mudança.</p>
</li>
</ul>
<div id="h.oqq59lhikwhc" class="GV3q8e aP9Z7e"> </div>
<div class="CjVfdc">
<div class="PPhIP rviiZ">
<div class="U26fgb mUbCce fKz7Od LRAOtb rm120e" role="presentation" aria-describedby="h.oqq59lhikwhc" aria-label="Copiar link do título" data-tooltip="Copiar link do título" aria-hidden="true" data-tooltip-position="top" data-tooltip-vertical-offset="12" data-tooltip-horizontal-offset="0">
<div class="VTBa7b MbhUzd"> </div>
</div>
</div>
<strong>Referências e link úteis</strong></div>
<p class="CDt4Ke zfr3Q" dir="ltr">Redação sobre o design pattern Strategy, pode ser usada para resolver problemas com o Open Close Principle.<br /><a class="XqQF9c rXJpyf" href="https://www.google.com/url?q=https%3A%2F%2Fwww.ufsm.br%2Fpet%2Fsistemas-de-informacao%2F2020%2F07%2F01%2Fstrategy%2F&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNHEXVWNLSvVNCIhgNsdjOun2a9SHg" target="_blank" rel="noopener">https://www.ufsm.br/pet/sistemas-de-informacao/2020/07/01/strategy/</a></p>
<p class="CDt4Ke zfr3Q" dir="ltr">Livro do Uncle Bob:<br />Robert C. Martins. Arquitetura Limpa: O guia do artesão para estrutura e design de software. Alta Books Editora, 2019.</p>
<p class="CDt4Ke zfr3Q" dir="ltr" style="text-align: right">Bruno Rossi - 10/02/2021</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- /wp:tadv/classic-paragraph -->]]></content:encoded>
													</item>
					</channel>
        </rss>
        