programa de iniciación en java

Iniciado por tollis, 6 Marzo 2014, 12:28 PM

0 Miembros y 1 Visitante están viendo este tema.

tollis

Buenas, estoy aprendiendo java, pero tengo un problema a la hora de desarrollar un ejercicio, este es el enunciado:

Desarrollar una aplicación de cifrado de códigos numéricos.

El cifrador recibirá un código numérico y una implementación de un algoritmo de cifrado/descifrado y la orden de cifrar o descifrar el código.

Existen distintos algoritmos:

• Multiplicar por un número determinado.

• Diferencia existente a un número determinado.

• El XOR con un número determinado.

Desarrollar la clase Actividad5 que en su método main cree un cifrador, y le pida cifrar y descifrar varios códigos usando distintos algoritmos de cifrado.

Realizar también el diseño del Diagrama de Clases UML.

hasta ahora este es el codigo que yo tenia realizado, el cual funcionaba

public interface Algoritmo
{
          public abstract int cifrar();
          public abstract int descifrar();
}


public class Cifrado {
static int numero2;

public Cifrado(int numero2) {
Cifrado.numero2=numero2;
}

public int cifrar(int numero2)
{
return numero2;
}
public int descifrar(int numero2)
{
return numero2;
}
}


public abstract class Diferencia extends Cifrado implements Algoritmo {
//Atributos
       private int numero;

//Constructores
public Diferencia(int param)
       {
          super(numero2);
          numero = param;
        }

//Metodos
public int cifrar()
{
return numero - numero2;
}
public int descifrar()
{
return numero + numero2;
}
public void encriptacionDiferencia()
{
System.out.print("Algoritmo diferencia: ");
System.out.print("código cifrado -> " + cifrar());
System.out.println(" código descifrado -> " + descifrar());
}
}


public abstract class Multiplica extends Cifrado implements Algoritmo {
//Atributos
private int numero;

//Constructores
public Multiplica(int param)
{
super(numero2);
numero = param;
}

//Metodos
public int cifrar()
{
return numero - numero2;
}
public int descifrar()
{
return numero / numero2;
}
public void encriptacionDiferencia()
{
System.out.print("Algoritmo diferencia: ");
System.out.print("código cifrado -> " + cifrar());
System.out.println(" código descifrado -> " + descifrar());
}
}


public abstract class Xor extends Cifrado implements Algoritmo {
//Atributos
private int numero;

//Constructores
public Xor(int param)
{
super(numero2);
numero = param;
}

//Metodos
public int cifrar()
{
return numero ^ numero2;
}
public int descifrar()
{
return numero2 ^ numero;
}
public void encriptacionDiferencia()
{
System.out.print("Algoritmo diferencia: ");
System.out.print("código cifrado -> " + cifrar());
System.out.println(" código descifrado -> " + descifrar());
}
}


public class Actividad5
{
    public static void main(String[] args) {
        Cifrado c = new Cifrado(4);
        Diferencia algoritmo1 = new Diferencia(10){};
        Multiplica algoritmo2 = new Multiplica(5){};
        Xor algoritmo3 = new Xor(20){};
        c.cifrar(4);
        algoritmo1.encriptacionDiferencia();
        algoritmo2.encriptacionDiferencia();
        algoritmo3.encriptacionDiferencia();
    }
}


Pero lo tengo mal planteado desde el principio, me dicen que tengo que tener el constructor de cifrador así:

public Cifrador(long l, Algoritmo tipoCifrado, boolean b){

................

y utilizarlo así:

Cifrador c=new Cifrador(111L, new Xor(),true);

pero no entiendo para que tengo que crear un "new Xor()" o un "boolean" ni que parte del código aparte del constructor y el main tendría que modiicar

por favor si me pudrieran guiar un poco me ayudaría mucho.

Saludos y gracias de antemano!

Mitsug

#1
Hola,

Hay que aprovechar la POO. Tu code no está mal, pero podrá ajustarse más al estándar de la POO. Por ejemplo, podemos convertir tu código en polimórfico, de la siguiente manera:

1] Crear una interface que represente el tipo de cifrado.
2] Crear una clase por tipo de cifrado e implementar la interface.
3] Desde la clase Cifrador hacemos los cifrados por medio del constructor que mencionaste.

Código (=java) [Seleccionar]

public class Cifrador {

public static void main(String[] args) {
new Cifrador(30l, new CifradoXor(), true);
}
public Cifrador(long numero, TipoCifrado tipo, boolean estado) {
                // no se para que usar el boolean..
System.out.println(tipo.toString()+": "+tipo.cifrar(numero));
}

}

Código (=java) [Seleccionar]

public interface TipoCifrado {

public long cifrar(long numero);
}

Código (=java) [Seleccionar]

public class CifradoMultiplicador implements TipoCifrado {

@Override
public long cifrar(long numero) {
// cifrado
}

        @Override
public String toString() {
return "Cifrado tipo Multiplicador";
}

}

Código (=java) [Seleccionar]

public class CifradoDiferencia implements TipoCifrado {

@Override
public long cifrar(long numero) {
// cifrado
}

        @Override
public String toString() {
return "Cifrado tipo Diferencia";
}

}

Código (=java) [Seleccionar]

public class CifradoXor implements TipoCifrado {

@Override
public long cifrar(long numero) {
// cifrado
}

        @Override
public String toString() {
return "Cifrado tipo Xor";
}

}



Saludos..

tollis

Muchísimas gracias!!!!
Me ha sido de gran ayuda, fallo al plantear las cosas, ahora ya he visto como hacerlo de mejor manera, gracias de nuevo.

Saludos!