{"id":793,"date":"2020-03-31T12:14:07","date_gmt":"2020-03-31T15:14:07","guid":{"rendered":"https:\/\/micheladrianomedeiros.com.br\/blog\/?p=793"},"modified":"2020-03-31T12:14:09","modified_gmt":"2020-03-31T15:14:09","slug":"comecando-com-java-9-fundamentos-7","status":"publish","type":"post","link":"https:\/\/micheladrianomedeiros.com.br\/blog\/comecando-com-java-9-fundamentos-7\/","title":{"rendered":"Come\u00e7ando com Java 9 Fundamentos #7"},"content":{"rendered":"\n<h4 class=\"wp-block-heading\">Paradigma de Orienta\u00e7\u00e3o a Objetos<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">No paradigma de orienta\u00e7\u00e3o de\nobjetos (OO), um programa que consiste na intera\u00e7\u00e3o de objetos. Um objeto que encapsula\ndados e algoritmos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dados define um estado de um objeto.\nAlgoritmos define o comportamento de um objeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um objeto comunica com outros\nobjetos mandando mensagens para eles. Quando um objeto recebe uma mensagem, a\nresposta \u00e9 a execu\u00e7\u00e3o de algoritmos, o qual pode modificar o estado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O paradigma de orienta\u00e7\u00e3o de\nobjeto se diferencia do paradigma imperativo e funcional.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No paradigma imperativo e\nfuncional, dados e algoritmos s\u00e3o separados, enquanto no paradigma de\norienta\u00e7\u00e3o de objetos, dados e algoritmos n\u00e3o s\u00e3o separados; eles s\u00e3o combinados\nem uma entidade, o qual \u00e9 chamado de objeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Classes s\u00e3o a unidade b\u00e1sica\ndo paradigma de orienta\u00e7\u00e3o a objetos. Similarmente objetos s\u00e3o defini\u00e7\u00f5es\ndentro de um grupo chamado de classe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A defini\u00e7\u00e3o de classe \u00e9 utilizada\npara criar um objeto. Um objeto \u00e9 conhecido como inst\u00e2ncia de uma classe. Uma\nclasse consiste em inst\u00e2ncias de vari\u00e1veis e m\u00e9todos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O valor da inst\u00e2ncia da\nvari\u00e1vel de um objeto define o estado do objeto. Diferente de objetos de uma\nclasse que mant\u00e9m seus estados separadamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isto \u00e9, cada objeto de uma\nclasse tem sua pr\u00f3pria c\u00f3pia de inst\u00e2ncias de vari\u00e1veis. O estado de um objeto\n\u00e9 mantido privado para o objeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isto \u00e9, o estado de um objeto\nn\u00e3o pode ser acessado ou modificado diretamente de fora do objeto. M\u00e9todos da\nclasse define o comportamento dos objetos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um m\u00e9todo \u00e9 como um\nprocedimento (ou sub-rotina) no paradigma procedural. M\u00e9todos podem\nacessar\/modificar o estado do objeto. Uma mensagem \u00e9 enviada ao objeto por meio\nda invoca\u00e7\u00e3o de um dos seus m\u00e9todos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suponhamos que voc\u00ea quer representar uma pessoa real em um programa. Voc\u00ea ir\u00e1 criar a classe Pessoa e as inst\u00e2ncias ir\u00e3o representar pessoa no seu programa.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Pessoa {\n    private String nome;\n    private String sexo;\n\n    public Pessoa(String iniciaNome, String iniciaSexo) {\n        nome = iniciaNome;\n        sexo = iniciaSexo;\n    }\n\n    public String getNome() {\n        return nome;\n    }\n\n    public void setNome(String novoNome) {\n        name = novoNome;\n    }\n\n    public String getSexo() {\n        return sexo;\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A classe Pessoa inclui tr\u00eas\ncoisas:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Duas inst\u00e2ncias de vari\u00e1veis: nome e sexo<\/li><li>Um construtor: Pessoa(String iniciaNome, String\niniciaSexo)<\/li><li>Tr\u00eas m\u00e9todos: getNome(), setNome(String\nnovoNome) e getSexo()<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Vari\u00e1veis de inst\u00e2ncias\nguardam dados de um objeto. O valor de cada inst\u00e2ncia de vari\u00e1vel representa o\nvalor que corresponde a propriedade do objeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cada inst\u00e2ncia da classe\nPessoa ter\u00e1 uma c\u00f3pia com os dados de nome e sexo. Os valores de todas as\npropriedades de um objeto est\u00e3o juntos (gravados nas inst\u00e2ncias de vari\u00e1veis)\ncoletivamente define o estado do objeto naquele momento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No mundo real, uma pessoa\npossui muitas propriedades, por exemplo, nome, sexo, peso, altura, cor de\ncabelo, endere\u00e7o, telefone etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Contudo, quando voc\u00ea modela\numa pessoa do mundo real para uma classe, voc\u00ea ir\u00e1 incluir apenas algumas\ndessas propriedades, as que s\u00e3o relevantes para a modela\u00e7\u00e3o do sistema. S\u00f3 para\ndemonstra\u00e7\u00e3o, vamos apenas utilizar duas propriedades, nome e sexo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma classe cont\u00e9m a defini\u00e7\u00e3o\n(ou a planta) dos objetos. Deve haver um meio de construir (criar ou instanciar)\nobjetos de uma classe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um objeto precisa ter valores\niniciais para essas propriedades que ir\u00e3o determinar o estado inicial ao criar\num objeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um construtor de classe \u00e9\nutilizado para criar um objeto da classe. Uma classe pode ter v\u00e1rios\nconstrutores para facilitar a cria\u00e7\u00e3o de objetos com diferentes estados\niniciais.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A classe Pessoa fornece um\nconstrutor, o qual deixa voc\u00ea criar um objeto especificando os valores iniciais\npara nome e sexo. Vamos criar dois objetos da classe Pessoa:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pessoa jose = new Pessoa(\u201c<strong>Jos\u00e9 de Nazar\u00e9<\/strong>\u201d, \u201cMasculino\u201d);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pessoa maria = new Maria(\u201c<strong>Maria de Nazar\u00e9<\/strong>\u201d, \u201cFeminino\u201d);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O primeiro objeto \u00e9 chamado de\njose com os valores iniciais \u201cJos\u00e9 de Nazar\u00e9\u201d no nome e \u201cMasculino\u201d no sexo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O segundo objeto \u00e9 chamado de\nmaria com os valores iniciais \u201cMaria de Nazar\u00e9\u201d no nome e \u201cFeminino\u201d no sexo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">M\u00e9todos da classe representam\ncomportamento desses objetos. Por exemplo, no mundo real, uma pessoa tem um\nnome para ser chamada e suas habilidades para mostrar quando requisitada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Objetos da classe Pessoa tem habilidades\nque respondem a tr\u00eas diferentes mensagens: getNome, setNome e getSexo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A habilidade de um objeto\nresponde para uma mensagem que est\u00e1 implementada nos m\u00e9todos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea pode enviar uma mensagem\npara getName, para o objeto Pessoa e ir\u00e1 retornar o nome. \u00c9 a mesma coisa que\nvoc\u00ea falar para uma pessoa: \u201cQual \u00e9 o seu nome?\u201d e a pessoa responder com o\nnome dela.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">String nomeDeJose = jose.getNome();\n\/\/envia requisi\u00e7\u00e3o para jose<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">String nomeDeMaria = maria.getNome();\/\/envia\nrequisi\u00e7\u00e3o para maria<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A requisi\u00e7\u00e3o setNome para o\nobjeto Pessoa pede para mudar o nome atual para um novo nome. O c\u00f3digo a seguir\nmuda o nome Maria de Nazar\u00e9 para Virgem Maria.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">nomeDeMaria.setNome(\u201cVirgem\nMaria\u201d);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se voc\u00ea agora fizer uma\nrequisi\u00e7\u00e3o para o getName n\u00e3o ir\u00e1 retornar Maria de Nazar\u00e9 e sim Virgem Maria.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea pode notar que o objeto\nPessoa n\u00e3o tem a requisi\u00e7\u00e3o setSexo. O sexo da Pessoa n\u00e3o pode ser mudado depois\nde criado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Contudo, voc\u00ea tem a requisi\u00e7\u00e3o\ngetSexo. O que um objeto pode ou n\u00e3o pode responder depende da sua modelagem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No caso do objeto Pessoa, n\u00f3s decidimos que n\u00e3o teria a habilidade de responder a requisi\u00e7\u00e3o setSexo.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"567\" height=\"166\" src=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/03\/image-11.png\" alt=\"\" class=\"wp-image-794\" srcset=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/03\/image-11.png 567w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/03\/image-11-300x88.png 300w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O paradigma da orienta\u00e7\u00e3o de\nobjetos \u00e9 muito poderoso para modelagem do mundo real para o modelo\ncomputacional.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O paradigma da orienta\u00e7\u00e3o de\nobjetos \u00e9 natural e intuitivo, \u00e9 s\u00f3 imaginar tudo como um objeto. Contudo, nem\nsempre d\u00e1 certo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Algumas vezes, a solu\u00e7\u00e3o para\num problema n\u00e3o est\u00e1 no paradigma da orienta\u00e7\u00e3o de objetos. Nesses casos, voc\u00ea\nprecisa usar o paradigma que melhor resolve o problema.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O paradigma de orienta\u00e7\u00e3o de\nobjetos tem uma curva de aprendizado. \u00c9 muito mais do que criar objetos no seu\nprograma.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Abstra\u00e7\u00e3o, encapsulamento,\npolimorfismo e heran\u00e7a s\u00e3o alguns dos recursos importantes que o paradigma de orienta\u00e7\u00e3o\nde objetos possui. Voc\u00ea precisa conhecer esses recursos para tirar vantagem desse\nparadigma.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Paradigma de Orienta\u00e7\u00e3o a Objetos No paradigma de orienta\u00e7\u00e3o de objetos (OO), um programa que consiste na intera\u00e7\u00e3o de objetos. Um objeto que encapsula dados e algoritmos. Dados define um estado de um objeto. Algoritmos define o comportamento de um objeto. Um objeto comunica com outros objetos mandando mensagens para eles. Quando um objeto recebe [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":795,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-793","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\/793","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=793"}],"version-history":[{"count":1,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/793\/revisions"}],"predecessor-version":[{"id":796,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/793\/revisions\/796"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media\/795"}],"wp:attachment":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media?parent=793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/categories?post=793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/tags?post=793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}