Programação Orientada a Objetos (POO) - I

Programação Orientada a Objetos (POO)🔗

Orientação a objetos é um paradigma de programação organizado através de objetos. Isto é, quando utilizamos POO, estamos facilitando a forma de compreensão e implementação de um projeto. Porque, simplesmente estamos se preocupando na forma em que as informações são definidas, como característica e comportamentos, e como elas se relacionam entre si.

Para ficar mais fácil, precisamos analisar o contexto de um  projeto. Como exemplo utilizarei um time de futebol.

Classes🔗

Classes organizam características e comportamentos comuns a um grupo de informações.

Sendo assim podemos definir que todas as pessoas em um time de futebol, fazem parte da classe Pessoa.  Pois, todas elas possuem características e comportamentos comuns.

Classe Pessoa

 POO-jogadores

Características

  • Nome
  • Idade
  • Salário

Comportamentos

  • Participa dos jogos
  • Participa dos treinos

 

public class Pessoa
{
    public string nome;
    public int idade;
    public decimal salario;

    public void participarJogo() { }

    public void participarTreino() { }
}

Atributos🔗

São as características de cada objeto. Como: Nome, Idade, Situação e Salário.

public string nome;
public int idade;
public decimal salario;

Métodos🔗

São comportamentos de cada objeto. Como: Participar do jogo e Participar do treino.

public void participarJogo() { }

public void participarTreino() { }

Objetos🔗

São instancias de uma classe. Ou seja, sendo que definimos uma Classe Pessoa possui características como: Nome, Idade, Situação e Salário e comportamentos como: Participar do jogo e Participar do treino. Ao instanciar um objeto desta classe, devemos cria-lo segundo as definições da classe que ele está sendo gerado.

Por exemplo:

Pessoas - Time Futebol

 

Tipo do objeto:PessoaCaracterísticas

  • Nome: Neymar
  • Idade: 19 anos
  • Salário: 800.000,00

Comportamentos

  • Participa dos jogos
  • Participa dos treinos
//Istanciação do objeto
Pessoa pes_Neymar = new Pessoa();

//Atribuição de valores aos atributos
pes_Neymar.nome = "Neymar";
pes_Neymar.idade = 19;
pes_Neymar.salario = 8000000;

//Execução dos métodos
pes_Neymar.participarJogo();
pes_Neymar.participarTreino();

Método Construtor🔗

Para estanciar um objeto, utilizamos o método construtor da classe. Método construtor deve ter exatamente o mesmo nome da classe e não devem possuir um tipo de retorno na sua definição. Porque, ele já é responsável por retornar um objeto do tipo da classe que pertence.

public class Pessoa
{
    public int idade;
    protected string nome;
    private decimal salario;

    //Método construtor
    public Pessoa()
    {
        //Possui o mesmo nome da classe
        //Não possui um tipo de retorno
    }

    public void participarJogo() { }

    public void participarTreino() { }
}

Herança🔗

É a generalização das informações. Ou seja, dentro de um time de futebol temos dois tipos de pessoas: jogadores e o técnico. E cada um desses tipos, possui algumas características e comportamentos, comuns e outras diferentes.

Um jogador, além de possuir as outras características de pessoas, possui também quantidade de gols marcados, peso, velocidade e o comportamento de marcar gol.

Um técnico, além de possuir as outras características de pessoas, possui também técnicas de treino e o comportamento de marcar treino.

Para atender a este tipo de situação, podemos criar duas classes diferentes, mas herdando características e comportamentos comuns, definidos na classe Pessoa.

Pessoas - Time Futebol

Jogadores

Técnico

 

 

 

public class Jogador : Pessoa
{
    public int qtdeGolMarcado;
    public decimal peso;
    public int velocidade;

    public void marcarGol() { }
}
public class Tecnico : Pessoa
{
    public string tecnicasTreino;

    public void marcarTreino() { }
}

Sobrecarga🔗

São como comportamentos comuns, na vida real. Mas com algumas particularidades, que os diferem.

Na POO, são métodos com o mesmo nome, mas com a assinatura dos parâmetros diferentes.

public void marcarTreino(string local)
{
    //Marca o treino definindo apenas o local
}

public void marcarTreino(string local, int horario)
{
    //Marca o treino definindo o local e o horário
}

public void marcarTreino(string local,int horario, int qtdJogadores)
{
    //Marca o treino definindo o local, horário e quantidade de jogadores
}

Referência this🔗

Especifica que estamos referenciando apenas as características e métodos da própria classe.

Por exemplo, se eu passo por parâmetro a quantidade de gols marcado em uma partida, com o mesmo nome, da propriedade qtdeGolMarcado, existente na classe. Para especificar qual é variável, que representa minha propriedade existente na classe, devo utilizar o prefixo this.

public void marcarGol(int qtdeGolMarcado)
{
    this.qtdeGolMarcado = qtdeGolMarcado;
}

Modificadores de Acesso🔗

Um modificador de acesso determina até onde o atributo ou método pode ser visualizado, ou seja,  determinam quais os locais ele pode ser usado. Eles são o utilizados no encapsulamento. Temos pelo menos 3 tipos de modificadores de acesso padrões, na maioria das linguagens POO:

public Acesso não é restrito. Membro é acessado de qualquer lugar.

protected Pode ser acessado dentro da classe que o define e pelas classes que a herdam.

private Membro pode ser a cessado somente dentro da classe que o define.

 

public int idade;
protected string nome;
private decimal salario;

Por enquanto é isto. No próximo artigo continuarei com outros conceitos de POO.