.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 :
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 |
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 .
![]()
José Carlos Macoratti