VB.NET - Compreendendo Properties
Ultimamente ouve-se falar muito sobre Orientação a Objetos ; podemos dizer que a programação orientada a objetos 'esta na moda' e é fácil perceber isto pela quantidade de artigos, livros a respeito do assunto. Para quem já trabalhava com o Visual Basic a orientação a objetos não deve ser uma novidade.
A linguagem oferecia muitos recursos presentes em linguagens 'puramente' orientada a objetos ; com a chegada do VB.NET o que faltava foi completado e temos agora uma verdadeira linguagem orientada a objetos. Isto é muito bom , mas continuar usando a linguagem sem usar os recursos que ela oferece e sem compreender o que mudou não acrescenta nada à sua experiência. Por este motivo gosto de publicar artigos abordando assuntos relativos a conceitos sobre orientação a objetos.
Hoje vou falar de Propriedades (properties). Para acompanhar este artigo sugiro que você leia os artigos que já publiquei com conceitos sobre OOP :
Todos 
os objetos possuem atributos que são usados para definir e retornar o estado do 
objeto. Estes atributos são propriedades que muitas vezes você configura usando 
o mouse ; na verdade cada objeto expõe um conjunto específico de propriedades . 
Vou usar aqui o exemplo citado no artigo -
NET -  UML - objetos e classes  
- onde criei um objeto para representar meu cachorro Bilu. 
 
O objeto cachorro possuía certas propriedades que são comuns a todos os cachorros, estas propriedades incluíam atributos como nome , cor , altura ,tamanho , peso, etc. Todos os cachorros possuem estas propriedades , embora para diferentes cachorros os valores das propriedades sejam diferentes.
Vamos então criar uma classe para o nosso objeto cachorro:
| Public Class Cachorro 
    Public altura As Integer
    Public nome As StringPublic tamanho As Integer Public cor As String  
    Public  Sub New()
        nome="Bilu"
        cor= "Marrom"End Sub Public Sub New(ByVal alt As Integer, ByVal nome As String , _ ByVal tam As Integer, ByVal cores As String) altura = alt tamanho = tam cor= cores End Sub 
    Public  Sub latir()	Console.Writeline("Au , au, au, au, ...")End Sub Public Sub comer() 	Console.Writeline(" Nham, Nham, grrrr....")End Sub End Class 
 | A classe 
    Cachorro possui : 4 propriedades : altura ,nome, tamanho e cor 2 construtores : Um vazio e outro onde podemos definir a altura, nome, tamanho e cor - 
    Public  Sub New() 2 Métodos : latir() e comer() Obs:  | 
Como você já deve saber , para eu usar a classe devo instanciar um objeto da classe Cachorro. Vamos fazer isto e em seguida atribuir um valor a propriedade nome e à propriedade Cor
| Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim c As New Cachorro
        c.nome = "Bob"c.cor = "Branco"      MsgBox("Cachorro = " & c.nome & vbCrLf & " Cor = " & c.cor)End Sub | 
Instanciei um objeto da classe Cachorro e em seguida atribui o valor Bob ao nome e Branco a cor.
Você percebeu que eu alterei o valor da propriedade nome , da classe Cachorro ?
Observe que no construtor , sem atributos da classe , eu estou definindo o nome como Bilu e a cor como Marrom.
Quando eu executar este projeto o objeto c será criado , o construtor da classe Cachorro será executado atribuindo o nome Bilu e a cor Marrom , mas , em seguida o código irá alterar estes valores para Bob e Branco.
Os valores que serão exibidos na caixa de mensagem são:

Como as variáveis que definem as propriedades foram definidas como do tipo Public elas são acessíveis por qualquer programa fora da classe Cachorro. Basta instanciar um objeto da classe e pronto.
Este é um efeito altamente indesejável , pois desta forma qualquer poderia alterar os valores das variáveis da minha classe , e eu posso não querer que isto aconteça .
Se você pensou em definir como Private as variáveis e assim resolver o problema , há um pequeno problema : fazendo assim você não terá acesso as variáveis.
O que eu posso fazer para evitar que isto aconteça ?
Simples , criando propriedades. Vamos ver como fica...???
Vou criar duas propriedades : nomeCachorro e corCachorro
A propriedade corCachorro eu desejo que possa ser acessada e alterada
A propriedade nomeCachorro eu não desejo que possa ser alterada. Vou atribuir um valor a propriedade na classe e ela não pode permitir a alteração.
Veja o código as duas propriedades abaixo:( O código deverá ser incluído na classe Cachorro)
| Public Property corCachorro() As String Get Return cor End Get Set(ByVal Value As String) cor = Value End Set End Property Public ReadOnly Property nomeCachorro() As String Get Return nome End Get End Property 
 | 
Para poder realizar estas alterações deveremos alterar o tipo de acesso das variáveis cor e nome para Private. O código completo da classe ficaria assim :
| Public Class Cachorro 
    Public altura As Integer
    Private nome As StringPublic tamanho As Integer Private cor As String  
    Public  Sub New()
        nome="Bilu"End Sub Public Sub New(ByVal alt As Integer, ByVal nome As String , ByVal tam As Integer, ByVal cores As String) altura = alt tamanho = tam cor= cores End Sub 
    Public  Sub latir()	Console.Writeline("Au , au, au, au, ...")End Sub Public Sub comer() 	Console.Writeline(" Nham, Nham, grrrr....")End Sub 
     Public Property corCachorro() As StringGet Return cor End Get Set(ByVal Value As String) cor = Value End Set End Property Public ReadOnly Property nomeCachorro() As String Get Return nome End Get End Property End Class 
 | 
Agora as coisas mudaram. O que mudou ???
As variáveis nome e cor são Private e não podem ser acessadas diretamente. O acesso aos valores destas variáveis agora é feito pelas Propriedades nomeCachorro e corCachorro.
A propriedade nomeCachorro é do tipo Public e possui um Get a partir do qual obtemos o valor da variável e um Set a partir do qual podemos atribuir valores a variável cor.
A propriedade nomeCachorro e do tipo Public mas ReadOnly , ou seja , somente leitura. Logo ela não possui um Set mas somente o Get pois eu só posso ler o valor da variável atribuida na classe Cachorro.
Com isto concluímos que propriedades são variáveis especiais que permitem encapsular o código da minha classe.
Geralmente as propriedades possuem os procedimentos Get e Set mas podemos usar os modificadores :
Agora somente a variável cor pode ser acessada e alterada , a variável nome não pode ser acessada pois a propriedade nomeCachorro embora seja do tipo Public é somente leitura.(ReadOnly)
Você pode também incluir um código de validação na propriedade e permitir a alteração somente com base em alguns critérios. Por exemplo podemos criar a propriedade alturaCachorro que define o valor da altura de um cachorro e permitir que ela seja alterada somente para valores menores que 10 . Veja como fica o código :
| Public Property alturaCachorro() As Integer Get Return altura End Get Set(ByVal Value As Integer) If altura < 10 Then altura = Value End If End Set End Property | 
Espero que o conceito de Propriedades tenha ficado claro para você pois ele é um dos fundamentos da OOP.
Até mais ver ...
| 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 Facebook
  
 Compartilhe no Twitter
 
Compartilhe no Twitter
 
Referências: