{"id":692,"date":"2020-01-28T12:39:32","date_gmt":"2020-01-28T15:39:32","guid":{"rendered":"https:\/\/micheladrianomedeiros.com.br\/blog\/?p=692"},"modified":"2020-01-28T12:39:35","modified_gmt":"2020-01-28T15:39:35","slug":"comecando-com-java-9-fundamentos-6","status":"publish","type":"post","link":"https:\/\/micheladrianomedeiros.com.br\/blog\/comecando-com-java-9-fundamentos-6\/","title":{"rendered":"Come\u00e7ando com Java 9 Fundamentos #6"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/comecando-com-java-9-fundamentos-6\/#Paradigma_Declarativo\" >Paradigma Declarativo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/comecando-com-java-9-fundamentos-6\/#Paradigma_Funcional\" >Paradigma Funcional<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/comecando-com-java-9-fundamentos-6\/#Paradigma_Logico\" >Paradigma L\u00f3gico<\/a><\/li><\/ul><\/nav><\/div>\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Paradigma_Declarativo\"><\/span><strong>Paradigma Declarativo<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">No paradigma declarativo, um\nprograma consiste das descri\u00e7\u00f5es de um problema e o computador de encontrar a solu\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O programa n\u00e3o especifica como\nchegar \u00e0 solu\u00e7\u00e3o do problema. \u00c9 trabalho do computador chegar a uma solu\u00e7\u00e3o quando\num problema \u00e9 descrito a ele.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Diferen\u00e7as entre o paradigma\ndeclarativo e o imperativo. No paradigma imperativo, n\u00f3s estamos preocupados sobre\n\u201ccomo\u201d \u00e9 o problema. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No paradigma declarativo, n\u00f3s\nestamos preocupados sobre \u201cqual\u201d \u00e9 o problema. N\u00f3s queremos saber qual \u00e9 o\nproblema, ao inv\u00e9s de resolver o problema.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O paradigma funcional e o\nl\u00f3gico, que veremos depois, s\u00e3o subtipos do paradigma declarativo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Escrevendo uma consulta de\nbanco de dados utilizando a structured query language (SQL) cairemos em um programa\nbaseado no paradigma declarativo, onde voc\u00ea especifica qual dados voc\u00ea quer e o\nbanco de dados entende como trazer esses dados para voc\u00ea.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Diferente do paradigma\nimperativo, o dado \u00e9 permanente e o algoritmo \u00e9 transit\u00f3rio no paradigma\ndeclarativo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No paradigma imperativo, o\ndado \u00e9 modificado assim que o algoritmo \u00e9 executado. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No paradigma declarativo, os\ndados s\u00e3o fornecidos ao algoritmo como entradas e os dados da entrada\npermanecem imut\u00e1veis enquanto o algoritmo \u00e9 executado. O algoritmo produz novos\ndados ao inv\u00e9s de modificar os dados da entrada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Em outras palavras, no paradigma\ndeclarativo, a execu\u00e7\u00e3o de um algoritmo n\u00e3o produz efeitos colaterais.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Paradigma_Funcional\"><\/span><strong>Paradigma Funcional<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">O paradigma funcional \u00e9\nbaseado no conceito de fun\u00e7\u00f5es matem\u00e1ticas. Fun\u00e7\u00e3o \u00e9 como um algoritmo que calcula\nos valores de entrada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Diferente de um procedimento\nna programa\u00e7\u00e3o procedural, uma fun\u00e7\u00e3o n\u00e3o tem efeito colateral. Na programa\u00e7\u00e3o\nfuncional, os valores s\u00e3o imut\u00e1veis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um novo valor \u00e9 derivado da aplica\u00e7\u00e3o\nda fun\u00e7\u00e3o com entrada de valor. A entrada de valor n\u00e3o muda.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Linguagens de programa\u00e7\u00e3o\nfuncional n\u00e3o utiliza vari\u00e1veis e atribui\u00e7\u00f5es, os quais s\u00e3o utilizados para\nmodificar dados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na programa\u00e7\u00e3o imperativa, uma\ntarefa repetida \u00e9 melhorada utilizando uma constru\u00e7\u00e3o em loop, por exemplo o\nwhile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na programa\u00e7\u00e3o funcional, uma\ntarefa repetida \u00e9 melhorada utilizando a recurs\u00e3o, que \u00e9 o jeito pela qual a\nfun\u00e7\u00e3o \u00e9 definida em si mesmo. Em outras palavras, recurs\u00e3o \u00e9 uma fun\u00e7\u00e3o que\nfaz a mesma tarefa, e chama a si mesmo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma fun\u00e7\u00e3o sempre produz a mesma sa\u00edda quando \u00e9 aplicada a mesma entrada. Uma fun\u00e7\u00e3o, chamada add, pode ser aplicada um inteiro x e adicionado um inteiro n, veja o exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int add(x,n){\n\tif(n == 0){\n\t\treturn x;\n\t}else{\n\t\treturn 1 + add(x,n-1); \/\/aplica\u00e7\u00e3o da recursividade \n\t}\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Veja que a fun\u00e7\u00e3o add n\u00e3o usa\nnenhuma vari\u00e1vel e n\u00e3o modifica nenhum dado. Isto \u00e9 recurs\u00e3o. Voc\u00ea pode chamar\na fun\u00e7\u00e3o add com os valores 15 e 10.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">add(15,10) \/\/O resultado ser\u00e1\n25<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Haskell, Erlang e Scala s\u00e3o\nalguns exemplos de linguagens de programa\u00e7\u00e3o que suporta o paradigma funcional.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O Java 8 adicionou um novo\nconstrutor chamado express\u00f5es lambda, o qual pode ser utilizado para escrever\nc\u00f3digos no estilo da programa\u00e7\u00e3o funcional.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Paradigma_Logico\"><\/span><strong>Paradigma L\u00f3gico<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Diferente do paradigma\nimperativo, o paradigma l\u00f3gico foca no \u201cqual\u201d \u00e9 o problema ao inv\u00e9s de resolv\u00ea-lo.\nVoc\u00ea precisa especificar tudo para que seja resolvido. O programa ir\u00e1 entender\no algoritmo para resolver.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O algoritmo \u00e9 o menos importante\npara o programador. A primeira tarefa do programador \u00e9 descrever o problema o\nmais preciso poss\u00edvel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No paradigma l\u00f3gico, um\nprograma consiste em configura\u00e7\u00f5es de axiomas e objetivos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A configura\u00e7\u00e3o de axiomas \u00e9 a\ncole\u00e7\u00e3o de fatos e regras de conclus\u00e3o para criar uma teoria. O objetivo \u00e9 um\nteorema.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O programa utiliza dedu\u00e7\u00f5es\npara provar o teorema com teoria. A programa\u00e7\u00e3o l\u00f3gica utiliza conceitos da matem\u00e1tica\nque vem da teoria de conjuntos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A teoria de conjuntos \u00e9\ndefinida como um subconjunto do produto Cartesiano de dois ou mais conjuntos. Suponhamos\nque h\u00e1 dois conjuntos, Pessoas e Nacionalidade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pessoa = {John, Li, Ravi}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nacionalidade = {Americano,\nChin\u00eas, Indiano}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O produto Cartesiano tem dois\nconjuntos, representados como Pessoas x Nacionalidade, que podemos representar\ncomo:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pessoas x Nacionalidade = {{John,\nAmericano}, {John, Chin\u00eas}, {John, Indiano}, {Li, Americano}, {Li, Chin\u00eas}, {Li,\nIndiano}, {Ravi, Americano}, {Ravi, Chin\u00eas}, {Ravi, Indiano}} <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cada subconjunto de Pessoa x\nNacionalidade \u00e9 outro conjunto que define uma rela\u00e7\u00e3o matem\u00e1tica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cada elemento de uma rela\u00e7\u00e3o \u00e9\nchamado de tupla. Vamos definir a rela\u00e7\u00e3o de PessoaNacionalidade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PessoaNacionalidade = {{John,\nAmericano}, {Li, Chin\u00eas}, {Ravi, Indiano}}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na programa\u00e7\u00e3o l\u00f3gica, voc\u00ea\npode utilizar a rela\u00e7\u00e3o PessoaNacionalidade e relacionar como uma cole\u00e7\u00e3o de\nfatos verdadeiros. Voc\u00ea pode chegar ao objetivo (solu\u00e7\u00e3o do problema) da\nseguinte representa\u00e7\u00e3o:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PessoaNacionalidade(?, Chin\u00eas)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nesta representa\u00e7\u00e3o qualquer\npessoa pode ser chin\u00eas. O programa ir\u00e1 procurar as rela\u00e7\u00f5es em\nPessoaNacionalidade e trazer as tuplas que respondem esse problema. No caso a\nresposta ser\u00e1 Li.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prolog \u00e9 um exemplo de linguagem\nde programa\u00e7\u00e3o que suporta o paradigma l\u00f3gico.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Paradigma Declarativo No paradigma declarativo, um programa consiste das descri\u00e7\u00f5es de um problema e o computador de encontrar a solu\u00e7\u00e3o. O programa n\u00e3o especifica como chegar \u00e0 solu\u00e7\u00e3o do problema. \u00c9 trabalho do computador chegar a uma solu\u00e7\u00e3o quando um problema \u00e9 descrito a ele. Diferen\u00e7as entre o paradigma declarativo e o imperativo. No paradigma [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":693,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-692","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java"],"_links":{"self":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/692","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/comments?post=692"}],"version-history":[{"count":1,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/692\/revisions"}],"predecessor-version":[{"id":694,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/692\/revisions\/694"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media\/693"}],"wp:attachment":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media?parent=692"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/categories?post=692"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/tags?post=692"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}