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:
[____ADMINISTRAÇÃO____] Alterações IMPORTANTES no fórum.
Unity Remota 5, sem reação.
[PROJETO MOBILE] Defeat the Illuminatis
[TUTORIAL] Sistema de Oficina de Carros
Unity 2018 - Bug com a iluminação da Spotlight nos Objetos
[TUTORIAL] Menu Pause AVANÇADO (Unity 5.3 ou superior)
iniciar jogo com uma cena desativada e ativá-la ao colidir com bloco desativando as outras
Como Faz pra barra de vida aparecer de uma cena pra outra?
Problema com cenário infinito ou algum tipo de bug na Unity?
[TUTORIAL] Barra de VIDA / HP contínua
Salvar e carregar dados json player pref
Blander ao juntar algumas partes ficam mais escuro
Problema com Esqueleto do personagem
{Possível Projeto para Unity} Buscando membros para formar uma Equipe...
[TUTORIAL] Como spawnar inimigos [Tutorial simples]
Não consigo fazer o box collider descer junto com o personagem.
BUG UNITY 3D ROSA A SCENE E GAME
Sistema de Grau Realista - Jogo de Moto
(Dúvida) Encontrar o objeto mais próximo partindo do ponto inicial ao final.
Programação Unity android 2D
(UNITY) Erro ao compilar a Build Android
Erro na sincronização dos player no Photon
[TUTORIAL] Barra de vida usando a UI da Unity(Slider)
[Projeto] Line Battle
Procuro Equipe Para Criação de Jogo [PAGO]
[TUTORIAL] Desbloqueio e Escolha de Personagens.
[RESOLVIDO] Problema com o navmesh agent
[RESOLVIDO] Registro cadrastando uma vez?
Vaga de modelador 3D, com remuneração...
Problemas com Colisores
[____ENQUETE____] Eleições para presidente 2018 (2º turno)
Como criar Atlas de textura com modelos exportados do Sketchup?
Unity - Sistema de Pagamento
[RESOLVIDO] iniciar áudio ao passar por uma área da cena
[RESOLVIDO] como envia asset para asset store
[TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
codigo não deleta prefab e não respeita o if
[TUTORIAL] Filtros de áudio para AudioListner (Low pass filter, High pass filter, etc)
[____CICLO DE TRABALHO DA UNITY____]
Meu jogo não está abrindo em outro PC
[TUTORIAL] DANO POR QUEDA e BARRA DE VIDA CONTÍNUA no mesmo script
[TUTORIAL] Sistema de vida,morte,dano
Discord para desenvolvimento de jogos
FAB in WWII (Novo jogo na Play Storee é Free :D)
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
[TUTORIAL] Sistema de PORTAS e CHAVES
Criar uma Array ou List com as resoluções suportadas
Alguem traz esse tutorial pro forum?
Realistic fps prefab tenho esses erros ao tentar colocar um script de entrar sair do carro
[RESOLVIDO] Alguem pode me ajudar? tenho esse erro aqui em um script
[RESOLVIDO] Personagem 2d batendo na borda e voando.
[RESOLVIDO] Não consigo usar o Sphere collider.
[RESOLVIDO] Como usa o UI.Text do unity?
Como criar botão de nova tentativa
[RESOLVIDO] Duvida em Jogo de tiro 2D
[RESOLVIDO] duvida com PlayerPrefs
Iniciar animação em determinado frame
Sistema De Troca De Armas 2D
[TUTORIAL] Script de arma completo! [FREE]
[TUTORIAL] Ordenar valores de uma array[] em ordem CRESCENTE OU DECRESCENTE
Meu jogo de runner em primeira pessoa !
[RESOLVIDO] Timer pra mudar de cena na unity 2018
Atualizar Build
[TUTORIAL] 42 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)
Como usar Vector3.Angles para detectar que algo está na frente de outro objeto?
[TUTORIAL] Como fazer porta malas do carro abrir atravez de um botão?
Script nao funciona
Como desativar scripts em objetos distantes
[RESOLVIDO] Bug Da Unity ?
[AULA] HTML - Aula 1: Introdução
Raycast
[TUTORIAL]"Morte" do personagem (Unity 5.3 ou Superior)
Problema com a unity ads
como eu faço para a camera orbitar um objeto atraves de um joystick?????
XML, suporte e utilização.
Arrastar objetos em plano 2D (ArrastarT).
[TUTORIAL] Sistema de fome, sede, barra de vida, barra de estamina, itens e dano por queda
Participe da Game Jam - Jaaj do canal Amdré Young!
Criar sistema de arrastar e soltar objetos em determinado lugar
AWM Champions I
[RESOLVIDO] Como verificar se o objeto é diferente de null
COMO FAÇO PARA FAZER UM SISTEMA DE SKIN PARA ANDROID ESTILO HEAVY BUS, PROTON BUS, ETC
[TUTORIAL] Snake com Unity + C#
Sobre Som (Ouvir som do sistema , duas caixas de som ... )
Configurar NPCs
[RESOLVIDO] Script Carta
[TUTORIAL] Texto Legenda Character Por Character Para Uso Básico
Ajuda com script movimento por Grid Tile no Navmesh
[Devlog] Lost in the world 05/10
[___COMO UTILIZAR O FÓRUM___] Principais botões e suas funções
inimigo nao persegue player
[RESOLVIDO] Build setting não entra
[RESOLVIDO] Player Sair Da animaçao
[RESOLVIDO] Erro colider
Dúvida sobre Resolução
[____APOIE O FÓRUM E O CANAL E GANHE RECOMPENSAS____]
[____ENQUETE____] Eleições para presidente 2018
[Plugin dll] DigData basico save data Para Unity
Conquistas Steam? Adicionar
Ontem à(s) 11:22 pm
Ontem à(s) 10:47 pm
Ontem à(s) 7:17 pm
Ontem à(s) 7:09 pm
Ontem à(s) 4:52 pm
Ontem à(s) 2:57 pm
Ontem à(s) 1:11 pm
Ontem à(s) 12:27 pm
Ontem à(s) 11:47 am
Ontem à(s) 10:36 am
Ontem à(s) 9:49 am
Qua Out 17, 2018 11:45 pm
Qua Out 17, 2018 11:17 pm
Qua Out 17, 2018 10:14 pm
Qua Out 17, 2018 9:49 pm
Qua Out 17, 2018 8:32 pm
Qua Out 17, 2018 5:18 pm
Qua Out 17, 2018 5:16 pm
Qua Out 17, 2018 5:13 pm
Qua Out 17, 2018 5:13 pm
Qua Out 17, 2018 5:10 pm
Qua Out 17, 2018 4:35 pm
Qua Out 17, 2018 3:13 pm
Qua Out 17, 2018 7:28 am
Ter Out 16, 2018 9:56 pm
Ter Out 16, 2018 3:34 pm
Ter Out 16, 2018 12:41 pm
Ter Out 16, 2018 11:48 am
Seg Out 15, 2018 5:34 pm
Seg Out 15, 2018 5:03 pm
Seg Out 15, 2018 2:46 pm
Seg Out 15, 2018 1:19 pm
Seg Out 15, 2018 12:56 pm
Seg Out 15, 2018 11:34 am
Seg Out 15, 2018 6:17 am
Seg Out 15, 2018 12:30 am
Seg Out 15, 2018 12:18 am
Dom Out 14, 2018 12:52 am
Sab Out 13, 2018 9:08 pm
Sab Out 13, 2018 5:24 pm
Sab Out 13, 2018 4:00 pm
Sex Out 12, 2018 10:42 pm
Sex Out 12, 2018 6:00 pm
Sex Out 12, 2018 2:56 pm
Sex Out 12, 2018 2:55 pm
Sex Out 12, 2018 2:42 pm
Qui Out 11, 2018 8:59 pm
Qui Out 11, 2018 8:32 pm
Qui Out 11, 2018 3:09 pm
Qui Out 11, 2018 2:32 pm
Qui Out 11, 2018 12:15 pm
Qui Out 11, 2018 11:35 am
Qui Out 11, 2018 10:50 am
Qui Out 11, 2018 8:24 am
Qua Out 10, 2018 11:31 pm
Qua Out 10, 2018 10:43 pm
Qua Out 10, 2018 8:22 pm
Qua Out 10, 2018 4:53 pm
Qua Out 10, 2018 4:44 pm
Qua Out 10, 2018 3:48 pm
Qua Out 10, 2018 12:40 pm
Ter Out 09, 2018 9:51 pm
Ter Out 09, 2018 8:16 pm
Ter Out 09, 2018 8:16 pm
Ter Out 09, 2018 8:10 pm
Ter Out 09, 2018 8:09 pm
Ter Out 09, 2018 7:38 pm
Ter Out 09, 2018 2:55 pm
Seg Out 08, 2018 6:13 pm
Seg Out 08, 2018 4:40 pm
Seg Out 08, 2018 2:39 pm
Seg Out 08, 2018 12:52 pm
Seg Out 08, 2018 12:16 pm
Seg Out 08, 2018 10:33 am
Dom Out 07, 2018 1:59 pm
Dom Out 07, 2018 11:53 am
Dom Out 07, 2018 10:53 am
Sab Out 06, 2018 11:14 pm
Sab Out 06, 2018 10:55 pm
Sab Out 06, 2018 8:50 pm
Sab Out 06, 2018 8:41 pm
Sab Out 06, 2018 2:21 pm
Sab Out 06, 2018 1:33 pm
Sab Out 06, 2018 2:04 am
Sex Out 05, 2018 8:22 pm
Sex Out 05, 2018 7:39 pm
Sex Out 05, 2018 6:35 pm
Sex Out 05, 2018 11:27 am
Sex Out 05, 2018 11:22 am
Sex Out 05, 2018 9:35 am
Sex Out 05, 2018 12:53 am
Qui Out 04, 2018 11:40 pm
Qui Out 04, 2018 10:43 pm
Qui Out 04, 2018 6:23 pm
Qui Out 04, 2018 3:36 pm
Qui Out 04, 2018 3:12 pm
Qui Out 04, 2018 3:11 pm
Qui Out 04, 2018 3:11 pm
Qui Out 04, 2018 3:07 pm
MarcosSchultz
hao3726
dstaroski
leandrospp7
CaerHunter
Mourao
Daniel Dória
Callyde Jr
FabioBRPA
francisco barroso
dstaroski
DominicDK
DominicDK
NoctisLucis
francisco barroso
MayLeone
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
francisco barroso
hao3726
dstaroski
dstaroski
MRX
ismarspn
Jmspp
Callyde Jr
igorobm
conceptfac
Dom3000
Isabela
Callyde Jr
Daniel Dória
diegopds
MarcosSchultz
igorobm
MarcosSchultz
MarcosSchultz
Flávio
francisco barroso
Callyde Jr
SuperGamer
SoullSec
SoullSec
SoullSec
Flávio
francisco barroso
Samuelostgamer
Samuelostgamer
gurgelg752
luansantos
guimaraf
theus.mors
TecnoGames
Eduardoro39
QueriaStarMorto
QueriaStarMorto
mecjo
NyanHeavyBR
CaioItz
RodriGO3477
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
FelipeSouza11
FelipeSouza11
QueriaStarMorto
Tegh
Jmspp
Callyde Jr
Jmspp
Gabryellx007
Tegh
Tegh
SuperGamer
Luizdanhp
MarcosSchultz
TioUV
QueriaStarMorto
KAYKETHEO27
NKKF
MarcosSchultz
Callyde Jr
francisco barroso
FelipeSouza11
Nowsfeky
Mateus2583
FelipeSouza11
Callyde Jr
Daniel Dória
marcosdanielnerydasilva
francisco barroso
NKKF
dstaroski
dstaroski
dstaroski
dstaroski

[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 : 484
REPUTAÇÃO : 151
Áreas de atuação : Unity, Rpg Maker, Scratch, C#, C++, HTML, CSS, JS, MySQL, 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 : 2677
REPUTAÇÃO : 363
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
Avançado
Avançado

Masculino PONTOS : 204
REPUTAÇÃO : 29
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 : 3703
REPUTAÇÃO : 958
Idade : 29
Áreas de atuação : Téc. Hardware e Redes, Programação C#.

Respeito as regras :

Ver perfil do usuário https://gamejolt.com/games/defeattheilluminatis/347786

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 : 161
REPUTAÇÃO : 21
Á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