Class: Alimento

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/Alimento.rb

Overview

Esta clase representa un Alimento y las propiedades de este (nombre,cantidad,proteinas,carbohidratos,lipidos,…)

Constant Summary collapse

@@nombre =
""
@@proteinas =
0
@@carbohidratos =
0
@@lipidos =
0
@@gei =
0
@@terreno =
0
@@cantidad =
1

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(nombre, proteinas, carbohidratos, lipidos, gei, terreno, cantidad = 1.0) ⇒ Alimento

Constructor de instancias de la clase Alimento.

Parameters:

  • nombre. (String)
  • proteinas. (Float)
  • carbohidratos. (Float)
  • lipidos. (Float)
  • gei. (Float)
  • terreno. (Float)


135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/Alimento.rb', line 135

def initialize(nombre,proteinas,carbohidratos,lipidos, gei,terreno,cantidad = 1.0)
	@nombre = nombre
	@proteinas = proteinas
	@carbohidratos = carbohidratos
	@lipidos = lipidos
	@gei = gei
	@terreno = terreno

	@valorEnergetico = (@proteinas * 4 ) + (@carbohidratos * 4) + (@lipidos * 9)
	@cantidad = cantidad #En Kg
	impactoEnergia = case @valorEnergetico
		when 0..67 then 1
		when 670..83 then 2
		else 3
	end
	impactoHuellaDeCarbono = case @gei
		when 0..80 then 1
		when 80..120 then 2
		else 3
	end
	@huellaNutricional = (impactoEnergia + impactoHuellaDeCarbono)/2 
end

Instance Attribute Details

#cantidadObject (readonly)

Returns the value of attribute cantidad.



92
93
94
# File 'lib/Alimento.rb', line 92

def cantidad
  @cantidad
end

#huellaNutricionalObject (readonly)

Returns the value of attribute huellaNutricional.



92
93
94
# File 'lib/Alimento.rb', line 92

def huellaNutricional
  @huellaNutricional
end

#nombreObject (readonly)

Returns the value of attribute nombre.



92
93
94
# File 'lib/Alimento.rb', line 92

def nombre
  @nombre
end

Class Method Details

.buildObject

Construye una nueva instancia de la clase Alimento con los atributos seteados previamente(setTerreno,setCantidad,…) y la devuelve.



54
55
56
# File 'lib/Alimento.rb', line 54

def build()
	return Alimento.new(@@nombre,@@proteinas,@@carbohidratos,@@lipidos,@@gei,@@terreno)
end

.constructHashFromFile(input) ⇒ Object

Construye un diccionario de instancias de la clase Alimentos, con key == nombre del alimento de acuerdo al contenido de un fichero. Los parametros se separan por espacios en blanco(s). Los distintos alimentos se separan por saltos de linea(n).

Parameters:

  • input (String)

    Contenido del fichero en una cadena.



74
75
76
77
78
79
80
81
82
# File 'lib/Alimento.rb', line 74

def constructHashFromFile(input)
	result = Hash.new()
	size = input.size/6
	for i in 0..size-1
		alimento = Alimento.new(input[6*i], input[6*i+1].to_f, input[6*i+2].to_f, input[6*i+3].to_f, input[6*i+4].to_f, input[6*i+5].to_f)
		result.store(input[6*i] , alimento )
	end
	return result
end

.constructListFromFile(input) ⇒ Object

Construye una lista de instancias de la clase Alimentos de acuerdo al contenido de un fichero. Los parametros se separan por espacios en blanco(s). Los distintos alimentos se separan por saltos de linea(n).

Parameters:

  • input (String)

    Contenido del fichero en una cadena.



61
62
63
64
65
66
67
68
69
# File 'lib/Alimento.rb', line 61

def constructListFromFile(input)
	result = Array.new()
	size = input.size/6
	for i in 0..size-1
		alimento = Alimento.new(input[6*i], input[6*i+1].to_f, input[6*i+2].to_f, input[6*i+3].to_f, input[6*i+4].to_f, input[6*i+5].to_f)
		result.append( alimento )
	end
	return result
end

.copy(copy) ⇒ Object

Devuelve una instancia copia de la clase Alimento dado otra instancia de la clase Alimento pasado como parametro.

Parameters:

  • copy (Alimento)

    instancia de la clase Alimento que se desea copiar en otra instancia.



86
87
88
# File 'lib/Alimento.rb', line 86

def copy(copy)
	return Alimento.new(copy.nombre,copy.proteinas,copy.carbohidratos,copy.lipidos,copy.gei,copy.terreno)
end

.setCantidad(cantidad) ⇒ Object

Define el parametro ‘peso’(en kg) de la clase Alimento que el Constructor seteará.

Parameters:

  • cantidad (Float)

    Peso del alimento en Kg.



49
50
51
52
# File 'lib/Alimento.rb', line 49

def setCantidad(cantidad)
	@@cantidad = cantidad
	return self
end

.setCarbohidratos(carbohidratos) ⇒ Object

Define el parametro ‘carbohidratos’(en g) de la clase Alimento que el Constructor seteará.

Parameters:

  • carbohidratos (Carbohidratos)

    Cantidad de carbohidratos, en g, que el alimento otorga.



25
26
27
28
# File 'lib/Alimento.rb', line 25

def setCarbohidratos(carbohidratos)
	@@carbohidratos = carbohidratos
	return self
end

.setGEI(gei) ⇒ Object

Define el parametro ‘gei’(gases de efecto invernadero) de la clase Alimento que el Constructor seteará.

Parameters:

  • gei (Float)

    Gases de Efecto Invernandero, en kgCO2 , que el alimento produce en su producción.



37
38
39
40
# File 'lib/Alimento.rb', line 37

def setGEI(gei)
	@@gei = gei
	return self
end

.setLipidos(lipidos) ⇒ Object

Define el parametro ‘lipidos’(en g) de la clase Alimento que el Constructor seteará.

Parameters:

  • lipidos (Lipidos)

    Cantidad de lipidos, en g, que el alimento otorga.



31
32
33
34
# File 'lib/Alimento.rb', line 31

def setLipidos(lipidos)
	@@lipidos = lipidos
	return self
end

.setNombre(nombre) ⇒ Object

Define el parametro ‘nombre’ de la clase Alimento que el Constructor seteará.

Parameters:

  • nombre (Nombre)

    Nombre del plato.



13
14
15
16
# File 'lib/Alimento.rb', line 13

def setNombre(nombre)
	@@nombre = nombre
	return self
end

.setProteinas(proteinas) ⇒ Object

Define el parametro ‘proteinas’(en g) de la clase Alimento que el constructor seteará.

Parameters:

  • carbohidratos (Proteinas)

    Cantidad de proteinas, en g, que el alimento otorga.



19
20
21
22
# File 'lib/Alimento.rb', line 19

def setProteinas(proteinas)
	@@proteinas = proteinas
	return self
end

.setTerreno(terreno) ⇒ Object

Define el parametro ‘terreno’(en m^2 necesarios para producir el alimento) de la clase Alimento que el Constructor seteará.

Parameters:

  • terreno (Float)

    Terreno necesario, en m^2, para producir el alimento.



43
44
45
46
# File 'lib/Alimento.rb', line 43

def setTerreno(terreno)
	@@terreno = terreno
	return self
end

Instance Method Details

#<=>(other) ⇒ Object

Metodo que debe ser implementado para que la incorporación del modulo ‘Comparable’ funcione correctamente de acuerdo a las propiedades del Alimento.



189
190
191
192
193
# File 'lib/Alimento.rb', line 189

def <=>(other)
#		binding.pry
	return nil unless other.instance_of? Alimento
	valorEnergetico  <=> other.valorEnergetico
end

#cantidadNecesaria(cal_nec, prot_nec) ⇒ Object

Devuelve la cantidad necesaria, en kg, que hay que ingerir del alimento para ingerir cal_nec kcal y prot_nec g de proteínas.

Parameters:

  • cal_nec (Float)

    Calorías, en kcal, que hay que ingerir.

  • prot_nec (Float)

    Proteinas, en g, que hay que ingerir.



161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/Alimento.rb', line 161

def cantidadNecesaria(cal_nec, prot_nec)
	#Los datos del alimento se corresponden a los nutrientes para 1 kg de dicho alimento
	#Entonces, dado que primero debemos satisfacer las proteinas necesarias:
	kg_a_consumir_para_prot_nec = prot_nec / @proteinas.to_f()
	#Tenemos los kg, esos kg consumidos tambien otorgan calorias,asi que restamos a las calorias necesarias:
	cal_rest = cal_nec - (kg_a_consumir_para_prot_nec * @valorEnergetico) #kcal = kcal - (kg * kcal/kg)
	#Ahora, calculamos los kg necesarios para consumir las cal_rest
	kg_a_consumir = cal_rest / @valorEnergetico.to_f() # kg = kcal / (kcal/kg)
	#Sumamos kg_a_consumir para las caloreias, y kg_a_consumir_para_prot_nec para el minimo proteinas necesarioas
	kg_nec = kg_a_consumir + kg_a_consumir_para_prot_nec
	return kg_nec
end

#carbohidratosObject

Recupera la cantidad de carbohidratos,en g, del alimento (relativo a la cantidad del alimento).



108
109
110
# File 'lib/Alimento.rb', line 108

def carbohidratos
	return @carbohidratos*@cantidad
end

#geiObject

Recupera la cantidad de gases de efecto invernadero producidos, en KgCO2, en la producción del alimento (relativo a la cantidad del alimento).



116
117
118
# File 'lib/Alimento.rb', line 116

def gei
	return @gei*@cantidad
end

#lipidosObject

Recupera la cantidad de lipidos,en g, del alimento (relativo a la cantidad del alimento).



112
113
114
# File 'lib/Alimento.rb', line 112

def lipidos
	return @lipidos*@cantidad
end

#proteinasObject

Recupera la cantidad de proteinas, en g, del alimento (relativo a la cantidad del alimento).



104
105
106
# File 'lib/Alimento.rb', line 104

def proteinas
	return @proteinas*@cantidad
end

#setCantidad(cantidad) ⇒ Object

Define la cantidad, en kg, del alimento.

Parameters:

  • cantidad (Float)

    .



97
98
99
100
# File 'lib/Alimento.rb', line 97

def setCantidad(cantidad)
 	@cantidad = cantidad
	return self
end

#terrenoObject

Recupera la cantidad de m^2 de terreno necesario para producir el alimento (relativo a la cantidad del alimento).



120
121
122
# File 'lib/Alimento.rb', line 120

def terreno
	return @terreno*@cantidad
end

#to_sObject

Devuelve un string que es el alimento formateado para ser entendible por un humano.



175
176
177
# File 'lib/Alimento.rb', line 175

def to_s
	return "[Nombre:#{@nombre}, Peso:#{@cantidad} kg, Proteinas:#{proteinas.round(2)} g, Carbohidratos:#{carbohidratos.round(2)} g, Lipidos:#{lipidos.round(2)} g, Valor Energetico:#{valorEnergetico.round(2)} kcal, Emisiones: #{gei.round(2)} kgCO2, Terreno Usado:#{terreno.round(2)} m^2]"  
end

#valorEnergeticoObject

Recupera el valor Energetico, en kcal, que produce la ingesta del alimento (relativo a la cantidad del alimento).



124
125
126
# File 'lib/Alimento.rb', line 124

def valorEnergetico
	return @valorEnergetico*@cantidad
end