<p><img src="https://i.imgur.com/D01Fpky.png" alt="" title="Entre no nosso site e veja nossos cursos"></p> <h1> Conceitos Gerais </h1> <p> Material teórico de apoio para consulta ao longo do curso e em estudos posteriores. </p> <h2 id="Orientação-a-objetos" data-id="Orientação-a-objetos"><a class="anchor hidden-xs" href="#Orientação-a-objetos" title="Orientação-a-objetos"><span class="octicon octicon-link"></span></a><span>Orientação a objetos</span></h2><p><span>A Orientação a Objetos é uma maneira alternativa de pensar os problemas de sistemas de informação utilizando modelos organizados a partir de conceitos do mundo real. O artefato base é o “objeto” capaz de combinar estrutura e comportamento em uma única “entidade”. Tudo o que podemos ver no mundo real é considerado um objeto com atributos e comportamentos definidos. Na qualidade de método de modelagem, é tida como a melhor estratégia para se eliminar a dificuldade recorrente no processo de modelar o mundo real do domínio do problema em um conjunto de componentes de software que seja o mais fiel na sua representação deste domínio.</span></p><p><strong><span>Programação Orientada a Objetos</span></strong><span> (também conhecida pela sua sigla POO) é um modelo de análise, projeto e programação de software baseado na composição e interação entre diversas unidades chamadas de ‘objetos’. A POO é um dos 4 principais paradigmas de programação (as outras são programação imperativa, funcional e lógica). Os objetos são operados com o conceito de ‘this’ (isso) ou ‘self’ (si), de forma que seus métodos (muitas vezes) modifiquem os dados da própria instância. Os programas são arquitetados através de objetos que interagem entre si. Dentre as várias abordagens da POO, as baseadas em classes são as mais comuns: objetos são instâncias de classes, o que em geral também define o tipo do objeto. Cada classe determina o comportamento (definido nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos. A alternativa mais usual ao uso de classes é o uso de protótipos. Neste caso, objetos são cópias de outros objetos, não instâncias de classes. Javascript e Lua são exemplos de linguagens cuja POO é realizada por protótipos. A diferença prática mais evidente é que na POO baseada em protótipos apenas a herança simples é implementada pela cópia do objeto. Assim, na POO, implementa-se um conjunto de classes passíveis de serem instanciadas como objetos, e.g. Python e C++ (ou objetos protótipos que são copiados e alterados, e.g. JavaScript e VimL).</span></p><p><span>Em alguns contextos, o termo modelagem orientada ao objeto (MOO) é preferível ao termo POO. De fato, o paradigma “orientado ao objeto” tem origem nos estudos da cognição e influenciou a inteligência artificial e a linguística, dada a relevância para a abstração de conceitos do mundo real. A MOO é considerada a melhor estratégia para diminuir o “gap semântico” (o hiato entre o mundo real e a representação dele), e facilita a comunicação das partes interessadas no modelo ou software (e.g. o modelador e o usuário final) na medida em que conceitos, terminologia, símbolos, grafismo e estratégias, são, potencialmente, mais óbvios, intuitivos, naturais e exatos.</span></p><p><span>Muitas das linguagens de programação mais utilizadas atualmente (talvez a maioria) são multi-paradigma com suporte à POO. C++, C#, </span><a href="http://VB.NET" target="_blank" rel="noopener"><span>VB.NET</span></a><span>, Java, Object Pascal, Objective-C, Python, SuperCollider, Ruby e Smalltalk são exemplos de linguagens de programação orientadas a objetos. ActionScript, ColdFusion, Javascript, PHP (a partir da versão 4.0), Perl (a partir da versão 5), Visual Basic (a partir da versão 4), VimL (ou Vim script) são exemplos de linguagens de programação com suporte a orientação a objetos. Vivace é um exemplo de linguagem sem suporte à POO.</span></p><p><span>Os </span><strong><span>atributos e métodos</span></strong><span> podem ser referentes a uma classe (e todas as suas instâncias) ou a uma única instância. O vínculo dos atributos aos métodos, de forma a manter uma interface bem definida para operação sobre os dados, e a evitar corrupção dos dados, é chamado de encapsulamento. O encapsulamento foi responsável pelo conceito de ‘ocultamento de dados’, central para a POO. O encapsulamento pode ser realizado através de convenções (em Python, underscores demarcam métodos e atributos protegidos e privados), ou via recursos da linguagem (em Java ou C++, um método privado só é acessado pela própria classe). Encapsulamento incentiva o desacoplamento.</span></p><p><span>Quando um objeto contém outros objetos, diz-se que há composição de objetos. A composição de objetos é usada para representar uma relação ‘tem um’, usualmente uma meronímia. Já a herança (quase sempre suportada pelas linguagens que utilizam classes) apresenta relações ‘é um’ (i.e. ‘é um tipo de’), ou seja, relações de hiperonímia cujo resultado final é a árvore taxonômica. Na herança, tipicamente todos os atributos e métodos da classe pai/mãe estão também disponíveis na classe filha, embora seja comum que algumas características sejam substituídas. Assim, a herança permite reúso facilitado de características e muitas vezes reflete relações do mundo real de forma intuitiva. Ambas a ‘composição de objetos’ e a ‘herança’ constituem hierarquias entre as classes e objetos na POO.</span></p><h3 id="Linguagem-Java" data-id="Linguagem-Java"><a class="anchor hidden-xs" href="#Linguagem-Java" title="Linguagem-Java"><span class="octicon octicon-link"></span></a><span>Linguagem Java</span></h3><p><span>Java é a base de praticamente todos os tipos de aplicativos em rede, e é o padrão global para desenvolvimento e fornecimento de aplicativos para celular, jogos, conteúdo on-line e software corporativo. Com mais de 9 milhões de desenvolvedores em todo o mundo, o Java permite desenvolver e implantar aplicativos e serviços incríveis de maneira eficiente. Com ferramentas abrangentes, um ecossistema sólido e um desempenho eficiente, o Java oferece a portabilidade de aplicativos mesmo entre os ambientes computacionais mais diferentes.</span></p> <h3> Tipos de dados </h3> <p>No Java, existem algumas palavras reservadas para a representação dos tipos de dados básicos que precisam ser manipulados para a construção de programas. Estes tipos de dados são conhecidos como tipos primitivos.</p> <p>Pode-se dividir os tipos primitivos suportados pelo Java em função da natureza de seu conteúdo. Há quatro tipos primitivos para a representação de números inteiros, dois tipos primitivos para a representação de números fracionários, um tipo primitivo para representação de caracteres e um tipo primitivo para representação dos valores booleanos.</p> <p>Existem milhares de classes disponíveis na API do Java e todas são tipos de dados, porém uma classe pode armazenar diversos dados ao mesmo tempo em seus atributos, e realizar tarefas através de seus métodos. Um tipo primitivo por outro lado, só armazena um único dado e não contém quaisquer métodos para realizar tarefas.</p> <p>Já para representar textos o Java não possui um tipo primitivo, ele possui uma classe chamada String, que serve para esse propósito, essa classe pode ser usada de modo semelhante a um tipo primitivo e ainda conta com diversos métodos disponíveis nessa classe para realizar diversas operações com o dado armazenado.</p> <p>Também existem classes para representar cada um dos tipos primitivos. Sempre que for preciso realizar uma operação mais complexa com algum dado, você poderá armazená-la em um objeto da classe correspondente ao invés de utilizar um tipo primitivo. Assim, poderá fazer uso dos métodos disponíveis nessa classe para realizar diversas operações com o dado armazenado.</p> <p><strong>DADOS NUMÉRICOS</strong></p> ![](https://i.imgur.com/uKbxsCT.jpg) <p><strong>Para testar</strong></p> ```java= public class Numbers { public static void main(String[] args) { System.out.println("Tipos de dados em Java: \n" + "\nMenor Byte: " + Byte.MIN_VALUE + "\nMaior Byte: " + Byte.MAX_VALUE + "\nMenor Short Int: " + Short.MIN_VALUE + "\nMaior Short Int: " + Short.MAX_VALUE + "\nMenor Int: " + Integer.MIN_VALUE + "\nMaior Int: " + Integer.MAX_VALUE + "\nMenor Long: " + Long.MIN_VALUE + "\nMaior Long:" + Long.MAX_VALUE + "\nMenor Float: " + Float.MIN_VALUE + "\nMaior Float: " + Float.MAX_VALUE + "\nMenor Double: " + Double.MIN_VALUE + "\nMaior Double: " + Double.MAX_VALUE); } } ``` <p> Rodando o método main acima, temos: </p> ![](https://i.imgur.com/ojjL0Zx.jpg) <h3 id="Modificadores-de-acesso-do-Java" data-id="Modificadores-de-acesso-do-Java"><a class="anchor hidden-xs" href="#Modificadores-de-acesso-do-Java" title="Modificadores-de-acesso-do-Java"><span class="octicon octicon-link"></span></a><span>Modificadores de acesso do Java</span></h3><p><span>Em Java, podemos criar atributos ou métodos com os seguintes modificadores de acesso:</span></p><ul> <li><strong><span>public</span></strong><span> - Acesso total, qualquer classe tem acesso ao método (não indicado para usar em atributos de entidade).</span></li> <li><strong><span>protected</span></strong><span> - Acesso permitido por herança e por classes do mesmo pacote.</span></li> <li><strong><span>default / friendly</span></strong><span> - Acesso permitido somente a classes do mesmo pacote, este acesso é definido quando não declaramos nenhum modificador.</span></li> <li><strong><span>private</span></strong><span> - Acesso permitido somente dentro da própria classe. (indicado para atributos de classes de entidade).</span></li> </ul><h2 id="Modelagem-de-dados-em-Java-com-UML" data-id="Modelagem-de-dados-em-Java-com-UML"><a class="anchor hidden-xs" href="#Modelagem-de-dados-em-Java-com-UML" title="Modelagem-de-dados-em-Java-com-UML"><span class="octicon octicon-link"></span></a><span>Modelagem de dados em Java com UML</span></h2><p><span>O Objetivo deste artigo é fornecer uma introdução à modelagem de Classes em Java utilizando diagramas UML. Neste exemplo iremos abordar o primeiro tipo de relacionamento aprendido em Orientação a Objetos: SER (É-UM) utilizado entre Classes e também entre Interfaces. Para tal iremos partir do principio, ou seja, o tipo mais “puro” de objeto Java, denominado JavaBean</span></p><h3 id="Classe-JavaBean" data-id="Classe-JavaBean"><a class="anchor hidden-xs" href="#Classe-JavaBean" title="Classe-JavaBean"><span class="octicon octicon-link"></span></a><span>Classe JavaBean</span></h3><p><span>Classe Java de Entidade (Modelagem)</span><br> <span>Características:</span></p><ul> <li><span>Atributos privados.</span></li> <li><span>Construtor default (vazio)</span></li> <li><span>Sobrecarga de Construtor (Entrada de dados)</span></li> <li><span>Encapsulamento</span></li> <li><span>Sobrescrita dos métodos de Object</span></li> <li><span>toString</span></li> <li><span>equals</span></li> <li><span>hashCode</span></li> <li><span>Serialização (Opcional)</span></li> </ul> ```java= package heranca; public class Cliente { private Integer idCliente; private String nome; public Cliente() { } public Cliente(Integer idCliente, String nome) { super(); this.idCliente = idCliente; this.nome = nome; } @Override public String toString() { return idCliente + ", " + nome; } public Integer getIdCliente() { return idCliente; } public void setIdCliente(Integer idCliente) { this.idCliente = idCliente; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } } ``` <p><img src="https://i.imgur.com/51Cp8C9.png" alt=""></p><p><span>Visibilidades:</span></p><ul> <li><span>-private Acesso somente dentro da Classe.</span></li> <li><span>~default Acesso somente por classes do mesmo pacote.</span></li> <li><span>#protected Acesso por pacote e por herança.</span></li> <li><span>+public Acesso total.</span></li> </ul> ```java= package heranca; public class PessoaFisica extends Cliente { private String cpf; public PessoaFisica() { } public PessoaFisica(Integer idCliente, String nome, String cpf) { super(idCliente, nome); this.cpf = cpf; } @Override public String toString() { return super.toString() + ", " + cpf; } public String getCpf() { return cpf; } public void setCpf(String cpf) { this.cpf = cpf; } } ``` <p><img src="https://i.imgur.com/vFeVUQI.png" alt=""></p><h3 id="Implementação-É-UM" data-id="Implementação-É-UM"><a class="anchor hidden-xs" href="#Implementação-É-UM" title="Implementação-É-UM"><span class="octicon octicon-link"></span></a><span>Implementação (É-UM)</span></h3><p><span>Componente de programação OO totalmente abstrato. Tem como caracteristicas: Padronização.</span></p><ul> <li><span>Interfaces Não possuem construtores.</span></li> <li><span>Seus atributos são final (constantes).</span></li> <li><span>Métodos são publicos e abstratos (não tem corpo).</span></li> <li><span>Quando uma classe implementa uma interface, ela é obrigada a fornecer corpo para os metodos da interface (desde que não seja uma classe abstrata).</span></li> </ul> ```java= package relacionamento; public interface IArquivo { void abrirArquivo(); void gravarArquivo(String conteudo); void fecharArquivo(); } ``` <p><span>Quando uma Classe não abstrata (comum) herda (implementa) uma interface, esta é obrigada a fornecer corpo para os metodos da interface. Por exemplo:</span></p> ```java= package relacionamento; public class Documento implements IArquivo { @Override public void abrirArquivo() { // TODO Auto-generated method stub } @Override public void gravarArquivo(String conteudo) { // TODO Auto-generated method stub } @Override public void fecharArquivo() { // TODO Auto-generated method stub } } ``` <p><img src="https://i.imgur.com/LAMlr6M.png" alt=""></p><p><span>UML, qualquer nome em itálico, representa algo abstrato ou interface. No próximo artigo iremos estudar o segundo tipo de relacionamento entre Classes denominado TER (Todo/Parte) e suas variações como Agregação, Composição, Dependência e suas Multiplicidades.</span></p> ```java= package entity2; public abstract class Automovel { private Integer idAutomovel; private String nome; public Automovel() { } public Automovel(Integer idAutomovel, String nome) { this.idAutomovel = idAutomovel; this.nome = nome; } @Override public String toString() { return idAutomovel + ", " + nome; } public Integer getIdAutomovel() { return idAutomovel; } public void setIdAutomovel(Integer idAutomovel) { this.idAutomovel = idAutomovel; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } // Métodos abstratos public abstract void setFabricante(String fabricante); public abstract String getFabricante(); } ``` <h3 id="Classes-comuns-herdando-da-Classe-Abstrata" data-id="Classes-comuns-herdando-da-Classe-Abstrata"><a class="anchor hidden-xs" href="#Classes-comuns-herdando-da-Classe-Abstrata" title="Classes-comuns-herdando-da-Classe-Abstrata"><span class="octicon octicon-link"></span></a><span>Classes comuns herdando da Classe Abstrata</span></h3> ```java= package entity2; public class CarroEsportivo extends Automovel { private Integer ano; private String fabricante; public CarroEsportivo() { } public CarroEsportivo(Integer idAutomovel, String nome, Integer ano, String fabricante) { super(idAutomovel, nome); this.ano = ano; this.fabricante = fabricante; } @Override public String toString() { return super.toString() + ", " + ano + ", " + fabricante; } public Integer getAno() { return ano; } public void setAno(Integer ano) { this.ano = ano; } @Override public String getFabricante() { return fabricante; } @Override public void setFabricante(String fabricante) { this.fabricante = fabricante; } } ``` <p><span></span></p> ```java= package entity2; public class CarroExecutivo extends Automovel { private String modelo; private String fabricante; public CarroExecutivo() { } public CarroExecutivo(Integer idAutomovel, String nome, String modelo, String fabricante) { super(idAutomovel, nome); this.modelo = modelo; this.fabricante = fabricante; } @Override public String toString() { return super.toString() + ", " + modelo + ", " + fabricante; } public String getModelo() { return modelo; } public void setModelo(String modelo) { this.modelo = modelo; } @Override public String getFabricante() { return fabricante; } @Override public void setFabricante(String fabricante) { this.fabricante = fabricante; } } ``` <p><span></span></p> <pre><code class="java hljs"><div class="wrapper"><div class="gutter linenumber"><span data-linenumber="1"></span> <span data-linenumber="2"></span> <span data-linenumber="3"></span> <span data-linenumber="4"></span> <span data-linenumber="5"></span> <span data-linenumber="6"></span> <span data-linenumber="7"></span> <span data-linenumber="8"></span> <span data-linenumber="9"></span> <span data-linenumber="10"></span> <span data-linenumber="11"></span> <span data-linenumber="12"></span> <span data-linenumber="13"></span> <span data-linenumber="14"></span> <span data-linenumber="15"></span> <span data-linenumber="16"></span> <span data-linenumber="17"></span></div><div class="code"><span class="token keyword">package</span> main<span class="token punctuation">;</span> <span class="token keyword">import</span> entity2<span class="token punctuation">.</span>Automovel<span class="token punctuation">;</span> <span class="token keyword">import</span> entity2<span class="token punctuation">.</span>CarroEsportivo<span class="token punctuation">;</span> <span class="token keyword">import</span> entity2<span class="token punctuation">.</span>CarroExecutivo<span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Main</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span> Automovel a1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">CarroEsportivo</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">"Ferrari"</span><span class="token punctuation">,</span> <span class="token number">2012</span><span class="token punctuation">,</span> <span class="token string">"Ferrari Italia"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Automovel a2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">CarroExecutivo</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">"C4"</span><span class="token punctuation">,</span> <span class="token string">"Sedan"</span><span class="token punctuation">,</span> <span class="token string">"Citroen"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>a1<span class="token punctuation">)</span><span class="token punctuation">;</span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>a2<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </div></div></code></pre><blockquote style="border-left-color: rgb(144, 123, 247);"> <p><span>No exemplo acima podemos dizer que CarroEsportivo É Automovel e CarroExecutivo É Automovel, portanto, a herança da Classe abstrata configura o uso de Polimorfismo. Note que Transformamos o objeto Automovel em CarroEsportivo e CarroExecutivo </span><span class="color" data-color="#907bf7"></span></p> </blockquote><h2 id="O-que-é-uma-classe" data-id="O-que-é-uma-classe"><a class="anchor hidden-xs" href="#O-que-é-uma-classe" title="O-que-é-uma-classe"><span class="octicon octicon-link"></span></a><span>O que é uma classe</span></h2><p><img src="https://i.imgur.com/6R2QNeN.png" alt=""></p><p><span>Uma classe define estado e comportamento de um Objeto geralmente implementando métodos e atributos (nomes utilizados na maioria das linguagens modernas). Os atributos, também chamados de campos (do inglês fields), indicam as possíveis informações armazenadas por um objeto de uma classe, representando o estado de cada objeto. Os métodos são procedimentos que formam os comportamentos e serviços oferecidos por objetos de uma classe.</span></p><p><span>Uma classe é uma estrutura que abstrai um conjunto de objetos com características similares. Uma classe define o comportamento de seus objetos - através de métodos - e os estados possíveis destes objetos - através de atributos. Em outras palavras, uma classe descreve os serviços oferecidos por seus objetos e quais informações eles podem armazenar. Classes não são diretamente suportadas em todas as linguagens, e são necessárias para que uma linguagem seja orientada a objetos. Uma classe representa um conjunto de objetos com características afins. Uma classe define o comportamento dos objetos através de seus métodos, e quais estados ele é capaz de manter através de seus atributos.</span></p><h2 id="Classe-Java-Beans" data-id="Classe-Java-Beans"><a class="anchor hidden-xs" href="#Classe-Java-Beans" title="Classe-Java-Beans"><span class="octicon octicon-link"></span></a><span>Classe Java Beans</span></h2><p><span>JavaBeans são componentes de software escritos na linguagem de programação Java. Segundo a especificação da Sun Microsystems os JavaBeans são “componentes reutilizáveis de software que podem ser manipulados visualmente com a ajuda de uma ferramenta de desenvolvimento”.</span></p><p><span>Um bean também pode ser definido como uma classe Java que expõe propriedades, seguindo uma convenção de nomeclatura simples para os métodos getter e setter.</span></p><p><span>Praticamente são classes escritas de acordo com uma convenção em particular. São usados para encapsular muitos objetos em um único objeto (o bean), assim eles podem ser transmitidos como um único objeto em vez de vários objetos individuais.</span></p><p><span>São características de uma Classe JavaBean:</span></p><ul> <li><span>Atributos privados</span></li> <li><span>Construtores</span> <ul> <li><span>Vazio (sem argumentos)</span></li> <li><span>Com entrada de argumetos (Sobrecarga)</span></li> </ul> </li> <li><span>Métodos set e get (encapsulamento)</span></li> <li><span>Sobrescrita dos métodos da Classe Object</span> <ul> <li><span>toString</span></li> <li><span>equals</span></li> <li><span>hashCode</span></li> </ul> </li> </ul><h2 id="Objeto" data-id="Objeto"><a class="anchor hidden-xs" href="#Objeto" title="Objeto"><span class="octicon octicon-link"></span></a><span>Objeto</span></h2><p><span>É uma instância de uma Classe. Armazenamento de estados através de seus atributos e reação a mensagens enviadas por outros objetos.</span></p><table> <thead> <tr> <th></th> <th></th> <th></th> </tr> </thead> <tbody> <tr> <td><span>Cliente</span></td> <td><span>c1 =</span></td> <td><span>new Cliente();</span></td> </tr> <tr> <td><span>[Classe]</span></td> <td><span>[Objeto]</span></td> <td><span>[Construtor </span><img class="emoji" alt=":arrow_right:" src="https://cdn.jsdelivr.net/npm/@hackmd/emojify.js@2.1.0/dist/images/basic/arrow_right.png"><span> Instância]</span></td> </tr> </tbody> </table><p><span>Um objeto, na vida real, é qualquer coisa a qual pudermos dar um nome. Um objeto, em programação orientada a objetos, é uma instância (ou seja, um exemplar) de uma classe. A Wikilivros é um exemplo de Wiki, ou, a Wikilivros é uma instância de Wiki. Isto poderia ser representado em um programa orientado a objetos com uma classe chamada Wiki e um objeto do tipo Wiki chamado Wikilivros. Um objeto é capaz de armazenar estados através de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos. </span><strong><span>Atributos</span></strong><span> são características de um objeto. Basicamente a estrutura de dados que vai representar a classe. Exemplos: um objeto da classe “Funcionário” teria como atributos “nome”, “endereço”, “telefone”, “CPF”, etc. O conjunto de valores dos atributos de um determinado objeto é chamado de estado.</span></p><h2 id="Padrão-MVC---Model-View-e-Controller" data-id="Padrão-MVC---Model-View-e-Controller"><a class="anchor hidden-xs" href="#Padrão-MVC---Model-View-e-Controller" title="Padrão-MVC---Model-View-e-Controller"><span class="octicon octicon-link"></span></a><span>Padrão MVC - Model, View e Controller</span></h2><p><img src="https://i.imgur.com/UG7iiwt.png" alt=""></p><p><span>Esse padrão tem a finalidade de dividir o projeto em três camadas:</span><br> <span>1- Camada Modelo: A camada Modelo tem as classes de dados que define o domínio da aplicação, por exemplo, classe aluno, professor, turma se sua aplicação for de controle de turma.</span><br> <span>2- Camada View: A camada View corresponde a qualquer entrada de dados da aplicação, por exemplo, leitura de dados pelo console, paginas jsp, xhtml entre outras.</span><br> <span>3- Camada Control: A camada control corresponde à regra de negocio da aplicação e centralizando as informações vindas da camada view, passando para camada de modelo e voltando para camada de view.</span></p><p><strong><span>Camada Model</span></strong></p> ```java= package modelo; public class Pessoa { private Integer idPessoa; private String nome; private Integer idade; public Pessoa() { } public Pessoa(Integer idPessoa, String nome, Integer idade) { super(); this.idPessoa = idPessoa; this.nome = nome; this.idade = idade; } @Override public String toString() { return "Pessoa [idPessoa=" + idPessoa + ", nome=" + nome + ", idade=" + idade + "]"; } public Integer getIdPessoa() { return idPessoa; } public void setIdPessoa(Integer idPessoa) { this.idPessoa = idPessoa; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public Integer getIdade() { return idade; } public void setIdade(Integer idade) { this.idade = idade; } } ``` <p><strong><span>Camada Controle</span></strong></p> ```java= package controle; import java.util.regex.Matcher; import java.util.regex.Pattern; import modelo.Pessoa; public class ValidaPessoa { public void validaCodigo(Pessoa p)throws Exception{ if (p.getIdPessoa()<=0){ throw new Exception ("Codigo Menor ou igual a zero invalido ..."); } } public void validaIdade(Pessoa p)throws Exception{ if (p.getIdade()<18){ throw new Exception ("So pode ser cadastrado maior de idade"); } } public void validaNome(Pessoa p)throws Exception{ Pattern pa = Pattern.compile("[A-Z a-z]{3,35}"); Matcher ma = pa.matcher(p.getNome()); if (! ma.matches()){ throw new Exception ("Nome somente com Letras faixa (3,35)"); }//se for falso lança o erro } } ``` <p><strong><span>Camada View</span></strong></p> ```java= package view; import java.util.Scanner; public class InputPessoa { public Integer lerCodigo() { try { System.out.println("Digite o Codigo :"); Scanner in = new Scanner(System.in); return in.nextInt(); } catch (Exception ex) { System.out.println("Digite numero inteiro ..."); return lerCodigo(); } } public Integer lerIdade() { try { System.out.println("Digite a Idade :"); Scanner in = new Scanner(System.in); return in.nextInt(); } catch (Exception ex) { System.out.println("Digite idade inteira ..."); return lerIdade(); } } public String lerNome() { System.out.println("Digite o Nome :"); Scanner in = new Scanner(System.in); return in.nextLine(); } } ``` <p><span>Execução do Programa no Main</span></p> ```java= package main; import modelo.Pessoa; import view.InputPessoa; import controle.ValidaPessoa; public class Main { public static void main(String[] args) { Pessoa p = new Pessoa(); InputPessoa ip = new InputPessoa(); ValidaPessoa vp = new ValidaPessoa(); try{ p.setIdPessoa(ip.lerCodigo()); p.setNome(ip.lerNome()); p.setIdade(ip.lerIdade()); vp.validaCodigo(p); vp.validaNome(p); vp.validaIdade(p); System.out.println("Dados" + p); }catch(Exception ex){ System.out.println("Error" + ex.getMessage()); } } } ``` <h2 id="Encapsulamento" data-id="Encapsulamento"><a class="anchor hidden-xs" href="#Encapsulamento" title="Encapsulamento"><span class="octicon octicon-link"></span></a><span>Encapsulamento</span></h2><p><img src="https://i.imgur.com/WUWlyyN.png" alt=""></p><p><span>Em linguagens orientadas a objetos, é possível encapsular o estado de um objeto. Em termos práticos, isso se realiza limitando o acesso a atributos de uma classe exclusivamente através de seus métodos. Para isso, as linguagens orientadas a objeto oferecem limitadores de acesso para cada membro de uma classe.</span></p><p><span>Tipicamente os limitadores de acesso são:</span></p><ul> <li><strong><span>público (public)</span></strong><span> - o membro pode ser acessado por qualquer classe. Os membros públicos de uma classe definem sua interface</span></li> <li><strong><span>protegido (protected)</span></strong><span> - o membro pode ser acessado apenas pela própria classe e suas sub-classes</span></li> <li><strong><span>privado (private)</span></strong><span> - o membro pode ser acessado apenas pela própria classe</span></li> </ul><p><span>Cada linguagem de programação pode possuir limitadores de acesso próprios. Por exemplo, em Java, o nível de acesso padrão de um membro permite que qualquer classe de seu pacote (package) possa ser acessado. Em C♯, o limitador de acesso interno (internal) permite que o membro seja acessado por qualquer classe do Assembly (isto é, da biblioteca ou executável).</span></p><p><span>É um conceito da orientação a objetos que significa como pode ser feito a entrada e saída de dados de uma classe. Na Linguagem existem duas formas para isso. A primeira seria pelos métodos gets ( Saída de Dados ) e sets ( Entrada de Dados ) e a outra seria pelo construtor cheio ( Entrada de Dados ) e o toString ( Saída de Dados ). E os atributos da classe sendo private.</span></p><p><img src="https://i.imgur.com/zDGQ8mK.png" alt=""></p> ```java= package entity; public class Aluno { private Integer idAluno; private String nomeAluno; private Double nota1; private Double nota2; public Aluno() { } public Aluno(Integer idAluno, String nomeAluno, Double nota1, Double nota2) { super(); this.idAluno = idAluno; this.nomeAluno = nomeAluno; this.nota1 = nota1; this.nota2 = nota2; } @Override public String toString() { return "Aluno [idAluno=" + idAluno + ", nomeAluno=" + nomeAluno + ", nota1=" + nota1 + ", nota2=" + nota2 + "]"; } public Integer getIdAluno() { return idAluno; } public void setIdAluno(Integer idAluno) { this.idAluno = idAluno; } public String getNomeAluno() { return nomeAluno; } public void setNomeAluno(String nomeAluno) { this.nomeAluno = nomeAluno; } public Double getNota1() { return nota1; } public void setNota1(Double nota1) { this.nota1 = nota1; } public Double getNota2() { return nota2; } public void setNota2(Double nota2) { this.nota2 = nota2; } } ``` <p><span></span></p> ```java= package main; import entity.Aluno; public class Main { public static void main(String[] args) { //O encapsulamento utilizando set e get Aluno a1 = new Aluno(); a1.setIdAluno(1); a1.setNomeAluno("luiz"); a1.setNota1(7.); a1.setNota2(8.); System.out.println ("Nome: " + a1.getNomeAluno() + "Nota1: " + a1.getNota1() + "Nota2: " + a1.getNota2() ); //------------------------------------------------ // O encapsulamento utilizando Construtor cheio e // toString ( representado pelo objeto ) Aluno a2 = new Aluno(2,"Joao",8.,6.); System.out.println("Dados: " + a2); } } ``` <br> <div class="alert alert-info"> <blockquote style="border-left-color: blue;"> <p><span class="color" data-color="blue"></span><span> </span><small><i class="fa fa-user"></i> E.B. Cursos https://www.cursoseb.com.br/</small><br> <span class="color" data-color="blue"></span><span> </span><small><i class="fa fa-user"></i> E.B. Cursos EAD https://edsonbelemtreinamento.com.br/ead/</small></p> </blockquote> </div>