November 2012
Intermediate to advanced
888 pages
54h 46m
Polish
Chcemy zdefiniować w danej klasie metodę, pozostawiając jednak jej implementację subklasom.
W ciele metody należy wygenerować wyjątek NotImplementedError:
class Figura2D
def pole
raise NotImplementedError.
new("#{self.class.name}#pole jest metodą abstrakcyjną.")
end
end
Figura2D.new.area
# NotImplementedError: Figura2D#pole jest metodą abstrakcyjną.
Subklasa może przedefiniować metodę abstrakcyjną pod kątem określonej funkcjonalności:
class Kwadrat < Figura2D
def initialize(rozmiar)
@rozmiar = rozmiar
end
def pole
@rozmiar ** 2
end
end
Kwadrat.new(10).pole # => 100
W języku Ruby nie istnieje pojęcie metody abstrakcyjnej w znaczeniu takim jak w C++ czy Javie, ...