O que é e para que serve uma classe abstrata?

Off Topic

11/05/2017

Oi gente!

Tenho estudado bastante orientação a objetos e tenho tentado aplicar em meus projetos. Mas tiveram umas coisas que ainda não peguei.

Uma delas seria a tal da classe abstrata. Para mim não ficou muito claro em que tipo de situação devo usá-la.
Larissa Aguiar

Larissa Aguiar

Curtidas 0

Melhor post

Jones Granatyr

Jones Granatyr

11/05/2017

Olá! Por exemplo, no seu sistema você tem cadastro de "clientes" e "funcionários". Ambos compartilham alguns atributos comuns para qualquer pessoa, como nome e cpf. Nesse caso você pode fazer uma classe abstrata parecido com a mostrada abaixo

abstract class pessoa {
string nome;
string cpf;
}

O cliente pode ter um campo específico para ele, que é a data desde quando ele é cliente da empresa, por exemplo. Ficaria assim

class cliente extends pessoa {
date data_cliente_desde;
}

E o funcionário pode ter o número da carteira de trabalho

class funcionario extends pessoa {
string numero_carteira;
}

Como no seu sistema você só pode ter clientes e funcionários (pode não fazer sentido criar um objeto da classe pessoa), você define a classe "pessoa" como abstrata, o que indica que você não pode instanciar/criar ela (usando o comando new). Você só pode instanciar clientes e funcionários, que não são abstratas. Em resumo, esse tipo de classe pode ser usada para melhorar a organização do código
GOSTEI 4

Mais Respostas

Calebe Menezes

Calebe Menezes

11/05/2017

Exatamente como o Jones explicou. A classe abstrata vai servir apenas como um suporte para outras classes que serão instanciadas, mas ela mesma não será.

No exemplo do Jones, o funcionário quando for instanciado, terá todos os atributos e métodos da classe pessoa e da classe funcionario.

Ficou claro Larissa?
GOSTEI 2
Larissa Aguiar

Larissa Aguiar

11/05/2017

Obrigada Jones e Calebe. Então a classe é definida como abstrata somente por causa disso? Para que ela não sirva como instância de um objeto, permitindo que outras por meio da herança peguem seus atributos e métodos?

Pensei que era mais coisa, mas se for só isso tudo bem rs.

Obrigada <3
GOSTEI 0
POSTAR