Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
alves077

Herança

Recommended Posts

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Edited by alves077

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.