Siemanko, przyswajam właśnie podstawy programowania obiektowego. Przy przerabianiu jednego zadanka z C zaciąłęm się i nie estem w stanie popchnąć tego sam. Wygląda to tak:
Stwórz klasy:
• Osoba z polami: imie, nazwisko, wiek, konstruktorem inicjującym wszystkie pola oraz
metodą Wypisz.
• Książka z polami: tytul, autor (typu Osoba), data wydania oraz metodą Wypisz
Utwórz różne obiekty stworzonych klas. Wykonaj metody Wypisz.
O ile pierwsza część zadania nie stwarza problemu, o tyle z drugą nie mogę dać sobie rady. Problem polega na tym, że nie bardzo wiem jak zrealizować autora typu Osoba. Z góry dzięki za sugestie.
Do kodu świstaka dorzuciłbym jeszcze sprawdzanie osoby przez .class (ew. razem z superclass jeżeli chcemy podpinać klasy dziedziczące po osobie), albo prościej - respond_to na metodzie wypisz.
Do czegoś takiego mniej więcej doszedłem. Wydawało mi się, że chodzi raczej o to w efekcie finalnym inicjując obiekt należący do klasy "Książka"inicjujemy również autora, należącego do klasy osoba.
[quote=szatan_zuo]Do czegoś takiego mniej więcej doszedłem. Wydawało mi się, że chodzi raczej o to w efekcie finalnym inicjując obiekt należący do klasy "Książka"inicjujemy również autora, należącego do klasy osoba.
W każdym razie dzięki za pomoc![/quote]
to tak może działać
lotr = Ksiazka.new("The Lord of the Rings", Osoba.new("J.R.R.", "Tolkien", 120), Time.new(1954, 5, 6))
możesz też ustawić konstruktor żeby tworzył domyślnie nową “Osobę”
…tyle że to mija się z celem. Kod swistak35 jest najlepszy.
[quote=swistak35][code=Ruby]class Osoba
def initialize(imie, nazwisko, wiek) @imie, @nazwisko, @wiek = imie, nazwisko, wiek
end
def wypisz
puts “#{@imie} #{@nazwisko}, wiek: #{@wiek} lat”
end
end
class Ksiazka
def initialize(tytul, autor, data_wydania) @tytul, @autor, @data_wydania = tytul, autor, data_wydania
end
def wypisz
puts “Książka ‘#{@tytul}’, autor: #{@autor.wypisz}, data publikacji: #{@data_wydania}”
end
end[/code]
Czy o coś takiego chodzi? : )
EDIT: A, jeszcze wywoływanie.
jrr_tolkien = Osoba.new "J.R.R.", "Tolkien", 120
lotr = Ksiazka.new "The Lord of the Rings", jrr_tolkien, Time.new(1954, 5, 6)
puts jrr_tolkien.wypisz
puts lotr.wypisz
[/quote]
Mozna to tez zapisac tak korzystajac z Ruby idioms. Wiem ze chodzi o prostote przykladu ale jak sie uczyc to sie uczyc