alves077 Posted December 19, 2012 at 04:12 PM Report #487808 Posted December 19, 2012 at 04:12 PM 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
HappyHippyHippo Posted December 19, 2012 at 04:53 PM Report #487815 Posted December 19, 2012 at 04:53 PM 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 Portugol Plus
alves077 Posted December 19, 2012 at 05:07 PM Author Report #487818 Posted December 19, 2012 at 05:07 PM 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
HappyHippyHippo Posted December 19, 2012 at 05:23 PM Report #487819 Posted December 19, 2012 at 05:23 PM 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 Portugol Plus
alves077 Posted December 19, 2012 at 05:29 PM Author Report #487820 Posted December 19, 2012 at 05:29 PM (edited) 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 December 19, 2012 at 10:41 PM by alves077
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now