Last active
August 29, 2015 14:20
-
-
Save kusayuzayushko/724914d8dd7c4e008e74 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Создайте новый файл oop_practice.rb. | |
# 1. Добавьте туда два класса - Notebook и Note. | |
# 2. У класса Note есть метод share, который меняет атрибут shared объекта этого класса с false на true | |
# 3. У класса Note есть атрибуты shared и text | |
# 4. У класса Notebook есть методы add_note, clean (удаляет все заметки) | |
# 5. Ещё у Notebook есть атрибут с массивом заметок | |
# 6. Ещё есть класс SharedNotebook, подкласс класса Notebook | |
# 7. У него переопределяется метод add_note, любая добавленная в него заметка становится shared | |
# 8. Ещё у _самого класса_ SharedNotebook есть метод count, который возвращает количество созданных SharedNotebook | |
class Notebook | |
def initialize() | |
@notes = [] # массив заметок | |
end | |
def add_note(note) # добаавляет заметку в массив заметок | |
@notes << note | |
end | |
def clean # удаляет все заметки | |
@notes.clear | |
end | |
def notes | |
@notes | |
end | |
end | |
class Note | |
def initialize(text) | |
@text = text # текст заметки | |
@shared = false # задаем значение по-умолчанию | |
end | |
def share # вызываемый метод меняет значение по-умолчанию на true | |
@shared = true | |
end | |
def shared? # возвращает true/false | |
@shared | |
end | |
def text # с помощью этого метода мы можем заглянуть в текст заметки | |
@text | |
end | |
end | |
class SharedNotebook < Notebook | |
@@shared = 0 # переменная содержит счетчик созданных SharedNotebook | |
def initialize() | |
@notes = [] | |
@@shared += 1 # увеличиваем счетчик на 1 при создании нового SharedNotebook | |
end | |
def add_note(note) # переопределяем родительский метод | |
@notes << note | |
note.share | |
end | |
def self.count # доступ к счетчику | |
@@shared | |
end | |
end | |
# Нужно реализовать указанную выше структуру классов и затем используя её сделать следующее: | |
# Создать блокнот (Notebook), создать 3 заметки, добавить их в блокнот. | |
notebook = Notebook.new # создаем блокнот | |
n1 = Note.new("первая заметка") # создаем заметку | |
n2 = Note.new("вторая заметка") | |
n3 = Note.new("третья заметка") | |
notebook.add_note(n1) # добавляем заметку в блокнот | |
notebook.add_note(n2) | |
notebook.add_note(n3) | |
# Создать общий блокнот, добавить предыдущие заметки в общий блокнот. | |
sh_notebook = SharedNotebook.new # создаем общий блокнот | |
sh_notebook.add_note(n1) # добавляем заметку n1 в общий блокнот | |
sh_notebook.add_note(n2) | |
sh_notebook.add_note(n3) | |
# Убедиться что заметки из первого блокнота по-прежнему не расшаренные. | |
notebook.notes.each { |n| puts n.shared? } # проверяем, расшарены ли заметки из первого блокнота | |
# Вывести количество общих блокнотов. | |
puts(SharedNotebook.count) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment