{"id":4221,"date":"2025-08-12T12:10:52","date_gmt":"2025-08-12T09:10:52","guid":{"rendered":"https:\/\/demensdeum.com\/blog\/2025\/08\/12\/block-schemes-in-practice\/"},"modified":"2025-08-12T13:06:22","modified_gmt":"2025-08-12T10:06:22","slug":"block-schemes-in-practice","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/pt\/2025\/08\/12\/block-schemes-in-practice\/","title":{"rendered":"Diagramas de bloqueio na pr\u00e1tica sem formalina"},"content":{"rendered":"<p>O diagrama de blocos \u00e9 uma ferramenta visual que ajuda a transformar um algoritmo complexo em uma sequ\u00eancia de a\u00e7\u00f5es compreens\u00edveis e estruturadas. Da programa\u00e7\u00e3o ao gerenciamento de processos de neg\u00f3cios, eles servem como uma linguagem universal para visualiza\u00e7\u00e3o, an\u00e1lise e otimiza\u00e7\u00e3o dos sistemas mais complexos.<\/p>\n<p>Imagine um mapa onde, em vez de estradas, \u00e9 l\u00f3gica e, em vez de cidades &#8211; a\u00e7\u00f5es. Esta \u00e9 um diagrama de blocos-uma ferramenta indispens\u00e1vel para navega\u00e7\u00e3o nos processos mais confusos.<\/p>\n<p>Exemplo 1: Esquema de lan\u00e7amento de jogo simplificado<br \/>\nPara entender o princ\u00edpio do trabalho, vamos apresentar um simples esquema de lan\u00e7amento de jogo.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2025\/08\/mediauml1.png\"><\/p>\n<p>Esse esquema mostra o script perfeito quando tudo acontece sem falhas. Mas na vida real, tudo \u00e9 muito mais complicado.<\/p>\n<p>Exemplo 2: Esquema expandido para iniciar o jogo com carregamento de dados<br \/>\nOs jogos modernos geralmente exigem conex\u00e3o \u00e0 Internet para baixar dados, salvamento ou configura\u00e7\u00f5es do usu\u00e1rio. Vamos adicionar essas etapas ao nosso esquema.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2025\/08\/mediauml2.png\"><\/p>\n<p>Esse esquema j\u00e1 \u00e9 mais realista, mas o que acontecer\u00e1 se algo der errado?<\/p>\n<p><H2> Como foi: um jogo que &#8220;quebrou&#8221; com a perda da Internet <H2><\/h2>\n<p>No in\u00edcio do projeto, os desenvolvedores n\u00e3o puderam levar em considera\u00e7\u00e3o todos os cen\u00e1rios poss\u00edveis. Por exemplo, eles se concentraram na l\u00f3gica principal do jogo e n\u00e3o pensaram no que aconteceria se o jogador tivesse uma conex\u00e3o com a Internet.<\/p>\n<p>Em tal situa\u00e7\u00e3o, o diagrama de blocos de seu c\u00f3digo ficaria assim:<br \/>\n<img decoding=\"async\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2025\/08\/mediauml3.png\"><\/p>\n<p>Nesse caso, em vez de emitir um erro ou fechar corretamente, o jogo congelou na fase de espera por dados que ela n\u00e3o recebeu devido \u00e0 falta de uma conex\u00e3o. Isso levou \u00e0 &#8220;tela preta&#8221; e congelando o aplicativo.<\/p>\n<p><H2> Como se tornou: corre\u00e7\u00e3o nas reclama\u00e7\u00f5es de usu\u00e1rios <\/h2>\n<p>Ap\u00f3s in\u00fameras reclama\u00e7\u00f5es dos usu\u00e1rios sobre pairando, a equipe do desenvolvedor percebeu que precis\u00e1vamos corrigir o erro. Eles fizeram altera\u00e7\u00f5es no c\u00f3digo adicionando uma unidade de processamento de erros que permite que o aplicativo responda corretamente \u00e0 falta de conex\u00e3o.<\/p>\n<p>\u00c9 assim que o diagrama de blocos corrigido se parece, onde ambos os cen\u00e1rios s\u00e3o levados em considera\u00e7\u00e3o:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2025\/08\/mediauml4.png\"><\/p>\n<p>Gra\u00e7as a essa abordagem, o jogo agora informa corretamente o usu\u00e1rio sobre o problema e, em alguns casos, ele pode at\u00e9 ir para o modo offline, permitindo que voc\u00ea continue o jogo. Este \u00e9 um bom exemplo de por que os diagramas de blocos <b> s\u00e3o t\u00e3o importantes <\/b>: eles fazem o desenvolvedor pensar n\u00e3o apenas sobre a maneira ideal de execu\u00e7\u00e3o, mas tamb\u00e9m sobre todas as falhas poss\u00edveis, tornando o produto final muito mais est\u00e1vel e confi\u00e1vel.<\/p>\n<p><H2> comportamento incerto <\/h2>\n<p>Pendurado e erros s\u00e3o apenas um exemplos de comportamento imprevis\u00edvel do programa. Na programa\u00e7\u00e3o, existe um conceito de comportamento incerto (comportamento indefinido) <\/b> &#8211; Esta \u00e9 uma situa\u00e7\u00e3o em que o padr\u00e3o do idioma n\u00e3o descreve como o programa deve se comportar em um determinado caso.<\/p>\n<p>Isso pode levar a qualquer coisa: do \u201clixo\u201d aleat\u00f3rio na retirada ao fracasso do programa ou mesmo \u00e0 s\u00e9ria vulnerabilidade de seguran\u00e7a. O comportamento indefinido geralmente ocorre ao trabalhar com mem\u00f3ria, por exemplo, com linhas na linguagem de C.<\/p>\n<p>Um exemplo do idioma c:<\/p>\n<p>Imagine que o desenvolvedor copiou a linha para o buffer, mas esqueceu de adicionar ao final <b> o s\u00edmbolo zero (`\\ 0`) <\/b>, que marca o final da linha.<\/p>\n<p>\u00c9 assim que o c\u00f3digo se parece:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>#include <string.h>\n\nint main() {\nchar buffer[5];\nchar* my_string = \"hello\";\n\nmemcpy(buffer, my_string, 5);\n\nprintf(\"%s\\n\", buffer);\nreturn 0;\n}\n<\/code><\/pre>\n<\/div>\n<p><b> Resultado esperado: <\/b> &#8220;Ol\u00e1&#8221;<br \/>\n<b> O resultado real <\/b> \u00e9 imprevis\u00edvel.<\/p>\n<p>Por que isso est\u00e1 acontecendo? A fun\u00e7\u00e3o `printf` com o especificador`%s` espera que a linha termine com um s\u00edmbolo zero. Se ele n\u00e3o estiver, ela continuar\u00e1 lendo a mem\u00f3ria fora do buffer destacado.<\/p>\n<p>Aqui est\u00e1 o diagrama de blocos deste processo com dois resultados poss\u00edveis:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2025\/08\/mediauml5.png\"><\/p>\n<p>Este \u00e9 um exemplo claro de por que os diagramas de blocos s\u00e3o t\u00e3o importantes: eles fazem o desenvolvedor pensar n\u00e3o apenas sobre a maneira ideal de execu\u00e7\u00e3o, mas tamb\u00e9m sobre todas as falhas poss\u00edveis, incluindo problemas de baixo n\u00edvel, tornando o produto final muito mais est\u00e1vel e confi\u00e1vel.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O diagrama de blocos \u00e9 uma ferramenta visual que ajuda a transformar um algoritmo complexo em uma sequ\u00eancia de a\u00e7\u00f5es compreens\u00edveis e estruturadas. Da programa\u00e7\u00e3o ao gerenciamento de processos de neg\u00f3cios, eles servem como uma linguagem universal para visualiza\u00e7\u00e3o, an\u00e1lise e otimiza\u00e7\u00e3o dos sistemas mais complexos. Imagine um mapa onde, em vez de estradas, \u00e9<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/pt\/2025\/08\/12\/block-schemes-in-practice\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Diagramas de bloqueio na pr\u00e1tica sem formalina&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[61,52],"tags":[],"class_list":["post-4221","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"pt","enabled_languages":["en","ru","zh","de","fr","ja","pt"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=4221"}],"version-history":[{"count":6,"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4221\/revisions"}],"predecessor-version":[{"id":4232,"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4221\/revisions\/4232"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=4221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=4221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=4221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}