Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Sixtoex en 06 de Noviembre 2014, 16:47
-
:P :P :P :P :P
Estoy bastante CONTENTO ;D ;D, a ver hice una aplicación que genera contraseñas ALEATORIAS y además te dice si es POTENTE o no :)
Quiero que me den su valoración y porfavor decirme en que podría mejorar, de veras, te lo agradecere enormemente
Creo que ya nombro mejor a las clases y las utilizo mejor y mi lógica de programacion creo que a aumentado.
Clase Password:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace generarPassword
{
class Password
{
int longitud = 8;
public Password(int longitud)
{
this.longitud = longitud;
generarPassword();
}
private void generarPassword()
{
string cadena = "";
string guardarCadena = "";
int m = 0;
int[] numero = new int[this.longitud];
string[] letras = new string[this.longitud];
int esFuerte = 0;
Random rnd = new Random();
int i;
for (i = 0; i < this.longitud; i++)
{
numero[i] = rnd.Next(65,131);
}
for (int e = 65; e <= 122; e++)
{
if (m >= this.longitud)
{
break;
}
if (numero[m] >= 65)
{
switch (numero[m])
{
case 65:
letras[m] = "A";
break;
case 66:
letras[m] = "B";
break;
case 67:
letras[m] = "C";
break;
case 68:
letras[m] = "D";
break;
case 69:
letras[m] = "E";
break;
case 70:
letras[m] = "F";
break;
case 71:
letras[m] = "G";
break;
case 72:
letras[m] = "H";
break;
case 73:
letras[m] = "I";
break;
case 74:
letras[m] = "J";
break;
case 75:
letras[m] = "K";
break;
case 76:
letras[m] = "L";
break;
case 77:
letras[m] = "M";
break;
case 78:
letras[m] = "N";
break;
case 79:
letras[m] = "O";
break;
case 80:
letras[m] = "P";
break;
case 81:
letras[m] = "Q";
break;
case 82:
letras[m] = "R";
break;
case 83:
letras[m] = "R";
break;
case 84:
letras[m] = "S";
break;
case 85:
letras[m] = "T";
break;
case 86:
letras[m] = "U";
break;
case 87:
letras[m] = "V";
break;
case 88:
letras[m] = "W";
break;
case 89:
letras[m] = "X";
break;
case 90:
letras[m] = "Y";
break;
case 91:
letras[m] = "Z";
break;
case 92:
letras[m] = "a";
break;
case 93:
letras[m] = "b";
break;
case 94:
letras[m] = "c";
break;
case 95:
letras[m] = "d";
break;
case 96:
letras[m] = "e";
break;
case 97:
letras[m] = "f";
break;
case 98:
letras[m] = "g";
break;
case 99:
letras[m] = "h";
break;
case 100:
letras[m] = "i";
break;
case 101:
letras[m] = "j";
break;
case 102:
letras[m] = "k";
break;
case 103:
letras[m] = "l";
break;
case 104:
letras[m] = "m";
break;
case 105:
letras[m] = "n";
break;
case 106:
letras[m] = "o";
break;
case 107:
letras[m] = "p";
break;
case 108:
letras[m] = "q";
break;
case 109:
letras[m] = "r";
break;
case 110:
letras[m] = "s";
break;
case 111:
letras[m] = "t";
break;
case 112:
letras[m] = "u";
break;
case 113:
letras[m] = "v";
break;
case 114:
letras[m] = "w";
break;
case 115:
letras[m] = "x";
break;
case 116:
letras[m] = "y";
break;
case 117:
letras[m] = "z";
break;
case 118:
letras[m] = "0";
break;
case 119:
letras[m] = "1";
break;
case 120:
letras[m] = "2";
break;
case 121:
letras[m] = "3";
break;
case 122:
letras[m] = "4";
break;
case 123:
letras[m] = "5";
break;
case 124:
letras[m] = "6";
break;
case 125:
letras[m] = "7";
break;
case 126:
letras[m] = "8";
break;
case 127:
letras[m] = "9";
break;
case 128:
letras[m] = "@";
break;
case 129:
letras[m] = "/";
break;
case 130:
letras[m] = "]";
break;
case 131:
letras[m] = "-";
break;
case 132:
letras[m] = "}";
break;
}
}
m = m + 1;
}
int y = 1;
for (int n = 0; n <=this.longitud; n++)
{
cadena = letras[n] ;
guardarCadena =cadena+guardarCadena;
if (y == this.longitud)
{
break;
}
y = y + 1;
}
Console.Write(guardarCadena);
for (int v = 0; v < 66; v++)
{
if (v == this.longitud)
{
Console.WriteLine();
if (esFuerte > 8)
{
Console.WriteLine("La contraseña es potente");
}
if (esFuerte < 8 && esFuerte > 5)
{
Console.WriteLine("La contraseña es normalita");
}
if (esFuerte < 4)
{
Console.WriteLine("la contraseña es Débil");
}
if (this.longitud > 8)
{
esFuerte = esFuerte + 2;
}
else
{
esFuerte = esFuerte - 4;
}
return;
}
if(numero[v] > 65 && numero[v] < 91)
{
esFuerte++;
}
if (numero[v] >= 65 && numero[v] <= 91)
{
esFuerte++;
}
if (numero[v] >= 92 && numero[v] <= 117)
{
esFuerte++;
}
if (numero[v] >= 118 && numero[v] <= 132)
{
esFuerte++;
}
if (v == 65)
{
if (esFuerte > 8)
{
Console.WriteLine("La contraseña es potente");
}
if (esFuerte < 8 && esFuerte > 5)
{
Console.WriteLine("La contraseña es normalita");
}
if(esFuerte < 4)
{
Console.WriteLine("la contraseña es Débil");
}
if (this.longitud > 8)
{
esFuerte = esFuerte + 2;
}
else
{
esFuerte = esFuerte - 4;
}
return;
}
}
}
}
}
Clase Program(no se cambiar este nombre): aquí es donde se ejecuta el metodo Main:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace generarPassword
{
class Program
{
static void Main(string[] args)
{
Password generarContraseña = new Password(10);
}
}
}
-
Hola, no quiero ser crítico "porque sí", en el código se ven cosas muy bien hechas, manejo de instrucciones y sentencias que utilizas bien, y otras cosas que no están bien hechas (al menos desde mi punto de vista). En concreto:
Sigues sin tener un diseño orientado a objetos. Tienes una única clase que lo hace todo, incluido el mostrar mensajes por consola. Por contra, la clase con el método main no hace nada. Esto denota que no estás haciendo un buen diseño orientado a objetos posiblemente porque te falta estudiar e interiorizar cómo se trabaja la orientación a objetos.
La otra cosa que llama la atención a cualquier programador experimentado y que podemos decir que está mal concebida es el uso de switch con una ristra de sentencias case detrás:
case 65:
letras[m] = "A";
break;
case 66:
letras[m] = "B";
break;
...
...
...
Cuando tienes case 65, case 66, case 67 ... y así sucesivamente esto sugiere un mal diseño del código: se ve que sería más adecuado usar un bucle que usar una ristra de cases. Para usar un bucle tienes que pensar cómo hacerlo, posiblemente debas usar instrucciones auxiliares que permiten obtener el valor numérico asociado a una letra y al revés (como Encoding.ASCII.GetBytes(cadena); ó (int)c donde c es un carácter)
Al ver esa ristra de cases, lo que induce a pensar es que las 50 líneas que has empleado se podrían reducir a 10 si usas un bucle y las instrucciones adecuadas. No te hablo que siempre sea así, habrá casos en que no sea posible, pero en general ver algo así indica un fallo en la concepción del código.
Salu2!
-
Ogramar, empece buscando patrones de diseño(pero eso no es lo que usted me quiere decir).
Ahor abusque sobre diseño orientado a objetos y esto es lo que usted quiere decir:
Encontré este libro:
http://www.freelibros.org/programacion/diseno-orientado-a-objetos-con-uml.html
Lee la descripción y creo que es ese...
pero creo que esto del diseño tengo que aprenderlo cuando sepa manejarme muy myu bien el programación, creo que aprenderlo ahora sería un desperdicio no?
Fijate en este es un videocurso: http://www.freelibros.org/programacion/video2brain-fundamentos-de-la-programacion-diseno-orientado-a-objetos-2014-espanol.html
http://www.freelibros.org/programacion/aprende-uml-en-24-horas-joseph-schmuller.html
Aquí arreglado lo del Case:
for (int e = 65; e <= 122; e++)
{
if (m >= this.longitud)
{
break;
}
if (numero[m] >= 65)
{
for(int k = 65; k <= 132;k++)
{
if (numero[m] == k)
{
if (m == 26)
{
m = 0;
}
letras[m] = abc[m];
m = m + 1;
k = 65;
break;
}
if (k == 132)
{
k = 65;
m = m + 1;
}
}
}
}
-
Ahora lo del case mucho mejor. Lo que yo quiero decir en relación a cuestiones básicas sobre diseño en programación orientada a objetos lo tienes en: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188
Posiblemente también en alguno de esos libros que citas, pero no lo sé.
El diseño se debe ir aprendiendo poco a poco, a medida que vayas progresando. Ir aprendiendo desde ya no es un desperdicio, es hacer las cosas bien. No se trata de que te dediques únicamente al diseño ni de que en unos días pienses que vas a interiorizar todos los conceptos que hay en torno a la programación orientada a objetos. ¿Y cómo hacerlo? Como dice el refrán: si tienes prisa, vete despacio.
Salu2
-
En el metodo Main:
Este si que permite CUALQUIER LONGITUD:
Ascii correponde con el UTF-16
Es decir me ahorre 200 y pico de lineas por solo 39, de la siguiente manera:
Console.WriteLine("Escribe la longitud");
int longitud = int.Parse(Console.ReadLine());
int i;
char x;
char cadena;
Random rnd = new Random();
i = rnd.Next(38, 126);
for(int e = 0; e< longitud;e++)
{
x = (char)i;
Console.Write(x);
i++;
if (i >= 126)
{
i = i / 2;
}
}
Console.WriteLine();