Programación | Aprendiendo Ruby 0004.1

Programita para valorar seguridad de contraseña | POO

Sigamos sufriendo con POO. La idea que se me ocurrió hacer esta vez es un programa que le pida al usuario su contraseña, y le responda que el nivel de seguridad de esta. Mis criterios de evaluación serán muy básicos.

Planeemos nuestro programa:

  1. Defino clase como HowSecurePass
  2. ¿Que variables de instancia crearé para el constructor? Se me ocurren las siguientes:
    • un array vacío para guardar la contraseña del usuario (cada elemento del array será un elemento de la contraseña)
    • @esLetra para almacenar el número de elementos de la contraseña que sean letras.
    • @esNumero para almacenar el número de elementos de la contraseña que sean números.
    • @esSimbolo para almacenar el número de elementos de la contraseña que sean símbolos
    • @calificacion Donde guardaré la ponderación de puntos que evalúan que tan segura es la contraseña
  3. Método para pedirle la contraseña al usuario, y guardarla en la variable userPass
  4. Método para evaluar la seguridad de la contraseña del usuario:
    1. Primero de pasar el string de la contraseña que metió al usuario al array
    2. Después, como primer rasgo, evaluaremos la longitud de la contraseña.
    3. inmediatamente procederemos a evaluar los elementos de la contraseña convertida en array:
      • Si el elemento es una letra, @esLetra aumenta 1
      • Si el elemento es un número, @esNumero aumenta 1
      • Si el elemento es un símbolo, @esSimbolo aumenta 1
  5. Imprimimos calificación y definimos un mensaje de acuerdo a la calificación obtenida:
    • Si el puntaje es 5, Tu contraseña es completamente segura
    • Si el puntaje está entre 2 y 4, Debes mejorar la seguridad de tu contraseña
    • Si es menor a 2, ¡Cambia esa contraseña!

Desarrollemos nuestro programa:

class HowSecurePass
	# Creando mi constructor con las siguientes variables
	def initialize
		@evaluatePass=[]
		@esLetra = 0
		@esNumero = 0
		@esSimbolo = 0
		@calificacion = 0
	end
	
	# Defino un método para recibir la contraseña del usuario
	def userPass
		print "Dame tu contraseña "
		gets.chomp
	end
	
	
	#Método para evaluar seguridad de la contraseña
	def evaluator(userPass)
		# Pasar el string de la contraseña al array @evaluatePass
		@evaluatePass = userPass.chars # El método chars se encarga de hacer el trabajito de la conversión ^^'
		puts @evaluatePass
		
		=begin
		 Para no hacerme bolas, la variable contarCaracteres guarda la contraseña
		 en string para poder contar el número de elementos, ahorita
		  que lo pienso, pude simplemente contar los elementos del array... Duuuuh!!
		=end
		contarCaracteres = userPass
		
		# Evaluamos la longitud de la contraseña
		case contarCaracteres.length
		when 9..Float::INFINITY
			puts "Longitud adecuada"
			@calificacion += 2
		when 5..7
			puts "Podrías hacerla mas larga"
			@calificacion += 1
		else
			puts "LONGITUD INADECUADA"
		end
		
		# Que cosa tan hermosa es el case, ni yo me lo creo, es muy simple de entender y trabajar.
		
		#Evaluamos los elementos que componen la contraseña
		# NOTA MENTAL: APRENDER REGEX
		# Para hacerlo usaremos each do, un ciclo iterativo para ir recorriendo cada elemento de nuestro array
		@evaluatePass.each do |elemento|
		if elemento.match?(/[a-zA-Z]/) # Verifica si el elemento es una letra 
			@esLetra += 1
		elsif elemento.match?(/\d/) # Verifica si el elemento es un dígito
			@esNumero += 1
		else # Si no es una letra ni un número, se considera un símbolo
			@esSimbolo += 1
		end
		
		end
		
		# Trabajamos con los puntajes y hacemos los comentarios correspondientes
		
		puts "Tu contraseña tiene letras" if @esLetra > 0; @calificacion += 1 if @esLetra > 0
		puts "Tu contraseña tiene numeros" if @esNumero > 0; @calificacion += 1 if @esNumero > 0
		puts "Tu contraseña tiene simbolos" if @esSimbolo > 0; @calificacion += 1 if @esSimbolo > 0

# ¡Pero que hermosa forma de hacer los IF's! Ruby permite  poner primero la expresión y luego el if, como si fuera una oración hablada "Escribe esto si pasa esto" eso es genial, el ";" permite hacer un salto de line invisible para escribir la siguiente linea de código en la linea actual. 



		# Damos calificación
		print "Tienes #{@calificacion} de calificación, por lo tanto creemos que "
		
		case @calificacion
		when 5 then puts "TU CONTRASEÑA ES COMPLETAMENTE SEGURA"
		when 2..4 then puts "DEBES MEJORAR LA SEGURIDAD DE TU CONTRASEÑA"
		else puts "CAMBIA ESA CONTRASEÑA YA!!"
		end
end


end

#Ya creamos nuestro molde, ahora creemos el objeto particular

nuevaContra= HowSecurePass.new
evaluar = nuevaContra.userPass
nuevaContra.evaluator(evaluar)

Me siento satisfecho, no sé aún que tan bien he aplicado la POO en este ejercicio pero siento que he progresado.

NOTA MENTAL: Procuraré entrenar mas arduamente para mejorar mis habilidades de programación ^^'