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 String Public 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 String Public 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 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 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 Twitter
Referências: