.NET - Conceitos básicos da POO


Prosseguindo com os conceitos básicos da programação orientada a objetos - POO - vou abordar neste artigo os seguintes tópicos :

  1. Métodos Shared
  2. Inner Class
  3. O método Main
  4. Criando uma Singleton class

Se você considerar que estes conceitos são fundamentais para quem esta iniciando com as novas linguagens da plataforma .NET :  VB.NET ou C# ; não vai me achar redundante por estar , às vezes , repetindo temas de artigos anteriores. Vamos ao que interessa.

Métodos Shared (Compartilhados/Estáticos)

Como você já deve saber .NET é inteiramente orientada a objetos de forma que todos os dados e informações estão encapsuladas dentro de classes. Desta forma quando um método esta definido no interior de uma classe nós precisamos criar uma instância da classe para poder usar o método. Não há como invocar diretamente o método.

Nota:Em VB . NET é possível criar um módulo e declarar alguns métodos públicos que podem ser chamados diretamente sem a necessidade de criar uma instância.

Existe no entanto uma maneira de usarmos os métodos de uma classe sem a necessidade de criar uma instância da classe que possuí o método : são os métodos Shared.

Os métodos Shared apresentam um mecanismo que tornam o método disponível mesmo se a classe não foi instanciada. Diferente de comportamento de um método padrão , um método Shared compartilha toda a informação e funcionalidade do método com todas as demais instância da classe. Assim , os métodos Shared são utilizados para realizar operações que não estão associadas com qualquer instância de objeto particular.

A classe Math possui diversos métodos Shared ( cos , sin , tan , etc.) e eles podem ser usados sem que a classe seja instanciada. ( Se você conhece Java já percebeu que eu estou falando do método Static)

Para declarar um método Shared (compartilhado) usamos a palavra chave: Shared.

Abaixo um exemplo de uma classe onde temos um método Shared:

Public Class MetodoSharedDemo
         Public Shared Sub metodoShared
                msgbox " Olá , eu sou um método shared "
         End Sub
End Class

Para usar o método podemos usar :    MetodoSharedDemo.metodoShared()

E o resultado será a execução do código em :  msgbox " Olá , eu sou um método shared "

Percebeu que chamamos o método diretamente a partir da classe. Você pode no entanto criar uma instância da classe e a seguir chamar o método Shared que tudo vai funcionar da mesma forma. Veja:

Dim objShared as New MetodoSharedDemo
objShared.metodoShared()

Os métodos Shared podem ser muito valiosos mas devem ser usados com critério pois funcionam como o conceito de uma variável global que expõe o seu conteúdo para todas as instâncias das classe , sendo que qualquer alteração do seu conteúdo se reflete em todas essas instâncias. Além disto você não pode referenciar um membro de instância no interior de um método Shared.

nota: podemos usar a palavra chave Shared para declarar variáveis estáticas.

Inner Class (Classes Internas)

Todas as definições de classe sobre qual abordei em meus artigos até agora eram definidas no escopo de arquivo , ou seja, as classes eram definidas em arquivos , mas não dentro de outras classes. O VB.NET permite o recurso de definir classes dentro de outras classes , o que chamamos de classes internas (inner class).

Você deve estar se perguntando qual seria a utilidade disto. Podemos pensar em alguns cenários onde talvez precisamos definir uma coleção de variáveis ; ou funções e eventos a serem definidos e chamados usando um nome único (o nome da classe).

A seguir um exemplo de utilização de classe interna onde eu estou definindo uma classe Alunos que trata a informação básica : número e nome e uma classe definida dentro da classe Aluno : a classe Notas onde a informação tratada refere-se a pontuação em algumas disciplinas:

Public Class Alunos

      Dim numero_ As Integer
      Dim nome_    As String
      Dim notas_    As Notas()

      Public sub New( numero As Integer, nome As String , portugues As Integer, matematica As integer)
                  numero_               = numero
                  nome_                  = nome
                  notas_.portugues   = portugues      
                  notas_.matematica = matematica
      End Sub

      Public Function getMedia() As Integer
            Return notas_.getTotal / 5
      End function

      Private Class Alunos

           Public portugues_ As Integer
           Public matemtaica_ As Integer

           Public Function getTotal() As Integer
                    return portugues_ + matematica_
           End Function

       End Class 

 End Class
         

- A classe Alunos expõe somente o seu construtor e o método getMedia ( ambos são do tipo Public)               
- Todas as outras definições estão encapsuladas na classe
- Na classe Alunos definimos o tipo Notas dentro do qual estou tratando as informações referente a notas de português e matemática.
- Na classe Alunos eu estou usando a classe interna Notas() que é visível somente dentro da classe Alunos.

Este é um exemplo básico de utilização e criação de uma classe interna.

O método Main()

Tanto Java como C# e VB.NET possuem um método estático (shared) chamado Main() que é responsável pela inicialização de cada aplicação. Assim podemos usar o método Main() para realizar testes em nossa aplicação.

Abaixo um exemplo de utilização do método Main() em c#

using System

public class Ola
{
   public static void Main()
   {
    console.writeline(" olá , eu sou o metodo Main.);
   }
}

Aqui o método Main é declarado void por que não retorna valor algum. O método Main de uma classe se declarado conforme acima é executado na execução da aplicação.

Criando uma classe Singleton

Uma classe Singleton é aquele que permite a criação de somente uma única instância da classe. Se você considerar que uma instância de classe é criada usando o operador New irá verificar que este tipo de classe permite a execução deste operador apenas um vez.

Ter somente uma instância pode ser importante em algumas situações : sistema de arquivos , gerenciador de janelas , gerenciador de impressoras. Veja a seguir um exemplo de classe Singleton:

Imports System
Imports System.Windows.Forms
Imports System.ComponentModel

Public Class SingletonForm : Inherits Form Private

  Shared minhaInstancia As SingletonForm Private

  Sub New()
    Me.Text = "Singleton Formulário " & "[Data de criação : " &  DateTime.Now.ToString() & "]"
    Me.Width = 450
    Me.Height = 150
  End Sub
 
  Protected Overrides Sub OnClosing (ByVal e As CancelEventArgs)
    e.Cancel = True
    Me.Hide()
  End Sub

  Public Shared Function GetInstancia() As SingletonForm
       If minhaInstancia Is Nothing Then
              minhaInstancia = New SingletonForm()
      End If
      Return minhaInstancia
  End Function

End Class
 

Observe que :

- a classe tem somente um construtor do tipo privado
- para obter uma instância da classe temos o método shared GetIstancia e uma variável shared do tipo SingletonForm chamada minhaInstancia
- O método getInstancia retorna a variável minhaInstancia
- O método verifica se minhaInstancia é null e em caso positivo chama o construtor

    If minhaInstancia Is Nothing Then
         minhaInstancia = New SingletonForm()
    End If

- O método retorna  minhaInstancia

Para obter uma referência a única instância da classe singletonForm você não usa o construtor da classe mas chama o método getInstancia conforme o código abaixo:

Dim meuForm As SingletonForm = SingletonForm.GetInstancia()

Assim que você obter a instância você chama os membros da classe como uma classe normal qualquer. Como a classe extende da classe Form (Inherits Form Private ) podemos usar o método Show conforme o código a seguir

myForm.Show()

Para evitar que a instância da classe seja destruída o método Onclosing , que ocorre quando o formulário é fechado , foi sobreposto:
  Protected Overrides Sub OnClosing(ByVal e As CancelEventArgs)
    e.Cancel = True
    Me.Hide()
  End Sub
Para testar a classe acima siga o roteiro:
  1. Salve o códigoi no arquivo SingletonForm.vb
  2. Abre o prompt de comando.
  3. Altere o diretório para o diretório onde esta o arquivo SingletonForm.vb .
  4. Digite o seguinte comando a seguir e pressione Enter.
vbc /t:library /r:System.dll,System.Windows.Forms.dll SingletonForm.vb

Você irá obter a DLL : SingletonForm.dll

E , até o próximo artigo sobre conceitos OOP .


José Carlos Macoratti