Skip to content

Instantly share code, notes, and snippets.

@kusayuzayushko
Last active August 29, 2015 14:20
Show Gist options
  • Save kusayuzayushko/724914d8dd7c4e008e74 to your computer and use it in GitHub Desktop.
Save kusayuzayushko/724914d8dd7c4e008e74 to your computer and use it in GitHub Desktop.
# Создайте новый файл 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