{"id":2699,"date":"2020-07-01T15:20:00","date_gmt":"2020-07-01T18:20:00","guid":{"rendered":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/?p=2699"},"modified":"2025-09-02T14:01:45","modified_gmt":"2025-09-02T17:01:45","slug":"strategy","status":"publish","type":"post","link":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/2020\/07\/01\/strategy","title":{"rendered":"Strategy"},"content":{"rendered":"\n<section id=\"h.29c4ea1c56fdb937_25\" class=\"yaqOZd\">\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc yYI8W \">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c\">\n<div id=\"h.29c4ea1c56fdb937_22\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Nesta semana o tema da vez \u00e9 Strategy, um dos design patterns mais famosos e usados no mundo, mas afinal o que s\u00e3o design patterns ? Para que servem ? Venha descobrir conosco logo mais.<\/p>\n<div id=\"h.jit8535glmbu\" class=\"CobnVe aP9Z7e\">\u00a0<\/div>\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\">\n<div class=\"U26fgb mUbCce fKz7Od LRAOtb rm120e\" role=\"presentation\" aria-describedby=\"h.jit8535glmbu\" aria-label=\"Copiar link do t\u00edtulo\" data-tooltip=\"Copiar link do t\u00edtulo\" aria-hidden=\"true\" data-tooltip-position=\"top\" data-tooltip-vertical-offset=\"12\" data-tooltip-horizontal-offset=\"0\">\n<div class=\"VTBa7b MbhUzd\">\u00a0<\/div>\n<\/div>\n<\/div>\n<span class=\" Ztu2ge\"><strong>O que s\u00e3o design patterns?<\/strong><\/span><\/div>\n<p class=\"zfr3Q\" dir=\"ltr\">Em 1994, quatro engenheiros de software escreveram o livro<strong> \u201cDesign Patterns: Elements of Reusable Object-Oriented Software\u201d<\/strong> com o objetivo de catalogar problemas comuns aos projetos de desenvolvimento de software e as formas de resolver esses problemas. Os autores catalogaram 23 padr\u00f5es que utilizaram ao longo de suas carreiras, que posteriormente, ficaram conhecidos por a <strong>\u201c<\/strong><strong>G<\/strong><strong>ang of <\/strong><strong>F<\/strong><strong>our\u201d<\/strong> (GoF).Proporcionando assim, a cria\u00e7\u00e3o de outros livros com este mesmo intuito.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Design Patterns ou padr\u00f5es de projetos s\u00e3o solu\u00e7\u00f5es generalistas para problemas recorrentes durante o desenvolvimento de um software. N\u00e3o se trata de um framework ou um c\u00f3digo pronto, mas de uma defini\u00e7\u00e3o de alto n\u00edvel de como um problema comum pode ser solucionado.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">As principais vantagens de usar algum design pattern s\u00e3o: utilizar modelos j\u00e1 testados buscando o ganho de produtividade, ter um c\u00f3digo mais manuten\u00edvel, organizado e com o m\u00ednimo de acoplamento. Al\u00e9m disso v\u00e1rios design patterns s\u00e3o t\u00e3o famosos que em uma conversa s\u00f3 utilizar o nome de algum deles j\u00e1 basta para o entendimento.<\/p>\n<div id=\"h.lbzbw6f6xy1t\" class=\"CobnVe aP9Z7e\">\u00a0<\/div>\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\">\n<div class=\"U26fgb mUbCce fKz7Od LRAOtb rm120e\" role=\"presentation\" aria-describedby=\"h.lbzbw6f6xy1t\" aria-label=\"Copiar link do t\u00edtulo\" data-tooltip=\"Copiar link do t\u00edtulo\" aria-hidden=\"true\" data-tooltip-position=\"top\" data-tooltip-vertical-offset=\"12\" data-tooltip-horizontal-offset=\"0\">\n<div class=\"VTBa7b MbhUzd\">\u00a0<\/div>\n<\/div>\n<\/div>\n<span class=\" Ztu2ge\"><strong>Strategy<\/strong><\/span><\/div>\n<p class=\"zfr3Q\" dir=\"ltr\">O strategy \u00e9 um padr\u00e3o comportamental de projeto, que permite a mudan\u00e7a de comportamento de um conjunto de classes em tempo de execu\u00e7\u00e3o, fazendo com que seus objetos operem de forma diferente dependendo da opera\u00e7\u00e3o a ser realizada. Tipicamente usado para melhorar manuten\u00e7\u00e3o do c\u00f3digo, distribuir as responsabilidades de cada classe, encapsular algoritmos similares em uma tomada de decis\u00e3o, entre outros.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Vamos a um exemplo, considere um programa simples para calcular alguns impostos sobre algum or\u00e7amento.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_41\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-R6PoUb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-EehZO purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_26\" class=\"hJDwNd-AhqUyc-EehZO jXK9ad D2fZ2 OjCsFc wHaque\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-2894 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy1.png\" alt=\"\" width=\"655\" height=\"281\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy1.png 655w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy1-300x129.png 300w\" sizes=\"(max-width: 655px) 100vw, 655px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-R6PoUb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_45\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_42\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Acima temos a classe respons\u00e1vel por definir o valor do or\u00e7amento e tamb\u00e9m por fornecedor este valor por meio de um m\u00e9todo get, j\u00e1 que o atributo valor \u00e9 privado.Algo comum seria termos v\u00e1rios tipos de impostos, ent\u00e3o um c\u00f3digo comum seria algo do tipo:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_53\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-R6PoUb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-EehZO purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_50\" class=\"hJDwNd-AhqUyc-EehZO jXK9ad D2fZ2 OjCsFc wHaque\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img decoding=\"async\" class=\"aligncenter wp-image-2895 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy2.png\" alt=\"\" width=\"771\" height=\"273\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy2.png 771w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy2-300x106.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy2-768x272.png 768w\" sizes=\"(max-width: 771px) 100vw, 771px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-R6PoUb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_57\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_54\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Nesta classe recebemos o impostos como uma string e testamos para cada imposto qual seu valor. At\u00e9 aqui tudo parece funcionar bem, por\u00e9m imagine se tiv\u00e9ssemos v\u00e1rios impostos diferentes, com c\u00e1lculos bem mais complexos que os at\u00e9 ent\u00e3o apresentados, e pior que a cada per\u00edodo de tempo seja necess\u00e1rio adicionarmos novos impostos. Nossa classe ficaria enorme em pouco tempo e j\u00e1 n\u00e3o representaria bem seu papel. O segundo princ\u00edpio do S.O.L.I.D diz que uma classe deve ser aberta a extens\u00e3o, mas fechada para modifica\u00e7\u00e3o, ou seja,quando novos comportamentos e recursos precisam ser adicionados no software, devemos estender e n\u00e3o alterar o c\u00f3digo fonte original.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">O strategy busca solucionar esse problema, criando uma interface imposto, nela criamos um m\u00e9todo \u201ccalcula\u201d, assim toda a classe que implementar esta interface imposto ser\u00e1 obrigada a criar este m\u00e9todo com este nome.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_61\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-R6PoUb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-EehZO purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_58\" class=\"hJDwNd-AhqUyc-EehZO jXK9ad D2fZ2 OjCsFc wHaque\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img decoding=\"async\" class=\"aligncenter wp-image-2896 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy3.png\" alt=\"\" width=\"696\" height=\"125\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy3.png 696w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy3-300x54.png 300w\" sizes=\"(max-width: 696px) 100vw, 696px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-R6PoUb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_65\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_62\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Agora para cada imposto criamos uma classe que implementa esta interface, considere o mesmo c\u00f3digo para cada novo imposto, apenas aplicando um c\u00e1lculo diferente conforme o necess\u00e1rio, logo a classe de algum imposto ser\u00e1:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_102\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-R6PoUb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-EehZO purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_98\" class=\"hJDwNd-AhqUyc-EehZO jXK9ad D2fZ2 OjCsFc wHaque\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2897 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy4.png\" alt=\"\" width=\"659\" height=\"170\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy4.png 659w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy4-300x77.png 300w\" sizes=\"(max-width: 659px) 100vw, 659px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-R6PoUb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_107\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_103\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Finalmente chegamos na classe \u201cCalculadoraDeImpostos\u201d, agora ela apenas aciona o m\u00e9todo \u201ccalcula\u201d referente a cada imposto passado como par\u00e2metro, note que agora o imposto n\u00e3o \u00e9 mais uma string e sim um objeto do tipo imposto, j\u00e1 que nossa interface obriga a implementa\u00e7\u00e3o do m\u00e9todo \u201ccalcula\u201d n\u00e3o teremos problemas.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_73\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-R6PoUb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-EehZO purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_70\" class=\"hJDwNd-AhqUyc-EehZO jXK9ad D2fZ2 OjCsFc wHaque\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2898 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy5.png\" alt=\"\" width=\"865\" height=\"165\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy5.png 865w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy5-300x57.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy5-768x146.png 768w\" sizes=\"(max-width: 865px) 100vw, 865px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-R6PoUb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_77\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_74\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">No nosso index, ou main, apenas passamos uma inst\u00e2ncia do imposto desejado e inclu\u00edmos as demais classes do sistema.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_85\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-R6PoUb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-EehZO purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_82\" class=\"hJDwNd-AhqUyc-EehZO jXK9ad D2fZ2 OjCsFc wHaque\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2899 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy6.png\" alt=\"\" width=\"773\" height=\"142\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy6.png 773w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy6-300x55.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy6-768x141.png 768w\" sizes=\"(max-width: 773px) 100vw, 773px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-R6PoUb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_89\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_86\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Desta maneira, nossa implementa\u00e7\u00e3o usando strategy elimina v\u00e1rios pontos fracos, como: o aumento incontrol\u00e1vel dos if\u2019s da classe \u201cCalculadoraDeImpostos\u201d que conforme sua aplica\u00e7\u00e3o, aumenta de tamanho, e o forte acoplamento em uma \u00fanica classe, no caso a \u201cCalculadoraDeImpostos\u201d, dificultando a manuten\u00e7\u00e3o e leitura. Al\u00e9m disso, ganhamos tempo quando for necess\u00e1rio desenvolver testes para as classes de impostos, j\u00e1 que as mesmas estar\u00e3o isoladas em uma classe separada, contendo apenas suas funcionalidades.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">V\u00e1rios programadores optam por usar strategy no nome da interface, facilitando a leitura de outro programador, pois logo ele j\u00e1 saber\u00e1 do que se trata tal interface.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">O design pattern strategy tem v\u00e1rios usos, mas sua maioria gira em torno de eliminar o acoplamento em classes, sejam eles como o mostrado acima ou causados pelo mau uso da heran\u00e7a em projetos orientado a objeto.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">O strategy t\u00eam tr\u00eas pap\u00e9is bem definidos:<\/p>\n<ul class=\"n8H08c UVNKR\">\n<li class=\"TYR86d zfr3Q\">\n<p class=\"zfr3Q\" dir=\"ltr\"><strong>Context:<\/strong> \u00c9 respons\u00e1vel pela cria\u00e7\u00e3o e manuten\u00e7\u00e3o de uma refer\u00eancia a uma classe <em>Strategy<\/em> espec\u00edfica, no nosso exemplo seria a classe CalculadoraDeImpostos.<\/p>\n<\/li>\n<li class=\"TYR86d zfr3Q\">\n<p class=\"zfr3Q\" dir=\"ltr\"><em><strong>Strategy:<\/strong><\/em> \u00c9 a <em>interface<\/em> comum a todos os algoritmos suportados. Atrav\u00e9s desta interface, o <em>Context<\/em> pode chamar o algoritmo criado pela <em>ConcreteStrategy<\/em>, no exemplo seria a interface Imposto.<\/p>\n<\/li>\n<li class=\"TYR86d zfr3Q\">\n<p class=\"zfr3Q\" dir=\"ltr\"><em><strong>ConcreteStrategy<\/strong><\/em><em>:<\/em> Implementa o algoritmo usando a <em>interface Strategy<\/em>, no exemplo todos os impostos que desejamos criar, ICMS, ISS, entre outros.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_93\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-EehZO purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_90\" class=\"hJDwNd-AhqUyc-EehZO jXK9ad D2fZ2 OjCsFc wHaque\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2900 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy7.png\" alt=\"\" width=\"547\" height=\"249\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy7.png 547w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/strategy7-300x137.png 300w\" sizes=\"(max-width: 547px) 100vw, 547px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-R6PoUb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.29c4ea1c56fdb937_97\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.29c4ea1c56fdb937_94\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">A figura acima exemplifica como os pap\u00e9is se relacionam no strategy, note que \u00e9 poss\u00edvel ter quantas classes ConcreteStrategy desejar, todas elas seguindo a interface strategy.<\/p>\n<div id=\"h.5fjvnj9utoxv\" class=\"CobnVe aP9Z7e\">\u00a0<\/div>\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\">\n<div class=\"U26fgb mUbCce fKz7Od LRAOtb rm120e\" role=\"presentation\" aria-describedby=\"h.5fjvnj9utoxv\" aria-label=\"Copiar link do t\u00edtulo\" data-tooltip=\"Copiar link do t\u00edtulo\" aria-hidden=\"true\" data-tooltip-position=\"top\" data-tooltip-vertical-offset=\"12\" data-tooltip-horizontal-offset=\"0\">\n<div class=\"VTBa7b MbhUzd\">\u00a0<\/div>\n<\/div>\n<\/div>\n<span class=\" Ztu2ge\"><strong>Refer\u00eancias:<\/strong><\/span><\/div>\n<p class=\"zfr3Q\" dir=\"ltr\">Este \u00e9 o famoso livro GoF, \u00e9 um livro mais antigo com leitura n\u00e3o t\u00e3o simples mas com muita qualidade:<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">GAMMA, Erich; HELM, Richard; JOHNSON, Ralph; VLISSIDES, John. Padr\u00f5es de Projeto: solu\u00e7\u00f5es reutiliz\u00e1veis de software orientado a objetos. Ed. 1. Bookman, 2000. ISBN 9788573076103.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Este \u00e9 um livro de leitura mais simples, com exemplos mais visuais e at\u00e9 engra\u00e7ados, vale muito a leitura:<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Eric Freeman; Use a cabe\u00e7a! : padr\u00f5es de projetos; tradu\u00e7\u00e3o Andreza Gon\u00e7alves, Marcelo Soares e Pedro Cesar de Conti. Ed. 1. Alta Books, 2009.<\/p>\n<p dir=\"ltr\">\u00a0<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\" style=\"text-align: right\">Bruno Rossi &#8211; 01\/07\/2020<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Nesta semana o tema da vez \u00e9 Strategy, um dos design patterns mais famosos e usados no mundo, mas afinal o que s\u00e3o design patterns ? Para que servem ? Venha descobrir conosco logo mais. \u00a0 \u00a0 O que s\u00e3o design patterns? Em 1994, quatro engenheiros de software escreveram o livro \u201cDesign Patterns: Elements of [&hellip;]<\/p>\n","protected":false},"author":2948,"featured_media":2697,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[124,112],"tags":[74,149],"class_list":["post-2699","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-destaques","category-redacao","tag-linguagem-de-programacao","tag-redacao"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/2699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/users\/2948"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/comments?post=2699"}],"version-history":[{"count":0,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/2699\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media\/2697"}],"wp:attachment":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media?parent=2699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/categories?post=2699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/tags?post=2699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}