Implementar um método void abstrato recebendo parâmetro

10 respostas
V

Boa noite!

Tentei de várias formas colocar para funcionar o método + setMatricula (String s : int) void, mas não estou conseguindo. Coloquei o modelo de classes em anexo para melhor entendimento.

Att.

Victor Almeida


10 Respostas

wagnerfrancisco

O que você já tentou? Aparentemente não tem nenhum mistério, você implementa como qualquer outro método. Posta o seu código.

V
/*

public class Pessoa {
    
    private String nome;
    private String cPF;
    
    public abstract String getMatricula();
    public abstract void setMatricula (String s); //ele fala que tem que receber a String s como int no modelo de classes, não sei muito bem oq fazer.

    
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getcPF() {
        return cPF;
    }

    public void setcPF(String cPF) {
        this.cPF = cPF;
    }
    
}
dyeimys

Boa noite Victor A.
Primeiramente, para ter métodos abstratos a classe tem que ser abstrata. E neste caso nenhuma das Classes são abstratas, pois se fosse ela seria identificada com o nome em Itálico.
Porém os métodos estão sendo identificados como abstratos, métodos estes setMatricula(String s:Int):void e +getMatricula():String.

Segundo, a descrição do método setMatricula(String s:int):void está incompleta, pois está faltando o nome a variável do tipo int.
Para criar este método seguindo este esquema ele ficaria assim:

public abstract void getMatricula(int String s);

Então tem que verificar isto.

O que está errado
Metodos abstratos só existem em Classes abstratas.
A assinatura deste metodo (setMatricula(String s:int):void) na UML está incorreto

Então o que pode ser feito:

Clocar a Classe pessoa com Abstrata (Elas não poderão ser Instanciadas);

Retirar o tipo inteiro ou colocar uma variável para referenciar ao tipo;

[color=red]PS.[/color] Posso estar enganado, se eu estiver por favor me Corrija!

dyeimys

Boa noite Victor A.
Primeiramente, para ter métodos abstratos a classe tem que ser abstrata. E neste caso nenhuma das Classes são abstratas, pois se fosse ela seria identificada com o nome em Itálico.
Porém os métodos estão sendo identificados como abstratos, métodos estes setMatricula(String s:Int):void e +getMatricula():String.

Segundo, a descrição do método +setMatricula(String s:int):void está incompleta, pois está faltando o nome a variável do tipo int.
Para criar este método seguindo este esquema ele ficaria assim:

public abstract void getMatricula(int String s);

Então tem que verificar isto.

O que está errado
Metodos abstratos só existem em Classes abstratas.
A assinatura deste metodo (setMatricula(String s:int):void) na UML está incorreto

Então o que pode ser feito:

Clocar a Classe pessoa com Abstrata;

Retirar o tipo inteiro ou colocar uma variável para referenciar ao tipo;

[color=red]PS.[/color] Posso estar enganado, se eu estiver por favor me Corrija!

V

Boa noite,

Então…se eu coloco public abstract void setMatricula (int String s); não consigo rodar. :stuck_out_tongue:

O netbeans fala que é esperado um ‘)’.

Att.

Victor Almeida

SierraEx

Porque o método não pode receber como argumento uma variável do tipo int String, ou a variável é um objeto do tipo String ou ela pertence ao tipo primitivo int.

Portanto, a sintaxe pode ser de um dos métodos seguintes, também achei confusa a notação UML, porém, como não tenho muito conhecimento nesta parte, prefiro citar apenas a sintaxe do método

//Alternativa 1
public abstract void setMatricula(String mat); //recebe uma string como argumento
//Alternativa 2
public abstract void setMatricula(int mat); //recebe um inteiro como argumento

E a classe, para conter métodos abstratos, deve ser abstrata.

abraços

dyeimys

Como eu disse acima, você tem duas formas para tirar esta confusão das UML

//Adicionar uma variável para referenciar ao tipo int
public abstract void setMatricula (int i, String s);

//Retirar o tipo int
public abstract void setMatricula (String s);

Se isto for um tipo Homework e tiver tempo de tirar duvida com o professor (Tire!), se não tiver como faça das duas maneiras e para sair melhor ainda faça um terceiro modo

//Como parâmetro um int public abstract void setMatricula (int s)

Abrass…
Qualquer coisa é só falar por aqui, sempre tem pessoas dispostas a ajudar…

Luiz_Augusto_Prado

ve se isso ajuda:

MeuGenerico

package usandoclassesabstratas;


public abstract class MeuGenerico
{
    private String nome;
    private String tipo;

    /**
     * @return the nome
     */
    public String getNome()
    {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome)
    {
        this.nome = nome;
    }

    /**
     * @return the tipo
     */
    public String getTipo()
    {
        return tipo;
    }
    /**
     * @param nome the nome to set
     */
    public void setTipo(String tipo)
    {
        this.tipo = tipo;
    }
}

Carro:

package usandoclassesabstratas;

// aqui resolvi implementar.
public class Carro extends MeuGenerico
{

    public String getNome()
    {
        //
        return super.getNome() + "_classe1";
    }

    public void setTipo(String vazia)
    {
        //super.setNome(vazia+"_classe1") ;
    }
}

Caminhão:

package usandoclassesabstratas;

 // aqui não resolvi implementar.
public class Caminhao extends MeuGenerico
{
}

Main e lógica de ação:

package usandoclassesabstratas;


public class UsandoClassesAbstratas
{
 
    public void printNome(MeuGenerico meugenerico)
    {
        System.out.println(meugenerico.getNome());
    }
    
    public void setAndPrintNome(MeuGenerico meugenerico, String novoNome)
    {
        System.out.println("Nome antigo: "+meugenerico.getNome());
        System.out.println("setando novo nome:" + novoNome);
        meugenerico.setNome(novoNome);
        System.out.println("pegando nome: "+meugenerico.getNome());
    }
    
    
    public void printTipo(MeuGenerico meugenerico)
    {
        System.out.println(meugenerico.getNome());
    }
    
    public void setAndPrintTipo(MeuGenerico meugenerico, String novoTipo)
    {
        System.out.println("Tipo antigo: "+meugenerico.getTipo());
        System.out.println("setando novo Tipo:" + novoTipo);
        meugenerico.setTipo(novoTipo);
        System.out.println("pegando Tipo: "+meugenerico.getTipo());
    }
    
    

    public static void main(String[] args)
    {
        UsandoClassesAbstratas logica = new UsandoClassesAbstratas();
        Carro c1 = new Carro();
        c1.setNome("carro1"); 
        c1.setTipo("carro");
        Caminhao c2 = new Caminhao();
        c2.setNome("caminhao2"); 
        c2.setTipo("caminhao2");
        logica.printNome(c1);
        logica.printNome(c2);
    }
}
V

Boa noite,

Oq realmente está confuso é o UML, pelo que eu entendi ele quer que o método receba a String da matricula do professor ou aluno como int. Não consigo visualizar o propósito disso, mas tudo bem.
Pensei que poderia haver alguma forma de colocar isso logo no método abstrato - já que estava representado no UML, mas vejo que não.
Obrigado pela ajuda. :slight_smile:

Se eu tiver novas dificuldades que não consiga solucionar volto a postar.

dyeimys

Mas se ele colocou isto na UML tenho uma certeza de 90% que esta sintaxe não existe nem na UML.

Você disse,Não consigo visualizar o propósito disso, discordo!

Consegui enxergar algo: Ele pode estar colocando isto para vocês entenderem que a matricula tem que ser compostas por números inteiros.
E com isto ele queira que vocês tratem isto.

Isto foi apenas uma abstração que eu tive.

Abrass

Criado 25 de setembro de 2012
Ultima resposta 25 de set. de 2012
Respostas 10
Participantes 5