INICIANTE OOP
Citação::
Sim e não... O que você quer fazer é uma padronização, pelo que entendi. Você quer que outras classes que tenham dados de Pessoa(como Funcionario), automaticamente tenham, além das propriedades de Funcionario, também as propriedades de Pessoa. é isso que você quer?
Exatamente,eu pensava que isso era Herança.
Isso é recomendável ?
Bem, para o seu caso, acho que não teria necessidade. Você vai ter muitas outras classes que terão DIRETAMENTE propriedades de Pessoa? O que quero dizer é no seu projeto terão muitas outras classes que representam algum tipo de pessoa?
veja essa classe
Essas propriedades dessa classe Pessoa, pelo que entendi como herança.
Eu aproveitaria(herdaria) nas classes Cliente, Funcionario e Fornecedor.
Não precisando digitar nas respectivas classes mencionadas o que já tinha escrito na classe Pessoa.
Parece que estou equivocado com o conceito de herança.
Se preciso digitar nas classes tudo o que já digitei na classe pessoa, me dê um exemplo ,mais simples que seja de herança ,por favor.
Public Class Pessoa
#Region [Ô]variaveis[Ô]
Private _id As Integer
Private _nome as String
Private _cidade as String
Private _endereco as String
Private _numero as String
Private _bairro as String
Private _cidade as String
Private _cep as String
#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
Essas propriedades dessa classe Pessoa, pelo que entendi como herança.
Eu aproveitaria(herdaria) nas classes Cliente, Funcionario e Fornecedor.
Não precisando digitar nas respectivas classes mencionadas o que já tinha escrito na classe Pessoa.
Parece que estou equivocado com o conceito de herança.
Se preciso digitar nas classes tudo o que já digitei na classe pessoa, me dê um exemplo ,mais simples que seja de herança ,por favor.
Citação:Essas propriedades dessa classe Pessoa, pelo que entendi como herança.
Eu aproveitaria(herdaria) nas classes Cliente, Funcionario e Fornecedor.
Não precisando digitar nas respectivas classes mencionadas o que já tinha escrito na classe Pessoa.
Parece que estou equivocado com o conceito de herança.
Se preciso digitar nas classes tudo o que já digitei na classe pessoa, me dê um exemplo ,mais simples que seja de herança ,por favor.
Um pouco equivocado sim. O que você quer fazer, é possÃvel fazer usando herança:
Public Class Funcionario
Inherits Pessoa
[ô]propriedades de funcionário aqui
End Class
Nesse caso, Funcionario herda a classe Pessoa e as propriedades de Pessoa estariam também disponÃveis na classe Funcionario.
Mas o caso é que na sua tabela Funcionario, você está gravando alguns dados de pessoa porque você tem alguns campos de pessoa nela, então o que você está querendo fazer é uma espécie relacionamento. Então para continuar com a sua modelagem, terá que decidir:
1 - Gravar nas tabelas(correspondentes às classes) além dos dados da classe, também os dados da Pessoa
2 - Gravar nas tabelas(correspondentes às classes) somente os dados da classe e um campo referenciando um registro de Pessoa
3 - Gravar qualquer tipo de Pessoa(Cliente, Funcionario, Fornecedor), em uma única tabela e nessa tabela especificar um [Ô]TipoPessoa[Ô], para identificar o que é o que.
Sei que o que você deve estar pensando é: Vou perguntar qual a melhor opção, e a resposta é, todas e nenhuma. Depende do que você está querendo fazer depois disso.
Na verdade , o que sempre tive em mente é essa opção.
O que não entendi, foi quando você disse que isso não é herança e sim interfaceamento.
Não que você esteja errado,longe disso.
é que o pouco entendimento sobre herança ,parece que está errado.
Se eu declarar as propriedades da classe pessoa que são comuns nas outras classes é certo , conforme as boas práticas ?
1 - Gravar nas tabelas(correspondentes às classes) além dos dados da classe, também os dados da Pessoa
O que não entendi, foi quando você disse que isso não é herança e sim interfaceamento.
Não que você esteja errado,longe disso.
é que o pouco entendimento sobre herança ,parece que está errado.
Se eu declarar as propriedades da classe pessoa que são comuns nas outras classes é certo , conforme as boas práticas ?
Conforme boas práticas, cada coisa é uma coisa, cada objeto é um objeto. Então pessoa é uma coisa, funcionário é outra. Funcionário pode ter herança de Pessoa, mas a gravação disso deveria ser em tabelas separadas e na classe filha(no caso funcionário) ter um campo para gravar o Id da pessoa ao qual aquele funcionário se refere.
Em relação a gravação dos dados,eu vou gravar cada objeto em sua respectiva tabela:
funcionario -> Tabela Funcionario
cliente -> Tabela cliente
fornecedor -> Tabela Fornecedor
O que eu não estou sabendo explicar é que tenho lido e entendido, que eu poderia criar uma super classe e várias classes especializadas.
Nessa super classe eu criaria uma propriedade comum em todas as classes especializadas(sub classe),como por exemplo nome.
Essa propriedade eu usaria nas subclasses através da herança, assim sendo, não precisaria criar essa mesma propriedade nas outras classes.
Enfim , é isso, que entendi até agora como herança.
até mais
funcionario -> Tabela Funcionario
cliente -> Tabela cliente
fornecedor -> Tabela Fornecedor
O que eu não estou sabendo explicar é que tenho lido e entendido, que eu poderia criar uma super classe e várias classes especializadas.
Nessa super classe eu criaria uma propriedade comum em todas as classes especializadas(sub classe),como por exemplo nome.
Essa propriedade eu usaria nas subclasses através da herança, assim sendo, não precisaria criar essa mesma propriedade nas outras classes.
Enfim , é isso, que entendi até agora como herança.
até mais
E você está correto. é isso mesmo. Você vai ter uma classe que será herdada em outras. Mas veja bem, o banco de dados, não segue esse tipo de padrão e nele, você precisa ligar uma coisa na outra. Então nas tabelas referentes à s subclasses, você vai ter que ter um campo que identifique o objeto na classe superior.
Para ficar mais claro para o meu entendimento.
Como herdei as propriedades _nome e _cidade da classe Pessoa tive que alterá-las de Private para Public.
Sabendo que na gravarCliente e gravarFornecedor em suas respectivas classes, essas propriedades só estarão visÃveis se estiverem como públicas.
Respeitando a OOP, sigo fazendo assim, alterando de Private para Public como fiz no gravarFuncionario ou é melhor criar novamente em suas classes e colocá-las como Private ?
E para finalizar , quando gravei o campo salario que na tabela está como Double, não precisou usar o comando Replace, sabe dizer o porquê.
Como herdei as propriedades _nome e _cidade da classe Pessoa tive que alterá-las de Private para Public.
Sabendo que na gravarCliente e gravarFornecedor em suas respectivas classes, essas propriedades só estarão visÃveis se estiverem como públicas.
Respeitando a OOP, sigo fazendo assim, alterando de Private para Public como fiz no gravarFuncionario ou é melhor criar novamente em suas classes e colocá-las como Private ?
E para finalizar , quando gravei o campo salario que na tabela está como Double, não precisou usar o comando Replace, sabe dizer o porquê.
1 - _nome e _cidade, são na sua classe, variáveis privadas que servem para guardar o valor da propriedade, elas não são as propriedades em si.
2 - Em gravarCliente e gravarFornecedor, você deveria usar as propriedades da pessoa herdadas ou implementadas por interface.
3 - As propriedades que guardam os valores das propriedades, devem ser sempre privadas, e você deve usar a propriedade não a variável que guarda seu valor.
4 - Funcionou porque você está usando o tipo de dados correto e parametrizando sua query corretamente. Essa é uma das razões por eu reforçar tanto que se usem parâmetros nas suas queries ao invés de concatenar string.
2 - Em gravarCliente e gravarFornecedor, você deveria usar as propriedades da pessoa herdadas ou implementadas por interface.
3 - As propriedades que guardam os valores das propriedades, devem ser sempre privadas, e você deve usar a propriedade não a variável que guarda seu valor.
4 - Funcionou porque você está usando o tipo de dados correto e parametrizando sua query corretamente. Essa é uma das razões por eu reforçar tanto que se usem parâmetros nas suas queries ao invés de concatenar string.
Tópico encerrado , respostas não são mais permitidas