INICIANTE OOP
Em todos os lugares dizem :
- Vantagens são inúmeras.
Ok , acredito.
Só que entender o conceito e colocar na prática inicialmente é difÃcil.
Me vejam como uma criança(criança = criança de antigamente,que o passatempo era brincar de bolinha,pião e jogar bola, do tempo em que a tv era preto e branco) que vai ao primeiro dia de aula e a professora coloca na lousa impiedosamente as vogais.
Por mais simples que possa parecer,para a criança é complicado.
é aà que me encontro nesse campo chamado OOP.
Classes, herança,polimorfismo,abstração,interfaces,entidades para quem brinca/tenta com paradigma procedural é duro.
Então de tanto ler sobre OOP,resolvi tentar aprender.
Para aprender, só praticando.
Então o meu pontapé inicial é gravar na tabela funcionários.
Criei uma classe Pessoa com as propriedades (Id,Nome,Cidade).
Criei uma classe Funcionario com as propriedades (Cpf,Cargo,Salario).
Criei uma classe Conexao.
Criei uma classe LimparControles.
As dúvidas iniciais.
Isso que fiz pode ser considerado OOP ?
Qual seria o próximo passo ? (Se a resposta da primeira questão for positiva)
Obrigado a todos desde já.
Eis as classes
Citação:Imports MySql.Data.MySqlClient
Public Class Conexao
Public cnn As MySqlConnection
Public cmd As MySqlCommand
Public Sub conOpen()
cnn = New MySqlConnection([Ô]server=localhost;userid=root;database=empresa;password=mbr2907X;port=3306[Ô])
cnn.Open()
End Sub
Public Sub conClose()
cnn.Close()
cnn.Dispose()
End Sub
End Class
Citação:Imports MySql.Data.MySqlClient
Public Class Funcionario
Inherits Pessoa
Private _cpf As String
Private _cargo As String
Private _salario As Double
Public Property Cpf() As String
Get
Return _cpf
End Get
Set(value As String)
_cpf = value
End Set
End Property
Public Property Cargo() As String
Get
Return _cargo
End Get
Set(value As String)
_cargo = value
End Set
End Property
Public Property Salario() As Double
Get
Return _salario
End Get
Set(value As Double)
_salario = value
End Set
End Property
Public Sub gravarFuncionario(ByVal Nome As String, ByVal Cidade As String, ByVal Cpf As String, ByVal Cargo As String, ByVal Salario As Double)
Dim c As New Conexao
Try
c.conOpen()
Dim sql As String = [Ô]insert into funcionarios(nome,cpf,cidade,cargo,salario)values(@nome,@cpf,@cidade,@cargo,@salario)[Ô]
c.cmd = New MySqlCommand(sql, c.cnn)
With c.cmd
.Parameters.AddWithValue([Ô]@nome[Ô], Nome)
.Parameters.AddWithValue([Ô]@cpf[Ô], Cpf)
.Parameters.AddWithValue([Ô]@cidade[Ô], Cidade)
.Parameters.AddWithValue([Ô]@cargo[Ô], Cargo)
.Parameters.AddWithValue([Ô]@salario[Ô], Salario)
.ExecuteNonQuery()
End With
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
c.conClose()
End Try
End Sub
End Class
Citação:Public Class Pessoa
#Region [Ô]variaveis[Ô]
Private _id As Integer
Private _nome As Integer
Private _cidade As Integer
#End Region
#Region [Ô]propriedades[Ô]
Public Property ID() As Integer
Get
Return _id
End Get
Set(value As Integer)
_id = value
End Set
End Property
Public Property Nome() As String
Get
Return _nome
End Get
Set(value As String)
_nome = value
End Set
End Property
Public Property Cidade() As String
Get
Return _cidade
End Get
Set(value As String)
_cidade = value
End Set
End Property
#End Region
End Class
E no formulário
Citação:Public Class Form1
Dim f As New Funcionario
Dim l As New LimparControles
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
f.gravarFuncionario(txtNome.Text, txtCpf.Text, txtCidade.Text, txtCargo.Text, txtSalario.Text)
l.Limpar(Me)
End Sub
End Class
Public Sub gravarFuncionario()
Dim c As New Conexao
Try
c.conOpen()
Dim sql As String = [Ô]insert into funcionarios(nome,cpf,cidade,cargo,salario)values(@nome,@cpf,@cidade,@cargo,@salario)[Ô]
c.cmd = New MySqlCommand(sql, c.cnn)
With c.cmd
.Parameters.AddWithValue([Ô]@nome[Ô], _nome)
.Parameters.AddWithValue([Ô]@cpf[Ô], _cpf)
.Parameters.AddWithValue([Ô]@cidade[Ô], _cidade)
.Parameters.AddWithValue([Ô]@cargo[Ô], _cargo)
.Parameters.AddWithValue([Ô]@salario[Ô], _salario)
.ExecuteNonQuery()
End With
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
c.conClose()
End Try
End Sub
E no seu form:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim func As New Funcionario
func.Nome = txtNome.Text
func.Cpf = txtCPF.Text
......
func.gravarFuncionario()
l.Limpar(Me)
End Sub
Mas realmente, parabéns pela iniciativa e pelo esforço!
Tive que mudar as variáveis _nome e _cidade de private para public na classe Pessoa para ficar acessÃvel nessa parte :
Public Sub gravarFuncionario()
Dim c As New Conexao
Try
c.conOpen()
Dim sql As String = [Ô]insert into funcionarios(nome,cpf,cidade,cargo,salario)values(@nome,@cpf,@cidade,@cargo,@salario)[Ô]
c.cmd = New MySqlCommand(sql, c.cnn)
With c.cmd
.Parameters.AddWithValue([Ô]@nome[Ô], _nome)
.Parameters.AddWithValue([Ô]@cpf[Ô], _cpf)
.Parameters.AddWithValue([Ô]@cidade[Ô], _cidade)
.Parameters.AddWithValue([Ô]@cargo[Ô], _cargo)
.Parameters.AddWithValue([Ô]@salario[Ô], _salario)
.ExecuteNonQuery()
End With
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
c.conClose()
End Try
End Sub
O que me intrigou foi que não precisei usar o Replace para fazer a gravação do campo salário, que na tabela está como double.
Gravou normalmente.Sabe falar o porquê disso?
Nilson
Acredito que seja por aÃ, como você comentou.Como não sei absolutamente nada ainda, não consigo enxergar o que já está claro para o pessoal.
até mais.
Minhas dificuldades são muito parecidas com as suas.
Irei começar meu [Ô]estudo[Ô], para futura migração para OOP. (sei que estou muito atrasado).
Parabéns pela iniciativa.
Citação::
ADHEL, estou exatamente como você, comecei com o velho clipper e hoje estou com o VB6.
Minhas dificuldades são muito parecidas com as suas.
Irei começar meu [Ô]estudo[Ô], para futura migração para OOP. (sei que estou muito atrasado).
Parabéns pela iniciativa.
Obrigado EDUFS.
Com tanta gente capaz recomendando oop,não se pode ignorar.
Citação::
A sub [Ô]gravarFuncionario[Ô], ficaria dentro da classe [Ô]Funcionario[Ô], assim não precisaria tornar as variáveis internas, públicas.
A sub gravaFuncionario está dentro da classe Funcionario,essas variáveis que mudei eu herdei da classe Pessoa.
Quando muda para private veja a imagem
Veja a classe Funcionario
Imports MySql.Data.MySqlClient
Public Class Funcionario
Inherits Pessoa
Dim c As New Conexao
Private _cpf As String
Private _cargo As String
Private _salario As Double
Public Property Cpf() As String
Get
Return _cpf
End Get
Set(value As String)
_cpf = value
End Set
End Property
Public Property Cargo() As String
Get
Return _cargo
End Get
Set(value As String)
_cargo = value
End Set
End Property
Public Property Salario() As Double
Get
Return _salario
End Get
Set(value As Double)
_salario = value
End Set
End Property
Public Sub gravarFuncionario()
Try
c.conOpen()
Dim sql As String = [Ô]insert into funcionarios(nome,cpf,cidade,cargo,salario)values(@nome,@cpf,@cidade,@cargo,@salario)[Ô]
c.cmd = New MySqlCommand(sql, c.cnn)
With c.cmd
.Parameters.AddWithValue([Ô]@nome[Ô], _nome)
.Parameters.AddWithValue([Ô]@cpf[Ô], _cpf)
.Parameters.AddWithValue([Ô]@cidade[Ô], _cidade)
.Parameters.AddWithValue([Ô]@cargo[Ô], _cargo)
.Parameters.AddWithValue([Ô]@salario[Ô], _salario)
.ExecuteNonQuery()
End With
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
c.conClose()
End Try
End Sub
End Class