VB.NET - Primeiros passos - Conceitos - V

Continuando nossa série de artigos (ou diria curso) sobre VB.NET - Primeiros passos , vamos falar um pouco sobre as características da OOP presentes no VB.NET . OOP significa : OOP - Object Oriented Programming Language , e para você ficar sabendo mais sobre OOP veja os artigos :

  1. VB.NET - Finalmente uma linguagem orientada a objetos
  2. Criando Classes no VB 6.0
  3. Meu primeiro projeto orientado a objetos no VB 6.0 : Cadastro de Clientes.

Vou tentar não ser repetitivo , pois muitos conceitos já foram abordados nos artigos acima , procurando dar um visão geral das novidades relacionadas a OOP presente no VB.NET , afinal o VB.NET é uma linguagem orientada a objetos.

Classes

As classes são o foco principal da OOP , em uma classe temos um tipo de dados que oferece alguma funcionalidade. No VB.NET uma classe é declarada usando a palavra-chave : Class .

Class Aluno

End Class

Temos ao lado a estrutura básica de uma classe :
  1. A palavra chave : Class iniciando a classe
  2. O nome da classe : Aluno
  3. A palavra-chave : End Class encerrando a classe

Para começar a trabalhar com uma classe incluindo-a em um projeto VB.NET , primeiro temos que criar um projeto do tipo Windows Application e e selecionar no menu Project->Add Class .

Será incluído em seu projeto um arquivo padrão com o nome de Class1.vb (a extensão .vb também refere-se a arquivos para formulário, modulo , etc...)

Nota1: A notação recomendada para dar nome a uma classe é a seguinte : O primeiro caractere do nome da classe deve estar em caixa alta ; assim também como cada primeiro caractere de uma palavra concatenada para formar o nome da classe. Ex: CalculaSalario , EnviaArquivoTexto , etc..

Membros de uma Classe

Uma classe pode possuir membros como : campos,  propriedades, métodos (sub-rotinas e funções). Assim vamos incluir uma sub-rotina a nossa classe Aluno:

Class Aluno

    Public FaçaAlgumaCoisa()

         MsgBox " Olá Pessoal ",

    End Sub

End Class

As sub-rotinas e funções são chamados de métodos. As regras usadas para dar nome aos métodos são as mesmas que explanamos em Nota1.

Outro tipo de membro de uma classe são os campos. Damos nomes aos campos usando a seguinte regra: somente o primeiro caractere do nome da classe deve ficar em caixa baixa , os demais primeiros caracteres das palavras concatenadas para formar o nome do campo devem ficar me caixa alta. Ex: nomeAluno ,  salarioIntegral , etc.

Vamos criar dois campos para classe Aluno:

Public Class Aluno

    Dim notaExame As Double = 7.8

   Dim materiaExame As String = "Inglês"

  Public Sub MostraNota()

     System.Console.WriteLine(notaExame)

    End Sub

End Class

Instanciando um objeto

Uma classe é um modelo de uma entidade que a classe representa. Para usar um campo , método ou qualquer outro membro de uma classe você vai precisar tornar a classe em um objeto.

No paradigma OOP um objeto é uma instância de uma classe; assim para criar um objeto temos que instanciar o objeto a partir de  uma  classe.

Vamos mostrar como fazer isto com a classe Aluno:

- Vamos incluir um módulo no nosso projeto. Faça isto no menu Project opção Add  Module
- No arquivo
Module1.vb temos a sub-rotina Main onde declaramos a variável objeto - objAluno - como um objeto da classe Aluno

- Após instanciar o objeto temos acesso as sua funcionalidades :  no nosso caso somente temo o método MostraNota().

Nota: poderíamos ter usado uma sintaxe diferente para instanciar o objeto , fazendo isto em duas etapas :
  1. declarar uma variável objeto do tipo Aluno :  Dim objAluno As Aluno
  2. Instanciar o objeto com a palavra-chave - New - : objAluno = New Aluno

Namespaces

Ao escrever um programa no VB.NET , escrevemos classes , funções ,  rotinas e outros tipos.

Para organizar a aplicação agrupamos as classes dentro  de namespaces . Veja o método MostraNota() da Classe Aluno .  Este método usa a classe Console que esta dentro do namespace System, por isto tivemos que escrever : System.Console.WriteLine. (é uma regra escrever o nome do namespace na frente da classe)

Para tornar o seu trabalho de digitação mais fácil e o seu código mais limpo e legível podemos importar um namespace que esta sendo usado com frequência e assim não precisaremos mais ficar referenciando nome do namespace ao qual a classe pertence. Vamos aplicar isto a classe Aluno:

Imports System

Public Class Aluno

    Dim notaExame As Double = 7.8

   Dim materiaExame As String = "Inglês"

  Public Sub MostraNota()

       Console.WriteLine(notaExame)

    End Sub

End Class

Como importamos o Namespace System , não precisamos fazer mais referência a ela ao usar a classe Console.

Classes - Tipos de acesso

Ao escrever suas classes você pode ou não querer que outras pessoas acessem sua funcionalidade acessando suas propriedades e chamando seus métodos.

Na OOP podemos restringir o acesso a um membro de uma classe e ter assim mais controle sobre o conteúdo da classe. Você é quem decide se vai permitir que outras pessoas acessem os métodos e propriedades da sua classe ou se o acesso somente poderá ser feito a partir da sua própria classe.

O VB.NET oferece os seguintes níveis de acesso :

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 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.

Classes - Construtor

O que é um Construtor ?

Um construtor é um método especial que deve estar presente em uma classe para que a classe possa ser instanciada. Um construtor também é usado para inicializar as variáveis membros da classe.

No VB.NET este método é usado com o nome de Sub New.

Ora, nós não criamos a nossa classe Aluno com membros e métodos e ela não esta funcionando ??? 

Eu não me lembro de ter criado nenhum construtor para a nossa classe Aluno, no entanto ela esta funcionando normalmente. Sabe porque ?

Por que quando não definimos um método construtor o VB.NET cria um construtor padrão automaticamente para nós.

Quando você instancia um objeto usando a palavra-chave New  o construtor da classe é chamado automaticamente e se você definir um construtor para sua classe é ele que será chamado. 

Então um construtor é um método que controla a inicialização de um objeto e você pode usá-lo para realizar as operações necessárias á inicialização de um objeto.

O VB.NET permite que você crie  uma rotina Sub New() dentro da sua classe para criar um construtor. O construtor é executado apenas uma vez quando você criar a instância do objeto.

Veja no exemplo abaixo a criação de um construtor para nossa classe Aluno.

Imports System

Public Class Aluno

    Dim notaExame As Double

    Dim materiaExame As String

Sub New()

         MyBase.new()  'chama o construtor da classe base

      notaExame = 0

      materiaExame = "Inglês"

End Sub

Public Sub MostraNota()

    System.Console.WriteLine(notaExame)

End Sub

End Class

O construtor da classe inicializa os campos notaExame e materiaExame.

A palavra chave MyBase é usada para se  referir aos membros da classe base quando se trabalha em uma classe derivada.

Você usa a MyBase para se referenciar a classe base imediata e seus membros públicos herdados.

Herança

Agora o VB.NET possui herança. Mas o que é herança ?

Não !!! não uma fortuna que você recebe de um parente distante !!! ...

Herança é uma característica que permite que você estenda uma classe ,ou seja, você pode criar novas classes e fazer com essas classes herdem as características da classe origem. Então você pode acrescentar novas propriedades e métodos a estas classes.

Uma classe que herda as características de outra é chamada de classe-filha ou subclasse . A classe que foi herdada é chamada de classe-Pai ou classe base ou superclasse. 

No VB.NET usamos a declaração inherits para implementar a herança. O VB.NET não suporta herança múltipla,  assim uma classe derivada pode ter uma única classe base.

Algumas considerações sobre herança:

NotInheritable Class Calculadora
End Class
 A classe Calculadora não pode ser herdada.

Vou mostrar na prática como utilizar a herança. Vamos criar uma classe que herde da classe Aluno.

Vamos chamar esta classe de Teste. Assim Aluno será a classe base e Teste a classe subclasse.

A classe não vai possuir nenhum método ou propriedade.

Vejamos como criar a classe Teste usando herança:

Class Teste: Inherits Aluno
End Class
 
Class Teste
  Inherits Aluno
End Class
 

Acima exibimos a duas maneiras de usar a palavra-chave Inherits e criar uma subclasse a partir de uma classe Pai.

Pela teoria a classe Teste vai herdar todos as propriedades e métodos da classe Aluno.

 Ao lado temos o código que instância a classe Teste. Como a classe teste herda todas as propriedades e métodos da classe Aluno , pois é uma subclasse dela, temos acesso ao método MostraNota da classe Aluno.

Vamos agora incluir o  método - ImprimeMateria -  na classe Teste :

Public Class Aluno

  

   Public notaExame As Double

    Public materiaExame As String

   Sub New()

         MyBase.new()

     notaExame = 0

     materiaExame = "Inglês"

   End Sub

  Public Sub MostraNota()

     System.Console.WriteLine(notaExame)

   End Sub

End Class


Public Class Teste

      Inherits Aluno

   Public Sub ImprimeMateria()

     Console.WriteLine(materiaExame)

   End Sub

End Class

 O novo método - ImprimeMateria - acessa a propriedade materiaExame definida como public na classe Aluno.

Se você alterar o tipo para private haverá um erro em tempo de execução.

O melhor exemplo da utilização a herança é a própria plataforma .NET  Framework , ela na verdade consiste em uma hierarquia de classes onde uma classe deriva de outra.

Assim a classe Button do namespace Windows.Forms é uma classe filha da classe ButtonBase que por sua vez é uma classe filha de Control.

Com isto creio que as bases das características OOP presentes no VB.NET já não são mais algo misterioso e obscuro para você.

Aguarde a continuação do assunto em VB.NET - Primeiros passos - Conceitos - VI  , onde continuaremos a falar sobre : sobrecarga, interfaces , classes abstratas e muito mais....


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

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#

Veja também os cursos em Vídeo Aulas :

  Gostou ?   Compartilhe no Facebook    Compartilhe no Twitter

Referências:


José Carlos Macoratti