SchultzGames
Para tirar dúvidas, crie um tópico especifico na área "Dúvidas em Geral" e aguarde ser respondido. Evite comentar em tópicos não relacionados a sua dúvida :D
TÓPICOS RECENTES:
Tópico:
Postado em:
Postado por:
[TUTORIAL] AI Enemy 2.0 + animações ( Jogos de terror )
Material/Textura Madeira 4K
[DICA RÁPIDA] Verificar se existe conexão com a Internet
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
[RESOLVIDO] Problema com Dropdown ao alterar resolução
Criar Animações (Vídeo) com Unity
animator duvidas
Raycast ponto a ponto
Rodas de tanque
como salvar rotaçao uma vez
Criação do menu - Opiniões
[JOGO] Mega BombermOn - Pokémon + Bomberman
[RESOLVIDO] problemas com rigidbody
MySql Unity(2018.2.14F1)
Aparecer uma caixinha em algum tempo do jogo.
keystore Android
Formação de equipe (projeto já em andamento)
Unity Network, isServer, IsLocalPlayer..
Como executar uma animação atraves de um botão?
[TUTORIAL] Sistema de Oficina de Carros
[TUTORIAL] Unity 5 - Botão contínuo usando UI (Manter pressionado)
[PEDIDO] Script de Atirar
[TUTORIAL] Controle 3ª pessoa com animações mecânicas (root motion)
[RESOLVIDO] Erro de Prefab quando realiza o Build de um projeto 3D
[____ADMINISTRAÇÃO____] Alterações IMPORTANTES no fórum.
Renderizar apenas algumas partes do mapa.
[RESOLVIDO] Água à noite?
[___COMO UTILIZAR O FÓRUM___] Principais botões e suas funções
[____APOIE O FÓRUM E O CANAL E GANHE RECOMPENSAS____]
[PACOTE 2D GRATUITO] Pacote com 17 sprites de alta qualidade para baixar!
eixos X e Z nao rotaciona junto com o play
Erro na unity
Drop Shadows
Senha jogo schultz
Como fazer um sistema para conectar objetos?
Help!!! Criarção de Shader.
Projeto Estilo DD Tank
Duvidas com ADS
[TUTORIAL] Unity 5 - Sistema básico de jogo estilo ANGRY BIRDS
problema com giro na realidade aumentada
Sistema stealth
FreezeRotation e FreezePosition RigidBody Unity
[RESOLVIDO] Instanciar randômicamente prefab acima do terreno. Unity.
Gravidade para objetos selecionados
Procura-se Modelador para Mapas
Mudar ícone do jogo pelo script
[TUTORIAL] Plants VS Zombies na Unity!
A possibilidade de importar uma Biblioteca (dll) numa classe (MonoBehavior) da Unity?
IAP e ADS: plugins obsoletos
[Em Desenvolvimento] Battles of Worlds
[RESOLVIDO] Linkar Script do inimigo quando o player entrar no collider dele
Ajuda sobre script para abir e fechar porta malas
site pra modelos 3d de armas
[RESOLVIDO] alguem que saiba fazer um jogo de fps pode ajuda?
Compilação do Game
[TUTORIAL] Escolher a quantos FPS (fixos) o seu jogo deverá rodar.
Snake Game - JavaScript + SVG
(Dúvida) Como acessar o sensor de movimento do Android?
[TUTORIAL] Gerenciamento de idiomas para o jogo ou app
[RESOLVIDO] Menu de um jogo com vários mapas
[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01
USSecurity
Sawed off (Modelo 3D)
Direito autoral
Contar objetos clones
Dividir uma mesh em dois.
Procura se level designer ou diretor de arte ( REMUNERADO )
[TUTORIAL] Sistema COMPLETO de câmeras
[RESOLVIDO] Animaçao só funciona uma vez
[RESOLVIDO] Eu não consigo abrir o monodevelop
Novo Asset Sistema de Portas e Chaves
[TUTORIAL] Inteligência artificial, inimigo e AIPoints
[RESOLVIDO] Como fazer a animação executar so uma vez
Meu personagem na Realidade Aumentada fica tremendo
Carregar arquivos da biblioteca
Jogo de Tabuada
ik nao funciona
DUVIDA EM SCRIPT
Cores nos materiais sem criar material
[Projeto] Line Battle
[TUTORIAL] Controle de personagem em primeira pessoa + pulo para android!
SkyBox Com qualidade Horrivel!
[RESOLVIDO] Bug/Erro da unity?
(ARQUIVO) Leia aqui como obter sucesso com seu jogo independente?
erro unity para android
MENU DE SELEÇÃO DE FASES
[PROJETO CONCLUÍDO] Defeat the Illuminatis
sombras para jogos mobile
Corcle (Mobile) - Um jogo simples com um nome estranho.
[TUTORIAL] Jogo da forca em C#
[RESOLVIDO] Dúvida com relação à "Escopo" e "Namespace" entre pastas na Unity
Problema ao rotacionar valores negativos.
Importe objeto do blender
Monodevelop
Equipe RedSkyGames Studio
Blender ao juntar algumas partes ficam mais escuro
new Vector3 (o que ele ta fazendo de errado??)(iniciante)
[TUTORIAL] Sistema de Controlador De Primeira Pessoa Com Som De Passos Aleatorios
[TUTORIAL] AI Enemy ( Jogos de terror )
Hoje à(s) 4:44 pm
Hoje à(s) 9:51 am
Ontem à(s) 9:50 pm
Ontem à(s) 11:45 am
Qui Dez 13, 2018 6:19 pm
Qui Dez 13, 2018 5:07 pm
Qua Dez 12, 2018 9:25 pm
Qua Dez 12, 2018 3:52 pm
Qua Dez 12, 2018 2:58 pm
Qua Dez 12, 2018 2:41 pm
Qua Dez 12, 2018 12:57 pm
Qua Dez 12, 2018 10:33 am
Qua Dez 12, 2018 7:51 am
Ter Dez 11, 2018 7:56 pm
Ter Dez 11, 2018 7:24 pm
Ter Dez 11, 2018 1:40 am
Dom Dez 09, 2018 8:02 pm
Dom Dez 09, 2018 6:31 pm
Dom Dez 09, 2018 6:19 pm
Sab Dez 08, 2018 11:28 pm
Sab Dez 08, 2018 9:42 pm
Sab Dez 08, 2018 3:20 pm
Sex Dez 07, 2018 6:04 pm
Sex Dez 07, 2018 12:11 pm
Sex Dez 07, 2018 5:03 am
Qui Dez 06, 2018 11:02 pm
Qui Dez 06, 2018 8:17 pm
Qui Dez 06, 2018 6:30 pm
Qui Dez 06, 2018 6:30 pm
Qui Dez 06, 2018 6:26 pm
Qui Dez 06, 2018 5:59 pm
Qui Dez 06, 2018 1:28 pm
Qua Dez 05, 2018 8:53 pm
Qua Dez 05, 2018 11:31 am
Ter Dez 04, 2018 6:57 pm
Ter Dez 04, 2018 3:24 pm
Ter Dez 04, 2018 1:37 pm
Ter Dez 04, 2018 8:02 am
Ter Dez 04, 2018 7:50 am
Ter Dez 04, 2018 4:10 am
Ter Dez 04, 2018 3:57 am
Ter Dez 04, 2018 3:39 am
Seg Dez 03, 2018 10:45 pm
Seg Dez 03, 2018 8:47 pm
Seg Dez 03, 2018 12:11 pm
Seg Dez 03, 2018 12:08 pm
Seg Dez 03, 2018 9:09 am
Seg Dez 03, 2018 9:00 am
Seg Dez 03, 2018 5:12 am
Dom Dez 02, 2018 11:32 pm
Dom Dez 02, 2018 11:29 am
Dom Dez 02, 2018 1:51 am
Dom Dez 02, 2018 12:42 am
Sab Dez 01, 2018 9:24 pm
Sab Dez 01, 2018 9:11 pm
Sab Dez 01, 2018 1:37 pm
Sab Dez 01, 2018 1:22 pm
Sex Nov 30, 2018 4:10 pm
Sex Nov 30, 2018 10:28 am
Qui Nov 29, 2018 2:02 am
Qui Nov 29, 2018 1:11 am
Qui Nov 29, 2018 1:08 am
Qua Nov 28, 2018 3:03 pm
Qua Nov 28, 2018 3:00 pm
Qua Nov 28, 2018 1:29 pm
Qua Nov 28, 2018 4:09 am
Qua Nov 28, 2018 3:03 am
Ter Nov 27, 2018 8:49 pm
Ter Nov 27, 2018 5:50 pm
Ter Nov 27, 2018 1:46 pm
Seg Nov 26, 2018 8:29 pm
Seg Nov 26, 2018 2:56 pm
Seg Nov 26, 2018 2:55 pm
Seg Nov 26, 2018 9:33 am
Seg Nov 26, 2018 9:28 am
Dom Nov 25, 2018 11:06 pm
Dom Nov 25, 2018 9:21 am
Dom Nov 25, 2018 5:04 am
Sab Nov 24, 2018 8:41 pm
Sab Nov 24, 2018 4:52 pm
Sab Nov 24, 2018 4:03 pm
Sab Nov 24, 2018 2:33 pm
Sab Nov 24, 2018 8:49 am
Sab Nov 24, 2018 6:54 am
Sex Nov 23, 2018 4:28 pm
Sex Nov 23, 2018 1:58 pm
Sex Nov 23, 2018 1:29 pm
Sex Nov 23, 2018 12:49 pm
Sex Nov 23, 2018 12:42 pm
Qui Nov 22, 2018 7:21 pm
Qui Nov 22, 2018 12:59 pm
Qui Nov 22, 2018 10:53 am
Qui Nov 22, 2018 10:33 am
Qua Nov 21, 2018 7:41 pm
Qua Nov 21, 2018 11:09 am
Qua Nov 21, 2018 7:30 am
Ter Nov 20, 2018 10:58 pm
Ter Nov 20, 2018 4:07 pm
Ter Nov 20, 2018 2:37 pm
francisco barroso
dstaroski
DuViDoSo
dstaroski
DarthMalak
JohnRambo
NKKF
NKKF
NKKF
dstaroski
gilgsjr
guimaraf
Carlos Andre
gilgsjr
SuperGamer
natanael.olimpio
BRGC
Callyde Jr
luis45
Jp.Game
ueslei16
gcs
dstaroski
McbDJ
MarcosSchultz
Isabela
gilgsjr
dstaroski
dstaroski
dstaroski
francisco barroso
yVIEIRA
NKKF
francisco barroso
henriquegames501
gilgsjr
Manawydan
Zack2
yanayana
MarcosSchultz
MarcosSchultz
MarcosSchultz
Emerson Rebouças
lesgoy
Opiz
NKKF
Tegh
Tegh
Zack2
Dom3000
Luizdanhp
ffabim
gutozardy
diegopds
gilgsjr
Joab Artes Gráficas
SuperGamer
glauco
dstaroski
Valdir dos Santos
igorobm
igorobm
TioUV
TioUV
dstaroski
conceptfac
rZwr
Erivan
francisco barroso
tonCosta3939
Simplizãum S
ninjagamergabriel
Hube
natanael.olimpio
natanael.olimpio
MarcosSchultz
diegopds
KAYKETHEO27
NKKF
MRX
tonCosta3939
Joab Artes Gráficas
Zack2
Joab Artes Gráficas
francisco barroso
Callyde Jr
dstaroski
Joab Artes Gráficas
Joab Artes Gráficas
clroberto2005
Insurgente
diegopds
diegopds
Tegh
Samuelostgamer
TioUV
NKKF
Simplizãum S
ArysonSantos

[AULA] Encapsulamento

Ir em baixo

TUTORIAL [AULA] Encapsulamento

Mensagem por MayLeone em Qui Set 27, 2018 5:59 pm


O que é?
O encapsulamento em programação é conhecido como um dos pilares da programação orientada a objetos, do ato de encapsular, ou seja, proteger ou esconder algo.
Este conceito está muito ligado com relação à implementação de membros de classes, onde por vezes, se faz necessário a 'proteção' de algum atributo da mesma, ou simplesmente o desejo de querer esconder detalhes de implementação.
Com o encapsulamento, podemos restringir o acesso e a escrita dos atributos em classes, dando uma maior segurança e flexibilidade ao código.

Para ilustrar um exemplo de utilização do encapsulamento em C#, iremos criar uma classe pública chamada "Pessoa"e nela iremos definir três atributos quaisquer: nome, cpf e idade:




Perceba que para esta classe, o modificador de acesso dos atributos é público, e por isso, eu posso manipular livremente os mesmos externamente, através da classe padrão "Program":





Veja que da forma como está, podemos colocar valores à vontade no atributo (setar valores) e também podemos acessá-los (ler valores), através do Console.WriteLine, ou seja, esses atributos não estão encapsulados e possivelmente poderão ser manipulados de forma incorreta, como por exemplo, colocar um valor negativo para a idade:




O código rodará sem problemas, pois o tipo da variável 'int' aceitará valores negativos, porém, sabemos que não há como alguém possuir uma idade negativa.
Esse acesso direto do atributo de uma classe pode se tornar um problema (como vimos acima), pois o seu acesso se encontra público.

Podemos tentar resolver este problema fazendo com que o modificador de acesso dos atributos se tornem privados, ou seja, apenas a própria classe poderá manipulá-los:



Isso resolveria o nosso problema em partes, visto que os atributos possuem apenas acesso interno, mas agora eles não serão reconhecidos externamente, acarretando erros:




Então devemos ter algo que seja o intermédio entre os atributos privados da classe, e o seu acesso externo.
Quem faz este trabalho são o que chamamos de métodos acessores:

Métodos acessores:
Os métodos acessores irão ser definidos na classe que possui os atributos que queremos ter acesso. Eles permitirão que possamos ler e escrever valores nos atributos privados da classe, sem que façamos tais procedimentos diretamente nos mesmos, criando assim, um maior controle no código.
Esses métodos devem ser públicos (para terem acesso externo) e consistem em devolver o valor de um atributo como retorno (get) ou permitir que coloquemos valores neles (set).
Vamos criar os métodos acessores dos atributos de nome e cpf:





Note que os métodos 'Get' possuem um valor de retorno que é igual ao tipo do atributo a ser acessado e não possui parâmetros, sua única função é retornar o valor do atributo. Já os metódos 'Set' não possuem retorno e o parâmetro é do mesmo tipo daquele atributo, sua função é fazer com que o mesmo receba o valor do parâmetro passado.

Observe que agora podemos ler e escrever valores mesmo os atributos sendo privados, porém estamos fazendo isto de forma segura e sem realmente manipulá-los diretamente, pois os métodos acessores que estão implementados dentro da classe fazem esta tarefa, já que para ler um valor ou escrever precisamos obrigatoriamente chamá-los:





Agora para implementarmos o atributo 'idade' podemos utilizar o método acessor 'Set' para restringir o valor negativo, dessa forma:




O que fizemos aqui através do acessor 'Set' é impedirmos que um valor negativo seja colocado para o atributo de idade, realizando uma simples condição: caso o parâmetro passado for um valor negativo,  'idade' irá receber zero, caso não, receberá o valor do parâmetro passado, dessa forma, impedimos que nosso atributo seja utilizado de forma incorreta, veja:



No output podemos perceber que a restrição está funcionando corretamente:





Então além de protegermos o atributo ainda podemos criar regras de implementações para ele, eis então as vantagens do encapsulamento.

Properties:
Em C# temos também a sintaxe das Properties (propriedades), ou seja, palavras reservadas para podermos encapsular nossos atributos sem precisar escrever métodos.
Essas palavras reservadas estão ligadas aos métodos acessores Get e Set, então para escrever uma propriedade, basta fazer o seguinte:




Para criar essa propriedade definimos a mesma como pública, com o mesmo tipo do atributo a ser acessado e com o nome semelhante, porém seguindo a notação Pascal Case que utilizamos para nomeação de métodos e classes. Dentro do escopo desta propriedade nós definimos os acessores Get e Set através das palavras reservadas, e então implementamos seus comportamentos: no Get apenas retornamos o valor do atributo desejado, enquanto no Set permitimos que algo seja escrito neste atributo.
A palavra reservada "value" pode funcionar como se fosse o parâmetro de um método, ou seja, o que foi inserido naquela propriedade através do acessor Set irá ser passado para 'value'.
*Implemente da mesma forma o atributo 'cpf'.

Podemos então implementar o atributo "idade" com aquela restrição que tínhamos visto anteriormente:





E agora através das propriedades podemos fazer acesso externo aos membros da classe, sem precisar especificar seus métodos acessores:





Auto Implemented Properties:
A partir da versão 3.0 do C# nós temos as propriedades auto implementadas, ou seja, um jeito mais compacto e menos trabalhoso de declarar as propriedades.
Para criar este tipo de propriedade, basta delimitar seu escopo às chaves {} e dentro delas apenas escrever as palavras reservadas "get" e "set", finalizando com ponto e vírgula, dessa forma:



Veja que como as propriedades "Nome" e "Cpf" não possuem nenhuma implementação específica, podemos defini-las com as propriedades auto implementadas diretamente, o que deixa o código menor e dá menos trabalho para escrever, já a propriedade "Idade" fica como estava antes pois ela recebe uma implementação específica.

Modificador de acesso nos acessors:
Por padrão, os acessores das propriedades são definidos como públicos (public) mas se você quiser restringir esse acesso, por exemplo, fazer com que determinada propriedade possa apenas ser lida e não escrita, basta fazer com que o modificador de parâmetro do "set" fique privado, impedido acesso externo, ou seja, essa propriedade apenas poderá ser lida externamente e não poderá ser setada:



Dessa forma, a propriedade "BonusSalarial" não poderá ter seu valor escrito (pois o set está private), mas poderá ser lida. Seu valor foi setado internamente através do construtor da classe.

Manipulando essa propriedade:



Final:
E aqui chega mais um final de aula! Espero que tenham gostado e até a próxima.
avatar
MayLeone
ProgramadorMaster

Feminino PONTOS : 652
REPUTAÇÃO : 198
Áreas de atuação : Unity, C++/C#, HTML, CSS, JS, jQuery, PHP, MySQL, XML, Blender
Respeito as regras :

Ver perfil do usuário http://compilemosfacil.blogspot.com.br

Voltar ao Topo Ir em baixo

TUTORIAL Re: [AULA] Encapsulamento

Mensagem por Callyde Jr em Sex Set 28, 2018 11:37 am

Muito boa aula Smiling Face.
Parabens abraços.
avatar
Callyde Jr
Programador

Masculino PONTOS : 2755
REPUTAÇÃO : 372
Idade : 39
Áreas de atuação : Iniciante em modelagem Blender,ScketSHUP
Progamador
Ideialista

Meu Canal
https://www.youtube.com/ch
Respeito as regras :

Ver perfil do usuário http://unnygames.000webhostapp.com/

Voltar ao Topo Ir em baixo

TUTORIAL Re: [AULA] Encapsulamento

Mensagem por Tegh em Sex Set 28, 2018 10:14 pm

Muito bem detalhada, gostei que você pega afundo os aspectos, eu sempre me contesto quando penso em usar private em algum código (as vezes penso em algo relenvante a termos de processamento), mas é minha cabeça mesmo. Foi uma ótima aula, até.
avatar
Tegh
MembroAvançado

Masculino PONTOS : 290
REPUTAÇÃO : 37
Idade : 17
Áreas de atuação : Desenvolvimento de Software com C#, aprendizado na Unity e formulação de Sprite no estilo PixelArt.
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [AULA] Encapsulamento

Mensagem por dstaroski em Sab Set 29, 2018 1:26 pm

Muito bom mesmo! parabéns ai!
avatar
dstaroski
Instrutor

Masculino PONTOS : 3879
REPUTAÇÃO : 1008
Idade : 29
Áreas de atuação : Téc. Hardware e Redes, Programação C#, Asp .NET, HTML, CSS, Unity 3D

Respeito as regras :

Ver perfil do usuário http://diegodeoliveira.gamejolt.io/defeattheilluminatis

Voltar ao Topo Ir em baixo

TUTORIAL Re: [AULA] Encapsulamento

Mensagem por Nalfam em Dom Set 30, 2018 10:46 am

Boa! Mto obrigado!
avatar
Nalfam
Membro
Membro

Masculino PONTOS : 223
REPUTAÇÃO : 22
Áreas de atuação : Unity
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum