.NET - Conceitos básicos da Programação Orientada a Objetos ( POO )
Prosseguindo com os conceitos básicos da programação orientada a objetos - POO - vou abordar neste artigo os seguintes tópicos : |
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.
1- 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.
2- Nested Class ou classes aninhadas
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 aninhadas ou internas (inner class/nested classes).
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 AlunosDim numero_ As Integer Dim nome_ As String Dim notas_ As New 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 Console.WriteLine("Aluno " & nome & " Portugues : " & portugues & " Matematica : " & matematica)
End
Sub Return notas_.getTotal / 5
End
Function Public portugues_ As Integer Public matematica_ As Integer
Return portugues_ + matematica_ End Function End Class End Class
|
Testando a classe podemos incluir o código abaixo no método Sub Main() do módulo Module1:
Module Module1 Sub Main() Dim alunos As Alunos = New Alunos(1, "Macoratti", 8, 7) Console.WriteLine(" A média das duas notas é : " & alunos.getMedia()) Console.ReadKey() End Sub End Module |
- 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.
Como não existe uma relação privilegiada
entre uma classe aninhada e sua classe "container", se você quiser acessar a
classe aninhada na classe de container, você pode usar seus membros estáticos.
Em outras palavras, você pode declarar estático todos os membros da classe
aninhada que você deseja acessar na classe de container. Aqui está um exemplo:
Module Module1 Public Class Container Public Class Aninhada Public Shared MensagemInterna As String Public Sub New() MsgBox("=- Classe Interna (Aninhada) -=") MensagemInterna = "Construtor da classe aninhada" End Sub Public Shared Sub Mostrar() MsgBox("Estudo de classes Aninhadas (Nested Classes)") End Sub End Class Public Sub New() MsgBox("-= Classe Externa (Container) =-") End Sub Public Sub Exibir() MsgBox(Aninhada.MensagemInterna) Aninhada.Mostrar() End Sub End Class Public Function Main() As Integer Dim container As Container = New Container Dim Ins As Container.Aninhada = New Container.Aninhada container.Exibir() Return 0 End Function End Module |
3- 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# e VB .NET :
using System
public class Ola
|
Module Module1Public Shared Sub Main() Console.WriteLine("Olá, Mundo eu sou o método Main()") End Sub End Module
|
C# | VB .NET |
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.
No caso da linguagem VB .NET é mais comum o método Main estar declarado em um Módulo, mas podemos declarar o método Main também uma classe conforme mostra o exemplo abaixo:
Public Class TesteMain Public Shared Sub Main() Console.WriteLine("Olá, Mundo eu sou o método Main()") Console.ReadKey() End Sub End Class |
4- 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 |
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:
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 .
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: