none
Por que usar Get e Set se funciona sem eles? RRS feed

  • Pergunta

  • Prezados, boa noite!

    Sou experiente em VB6, mas iniciante em VB.net e estou com a seguinte dúvida em classes.

    Para testar como funciona, criei uma classe para validar CPF desta forma:

    Public Class CPF
        Private dadosArray() As String = {"11111111111", "22222222222", "33333333333", "44444444444", _
                                                  "55555555555", "66666666666", "77777777777", "88888888888", "99999999999"}
        Private m_CPF As String

        Public Sub New()

        End Sub

        Public Sub New(ByVal CPF As String, ByVal Cu As String)
            m_CPF = CPF
        End Sub

        Public Property CPF()
            Get
                Return m_CPF
            End Get
            Set(value)
                m_CPF = value
            End Set
        End Property

        Public Function ValidaCPF() As String
            Dim i, x, n1, n2 As Integer

            m_CPF = m_CPF.Substring(0, 3) + m_CPF.Substring(4, 3) + m_CPF.Substring(8, 3) + m_CPF.Substring(12)

            For i = 0 To dadosArray.Length - 1
                If m_CPF.Length <> 11 Or dadosArray(i).Equals(m_CPF) Then
                    Return False
                End If
            Next

            For x = 0 To 1
                n1 = 0
                For i = 0 To 8 + x
                    n1 = n1 + Val(m_CPF.Substring(i, 1)) * (10 + x - i)
                Next
                n2 = 11 - (n1 - (Int(n1 / 11) * 11))
                If n2 = 10 Or n2 = 11 Then n2 = 0

                If n2 <> Val(m_CPF.Substring(9 + x, 1)) Then
                    Return False
                End If
            Next

            Return True

        End Function
    End Class

    Em um form com uma caixa de texto e um botão, inseri o seguinte código:

    Public Class TestaCPF
        Public cl As New CPF

        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            cl.CPF = TxtCPF.Text

            If cl.ValidaCPF() = True Then
                MsgBox("CPF Válido")
            Else
                MsgBox("CPF Inválido")
            End If
        End Sub
    End Class

    Tudo ótimo! Funciona perfeitamente.

    Não satisfeito, mudei o código da classe CPF para o seguinte:

    Public Class CPF
        Private dadosArray() As String = {"11111111111", "22222222222", "33333333333", "44444444444", _
                                                  "55555555555", "66666666666", "77777777777", "88888888888", "99999999999"}

        Public Function ValidaCPF(ByVal CPF As String) As Boolean
            Dim i, x, n1, n2 As Integer

            CPF = CPF.Substring(0, 3) + CPF.Substring(4, 3) + CPF.Substring(8, 3) + CPF.Substring(12)

            For i = 0 To dadosArray.Length - 1
                If CPF.Length <> 11 Or dadosArray(i).Equals(CPF) Then
                    Return False
                End If
            Next

            For x = 0 To 1
                n1 = 0
                For i = 0 To 8 + x
                    n1 = n1 + Val(CPF.Substring(i, 1)) * (10 + x - i)
                Next
                n2 = 11 - (n1 - (Int(n1 / 11) * 11))
                If n2 = 10 Or n2 = 11 Then n2 = 0

                If n2 <> Val(CPF.Substring(9 + x, 1)) Then
                    Return False
                End If
            Next

            Return True

        End Function
    End Class

    E mudei o código do form para:

    Public Class TestaCPF
        Public cl As New CPF

        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            If cl.ValidaCPF(TxtCPF.Text) = True Then
                MsgBox("CPF Válido")
            Else
                MsgBox("CPF Inválido")
            End If
        End Sub
    End Class

    E voilà, deu certo também.

    Aí, então, está a minha dúvida: para que usar os Privates, Properties, Gets e Sets da vida se tudo funciona sem eles?

    Agradeço uma explicação.

    Sds.

    Mauro

    sexta-feira, 26 de outubro de 2012 22:41

Respostas

  • Esse não é o exemplo certo para perceber o uso das propriedades nas classes. Você está usando apenas uma função.

    Os Set e Get são para definir propriedades de entrada e saida de valores na classe, de forma a os poder validar.

    Imagine que o CPF era um membro de uma outra classe e você queria verificar a sua validade ao introduzi-lo. Aí iria usar uma Property CPF(), em que no Set(value) iria chamar a função ValidaCPF(value) de forma a verificar a sua validade e só atribuir value ao membro m_CPF em caso de ser válido.

    Exemplo para a propriedade:

        Public Property CPF()
            Get
                Return m_CPF
            End Get
            Set(value)
                If ValidaCPF(value) Then
                    m_CPF = value
                Else
                    'MsgBox("CPF Inválido")
                End If
            End Set
        End Property

    A função é a mesma que você tem.


    


    • Editado Nando Freitas domingo, 28 de outubro de 2012 11:42
    • Sugerido como Resposta Levi DomingosModerator domingo, 28 de outubro de 2012 18:55
    • Marcado como Resposta Pozzato segunda-feira, 29 de outubro de 2012 17:06
    domingo, 28 de outubro de 2012 11:32
  • @Pozzato

    As propeidades serevem pra protejer os campos que criamos numa class, por ler ou simplesmente escrever.

    Get- ler. significa que voce so pode ler a informcao que esta neste campo. Se voce tentar passar informcao nova ela nao compila.

    Set - significa apenas escrita, um campo de escrita. Se voce tentar informar que um textbox = a este campo ele nao compila gera erro.

    No antigo VB a gente simplesmente difinia desta form Dim valor as string. Este campo tanto era de leitura e gravacao. Ficava um pouco complicado quano o programador tinha como objectivo apanenas passar este campo como apenas de leitura. 


    http://malange-levi.blogspot.co.uk/

    • Marcado como Resposta Pozzato segunda-feira, 29 de outubro de 2012 17:06
    domingo, 28 de outubro de 2012 19:32
    Moderador

Todas as Respostas

  • Esse não é o exemplo certo para perceber o uso das propriedades nas classes. Você está usando apenas uma função.

    Os Set e Get são para definir propriedades de entrada e saida de valores na classe, de forma a os poder validar.

    Imagine que o CPF era um membro de uma outra classe e você queria verificar a sua validade ao introduzi-lo. Aí iria usar uma Property CPF(), em que no Set(value) iria chamar a função ValidaCPF(value) de forma a verificar a sua validade e só atribuir value ao membro m_CPF em caso de ser válido.

    Exemplo para a propriedade:

        Public Property CPF()
            Get
                Return m_CPF
            End Get
            Set(value)
                If ValidaCPF(value) Then
                    m_CPF = value
                Else
                    'MsgBox("CPF Inválido")
                End If
            End Set
        End Property

    A função é a mesma que você tem.


    


    • Editado Nando Freitas domingo, 28 de outubro de 2012 11:42
    • Sugerido como Resposta Levi DomingosModerator domingo, 28 de outubro de 2012 18:55
    • Marcado como Resposta Pozzato segunda-feira, 29 de outubro de 2012 17:06
    domingo, 28 de outubro de 2012 11:32
  • @Pozzato

    As propeidades serevem pra protejer os campos que criamos numa class, por ler ou simplesmente escrever.

    Get- ler. significa que voce so pode ler a informcao que esta neste campo. Se voce tentar passar informcao nova ela nao compila.

    Set - significa apenas escrita, um campo de escrita. Se voce tentar informar que um textbox = a este campo ele nao compila gera erro.

    No antigo VB a gente simplesmente difinia desta form Dim valor as string. Este campo tanto era de leitura e gravacao. Ficava um pouco complicado quano o programador tinha como objectivo apanenas passar este campo como apenas de leitura. 


    http://malange-levi.blogspot.co.uk/

    • Marcado como Resposta Pozzato segunda-feira, 29 de outubro de 2012 17:06
    domingo, 28 de outubro de 2012 19:32
    Moderador