ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Frage: Ruby Aufgabe aus dem Studium
BeitragVerfasst: 15 Apr 2015, 00:30 
Offline
Nuby

Registriert: 15 Apr 2015, 00:22
Beiträge: 5
Hi Leute!

Bin ganz neu hier und studiere Angewandte Informatik aber habe vorher noch nie programmiert und hoffe ich kann in Zukunft viel von euch lernen.

Ich habe meinen Aufgabenzettel im Anhang hinterlegt.

Ich verstehe nicht wie ich bei 1.a in der Klasse Parcour in der Methode initialize die Sichtbarkeit von den Objekten/Instanzen der Klasse Kreatur ändern soll.
Ich weiß, dass ich die Sichtbarkeit oder Ausgangsposition von der Klasse Kreaturen ganz einfach in der Klasse Kreatur selbst ändern kann, aber wie mache ich das in der Klasse Parcour?

In der Klasse Kreatur würde das ja bei initialize wie folgt aussehen:


1
2
3
4
5
def initialize()
@sichtbarkeit = true
@Hoehe = 10
# ...usw
end


Das erzeugen von zwei Kreaturen mache ich doch wie folgt oder?:



1
2
Kreatur.new(10,10)
Kreatur.new(15,10)


bei der Klasse Kreatur in der Methode initialize steht nämlich:




def initialize (x,y)


Vielen Dank im voraus, bedenkt bitte, dass ich totaler Anfänger bin und mich über jede Hilfe freuen würde.

das heißt ich kann ja beim erzeugen schon die startposition festlegen.


Dateianhänge:
A2.pdf [373.52 KiB]
97-mal heruntergeladen


Zuletzt geändert von NobbZ am 15 Apr 2015, 02:24, insgesamt 1-mal geändert.
Code-tags ergänzt und code eingerückt
Nach oben
 Profil  
 
BeitragVerfasst: 15 Apr 2015, 02:23 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
stanzo hat geschrieben:
Ich habe meinen Aufgabenzettel im Anhang hinterlegt.

Den schau ich mir aber nicht an. Wir machen hier keine Hausaufgaben sondern unsterstützen dabei nur. Ausserdem kann es je nach FH/Uni sogar problematisch sein den Aufgabenzettel öffentlich weiter zu geben. Bitte zitiere in Zukunft nur den entsprechenden Teil der Aufgabenstellung.

stanzo hat geschrieben:
Ich verstehe nicht wie ich bei 1.a in der Klasse Parcour in der Methode initialize die Sichtbarkeit von den Objekten/Instanzen der Klasse Kreatur ändern soll.
Ich weiß, dass ich die Sichtbarkeit oder Ausgangsposition von der Klasse Kreaturen ganz einfach in der Klasse Kreatur selbst ändern kann, aber wie mache ich das in der Klasse Parcour?

Die Klasse Parcour könnte das auf verschiedene Weisen lösen. Die einfachste wäre in einem Array alle sichtbaren und in einem anderen Array alle nicht sichtbaren Akteure zu speichern.

stanzo hat geschrieben:
Das erzeugen von zwei Kreaturen mache ich doch wie folgt oder?:



1
2
Kreatur.new(10,10)
Kreatur.new(15,10)

Sieht spontan ganz gut aus, aber du solltest sie auch irgendwohin zuweisen, ansonsten erzeugst du die Instanzen der Objekte zwar, aber kannst im Anschluss nicht mehr auf sie zugreifen. Als Ort der Zuweisung bieten sich die oben genannten Arrays an

stanzo hat geschrieben:
Vielen Dank im voraus, bedenkt bitte, dass ich totaler Anfänger bin und mich über jede Hilfe freuen würde.

Anfänger oder nicht. Wenn ihr soweit seid, dass ihr Aufgaben erhaltet gehe ich davon aus, dass ihr bereits die wichtigsten Grundlagen erlernt habt. Nämlich wie macht man Zuweisungen, wie speichert man Instanzen von Objekten, was ist ein Array und was ist ein Hash.

edit
Bitte benutze in Zukunft Code-Tags und rücke deinen Code lesbar und sinnvoll ein. Ausserdem solltest du für nicht-code-Teile innerhalb eines Codeblocks Kommentare nutzen.

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
BeitragVerfasst: 15 Apr 2015, 04:15 
Offline
Nuby

Registriert: 15 Apr 2015, 00:22
Beiträge: 5
Ich kann mit dem Tipp nicht viel anfangen aber warum frage ich auch?

Ich müsste doch schon alle Grundlagen kennen und diese Aufgabe locker erledigen können.

Danke!


Nach oben
 Profil  
 
BeitragVerfasst: 15 Apr 2015, 06:51 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Wenn du mit dem Tipp nichts anfangen kannst, dann sag mir bitte mit welchem Tipp genau.

Wenn ihr noch nicht wisst was Arrays und Hashes sind, OK, da kommt man auch ohne aus, ist zwar hässlich und schlechter stil, aber bei einer Aufgabe dieser Größenordnung möglich und überschauber.

Wenn du aber nicht einmal mit dem Begriff Zuweisung etwas anzufangen weißt, ist das für mich ein Grund die Methoden deines Profs anzuzweifeln. Hier bei mir an der FH ist es üblich wirklich alles nötige vorher erklärt zu haben, so dass alle theoretischen Grundlagen vorhanden sind um die Aufgabe zu lösen bevor die Aufgabe gestellt wird.

Und leider ist es seit einigen Jahren schon so, dass immer in der ersten Jahreshälfte jemand auftaucht, der Ruby an der Schule/Uni/FH lernt. Und auch immer ist da Shoes mit im Spiel. Das ist nun mal eine Auffälligkeit, aber ich kann wohl auch ausschliessen, dass es immer der gleiche Dozent/Lehrer war, dafür waren einfach die Lehrorte zu stark auf der Karte verteilt.

Wenn euch wirklich die Grundlagen nicht unterrichtet wurden, dann frag bitte genauer, wir helfen gerne! Bist du knapp bei Zeit und musst heute abgeben, weil du schon ne Woche im stillen Kämmerlein versuchst hast das zu lösen, dann geh zu deinen Kommis und hoffe dass du für heute abschreiben kannst und such dir für die nächsten Aufgaben einen Partner der dir unter die Arme greift, zusätzlich zu der Arbeit mit dem Partner bist du hier herzlich Willkommen mit deinen Fragen, aber bitte stelle sie Konkreter.

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
BeitragVerfasst: 15 Apr 2015, 11:55 
Offline
Nuby

Registriert: 15 Apr 2015, 00:22
Beiträge: 5
Ok Danke für die Erklärung.

Ich meine den Tipp mit Arrays. Wir hatten bisher Arrays nur ganz oberflächlich besprochen.

Ich weiß ja auch wie man Zuweisungen macht etc. Aber oft fehlt mir nur ne kleine Sache die ich noch nicht begriffen hatte.

Kannst du mir vielleicht ein Tutorial nennen, wo es um Klassen usw geht, also was mir bei der Aufgabe weiterhilft.

Ich habe bei Chris Pine geguckt aber nichts gefunden diesbezüglich.


Nach oben
 Profil  
 
BeitragVerfasst: 15 Apr 2015, 12:29 
Offline
Lehrling
Benutzeravatar

Registriert: 28 Feb 2012, 21:58
Beiträge: 86
Wohnort: NRW
stanzo hat geschrieben:
Kannst du mir vielleicht ein Tutorial nennen, wo es um Klassen usw geht, also was mir bei der Aufgabe weiterhilft.

Also ich würde dir empfehlen sich erst mal durch überhaupt ein Tutorial zu lesen damit die Basis vorhanden ist.
Ich kann das hier empfehlen und ist auch nicht so lang
http://www.tutorialspoint.com/ruby/
Da wird Ruby und seine Inhalt sehr anschaulich erklärt.
Ich glaube auch das in Ruby interaktiv ein part mit Arrays war so das man das damit kurz üben kann.
http://tryruby.org/levels/1/challenges/0

mfg Manchotix


Nach oben
 Profil  
 
BeitragVerfasst: 15 Apr 2015, 12:35 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Die Dokumentation der Ruby Standardbibliothek ist ausführlich und gut und ohnehin die einzig wirklich "echte" Quelle von Informationen. Mehr über Arrays kannst du dort http://ruby-doc.org/core-2.2.0/Array.html (Vorrausgesetzt du nutzt das aktuelle Ruby 2.2)

Ausserdem gibt es noch unser eigenes Wiki hier auf ruby-portal. Die Informationen über Arrays die du dort findest, könnten allerdings geringfügig veraltet sein: http://wiki.ruby-portal.de/Array

Was Rubys Klassen-Behandlung angeht... Geh da erst einmal nicht weiter, als ihr vom Dozenten gelehrt bekommt. Durch das Ducktyping und die Möglichkeiten des Metaprogrammings sind die Klassen in Ruby sehr weiche Dinger deren Möglichkeiten weit über das hinausgehen was an den meisten Unis/FHs im Rahmen der OOP gelehrt wird. Bitte schau dir diese Möglichkeiten erst an wenn das Studium es erfordert oder du nach Abschluss der Vorlesungen immer noch Interesse an Ruby hast.

Aber zum eigentlichen Problem:



1
2
3
4
5
6
7
8
9
class Parcour
def initialize
@visible_acteurs = [] # Leeres Array fuer sichtbare Akteure erzeugen
@invisible_acteurs = [] # Leeres Array fuer unsichtbare Akteure erzeugen

@visible_acteurs << Kreatur.new(1,2) # Sichtbare Kreatur erzeugen und entsprechendem Array hinzufuegen
@invisible_acteurs << Kreatur.new(3,4) # Unsichtbare Kreatur erzeugen und entsprechendem Array hinzufuegen
end
end


Das ist natürlich sehr statisch und nicht wirklich erweiterbar, aber sollte für den Anfang einen Schubs in die richtige Richtung geben, wie es funktionieren kann. Alternativ wäre auch in etwa folgendes vorgehen möglich (Array of Hashes):



1
2
3
4
5
6
7
8
class Parcour
def initialize
@acteurs = [] # Array fuer alle Akteure erzeugen

@acteurs = { object: Kreatur.new(1,2), visible: true } # Erzeugt sichtbare Kreatur
@acteurs = { object: Kreatur.new(2,3), visible: false } # Erzeugt unsichtbare Kreatur
end
end


Hier wäre es natürlich schöner das erzeugen des einzelnen Hasheintrages im Array an eine andere Methode in Parcour zu deligieren. In etwa so:



1
2
3
4
5
class Parcour
def create_creature(x, y, visible = true)
{ object: Kreatur.new(x, y), visible: visible }
end
end


Für keinen geschriebenen Code kann ich gerade Garantie für Richtigkeit übernehmen, ich nutze gerade meine Windowsmaschine und da habe ich kein Ruby drauf installiert. Auf jedenfall aber solltest du durch die Codebeispiele eine Idee bekommen, wie das ganze umsetzbar ist.

edit

Und nur um es nochmal zu erwähnen, die wohl rubyistische weise das zu lösen, aber gerade jene die euer Dozent am wenigsten sehen will:

Monkeypatching der Kreatur-Klasse, so dass die durch Parcour erzeugten Instanzen von Kreatur eben ein Attribut tragen, welches die Sichtbarkeit speichert. Aber das geht eben in den Bereich Metaprogrammierung und wird von eurem Dozenten zu diesem Zeitpunkt weder gefordert noch erwünscht sein.

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
BeitragVerfasst: 15 Apr 2015, 14:30 
Offline
Nuby

Registriert: 15 Apr 2015, 00:22
Beiträge: 5
OK wow vielen dank. Ich denke, dass ist schon viel zu professionell oder zu weit vorgegriffen. Habe mit einigen Kommis geredet und wir machen das über eine Methode sichtbar_machen().

Aber danke nochmals


Nach oben
 Profil  
 
BeitragVerfasst: 16 Apr 2015, 12:45 
Offline
Nuby

Registriert: 15 Apr 2015, 00:22
Beiträge: 5
Hi! Ich habe eine neue Frage :D

Wie kann ich in der Klasse A, die Instanzvariablen aus der Klasse B benutzen?

Ok habe gerade gelesen, dass man das nicht machen kann. Es sei denn mit Sub-Klassen, aber das ist nicht gefragt...


Nach oben
 Profil  
 
BeitragVerfasst: 16 Apr 2015, 12:52 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Bitte öffne in Zukunft für neue Fragen neue Themen.

Zu der Frage: man kann natürlich indirekt auf die Instanzvariablen anderer Instanzen zugreifen. Stichwort getter/setter bzw. Attr_accessible oder so ähnlich.

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron