Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Sobre classes abstratas

Oi, boa tarde. Queridos colegas do fórun, gostaria de tirar uma pequena duvida envouvendo classes abstratas. Se possível, gostaria que um instrutor ou até mesmo uma pessoa com mais experiênsia me ajude a quebrar essa dúvida. Primeiro, sabemos que uma classe é um modelo, um modelo que um objeto deve seguir ao ser criado, correto? Pesquizando na internet eu li que uma classe abstrata é uma idéia, um conseito. Mas aqui que mora a dúvida: se uma classe abstrata é uma idéia, um conseito, então ela não é um modelo para objetos? Alguém poderia por favor, me ajudar a poder distinguir esse conseito?

5 respostas
solução!

Boa tarde, Maurilio! Tudo certo? =)

Uma classe abstrata é como uma classe, em que podemos ter diversos atributos e métodos... A diferença é que não podemos ter uma instância, um objeto, de uma classe abstrata. Nesse caso, teremos que criar uma outra classe que utilize herança, ou seja, faça um extends da classe abstrata.

A ideia toda de uma classe abstrata surge somente se você faz uso do conceito de herança, caso contrário não fará sentido...

É como se isolássemos um comportamento que várias classes podem ter. Se todas tiverem coisas em comum, podemos isolá-lo...

Se quisermos, podemos abstrair ainda mais e saímos de classes abstratas para interfaces, em que não temos implementações de métodos... São como contratos que obrigam classes a implementarem alguns métodos. =)

Espero ter ajudado! Abraço e bons estudos,

Fábio

Oi fábio, boa tarde. Obrigado, cara. Então eu posso pensar por exemplo, que classes abstratas seriam algo para introduzir conseitos em uma classe concreta? Tipo, a classe pessoa introduz o conseito de pessoa na classe homem por exemplo. pode ser isso? Sobre isso da erança, a erança também pode ser considerada um contrato, né? Tipo: para ter tudo o que uma classe tem, você precisa a erdar. Pode ser considerado um contrato também?

Maurílio,

Algo mais ou menos assim, mesmo. =)

Vou tentar utilizar o seu exemplo para ajudá-lo... Podemos ter uma classe abstrata Pessoa que será responsável por basicamente definir algumas informações sobre uma pessoa, por exemplo, nome, idade, etc... E podemos ter alguns métodos como andar(). =)

Mas se definimos que a classe é abstrata, não podemos ter uma instância dela... Para isso teremos que ter uma outra classe que herde de Pessoa, como as classes Homem e Mulher, por exemplo.

Ambas terão as mesmas definições da classe Pessoa, mas podem ter atributos e métodos únicos, além de implementações diferentes para os mesmos métodos... Entendeu? =)

Pode ser uma espécie de contrato, sim. =)

Abraços,

Fábio

Boa tarde! Exatamente, a classe abstrata é uma ideia, um modelo. Mas, como foi dito, sem herança não faz sentido. A vantagem de uma classe abstrata é que, se você tem um modelo genérico, não faz nenhum sentido que ele seja instanciado, já que têm as classes filhas que herdam as funcionalidades. A classe abstrata vem bem a calhar, já que impede a instância de objetos do seu tipo, apenas passando por herança às classes filhas seus métodos. Temos também os métodos abstratos, que são apenas a assinatura do método, ou seja, sem implementação, mas que obrigam as classes filhas a reescrevê-los. A vantagem disso é que você não corre o risco de esquecer a implementação, o código dá erro na hora de compilar. E, claro, se, por exemplo, cada classe filha tem esse método, mas com regras e comportamentos diferentes, não faz sentido que elas herdem esse método da classe mãe já pronto. Faz mais sentido que cada classe reescreva esse método com seus próprios padrões.

Obrigado, gente. graças a vocês consegui solucionar essa duvida. não tem alguma possibilidade de marcar as duas respostas como solução? queria marcar as duas, mas aqui só aceitou uma. sendo assim eu agradeço. agora entendi mesmo. valeu e até a próxima!