Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

alves077

Herança

Mensagens Recomendadas

alves077

Boa tarde,

Tenho aqui uma dúvida de como utilizar herança neste caso se me puderem ajudar agradecia:

Tenho um programa, que tem 3 tipos de utilizador: Utilizador normal, Utilizador premum, Administrador. Isto é 3 classes diferentes..

Visto assim está mesmo a calhar herança aqui pelo meio, a questão é que nada difere de um utilizador normal de um administrador, não sei a melhor maneira de implementar isto. Queria ter só um tipo de arraylist, com todos os utilzadores e ir verificando se e administrador ou não. Melhor do que 3 tipos de arraylist diferentes...

Entre o normal e o premium existe campos que diferem, mas entre administrador e utilizador já não. Pensei acrecentar um campo a classe utilzador a dizer se é administrador ou não, mas não sei se é o melhor a fazer numa linguagem orientada a objectos.

Alguma ideia?

Obrigado pela atenção,

alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

não vou comentar, vê só como está porque tem duas soluções

public abstract class Utilizador {
static public enum Type {
	Normal,
	Premium,
	Administrador
};

public abstract Type getType();
}

public class UtilizadorNormal extends Utilizador {
@Override
public Type getType() {
	return Type.Normal;
}
}

public class UtilizadorPremium extends Utilizador {
@Override
public Type getType() {
	return Type.Premium;
}
}

public class UtilizadorAdministrador extends Utilizador {
@Override
public Type getType() {
	return Type.Administrador;
}
}

public class Main {
public static void main(String[] args) {
	List<Utilizador> utilizadores = new ArrayList<Utilizador>();
	utilizadores.add(new UtilizadorNormal());
	utilizadores.add(new UtilizadorPremium());
	utilizadores.add(new UtilizadorAdministrador());

	Iterator<Utilizador> iter = utilizadores.iterator();
	while (iter.hasNext())
	{
		/* primeiro método */
		Utilizador utilizador = iter.next();
		System.out.println(utilizador.getClass().getSimpleName());

		/* segundo método */
		switch (utilizador.getType())
		{
			case Administrador:
				System.out.println("Utilizador Administrador");
				break;
			case Normal:
				System.out.println("Utilizador Normal");
				break;
			case Premium:
				System.out.println("Utilizador Premium");
				break;
			default:
				break;
		}
	}
}
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
alves077

Hm percebo a ideia...

Mas tipo não consigo fazer isto só com 3 classes? Sem uam tipo classe "mãe" que é abstrata?

Uma classe utilizador regular, e a classe gestor, e utilizador premium que herdam da classe utilizador regular?

Pensei de uma forma tipo ter um arrayList utilizadores, ter um metodo polimórfico qunado percorro diz me se é utilizador,administrador, cliente, não sei até que ponto é possivel fazer isto que estou a dizer...

Obrigado pela ajuda,

alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Mas tipo não consigo fazer isto só com 3 classes? Sem uam tipo classe "mãe" que é abstrata?

Uma classe utilizador regular, e a classe gestor, e utilizador premium que herdam da classe utilizador regular?

Cria a hierarquia como bem entenderes

Pensei de uma forma tipo ter um arrayList utilizadores, ter um metodo polimórfico qunado percorro diz me se é utilizador,administrador, cliente, não sei até que ponto é possivel fazer isto que estou a dizer...

o que é que a função mai que te apresentei faz ??


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
alves077

Sim, tens razão a ideia e basicamente a mesma, é a questão ter classe abstrata ou não.

Vou ver como me desenrasco...

Ao desenvolver o código surgiu aqui uma dúvida..

Eu queria guardar o arrayList num ficheiro de objecto, ele já guarda qualquer coisa, mas depois ao ler, faço:


while ((ult = (Utilizador) iS.readObject())!= null) {
utilizadores.add(ult);
}

Posso ter problemas da maneira como estou a implementar, com este tipo de herança, fazer aquele cast para ler do ficheiro?

Obrigado pela ajuda,

alves077

Editado por alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.