 | | |
| Duvida em Programacao Orientada a Objeto |
|
|
|
Olá pessoal, sou meio leigo em POO, e estou com algumas duvidas, eu tenho alguma dificuldade para identificar métodos e objetos dentro d uma classe, por exemplo o código:
class Objetos
{
private Vector2 posicao;
private Vector2 tamanho;
private Vector2 velocidade;
private Texture2D textura;
public Vector2 Posicao
{
get { return posicao; }
set { posicao = value; }
}
public Vector2 Tamanho
{
get { return tamanho; }
set { tamanho = value; }
}
public Vector2 Velocidade
{
get { return velocidade; }
set { velocidade = value; }
}
public Texture2D Textura
{
get { return textura; }
set { textura = value; }
}
public Rectangle Retangulo
{
get { return new Rectangle( (int)posicao.X, (int)posicao.Y, (int)tamanho.X, (int)tamanho.Y ); }
}
}
ps: codigo usado no jogo pong XD
gostaria tb q me ajudassem a entender esse get/set, pra que serve e como q eu uso?
Obrigado pela atencão |
|
|
|  |  | | |
| sRe: Duvida em Programacao Orientada a Objeto |
|
|
Glauber escreveu
Olá pessoal, sou meio leigo em POO, e estou com algumas duvidas, eu tenho alguma dificuldade para identificar métodos e objetos dentro d uma classe, por exemplo o código:
class Objetos
{
private Vector2 posicao;
private Vector2 tamanho;
private Vector2 velocidade;
private Texture2D textura;
public Vector2 Posicao
{
get { return posicao; }
set { posicao = value; }
}
public Vector2 Tamanho
{
get { return tamanho; }
set { tamanho = value; }
}
public Vector2 Velocidade
{
get { return velocidade; }
set { velocidade = value; }
}
public Texture2D Textura
{
get { return textura; }
set { textura = value; }
}
public Rectangle Retangulo
{
get { return new Rectangle( (int)posicao.X, (int)posicao.Y, (int)tamanho.X, (int)tamanho.Y ); }
}
}
ps: codigo usado no jogo pong XD
gostaria tb q me ajudassem a entender esse get/set, pra que serve e como q eu uso?
Obrigado pela atencão |
1º Indagação
Você diz que que tá com dúvidas em identificar métodos e objetos dentro de uma classe!
Em C#, de maneira bem grosseira, pra vc identificar se aquilo é um método ou não, basta identifica-lo procurando algum nome precedido de dois parenteses. Esses parenteses podem estar vazios ou com uma lista de parametro, um exemplo abaixo:
Basicamente, a fórmula de um método é:
<modificador de acesso> <tipo de retorno> <identificar do método> ( <lista de parametros> )
{
}
Um método sem parametros:
public void Pular(){ }
Um método com parametro(s):
public float CalculaEquacaoGrau1(float x)
{
float y;
//...
return y;
}
Em relação aos objetos, no exemplo que vc deu, os objetos(campos) são estes:
private Vector2 posicao;
private Vector2 tamanho;
private Vector2 velocidade;
private Texture2D textura;
2º Indagação
Em relação a "esse get/set". Get e Set são métodos!
No mundo OO, todos os campos devem ser privados e devem ser acessados através de métodos publicos. Aonde dentro desses métodos você tem a liberdade de adicionar alguma regra de negócio no momento que algum desses métodos forem chamados.
Quando você ouvir falar sobre o conceito de encapsulamento lembre-se desses métodos Get e Set...
Vamos à um exemplo na linguagem Java aonde não existe esse conceito de propriedades(get/set). Se você quer acessar um atributo da classe vc precisa criar 2 métodos para efetuar as operações de Get ou Set desse atributo.
public class Pessoa{
private int idade;
public int GetIdade(){
return idade;
}
public int SetIdade(int _idade){
this.idade = _idade;
}
}
Tomando a classe pessoa acima, se nós quisessemos adicionar alguma regra de negocio para essa pessoa do tipo: Se essa pessoa é uma mulher então a idade real dela só ela pode saber, e quem for querer conhecer(Get) a idade dela vai saber, entretanto, com 5 anos a menos que a idade real. Então a gente poderia ter o método Get assim:
public int GetIdade(){
return idade + 5;
}
Isso tudo foi em Java, em C# é semelhante, só que a gente nao precisa criar 2 métodos(Get e Set). No C# a gente utiliza o conceito de Propriedades. Aonde a gente tem uma classe Pessoa assim:
public class Pessoa{
private int idade;
public void Idade{
get{ return this.idade;}
set{ this.idade = value;}
}
}
Só chamo atenção para a palavra reservada value, lembre desse value que está dentro do "acessador" set como sendo o argumento passado no método Set que a gente cria lá no Java:
public int SetIdade(int _idade){
this.idade = _idade;
}
O argumento _idade seria o nosso value no C#!
Em relação a usar, basta chamar o nome da propriedade para pegar a idade da pessoa, vamos instanciar(tanto no java como no C#) uma pessoa para exemplificar:
Em java:
Pessoa glauber; // objeto Pessoa
glauber = new Pessoa(); // glauber deixou de ser objeto para ser instancia
Se eu quero neste momento atribuir uma idade para glauber:
glauber.SetIdade(45);
Se em algum momento quiser saber a idade de glauber, basta fazer:
int idadeDeGlauber = glauber.GetIdade();
Em C#:
Pessoa glauber; // objeto Pessoa
glauber = new Pessoa(); // glauber deixou de ser objeto para ser instancia
Se eu quero neste momento atribuir uma idade para glauber:
glauber.Idade = 45;
Se em algum momento quiser saber a idade de glauber, basta fazer:
int idadeDeGlauber = glauber.Idade;
---
Se tu nao compreendeu algum ponto abordado acima ou se o que eu escrevi acima, nao solucionou nada ou parte das tuas dúvidas, tu avisa por favor!
Abraços!
@lucianoJoseBr
My Blog: http://lucjose.wordpress.com |
|
|
|  |  | | |
| Re: sRe: Duvida em Programacao Orientada a Objeto |
|
|
Vlwww Luciano, deu para entender muito bem sobre Poo , os exemplos em java e depois em c# facilitou bastante o entendimento de get/set.
Vlwww msm ajudou bastante, tah fazendo um otimo trabalho aki no sharpgames
Abraço
XD |
|
|
|  |  | | |
| Re: sRe: Duvida em Programacao Orientada a Objeto |
|
|
Olá Glauber, tem mais coisas interessantes e vou me ater a uma que deve ser bem utilizada no desenvolvimento de jogos, é a tal de Herança.
vou tentar passar de uma forma mais básica possivel para atingir o objetivo e voce, depois, com calma dá uma estudada no assunto.
Imagine um Jogo que voce precisa Desenhar 3 objetos na Tela. e eles são ( exemplo )
uma Bola, uma Pessoa e uma Árvore. ( estamos fazendo um jogo 2D )
em vez de voce criar 3 objetos para facilitar sua vida voce cria 4.
4 ? como isso vai melhorar minha vida?
vamos pegar funcionalidades que se repetem a todos os objetos e vamos centralizar em um objeto so e vamos chama-lo de BASE.
entao temos 1 objeto base e 3 objetos a serem desenhados no nosso jogo.
public class BASE
{
private Vector2 posicao;
public Vector2 Posicao
{
get { return posicao; }
set { posicao = value; }
}
private int velocidade;
public int Velocidade
{
get { return velocidade; }
set { velocidade= value; }
}
public void Draw(GameTime gameTime)
{
}
}
// quando colocamos os dois pontos ( : ) e o nome da classe a ser Herdada, nosso Classe HERDA propriedades e métodos da classe base.
//imagine voce desenvando 20 objetos, caso voce precise mudar alguma coisa específica em uma classe, voce pode fazer um OVERRIDE.
public class Bola : BASE
{
public Overrides Draw(GameTime gameTime)
{
}
//aqui dentro da classe herdamos métodos e propriedades da Classe base,
//ou seja, não preciso criar a posicao e nem a velocidade, talvez eu precise atribuir valor a ela e não criar em 20 classes.
//exitem outras funcionaldiades interessantes no O.O, no momento estou meio sem tempo, mas caso deseje, podemos fazer um exemplo real
} |
|
|
|  |  | | |
| Re: sRe: Duvida em Programacao Orientada a Objeto |
|
|
ah Vlwwww deu para entender sim como funciona o sistema de heranças.
Vlwww por complementar ae, vou procurar mais sobre Poo.
Abraço |
|
|
|
|  |