Olá pessoal, vou falar um pouco sobre herança mostrarei um exemplo prático de como podemos esta fazendo uso do mesmo e reaproveitando o código, e para melhor entendimento sobre o assunto vamos ver um pequeno resumo teórico. Primeiro vamos entender algumas coisas: as dificuldades do modelo estruturado e a busca por um novo padrão.
Os métodos empregados como modelo para o desenvolvimento de software, em geral, é baseado em duas abordagens: decomposição funcional e na modelagem de dados, ou seja, estão constituídos segundo o paradigma estruturado, onde se tem visões dissociadas em que se distinguem claramente os processos de dados. Tanto os processos como os dados possuem uma modelagem própria. O método deve retratar com fidelidade o que ocorre no ambiente real e para isso o DFD( Diagrama de Fluxo de Dados) e o DER( Diagrama entidade Relaciona) são responsáveis por representar os processo e dados nesse modelo. O problema é que nem sempre essa representação é bem definida ou esclarecida no ambiente real e a manutenção é dificultosa, daí, a partir desses e outros problemas surge à necessidade de um novo padrão, e três aspectos foram relevantes para ascensão da orientação a objetos, contrapondo-se aos métodos estruturados: a unificação de conceitos entre a fase de analise e programação, o grande potencial de reutilização do software e a facilidade de manutenção.
A herança é um recurso dentro do conceito orientado a objeto, com ela podemos criar classes genéricas, e a partir dessa cria subclasses que herdam características da classe pai, veja a figura 1. Diagrama de classe UML(Unified Modeling Language)*
Figura 1. Classe derivado de um ator
Note que é fornecida uma modelagem mais natural, que melhor retrata a realidade, pois processos e dados estão coligados.
*Nota: juntamente com a Orientação a Objetos precisava-se de uma modelagem que correspondesse a esse modelo, dentre as propostas apresentadas a UML sai na frente e tornou se padrão universal de modelagem.
Quando uma subclasse herda características a partir de um único ramo da classe diz-se tratar de herança simples, independente da quantidade de superclasses existente no ramo veja figura 2.
Figura 2. Herança simples
E quando uma classe herda características de mais de um ramo genealógico diz-se haver herança múltipla. Veja figura 3. Mais o VS. NET e suas linguagens não suportam herança múltipla em vez disso tem-se o conceito de interfaces mais isso é outro assunto.
Figura 3. Herança múltipla
Bem, agora vamos ver um exemplo bem simples na pratica
1. Crie um novo projeto Visual C# > Windows Application
2. Depois, usando o Menu Project > Add Class, adicione uma classe ao nosso projeto, como mostra a figura abaixa:
Escreva a Classe como mostra a seguir:
using System;
using System.Collections.Generic;
using System.Text;
namespace DevMedia.Artigo // Ficheiro ou gaveta que contem a classe
{
class Pessoa // Construtor padrão
{
private string _Nome; // Atributo
public string Nome // Modificador de acesso e consulta
{
get { return _Nome; }
set { _Nome = value; }
}
private string _CPF;
public string CPF // Modificador de acesso e consulta
{
get { return _CPF; }
set { _CPF = value; }
}
}
}
Nós já temos a base de uma classe. Para implementar herança, vamos adicionar uma nova classe, usando Menu Projct > Add Class. Renomeie como Funcionario.cs e digite o seguinte código:
using System;
using System.Collections.Generic;
using System.Text;
namespace DevMedia.Artigo
{
class Funcionario : Pessoa // Para a Classe Funcionário herda da
// Classe Pessoa que criamos, basta
// acrescentar os ‘ : ‘ + o nome da
// classe que queremos herdar.
{
private string _dataAdmissao;
public string DataAdmissao
{
get { return _dataAdmissao; }
set { _dataAdmissao = value; }
}
private string _Salario;
public string Salario
{
get { return _Salario; }
set { _Salario = value; }
}
}
}
Testando a Classe
No design do Form1 da aplicação, desenhe os seguintes controles:
Tipo de Controle |
Nome |
Valor do Text |
Label1 |
lblNome |
Nome |
TextBox1 |
txtNome |
Vazio |
Label2 |
lblCpf |
Cpf |
TextBox2 |
txtCpf |
Vazio |
Label3 |
lblData |
Data Admissão |
TextBox3 |
txtData |
Vazio |
Label4 |
lblSalario |
Salário |
TextBox4 |
txtSalário |
Vazio |
Button1 |
bntOk |
Ok |
Resultado:
1. Agora clique duas vezes no botão Ok e escreva o seguinte código:
private void button1_Click(object sender, EventArgs e)
{
Funcionario ObjFuncionario = new Funcionario();
ObjFuncionario.Nome = txtNome.Text = "William";
ObjFuncionario.CPF = txtCpf.Text = "900.100.200-00";
ObjFuncionario.DataAdmissao = txtData.Text = "26/04/07";
ObjFuncionario.Salario = txtSalario.Text = "1000";
}
Comentário:
Instanciamos a Classe Funcionário com o nome ObjFuncionario, como você pode notar a Classe Funcionário não tem as propriedades Nome e Cpf, mais mesmo assim elas apareceram? Mais como? Elas foram herdadas da classe Pessoa.cs, aproveitamos código, todo funcionário é uma pessoa assim eu posso reutilizar a classe generica para qualquer situação onde precisar das caracteristicas comum de pessoa. Podemos também trabalhar com herança visual no VS.NET , tanto em Windows Application como em paginas Web usando Master Pages assunto claramente abordado por Rodrigo Sendin na revista .NET Magazine Ano 4 – 39 Edição.
Conclusão:
Diante do que foi comentado, fica claro as vantagens de se usar Orientação a Objeto e UML no projeto. Facilitando o Entendimento da modelagem com o mundo real, e alem da herança têm-se várias outras vantagens.
Espero que tenham gostado e até a próxima.