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:
Criar jogo de terror
Arremessar uma granada(2D)
Cinemachine
personagem do unity sem animaçao e caindo pra baixo
PROBLEMA EM COPIAR SCRIPTS
Controle Objetos 3D
Ajuda com script C# (delay effect)
Script de health de inimigo sendo acessado mesmo sem acerta o inimigo
Preciso de ajuda em um script para o trabalho do meu estágio.
[Plugin dll] DigData basico save data Para Unity
[TUTORIAL] Como criar um JOGO DE TERROR
[TUTORIAL] Controle 3ª pessoa com animações mecânicas (root motion)
[Em Desenvolvimento] Battles of Worlds
Resolução Resposiva
Skybox da unity rosa
Custom Inspector
Dark blue sword RPG low poly
Atualizado (The Pyramid 1.1.1)
Problema com o Shader (Shader Bloqueado)
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
Como faço para o player agachar
Erro ao carregar cena salva
[RESOLVIDO] tem como mudar a cor desse fundo de distância azul?
[TUTORIAL] Otimização Simples por distância
Inventário de objetos 2D
video aula videoplayback easy ar /unity
como faz LookAt em 2d
Visual studio nao instala com compatibilidade com a unity :C
[JOGO MOBILE] The Sprinter Maze / Agradecimentos
Botao Home(Native do Android)
Carregar video por url remote settings
Montando equipe! [Game survival]
É recomendado fazer cidades fictícias no sketchup?
[TUTORIAL] AI Enemy 2.0 + animações ( Jogos de terror )
Sprite crescer em linha reta como um laser 2D
[___COMO UTILIZAR O FÓRUM___] Principais botões e suas funções
[____APOIE O FÓRUM E O CANAL E GANHE RECOMPENSAS____]
[____ENQUETE____] Eleições para presidente 2018
[RESOLVIDO] Problema para Carregar cena
[RESOLVIDO] Como exportar o modelo sem o seguinte prefab:
[RESOLVIDO] correr character controller
Problema com Wheel Collider
Ajuda na criação de AudioSource
Ambient Occlusion para mobile.
Erro ao instalar o componente da Unity no Visual Studio
[____SUGESTÕES PARA O FÓRUM____]
[PROJETO MOBILE] Defeat the Illuminatis
Camera Estilo Gta (Livre que Volta Sozinha)
O básico do script
[____ADERIR A UMA CATEGORIA NO FÓRUM____]
Precisa-se DE Modelador/Animador Para Um Jogo de RPG Online..
unity - erro ao salvar dados
Duvidas com Json
Artistas 3D e Programadores Unity3D (Remunerado)
[TUTORIAL] Como fazer um laser com LineRenderer - UNITY 5
[TUTORIAL ] Script para Cutscenes
The Pyramid Demo Atualizado
Problemas com Colisores
Como fazer a vida ficar encima do player enquanto ele se move
Camera olhar para player em planeta esférico (estilo Mario Galaxy)
[RESOLVIDO] Ativar um Unico Objeto da Array.
tela preta do unity apos abrir no celular..
Procuro desenvolvedor Google Maps
Destruir Terreno
[TUTORIAL] Inteligência artificial, inimigo e AIPoints
Erro de arquivo CSPROJ na Unity
[RESOLVIDO] Diminuir um número
[RESOLVIDO] String.contains
Command 888
[TUTORIAL] Mover personagem com Touch, no estilo SUBWAY SURFERS
Ajuda com código Raycast2D
[TUTORIAL] Bubble Sort - Algoritmo
touch do android em C# Unity
[TUTORIAL] Gerar números aleatórios SEM REPETIR (método com lista)
[TUTORIAL] Sistema de Lanterna com Pilhas
Dúvida, poupar processador.
Gerador de senha
(ARQUIVO) Leia aqui como obter sucesso com seu jogo independente?
Alguém pode corrigir as roupas do meu personagem? (Modelagem 3D - Pedido)
Dúvida em relação ao Enum
Para quem é fã de The King of Fighters!
Bora entrar no Discord.. Tirando Duvidas Online..
Bugando depois do Build.
[_ASSET_] MS Vehicle System (Vehicle Controller)
[RESOLVIDO] Mudança de GUI para UI?
Alguem pode me ajudar? tenho esse erro aqui em um script mas nao consigo resolver...:
Grupo de personagens
[Dúvida] Multiplayer Client Object Spawn
PLAYER NAO MOVER ENQUANTO ESTA ABAIXADO
Unity - Erro ao Acessar Classe de Objeto
Ajuda com sistema de flecha com mira pareada com a câmera
PAGO POR SERVIÇO, crianção de jogo android 2d online
Simulador de Controle de Tráfego Aéreo
[RESOLVIDO] Problema com Compilação para Android
Como otimizar minha criação de labirintos?
[RESOLVIDO] Unity - Soma Entre Strings
Força do pulo
java é seguro? Node.js: Server-side JavaScript é seguro?
Input de Player (Android)
Hoje à(s) 8:53 am
Hoje à(s) 7:54 am
Hoje à(s) 1:23 am
Hoje à(s) 1:21 am
Hoje à(s) 1:20 am
Ontem à(s) 11:00 pm
Ontem à(s) 5:42 pm
Ontem à(s) 3:40 pm
Ontem à(s) 2:26 pm
Ontem à(s) 1:58 pm
Ontem à(s) 11:41 am
Ontem à(s) 6:58 am
Ontem à(s) 12:11 am
Qui Set 20, 2018 8:26 pm
Qui Set 20, 2018 8:23 pm
Qui Set 20, 2018 8:15 pm
Qui Set 20, 2018 6:01 pm
Qui Set 20, 2018 12:53 pm
Qua Set 19, 2018 8:10 pm
Qua Set 19, 2018 7:43 pm
Qua Set 19, 2018 7:16 pm
Qua Set 19, 2018 7:11 pm
Qua Set 19, 2018 10:51 am
Qua Set 19, 2018 10:23 am
Qua Set 19, 2018 10:21 am
Qua Set 19, 2018 2:14 am
Qua Set 19, 2018 1:17 am
Ter Set 18, 2018 9:01 pm
Ter Set 18, 2018 1:59 pm
Ter Set 18, 2018 2:48 am
Seg Set 17, 2018 7:55 pm
Seg Set 17, 2018 6:46 pm
Seg Set 17, 2018 12:58 pm
Seg Set 17, 2018 12:54 pm
Seg Set 17, 2018 8:18 am
Seg Set 17, 2018 7:36 am
Seg Set 17, 2018 7:35 am
Seg Set 17, 2018 7:34 am
Dom Set 16, 2018 11:15 pm
Dom Set 16, 2018 11:13 pm
Dom Set 16, 2018 4:50 pm
Dom Set 16, 2018 5:13 am
Sab Set 15, 2018 10:06 pm
Sab Set 15, 2018 10:00 pm
Sex Set 14, 2018 8:41 pm
Sex Set 14, 2018 8:37 pm
Sex Set 14, 2018 6:57 pm
Sex Set 14, 2018 5:17 pm
Sex Set 14, 2018 2:04 pm
Sex Set 14, 2018 11:10 am
Qui Set 13, 2018 3:36 pm
Qui Set 13, 2018 10:14 am
Qui Set 13, 2018 9:48 am
Qui Set 13, 2018 9:25 am
Qua Set 12, 2018 11:40 pm
Qua Set 12, 2018 6:04 pm
Qua Set 12, 2018 12:57 pm
Qua Set 12, 2018 3:33 am
Qua Set 12, 2018 12:25 am
Ter Set 11, 2018 8:00 pm
Ter Set 11, 2018 4:20 pm
Ter Set 11, 2018 2:52 pm
Ter Set 11, 2018 2:20 pm
Ter Set 11, 2018 12:27 pm
Seg Set 10, 2018 11:10 pm
Seg Set 10, 2018 8:29 pm
Seg Set 10, 2018 7:17 pm
Seg Set 10, 2018 6:47 pm
Seg Set 10, 2018 12:08 pm
Seg Set 10, 2018 9:07 am
Dom Set 09, 2018 11:27 pm
Dom Set 09, 2018 6:58 pm
Dom Set 09, 2018 3:53 am
Sab Set 08, 2018 11:37 pm
Sab Set 08, 2018 11:29 pm
Sab Set 08, 2018 11:23 pm
Sab Set 08, 2018 10:23 pm
Sab Set 08, 2018 6:23 pm
Sab Set 08, 2018 5:07 pm
Sab Set 08, 2018 1:24 pm
Sab Set 08, 2018 1:05 pm
Sab Set 08, 2018 11:40 am
Sab Set 08, 2018 10:40 am
Sab Set 08, 2018 2:12 am
Sex Set 07, 2018 12:47 pm
Sex Set 07, 2018 9:37 am
Sex Set 07, 2018 8:59 am
Sex Set 07, 2018 5:57 am
Qua Set 05, 2018 8:20 pm
Qua Set 05, 2018 6:37 am
Qua Set 05, 2018 12:13 am
Ter Set 04, 2018 9:35 pm
Ter Set 04, 2018 7:07 am
Seg Set 03, 2018 7:35 pm
Seg Set 03, 2018 6:12 pm
Seg Set 03, 2018 6:04 pm
Seg Set 03, 2018 8:16 am
Dom Set 02, 2018 11:15 pm
Dom Set 02, 2018 11:12 pm
Lourenco
BananaSmith
MarcosSchultz
MarcosSchultz
MarcosSchultz
Rodrigo21556
PedroSilva
Jmspp
luansantos
FelipeSouza11
francisco barroso
dstaroski
Dom3000
MarcosSchultz
MarcosSchultz
MarcosSchultz
MRX
Callyde Jr
diegopds
artplayer
MayLeone
Callyde Jr
Daniel Dória
Daniel Dória
Caius
marciosilva
MarcosSchultz
luiz12345
JohnRambo
rafaelllsd
natanael.olimpio
PedroSilva
Callyde Jr
Callyde Jr
Ezequiel286
dstaroski
dstaroski
dstaroski
Eduardoro39
SuperGamer
JuR
MarcosSchultz
MeverPlays
MeverPlays
MarcosSchultz
MarcosSchultz
dstaroski
dstaroski
dstaroski
JohnRambo
fecirineu
igorobm
igorobm
igorobm
Eduardoro39
NKKF
Callyde Jr
MarcosSchultz
MarcosSchultz
MarcosSchultz
nicolasfive
natanael.olimpio
natanael.olimpio
INKnight
FuncaoFF
dstaroski
QueriaStarMorto
NyanHeavyBR
Callyde Jr
FabioBRPA
MarcosSchultz
NKKF
niao
MarcosSchultz
MarcosSchultz
MarcosSchultz
Flávio
Joab Artes Gráficas
vitorhugo
Callyde Jr
Callyde Jr
fecirineu
FeLotus
MarcosSchultz
Callyde Jr
fecirineu
lelouchsdky
Callyde Jr
gurgelg752
Tiago95
FelipeSouza11
ruanzikaad
joz
WesFarias
TassoCervi
Magnatah
junkflash30
MarcosSchultz
MarcosSchultz

[AULA] Programação orientada a objetos: Classes e instâncias

Ir em baixo

TUTORIAL [AULA] Programação orientada a objetos: Classes e instâncias

Mensagem por MayLeone em Seg Jul 09, 2018 5:13 pm



Qual a vantagem da POO em programação?
Uma das vantagens de se utilizar a POO na programação com certeza é o uso das classes e suas instâncias.
Em outros paradigmas de programação (principalmente procedural) é comum se utilizar de variáveis para qualquer situação, mesmo se você precisar de informações específicas para aquele problema.
Para exemplificar melhor, vamos supor que você esteja programando um cadastro de super-mercado, onde cada produto vai receber algumas informações, tais como: Nome do produto, preço, tipo de produto, código de barras, pequena descrição e data de validade.
Sem a programação orientada a objetos, você poderia criar as variáveis que poderá utilizar nesses produtos:




Para cadastrar um produto você poderia realizar o seguinte:




Neste momento você tem um cadastro de apenas UM produto, mas e se quisesse cadastrar outros? Teria de criar novas varáveis para cada produto (nome, tipo, preço, e etc) ou vetores/matrizes para cada informação.
Concorda que além do código se tornar grande e pesado, ainda daria uma certa confusão com tantas variáveis sendo utilizadas ao mesmo tempo?
Agora imagine criar uma "repartição" no código onde você pudesse guardar todas essas informações (preço, código de barras e etc) e poder reutilizar todas essas variáveis para vários produtos diferentes?
Com as classes em POO você pode fazer isto, ou seja, na prática, você estaria criando uma classe chamada "Produtos" e ao criar uma variável deste tipo, todas essas informações e mais algumas outras que você queira futuramente adicionar estarão todas armazenadas dentro de uma única variável!
Essa variável que você cria do tipo da sua classe se chama instância de classe (ou simplesmenteobjeto) e que vai armazenar todas as informações acessíveis contidas dentro de uma classe.
Graficamente falando, se fossemos utilizar como exemplo a classe de "Produtos", a variável "objetoProduto" seria dessa forma:




Ou seja, todas aquelas informações que estavam espalhadas no seu código anteriormente foram "colocadas" dentro de uma única variável.
Você consegue perceber as vantagens de utilizar classes e objetos em seu código agora?

Classes:
Como visto acima, as classes podem "comprimir" informações de um determinado tipo específico, como se fosse uma forma de "categorização" de objetos.
No exemplo acima, vimos uma classe chamada "Produtos" que contém informações referentes a itens de super-mercados, lojas e etc. Pense que essa classe não seria útil para a criação de um item diferente, como por exemplo, o item "Ser humano", pois o ser humano não possui código de barras, preços, ou outras informações contidas naquela classe de produtos.
O mais adequado para este caso seria criar uma outra classe chamada "Ser humano", e dentro dela adicionar informações sobre este "item", como idade, endereço, gênero, profissão, e etc.
Percebe que as classes são realmente uma espécie de "classificação" de objetos? Onde ela deve ser utilizada em cima de um objeto que pertence à sua "categoria"?
Note também que não utilizamos a classe diretamente, ela é como se fosse um "modelo" de um objeto, onde colocamos dentro dela informações de características que aquele determinado tipo de objeto vai poder fazer uso.
Imagine da seguinte forma: A receita de um bolo (que contém os ingredientes e modo de preparo) são as classes (o molde daquele item) e o bolo pronto para ser consumido são os objetos, que foram projetados em cima daquele modelo (classe).
Para exemplificar melhor estas analogias, vamos criar na prática uma classe em C# e utilizá-la num código simples:

Criando as classes:
Abra um novo projeto no seu Visual Studio com o nome que desejar.
Vamos criar uma classe de modelo para o objeto "Bola", ou seja, a partir desta classe, poderemos criar vários tipos de bolas para esportes e finalidades diferentes (Aqui está fortemente exemplificado também o conceito de polimorfismo!)
Para criar uma nova classe em seu programa, vá na janela do Solution Explorer do projeto e clique com o lado direito do mouse, indo à opção "Add >> Class":




Na janela que aparecer selecione a opção "Class" (caso ela não esteja selecionada) e dê um nome a sua classe. Para este exemplo o nome da minha classe será "Bola".
Quando você der um ok, uma nova janela irá abrir em seu Visual Studio da seguinte forma:


Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Classe__Objetos__Aula____1
{
class Bola{
}
}



Perceba que agora você possui uma nova classe chamada "Bola" em seu programa?
Você identifica a classe através de sua palavrada reservada"class", à frente do seu nome.
As classes possuem um corpo (assim como os métodos) limitado pelas chaves {}, ou seja, será dentro dessas chaves que você irá programar a sua classe.
Dentro das classes você basicamente poderá definir variáveis (que são chamadas depropriedades), assim como fizemos no exemplo de "Produtos", e também os comportamentosque aquela classe terá, que são definidos através de métodos.

Programando dentro de classes:
Uma vez tendo a classe criada, é hora de adicionar algumas propriedades nela, como por exemplo, as características físicas que uma bola pode possuir:




Perceba que eu criei algumas propriedades do tipo "string" que podem armazenar o nome, tipo de esporte, cor, e tamanho da bola? Bem como defini uma variável do tipo "double" que vai armazenar o volume daquela bola, e duas constantes: "Pi" e "esferaDivisão" para que eu possa calcular corretamente o volume daquela bola.

*Caso você não saiba, o volume de uma esfera é calculado através da seguinte fórmula: (Por isso a necessidade de criar as constantes)



Além de propriedades, eu posso adicionar comportamentos que a bola pode ter, tais como: Quicar, rolar, murchar, e etc.
Os comportamentos das classes eu defino através de métodos:




Veja que os métodos "Quicar" e "Murchar" possuem uma programação básica de comportamento para que eu possa exemplificar a utilidade de métodos em classes.
Enquanto o método "murchar" apenas exibe uma mensagem dizendo que a bola está vazia, o método "Quicar" exibe a força com que a bola quica, dependendo do seu tamanho, ou seja, as bolas menores podem quicar mais que as bolas maiores, logo, dependendo dos objetos que vão receber essa classe, a mensagem a ser exibida por este método será diferente! (Polimorfismo, novamente).

Além de comportamentos, podemos criar métodos específicos para atender as necessidades daquela classe, como por exemplo, um método que calcula o volume da bola:




Instanciando classes:
Agora que aparentemente terminamos de escrever o "molde" das bolas, vamos criar nosso objeto (nossa instância) para receber as informações e ativar os comportamentos.
Volte para a janela do programa principal e crie uma variável do tipo "Bola" com o nome de bola1:

Bola bola1;

Para que este objeto seja inicializado devemos criar uma instância dessa classe, ou seja, "alocar" um espaço da memória para essas informações.
Para fazer isso, atribua ao objeto da classe o operador "new" (que irá realizar a instância) e especifique quem você quer instanciar, no caso "Bola":

 Bola bola1 = new Bola();

Perceba que "Bola()" não é a classe em si, mas sim um método com o nome dessa classe.
Este método especial que recebe o nome da classe se chama "método construtor" e ele é o responsável por inicializar todos os campos daquela classe em específico.
Perceba que não criamos este método dentro de nossa classe, mas o código compila sem dar erros pelo simples motivo de que se você não definir o construtor da classe, o C# define um padrão para você. (Na próxima aula falaremos sobre construtores).

Agora que criamos esta instância, podemos utilizar o objeto "bola1" para adicionar valores às propriedades da classe:

Utilizando as classes:
Escreva "bola1." e através do operador "." você terá disponível todos os métodos e propriedades criados dentro daquela classe:




Isso acontece pois, todos os métodos e propriedades de sua classe foram definidos como "public", ou seja, poderão ser acessados fora da classe de onde foram definidos. (Teremos uma aula que irá falar sobre acessibilidade do código e encapsulamento, pois nem sempre é interessante deixar essas informações públicas, porém, por enquanto, deixemos desta forma).
Perceba que as constantes "pi" e "esferaDivisão" não aparecem como propriedades, pois elas estão privadas (não será necessário modificá-las durante a programação).
Agora você pode definir as características desta bola através de suas propriedades:





Também é possível realizar comportamentos com esta bola, basta chamar seus métodos:



E podemos exibir todos esses resultados na tela com um Console.WriteLine:






Ao executar o código você terá algo desta forma:



Podemos também criar um novo método dentro da classe bola com o nome de "MostrarInformacaoes" para que todas essas informações sejam exibidas quando o método for chamado, assim não precisamos repetir este processo:



Perceba que o código vai dar erro por conta de "bola1", e é evidente que sim pois, "bola1" é um objeto que foi definido fora dessa classe, ele não existe neste contexto. Sem dizer que, se você criar um outro objeto, por exemplo "bola2" esta validação não irá ser correta, pois "bola1" é diferente de ser "bola2".
Para acabar com este problema, quando queremos referenciar um objeto daquela classe dentro da própria classe, nós utilizamos a palavra reservada "this" que significa justamente "este", ou seja, de uma forma genérica é como dizer "este objeto":



Agora que criamos o método de mostrar as informações daquele objeto, volte para a janela do programa principal e crie um novo objeto com o nome "bola2" com características diferentes:






Perceba que ao testar o código você terá esta saída de dados:







Perceba que apesar de pertencerem à mesma classe, "bola1" e "bola2" são instâncias diferentes de "Bola", portanto podem possuir propriedades e comportamentos diversificados, dependendo do seu contexto e necessidade.
Com isso você pode concluir também que realmente a classe é como se fosse um "molde" de um objeto, pois a partir dela podemos criar vários objetos diferentes daquela mesma "categoria" com propósitos, propriedades e comportamentos distintos.


Você pode criar outras bolas com esta classe, mas sempre vai utilizar as mesmas propriedades e métodos que existem dentro daquela "receita", apenas alternando seus estados dependendo daquele objeto em específico, o que não aconteceria em outros paradigmas de programação que não utilizem as classes e suas instâncias, como a POO utiliza.
Lembra que no exemplo dos produtos você teria várias variáveis diferentes para cada tipo de produto existente na loja? Imagina se fossem por exemplo 100 produtos! A quantidade de variáveis e espaço na memória que você iria consumir seria muito maior.
Agora imagine a mesma situação utilizando a POO: É mais organizado e mais dinâmico criar um "molde" para todos os produtos e depois definir objetos distintos com base dessa classe, não é mesmo?


Finalização:
Esta aula se encerra por aqui, mas tenha em mente que este assunto com relação à classe e objetos é bem extenso, por tanto não deixe de ler as outras aulas no blog para aumentar seu conhecimento e também de praticar bastante, pois só praticando e realizando o mesmo processo várias vezes que você vai aprender e se acostumar com a ideia. Então eu lhe desafio: Crie classes diferentes em seu programa e as instancie em objetos diferentes, assim como fizemos nesta aula e poste seus resultados aqui. A prática leva à perfeição!
avatar
MayLeone
ProgramadorMaster

Feminino PONTOS : 403
REPUTAÇÃO : 135
Á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] Programação orientada a objetos: Classes e instâncias

Mensagem por NKKF em Seg Jul 09, 2018 5:45 pm

BAUM COMO SEMPRE.
avatar
NKKF
ProgramadorMaster

Masculino PONTOS : 1946
REPUTAÇÃO : 402
Idade : 13
Áreas de atuação : Error 404 Not Found.
Respeito as regras :

Ver perfil do usuário http://www.projetounity.esy.es

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