VB .NET - Conceitos da Programação Orientada a Objetos


Um dos requisitos para criar aplicações sólidas em .NET é ter bons conceitos sobre OOP (programação orientação a objetos).  Como andam seus conhecimentos OOP ?  Vamos fazer um teste ? Veja se você consegue responder a duas perguntas básicas sobre conceitos OOP:

1- ) Você sabe dizer qual a diferença entre classe e objeto ?

2- ) É possível acessar uma classe em VB .NET antes de instanciar um objeto da classe ?

Se você não tem nem idéia da resposta para estas perguntas é bom você reciclar seus conhecimentos sobre OOP. Segue abaixo uma relação de artigos do site que abordam o tema :

Mas e quanto as perguntas ? Tudo bem , vamos a resposta...

1 -) Qual a diferença entre classe e objeto ?

Uma das formas você reconhecer a diferença entre uma classe e um objeto (uma instância de uma classe) é fazer uma analogia e considerar a diferença entre tipo e variável do tipo. Vejamos:

Você pode usar o tipo Inteiro ou Integer e uma variável do tipo Integer.

Você não pode atribuir um valor a um tipo , i.e , você não pode fazer a seguinte declaração : Integer = 100

Isto iria gerar um erro.

Mas você pode atribuir um valor a um objeto do tipo Integer :

Dim objInteiro As Integer
objInteiro = 100

Da mesma forma , você não pode atribuir valores a membros em uma classe. Supondo uma classe Carro definida você não pode fazer o seguinte :

Carro.cor  = "vermelho"

pois isto indicaria que todo o carro seria da cor vermelho.(eu particularmente detesto carro vermelho)

Você teria que definir um objeto da classe para em seguida atribuir uma cor a um objeto da classe. Assim :

Dim meugol As new Carro
Dim meuFor As new Carro

meuGol.cor = "prata"
meuGol.ano = 2003

seuFord.cor = "branco"
seuFord.ano = 2002

Aí sim , você esta definindo objetos específicos da classe carro e atribuindo à propriedade cor o valor "prata" para o objeto meuGol e branco para o objeto meuFord.

Podemos concluir dizendo que :

- A classe Carro tem características (variáveis e métodos) que definem o seu estado como: cor , chassi, placa, ano,  modelo , etc.

- Cada carro (meuGol, seuFord)  - cada instância - tem sua própria combinação de estado : cor, chassi, modelo , ano ,etc.

- A classe seria o modelo pelo qual serão construídas as instâncias da classe (os objetos).(as propriedades cor e ano estão disponíveis para todo objeto criado (instanciado) a partir da classe Carro)

Entendeu a diferença ? Vamos a segunda pergunta ...

2- ) É possível usar uma classe sem criar uma instância desta classe ?

Bem ,  parece que pela resposta dada a primeira pergunta , fica óbvio que você deve criar uma instância da classe (criar um objeto) para poder ter acesso as propriedades e métodos da classe.

Mas não é bem assim .  Você pode acessar uma classe sem criar uma instância desta classe.  

Antes que você fique confuso eu vou explicar...

Vou definir uma classe Carro com algumas propriedades métodos . Abra um novo projeto do tipo console no VB e inclua uma classe no seu projeto com o seguinte  código :

Agora insira um novo modulo no seu projeto para podermos usar a classe criada acima. O código é o seguinte :

Vamos examinar o código com mais detalhes:

- eu estou usando a classe Carro sem instanciar um objeto da classe =>     Carro.QuantosCarros()

- a instância de um objeto da classe me da acesso a todos os métodos da classe

- a classe usada sem instância me dá acesso somente ao método : QuantosCarros.

Então o que o método QuantosCarros tem de diferente ? 

O método QuantosCarros da classe Carro possui na sua declaração a palavra chave : Shared.

   Public Shared Sub QuantosCarros()
        Console.WriteLine("{0} carros vendidos ", quantidade)
    End Sub

Mas o que significa Shared ?

A palavra chave Shared faz com que o método QuantosCarros esteja associado a classe e não com uma instância particular da classe.

Ele se torna acessível a partir da classe pois não precisa ser acessado através de uma instância da classe. Embora também possa ser acessado desta forma.

Com isto concluímos que membros declarados como Shared são membros da classe e não membros de instância.

Respondendo a pergunta temos que : podemos acessar membros declarados como Shared em uma classe sem criar uma instância da classe.

Nota: O equivalente em Java seria a palavra chave static.

Membros Estáticos

Na OOP existe um tipo especial de membro chamado membro estático - static - no VB.NET também usamos o termo Shared . Um membro estático é aquele que pode ser acessado sem ser necessário fazer a instância do objeto , isto é ,  eles estão sempre disponíveis , basta pegar e usar.  Vamos mostrar como aplicar este conceito na nossa classe Aluno:

Public Class NotaFinal

   Public Shared Nota1 As Double = 8.5

  Public Shared Nota2 As Double = 7.6

  Public Shared Nota3 As Double = 6.4

  Public Shared Nota4 As Double = 5.9

  Public Shared Nota5 As Double = 9.3

End Class


Public Class Aluno

   Dim notaExame As Double = 7.8

   Dim materiaExame As String = "Inglês"

  Public Sub MostraNota()

     System.Console.WriteLine(NotaFinal.Nota2)

   End Sub

End Class

- Observe que criamos uma classe chamada : NotaFinal e definimos na classe cinco propriedades(membros) do tipo static (estática)

- No método MostraNota da classe Aluno  estamos acessando o membro Nota2 sem instanciar a classe NotaFinal

- Indicamos apenas o nome da Classe e já temos o acesso aos membros estáticos da mesma:

Nota: A plataforma .NET possui muitos membros estáticos. Você usou um sem perceber . Quer ver só ? Quando criamos a classe a aluno , usamos o método WriteLine da classe console para exibir as notas , pois bem ,  acessamos Writeline sem ter que instanciar o objeto System.Console

Entendeu agora ???

Até a próxima ...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti