Perguntinha de teste para emprego!

33 respostas
andre_guitar7

Pessoal, fui fazer um teste para uma vaga de emprego e caiu o seguinte:

Tenho dois objetos: aluno e professor são classes simples e cada um tem seus atributos e métodos particulares.

Pergunta: como posso criar um objeto que seja aluno e ao mesmo tempo professor, sabendo que em Java não existe herança multipla?

Ps: Não será aceito um objeto que tenha aluno e professor como atributos.

E daí pessoal?

33 Respostas

Zakim

public class AlunoProfessor extends Professor implements Aluno

dessa forma vc tem uma professor que tambem pode ser um aluno caso ele implemente o aluno!

é uma forma meio tosca…

acho q é isso

t+

andre_guitar7

Maracuja:
Classe extends Professor

Professor extends Aluno

pronto.

Tem certeza?

andre_guitar7

Zakim:
public class AlunoProfessor extends Professor implements Aluno

dessa forma vc tem uma professor que tambem pode ser um aluno caso ele implemente o aluno!

é uma forma meio tosca…

acho q é isso

t+

Aluno não é uma interface

Zakim

hehehe… não me liguei pra isso…

entao a forma correta é a que o maracuja escreveu…

andre_guitar7

Zakim:
hehehe… não me liguei pra isso…

entao a forma correta é a que o maracuja escreveu…

Não! Do jeito que o Maracujá escreveu, Professor vai ser sempre Aluno.

F

ta certo na forma do maracuja!
se nao for assim vou rasgar a minha scjp

andre_guitar7

foradosistema:
ta certo na forma do maracuja!
se nao for assim vou rasgar a minha scjp

Meu Deus do céu!

“Professor extends Aluno”

Se eu tenho uma classe que extende Aluno, ela é o não é um aluno? Veja a pergunta do primeiro post:

Tenho classes Professor e Aluno (QUE NÃO EXTENDEM DE NINGUÉM)

A questão pede pra criar uma classe que seja Aluno e Professor ao mesmo tempo.

T
Aluno
public class Aluno {
    String Aluno = "Aluno";   
}
Professor
public class Professor  extends Aluno{
    String Prof = "Professor";
}
Main
public class Main extends Professor{
    
    public static void main(String[] args) {
        Main a = new Main();
        System.out.println(a.Prof);
        System.out.println(a.Aluno);
    }    
}

Funciona perfeitamente igual o Maracuja disse.

Abraços

andre_guitar7

truck1n:
Aluno

public class Aluno { String Aluno = "Aluno"; }

Funciona sim, o compilador não chia…

O problema é que na questão que me passaram, a classe Professor não pode ser um aluno, entende? Tem que existir uma classe que seja Aluno e Professor ao mesmo tempo.

Adolfo_Rodrigues

Mas a classe “Main” do exemplo é ao mesmo tempo e Professor e Aluno.
Se você fizer:

Main a = new Main(); System.out.println(a instanceof Aluno); System.out.println(a instanceof Professor);
As respostas serão “true” e “true”, logo a classe é Aluno e Professor ao mesmo tempo. Não era essa a questão da prova?

peczenyj

Um professor leciona uma materia.
Um aluno assiste uma materia.

Um professor pode ser um aluno assistindo uma materia de pós graduação.

Talvez, então, professor extends aluno

Um objeto que se comporte como professor e como aluno, com herança simples, pode ser feito assim ou

outra_coisa extends professor , professor extends aluno

guilherme.chapiewski

Eu tenho a impressão que o que ele queria que você fizesse era criar um Adapter. Apesar de não fazer muito sentido semântico, é uma forma utilizada para “imitar” herança múltipla:

class AlunoImpl implements Aluno {
    public void metodoAluno() {
        // stuff
    }
}

class ProfessorImpl implements Professor {
    public void metodoProfessor() {
        // stuff
    }
}

class AlunoProfessor implements Aluno, Professor {
    private Aluno aluno;
    private Professor professor;
    public void metodoAluno() {
        aluno.metodoAluno();
    }
    public void metodoProfessor() {
        professor.metodoProfessor();
    }
}
Edufa

Tive problema parecido usei algo parecido com isso (escrevendo de cabeça).

Ainda que no meu problema era mais complicado pq haviam vários roles e cada um podia ter valores diferentes dependendo da pessoa.

public class Professor implements Role { .. }

public class Aluno implements Role { .. }

public class Pessoa {
  private Set<Role> roles;
  public void addRole(Role role) { .. }
  public boolean isRole(Role role) { .. }
}

public class Main { 
  public static void main(String[] args) { 
    Pessoa jose = new Pessoa(); 
    Pessoa maria = new Pessoa(); 
    jose.addRole(new Professor());
    jose.addRole(new Aluno());
    maria.addRole(new Aluno());

    System.out.println("José é professor ? " +jose.isRole(Professor.class) ? "sim" : "não" ); 
    System.out.println("José é aluno ? " +jose.isRole(Aluno.class) ? "sim" : "não" ); 

    System.out.println("Maria é professor ? " +maria.isRole(Professor.class) ? "sim" : "não" ); 
    System.out.println("Maria é aluno ? " +maria.isRole(Aluno.class) ? "sim" : "não" ); 
  }     
}
Adolfo_Rodrigues

Mas não é assim que está no exemplo do truck1n?

Aldrin_Leal

Eu acho que o post-scriptum excluia adapter. Mas a minha resposta é apenas uma citação:

“Mestre é quem, de repente, aprende”
(Guimarães Rosa)

guilherme.chapiewski

Verdade, não tinha visto.

Mas no fim das contas o que importa é que essa é mais uma perguntinha idiota de entrevista de emprego que não prova nada :slight_smile:

Luca

Olá

andre_guitar7:
Tenho dois objetos: aluno e professor são classes simples e cada um tem seus atributos e métodos particulares.

Pergunta: como posso criar um objeto que seja aluno e ao mesmo tempo professor, sabendo que em Java não existe herança multipla?

Ps: Não será aceito um objeto que tenha aluno e professor como atributos.

  1. Aluno e Professor são classes simples, isto é, nenhum dos dois estende nada nem implementa nada

  2. Não se pode usar composição

Então só existe uma resposta sobre como criar um objeto assim em Java:
Object aluno_professor = new Object();

[]s
Luca

R

foradosistema:
ta certo na forma do maracuja!
se nao for assim vou rasgar a minha scjp

Eu nem postava nada no portal por causa de certos problemas, mas tenho que te postar, “vou jogar minha certificação fora” nossa meu põe um anuncio no GUJ que vc é certificado!!! e acredito que vc é muito amigo do maracuja para tomar uma atitude dessas!!!

Little Rock

T

Luca:
Olá

andre_guitar7:
Tenho dois objetos: aluno e professor são classes simples e cada um tem seus atributos e métodos particulares.

Pergunta: como posso criar um objeto que seja aluno e ao mesmo tempo professor, sabendo que em Java não existe herança multipla?

Ps: Não será aceito um objeto que tenha aluno e professor como atributos.

  1. Aluno e Professor são classes simples, isto é, nenhum dos dois estende nada nem implementa nada

  2. Não se pode usar composição

Então só existe uma resposta sobre como criar um objeto assim em Java:
Object aluno_professor = new Object();

[]s
Luca

Boa Luca!

F

que nada rochinha! nem conheco o maracuja! escrevi so para simplificar a resposta.
este conceito que o andre_guitar7 colocou tem muito na certificacao.
bele! fuiii :thumbup:

andre_guitar7
guilherme.chapiewski:
Eu tenho a impressão que o que ele queria que você fizesse era criar um Adapter. Apesar de não fazer muito sentido semântico, é uma forma utilizada para "imitar" herança múltipla:
class AlunoImpl implements Aluno {
    public void metodoAluno() {
        // stuff
    }
}

class ProfessorImpl implements Professor {
    public void metodoProfessor() {
        // stuff
    }
}

class AlunoProfessor implements Aluno, Professor {
    private Aluno aluno;
    private Professor professor;
    public void metodoAluno() {
        aluno.metodoAluno();
    }
    public void metodoProfessor() {
        professor.metodoProfessor();
    }
}

Muito bom!

andre_guitar7

Luca:
Olá

andre_guitar7:
Tenho dois objetos: aluno e professor são classes simples e cada um tem seus atributos e métodos particulares.

Pergunta: como posso criar um objeto que seja aluno e ao mesmo tempo professor, sabendo que em Java não existe herança multipla?

Ps: Não será aceito um objeto que tenha aluno e professor como atributos.

  1. Aluno e Professor são classes simples, isto é, nenhum dos dois estende nada nem implementa nada

  2. Não se pode usar composição

Então só existe uma resposta sobre como criar um objeto assim em Java:
Object aluno_professor = new Object();

[]s
Luca

Na verdade, me referia que a classe Professor não poderia herdar de Aluno. O que foi feito anteriormente é “Professor extends Aluno”. Acho que não estava tão difícil de compreender isso…

Luca

Olá

Sua pergunta foi bem clara e eu compreendi MUITO bem. Está lá escrito com todas as letras que aluno e professor são classes simples. Se você queria escrever aluno ou professor é uma classe simples ou ainda que aluno e professor podem ser interfaces, agora é tarde.

Se agora você mudou de idéia e quer dizer outra coisa, então fique a vontade e diga esta outra coisa fazendo uma outra pergunta. Mas a anterior só tem a resposta que eu dei e quem prometeu rasgar a certificação que trate de cumprir sua promessa.

[]s
Luca

Zakim

um assunto que parecia simples ficou interessante … hehehe

a unica forma de simular toscamente uma herança multipla com java é se implementar uma interface e herdar uma classe

qualquer outra forma não seria uma herança"tosca multipla"

então ja que a herança multipla não existe, não sobra outra alternativa se nao a que o maracuja descreveu.
Sem falar que essa curiosidade colocou em jogo a scjp do nosso colega… heheheh

é isso ai… o professor pode ser um aluno sim!

Zakim

acredito que houveram varias interpretações para uma pergunta meio abstrata…

Usar a colocação “Uma classe simples” depende to contexto em que estamos. Uma classe simples pode sim ser uma aluno que herda uma pessoa por exemplo. Sem falar que pra vc construir uma classe simples em java vc usa uma biblioteca padrão. Se o conceito de classe simples é uma classe sozinha sem nada, entao as cpisas podem variar um pouco mais…

Quem fez a pergunta usou a ABSTRACÃO! heheheh

Acredito que a pergunta deve ser refeita ou que caso a pergunta seja essa mesma! que o dono dela mostre a resposta!

essa resposta deve ser ampla suficiente para responder a todas as interpretações de uma só vez!

Kenobi

Saudades dos Mixins … heheh :-), POG de alta qualidade para esse caso :-).

Jonatas

Kenobi:
Saudades dos Mixins … heheh :-), POG de alta qualidade para esse caso :-).


kkkkkk
Head First Gambiware

Abdon
public class Aluno {
      boolean isProfessor;
}

hohohoho

R

andre_guitar7 eu acho que ou vc está enganado quanto ao enunciado do problema, ou eu que não estou entendendo nada…

Para mim, uma possível solução, seria a do guilherme…é a que mais se encaixa no que vc quer…mas tem aluno e professor como atributos, e vc falou que não poderia ter…

Então se não é nada disso que o pessoal postou, qual seria a solução? Não consigo enxergar…

T

a) Ele disse OBJETO não CLASSE, portanto a resposta certa é a do Luca.
b) Se entendermos “objeto” como “classe” (você sabe que há uma confusão lascada), use C++ ou Eiffel (ele não disse que era para fazer em Java - só mencionou que Java não aceita herança múltipla). Não sei como seria em Eiffel - em C++ seria.

#include <string>
using namespace std;
class Aluno {
public:
    string nome;
    virtual void aprender () { cout &lt&lt "aprender" &lt&lt end; }
    virtual ~Aluno();
};
class Professor {
public:
    string titulo;
    virtual void ensinar () { cout &lt&lt "ensinar" &lt&lt endl; }
    virtual ~Professor();
}
class ProfessorAluno : public Aluno, public Professor {
public:
     virtual ~ProfessorAluno() {}
}
int main (int argc, char*argv[]) {
    Aluno *a = new ProfessorAluno();
    a->aprender();
    Professor *p = (Professor *) a;
    p->ensinar();
    delete a;
}
Zakim

hauahuahuahau

essa foi alem da imaginação… huahauhauhau… Mas tambem é uma interpretação valida.

JMan

Classe extends Professor

Professor extends Aluno

pronto.

JMan

Olha, se não for da forma como coloquei, procure a resposta com quem aplicou o teste em você e poste a resposta aqui, pq então eu não vejo outra forma.

Criado 5 de setembro de 2007
Ultima resposta 5 de set. de 2007
Respostas 33
Participantes 17