Ruby - Objektorientierung?

geronimo89

New member
Hallo. Ich habe in den letzen beiden Tagen drüber nachgedacht wie ich anderen, anhand eines eigenen Codebeispiels näher bringen kann was Objektorientiertheit ist.
Nun habe ich mal ein kleines Programm geschrieben, einen BMI-Rechner um genau zu sein. Ich werde ihn noch mit einer erweiterten Ausgabe und eventuell mit Optionen für Menschen mit Amputationen versehen.

Ich möchte allerdings eure Meinung zum Code hören. Natürlich ist die Objektorientiertheit übertrieben, aber ich bin froh, dass ich überhaupt etwas zusammenschreiben kann. Wenn ich also etwas schlichtweg falsch einsetze und das anders vielleicht viel effektiver ist, bitte schreibt es. Wie gesagt stehe ich recht am Anfang was das Lernen angeht, ich möchte ja nicht von Anfang an alles Falsch machen.
Das Ganze ist übrigens in Ruby geschrieben.
Ruby
Ruby in 15 Minuten online testen

Code:
class BMI
	def askfor_w()
		puts("How much do you weight?") # erfragt Gewicht
		@weight = gets.to_f # speichert Antwort in $weight wandelt sie in eine und Fließkommazahlum
	end
	
	def askfor_h()
		puts("How high are you?(meters example: 1.8)")
		@height = gets.to_f
	end
	
	def calc()
	height2 = @height * @height
	result = @weight / height2
	puts result
	end
end

bmicalc = BMI.new # erstellt neues Objekt
bmicalc.askfor_w()
bmicalc.askfor_h()
bmicalc.calc()

Code:
puts("How much do you weight?")
weight = gets.to_f
puts("How high are you?(meters example: 1.8)")
height = gets.to_f
height2 = height * height
result = weight / height2
puts result
 

odigo

Member of Honour
Sorry, sei mir jetzt nicht böse, aber um jemanden Objektorientierung zu zeigen ist das eigentlich kein wirklich gutes Beispiel. Ich würde an deiner Stelle z.B. eine kurze "Kundendatenbank" machen, also nur so mit z.B. Name und Vorname.

-neues Objekt erstellen
-Name und Vorname einlesen und per Methode an das Objekt übergeben
-das ganze z.B. zweimal
-alle Objekt "durchlaufen" lassen und die Namen per Methode wieder ausgeben
-fertig

Das dürft doch imho ein Musterbeispiel für Objektorientierung sein. Bei deinem Beispiel sieht man eigentlich nur daß es mehr zu schreiben ist und kann die Vorteile nicht erkennen.

Gruß odigo
 

0wnZ

New member
Ja richtig schon :D
persönlich würde ich noch ne kleinigkeit drann ändern
Code:
class BMI
	def askfor_w()
		puts("How much is your weight? (kilogramme)") # erfragt Gewicht
		@weight = gets.to_f # speichert Antwort in $weight wandelt sie in eine und Fließkommazahlum
	end
	
	def askfor_h()
		puts("How high are you?(meters)")
		@height = gets.to_f
	end
	
	def calc()
	result = @weight / (@height * @height)
	puts result
	end
end

bmicalc = BMI.new # erstellt neues Objekt
bmicalc.askfor_w()
bmicalc.askfor_h()
bmicalc.calc()


Wie wärs, wenn es ne "Beurteilung" gibt.
Also ein BMI bis 20 ist untergewichtig, oder über 25 Übergewichtig.
Achja ich glaube das Geschlecht spielt auch ne Rolle ;)

Mit freundlichen Grüßen

0wnZ

edit: hab jetzt die "Beurteilung" mit eingefügt, da mir das bei dir zulange gedauert hat :p
Code:
class BMI
	def askfor_w()
		puts("How much is your weight? (kilogramme)") # erfragt Gewicht
		@weight = gets.to_f # speichert Antwort in $weight wandelt sie in eine und Fließkommazahlum
	end
	
	def askfor_h()
		puts("How high are you?(meters)")
		@height = gets.to_f
	end
	
	def calc()
		s_array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] # ich weiß geht auch bequemer
		o_array = [20, 21, 22, 23, 24, 25]
		result = @weight / (@height * @height)
		puts "Your BMI is: #{result.to_i}"
		if s_array.include?(result.to_i)
			print "This means you are skinny."
			elsif o_array.include?(result.to_i)
				print "This means your weigth is okay."
				else
					print "This means you are overweight"
		end
	end
end

bmicalc = BMI.new # erstellt neues Objekt
bmicalc.askfor_w()
bmicalc.askfor_h()
bmicalc.calc()
 

geronimo89

New member
Original von 0wnZ

Wie wärs, wenn es ne "Beurteilung" gibt.
Also ein BMI bis 20 ist untergewichtig, oder über 25 Übergewichtig.
Achja ich glaube das Geschlecht spielt auch ne Rolle ;)

Mit freundlichen Grüßen

0wnZ

Hatte ich sowieso vor noch zu integrieren. Was ich auch noch vor habe ist eine Abfrage für Amputationen von verschiedenen Gliedmaßen, das nimmt auch auf den BMI Einfluss. Vielen Dank übrigens :)
 

CentralWay

New member
Original von geronimo89
Hatte ich sowieso vor noch zu integrieren. Was ich auch noch vor habe ist eine Abfrage für Amputationen von verschiedenen Gliedmaßen, das nimmt auch auf den BMI Einfluss. Vielen Dank übrigens :)
Weisst du grad wieviel Prozent ein Bein/Arm/Fuss vom Gesamtgewicht ausmacht? Würde mich noch interessieren, nur das Bein wiegen ist n bisschen schwierig :D
(sagt man wiegen? oder wägen? :-s)
 
Oben