{"id":3100,"date":"2021-02-11T15:50:34","date_gmt":"2021-02-11T18:50:34","guid":{"rendered":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/?p=3100"},"modified":"2025-09-02T14:15:32","modified_gmt":"2025-09-02T17:15:32","slug":"principios-da-programacao-orientada-a-objetos","status":"publish","type":"post","link":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/2021\/02\/11\/principios-da-programacao-orientada-a-objetos","title":{"rendered":"SOLID"},"content":{"rendered":"\n<section id=\"h.6f0a740aecda56f0_12\" class=\"yaqOZd\">\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.6f0a740aecda56f0_9\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">SOLID \u00e9 um acr\u00f4nimo dos cinco primeiros princ\u00edpios da programa\u00e7\u00e3o orientada a objetos e design de c\u00f3digo 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\u00f4nimo 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\u00f3s observar que os cinco princ\u00edpios poderiam se encaixar nesta palavra, as siglas significam:<\/p>\n<div id=\"h.yoe4dd4fouc0\" class=\"GV3q8e aP9Z7e\">\u00a0<\/div>\n<div class=\"CjVfdc\"><strong>S &#8211; Single Responsibility Principle <\/strong><strong>(Princ\u00edpio da Responsabilidade \u00danica)<\/strong><\/div>\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Este princ\u00edpio nos diz que \u201cuma classe deve ter um, e somente um, motivo para mudar&#8221;, por\u00e9m pode ser aplicado a fun\u00e7\u00f5es, componentes, entidades, etc. Esse princ\u00edpio declara que uma classe deve ser especializada em um \u00fanico assunto e possuir apenas uma responsabilidade dentro do software, ou seja, a classe deve ter uma \u00fanica tarefa ou a\u00e7\u00e3o para executar. Comumente quando estamos programando orientado a objetos, acabam violando este princ\u00edpio e muitas vezes criamos classes que fazem de tudo, chamadas na literatura de \u201cGod Class\u201d, inicialmente tudo deve funcionar bem, por\u00e9m quando for necess\u00e1rio realizar uma altera\u00e7\u00e3o nessa classe, ser\u00e1 dif\u00edcil modificar umas de suas funcionalidades sem comprometer outras partes do sistema.<\/p>\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Abaixo temos um exemplo de c\u00f3digo que n\u00e3o usa o princ\u00edpio da responsabilidade \u00fanica, quando olhamos inicialmente o c\u00f3digo n\u00e3o encontramos nenhum problema, j\u00e1 que o m\u00e9todo \u201cUsuarioValido\u201d trata algo relacionado ao usu\u00e1rio, o m\u00e9todo \u201ctemCargo\u201d trata do cargo de um usu\u00e1rio, por\u00e9m vamos imaginar que ocorra um problema no m\u00e9todo \u201ctemCargo\u201d, n\u00e3o s\u00f3 os usu\u00e1rios n\u00e3o v\u00e3o conseguir realizar o login no sistema, como todas as funcionalidade relacionada a este m\u00e9todo ir\u00e3o parar de funcionar, e o mesmo ocorre com o m\u00e9todo \u201cusuarioValido\u201d. Para este c\u00f3digo pode-se dizer que a classe usu\u00e1rio tem pelo menos tr\u00eas motivos para mudar seus atributos getters e setters, o m\u00e9todo \u201cusuarioValido\u201d e o m\u00e9todo \u201ctemCargo\u201d, ferindo o princ\u00edpio da responsabilidade \u00fanica, deixando a classe menos coesa e com um n\u00edvel alto de acoplamento.<\/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.6f0a740aecda56f0_28\" class=\"yaqOZd\">\n<div class=\"IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.6f0a740aecda56f0_25\" class=\"hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb 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-3088 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid2.jpg\" alt=\"\" width=\"698\" height=\"833\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid2.jpg 698w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid2-251x300.jpg 251w\" sizes=\"(max-width: 698px) 100vw, 698px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb 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.6f0a740aecda56f0_40\" class=\"yaqOZd\">\n<div class=\"IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.6f0a740aecda56f0_37\" class=\"hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb 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-3089 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid3.png\" alt=\"\" width=\"958\" height=\"291\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid3.png 958w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid3-300x91.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid3-768x233.png 768w\" sizes=\"(max-width: 958px) 100vw, 958px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb 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.6f0a740aecda56f0_44\" class=\"yaqOZd\">\n<div class=\"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.6f0a740aecda56f0_41\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Uma poss\u00edvel solu\u00e7\u00e3o para o problema acima \u00e9:<\/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.6f0a740aecda56f0_52\" class=\"yaqOZd\">\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.6f0a740aecda56f0_49\" class=\"hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb 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-3090 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid4.jpg\" alt=\"\" width=\"695\" height=\"635\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid4.jpg 695w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid4-300x274.jpg 300w\" sizes=\"(max-width: 695px) 100vw, 695px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb 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.6f0a740aecda56f0_64\" class=\"yaqOZd\">\n<div class=\"IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.6f0a740aecda56f0_61\" class=\"hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb 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-3091 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid5.png\" alt=\"\" width=\"1266\" height=\"791\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid5.png 1266w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid5-300x187.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid5-1024x640.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid5-768x480.png 768w\" sizes=\"(max-width: 1266px) 100vw, 1266px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb 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.6f0a740aecda56f0_68\" class=\"yaqOZd\">\n<div class=\"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.6f0a740aecda56f0_65\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<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\u00e3o ir\u00e1 se espalhar pelo sistema, deste modo facilitando os testes, descobrimento de novos bugs e deixando a aplica\u00e7\u00e3o mais coesa e menos acoplada.<\/p>\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\">\n<div class=\"U26fgb mUbCce fKz7Od LRAOtb rm120e\" role=\"presentation\" aria-describedby=\"h.3496jqlua20h\" 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<strong>O &#8211; Open Close Principle (Princ\u00edpio Aberto Fechado)<\/strong><\/div>\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Este princ\u00edpio nos diz que \u201cObjetos ou entidades devem estar abertos para extens\u00e3o, mas fechados para modifica\u00e7\u00e3o\u201d, ou seja, quando novos comportamentos e recursos precisam ser adicionados no software, devemos estender e n\u00e3o alterar o c\u00f3digo fonte original. Abaixo temos um exemplo de classes que representam contratos de funcion\u00e1rios.<\/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.6f0a740aecda56f0_72\" class=\"yaqOZd\">\n<div class=\"IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.6f0a740aecda56f0_69\" class=\"hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb 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-3092 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid6.jpg\" alt=\"\" width=\"672\" height=\"549\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid6.jpg 672w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid6-300x245.jpg 300w\" sizes=\"(max-width: 672px) 100vw, 672px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb 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.6f0a740aecda56f0_76\" class=\"yaqOZd\">\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.6f0a740aecda56f0_73\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">A classe \u201cFolhaDePagamento\u201d precisa verificar o funcion\u00e1rio para aplicar a regra de neg\u00f3cio correta na hora do pagamento. Supondo que a empresa cresceu e resolveu trabalhar com funcion\u00e1rios PJ, obviamente seria necess\u00e1rio modificar essa classe e consequentemente o princ\u00edpio Open-Closed do SOLID seria quebrado. A modifica\u00e7\u00e3o mais comum seria adicionar um <strong>IF <\/strong>e verificar o novo tipo de funcion\u00e1rio PJ, aplicando as regras para essa nova funcionalidade, mas \u00e9 exatamente este o problema, ao alterar uma classe j\u00e1 existente para adicionar um novo comportamento, corremos um s\u00e9rio risco de introduzir bugs em algo que j\u00e1 estava funcionando. Abaixo temos uma poss\u00edvel solu\u00e7\u00e3o para este problema.<\/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.6f0a740aecda56f0_80\" class=\"yaqOZd\">\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.6f0a740aecda56f0_77\" class=\"hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb 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-3093 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid7.jpg\" alt=\"\" width=\"611\" height=\"531\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid7.jpg 611w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid7-300x261.jpg 300w\" sizes=\"(max-width: 611px) 100vw, 611px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb 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.6f0a740aecda56f0_84\" class=\"yaqOZd\">\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.6f0a740aecda56f0_81\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Agora a classe \u201cFolhaDePagamento\u201d n\u00e3o precisa mais saber quais m\u00e9todos chamar para calcular. Ela ser\u00e1 capaz de calcular o pagamento corretamente de qualquer novo tipo de funcion\u00e1rio que seja criado no futuro,desde que ele implemente a interface &#8220;Remuneravel\u201d , sem qualquer necessidade de altera\u00e7\u00e3o do seu c\u00f3digo fonte. Este princ\u00edpio \u00e9 base para um dos design patterns mais conhecidos, o Strategy.<\/p>\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\">\n<div class=\"U26fgb mUbCce fKz7Od LRAOtb rm120e\" role=\"presentation\" aria-describedby=\"h.nhuknxhizof0\" 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<strong>L &#8211; Liskov Substitution Principle (Princ\u00edpio da substitui\u00e7\u00e3o de Liskov)<\/strong><\/div>\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Este princ\u00edpio nos diz que \u201cUma classe derivada deve ser substitu\u00edvel por sua classe base\u201d, ou de maneira mais simples, se um objeto B \u00e9 um subtipo de um outro objeto A, este objeto A pode substituir B em qualquer lugar no c\u00f3digo, sem que este c\u00f3digo pare de funcionar, veja o exemplo abaixo:<\/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.6f0a740aecda56f0_88\" class=\"yaqOZd\">\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.6f0a740aecda56f0_85\" class=\"hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb 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-3094 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid8.jpg\" alt=\"\" width=\"589\" height=\"794\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid8.jpg 589w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid8-223x300.jpg 223w\" sizes=\"(max-width: 589px) 100vw, 589px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb 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.6f0a740aecda56f0_92\" class=\"yaqOZd\">\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.6f0a740aecda56f0_89\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Estamos passando como par\u00e2metro tanto a classe pai como a classe derivada e (entretanto) o c\u00f3digo continua funcionando da forma esperada. Alguns exemplos de viola\u00e7\u00e3o do princ\u00edpio de Liskov s\u00e3o: sobrescrever\/implementar um m\u00e9todo que n\u00e3o faz nada, lan\u00e7ar uma exce\u00e7\u00e3o inesperada ou retornar valores de tipos diferentes da classe base. Para n\u00e3o violar o Liskov Substitution Principle, al\u00e9m de estruturar muito bem as suas abstra\u00e7\u00f5es, em alguns casos, voc\u00ea precisar\u00e1 usar a inje\u00e7\u00e3o de depend\u00eancia e tamb\u00e9m usar outros princ\u00edpios do SOLID, como por exemplo, o Princ\u00edpio Aberto Fechado e o Princ\u00edpio da Segrega\u00e7\u00e3o da Interface, ser\u00e1 abordado no pr\u00f3ximo t\u00f3pico.<\/p>\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Seguir o LSP nos permite usar o polimorfismo com mais confian\u00e7a. Podemos chamar nossas classes derivadas referindo-se \u00e0 sua classe base sem preocupa\u00e7\u00f5es com resultados inesperados.<\/p>\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\">\n<div class=\"U26fgb mUbCce fKz7Od LRAOtb rm120e\" role=\"presentation\" aria-describedby=\"h.gvsdqprgo5tu\" 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<strong>I &#8211; Interface Segregation Principle (Princ\u00edpio da Segrega\u00e7\u00e3o da Interface)<\/strong><\/div>\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">O princ\u00edpio da segrega\u00e7\u00e3o da interface nos diz que \u201cuma classe n\u00e3o deve ser for\u00e7ada a implementar interfaces e m\u00e9todos que n\u00e3o ir\u00e1 utilizar\u201d. Esse princ\u00edpio basicamente diz que \u00e9 melhor criar interfaces mais espec\u00edficas ao inv\u00e9s de termos uma \u00fanica interface gen\u00e9rica. O exemplo abaixo mostra como algumas aves s\u00e3o tratadas dentro de um jogo.<\/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.6f0a740aecda56f0_96\" class=\"yaqOZd\">\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.6f0a740aecda56f0_93\" class=\"hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb 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-3095 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid9.jpg\" alt=\"\" width=\"674\" height=\"770\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid9.jpg 674w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid9-263x300.jpg 263w\" sizes=\"(max-width: 674px) 100vw, 674px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb 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.6f0a740aecda56f0_108\" class=\"yaqOZd\">\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.6f0a740aecda56f0_105\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Percebam que ao criar a interface Aves, atribu\u00edmos comportamentos gen\u00e9ricos e isso acabou for\u00e7ando a classe Pinguim implementar o m\u00e9todo \u201csetAltitude\u201d, do qual ela n\u00e3o deveria ter, j\u00e1 que pinguins n\u00e3o voam. A solu\u00e7\u00e3o recomendada ent\u00e3o \u00e9 criar uma interface mais espec\u00edfica.<\/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.6f0a740aecda56f0_112\" class=\"yaqOZd\">\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.6f0a740aecda56f0_109\" class=\"hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb 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-3096 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid10.jpg\" alt=\"\" width=\"675\" height=\"782\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid10.jpg 675w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid10-259x300.jpg 259w\" sizes=\"(max-width: 675px) 100vw, 675px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb 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.6f0a740aecda56f0_116\" class=\"yaqOZd\">\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.6f0a740aecda56f0_113\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">No exemplo acima, retiramos o m\u00e9todo \u201csetAltitude\u201d da interface Aves e adicionamos em uma interface derivada \u201cAvesQueVoam\u201d<em>.<\/em> Isso nos permitiu isolar os comportamentos das aves de maneira correta dentro do jogo.<\/p>\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\">\n<div class=\"U26fgb mUbCce fKz7Od LRAOtb rm120e\" role=\"presentation\" aria-describedby=\"h.acoxn53v297m\" 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<strong>D &#8211; Dependency Inversion Principle (Princ\u00edpio da Invers\u00e3o de depend\u00eancia)<\/strong><\/div>\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Antes de tudo, vale lembrar que o termo invers\u00e3o de depend\u00eancia n\u00e3o deve ser confundido com o padr\u00e3o de projeto inje\u00e7\u00e3o de depend\u00eancia.<\/p>\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">O princ\u00edpio da invers\u00e3o de depend\u00eancia nos diz que devemos \u201cDepender de abstra\u00e7\u00f5es e n\u00e3o de implementa\u00e7\u00f5es\u201c, Uncle Bob ainda fala que \u201cm\u00f3dulos de alto n\u00edvel n\u00e3o devem depender de m\u00f3dulos de baixo n\u00edvel. Ambos devem depender da abstra\u00e7\u00e3o e abstra\u00e7\u00f5es n\u00e3o devem depender de detalhes, detalhes devem depender de abstra\u00e7\u00f5es\u201d. O exemplo abaixo demonstra o princ\u00edpio da invers\u00e3o de depend\u00eancia sendo quebrado.<\/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.6f0a740aecda56f0_120\" class=\"yaqOZd\">\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.6f0a740aecda56f0_117\" class=\"hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb 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-3097 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid11.jpg\" alt=\"\" width=\"688\" height=\"802\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid11.jpg 688w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid11-257x300.jpg 257w\" sizes=\"(max-width: 688px) 100vw, 688px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb 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.6f0a740aecda56f0_124\" class=\"yaqOZd\">\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.6f0a740aecda56f0_121\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">No exemplo acima, podemos perceber que al\u00e9m de quebrar outros princ\u00edpios 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\u00e2mpada ou at\u00e9 mesmo um carro. Uma poss\u00edvel solu\u00e7\u00e3o para este problema seria:<\/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.6f0a740aecda56f0_128\" class=\"yaqOZd\">\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-II5mzb JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.6f0a740aecda56f0_125\" class=\"hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb 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-3098 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid12.png\" alt=\"\" width=\"445\" height=\"819\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid12.png 445w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2021\/02\/solid12-163x300.png 163w\" sizes=\"(max-width: 445px) 100vw, 445px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-II5mzb 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.6f0a740aecda56f0_132\" class=\"yaqOZd\">\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.6f0a740aecda56f0_129\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Percebam que agora a classe concreta Interruptor depende da abstra\u00e7\u00e3o de um \u201cIDispositivo\u201d e n\u00e3o mais de uma classe concreta.<\/p>\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\">\n<div class=\"U26fgb mUbCce fKz7Od LRAOtb rm120e\" role=\"presentation\" aria-describedby=\"h.1vye2nev64c7\" 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<strong>Problemas comuns que o SOLID pode evitar:<\/strong><\/div>\n<ul class=\"n8H08c UVNKR\">\n<li class=\"TYR86d wXCUfe zfr3Q\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Dificuldade na testabilidade \/ cria\u00e7\u00e3o de testes de unidade;<\/p>\n<\/li>\n<li class=\"TYR86d wXCUfe zfr3Q\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">C\u00f3digo macarr\u00f4nico, sem estrutura ou padr\u00e3o;<\/p>\n<\/li>\n<li class=\"TYR86d wXCUfe zfr3Q\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Dificuldades de isolar funcionalidades;<\/p>\n<\/li>\n<li class=\"TYR86d wXCUfe zfr3Q\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Duplica\u00e7\u00e3o de c\u00f3digo, uma altera\u00e7\u00e3o precisa ser feita em N pontos;<\/p>\n<\/li>\n<li class=\"TYR86d wXCUfe zfr3Q\">\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Fragilidade, o c\u00f3digo quebra facilmente em v\u00e1rios pontos ap\u00f3s alguma mudan\u00e7a.<\/p>\n<\/li>\n<\/ul>\n<div id=\"h.oqq59lhikwhc\" class=\"GV3q8e 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.oqq59lhikwhc\" 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<strong>Refer\u00eancias e link \u00fateis<\/strong><\/div>\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Reda\u00e7\u00e3o 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>\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\">Livro do Uncle Bob:<br \/>Robert C. Martins. Arquitetura Limpa: O guia do artes\u00e3o para estrutura e design de software. Alta Books Editora, 2019.<\/p>\n<p class=\"CDt4Ke zfr3Q\" dir=\"ltr\" style=\"text-align: right\">Bruno Rossi &#8211; 10\/02\/2021<\/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>SOLID \u00e9 um acr\u00f4nimo dos cinco primeiros princ\u00edpios da programa\u00e7\u00e3o orientada a objetos e design de c\u00f3digo identificados por Robert C. Martin (ou Uncle Bob) por volta do ano 2000. O acr\u00f4nimo SOLID foi introduzido por Michael Feathers, ap\u00f3s observar que os cinco princ\u00edpios poderiam se encaixar nesta palavra, as siglas significam: \u00a0 S &#8211; [&hellip;]<\/p>\n","protected":false},"author":2948,"featured_media":3099,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[124,112],"tags":[201,149],"class_list":["post-3100","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-destaques","category-redacao","tag-eng-software","tag-redacao"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/3100","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=3100"}],"version-history":[{"count":0,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/3100\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media\/3099"}],"wp:attachment":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media?parent=3100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/categories?post=3100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/tags?post=3100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}