🗒 Задача¶
На форуме есть два типа пользователей – обычные пользователи и администраторы.
Пользователи могут читать форум и писать сообщения. Администраторы дополнительно могут удалять сообщения и пользователей.
Опиши классы для сущностей пользователей и администраторов, используя абстрактный класс. У абстрактного класса должны быть соответствующие общие поля и методы. Действия на форуме отобрази сообщениями в консоль.
❌ Ошибки¶
✏️ Комментарии¶
Следует один раз выделять память под переменную с именем, а в дочерних классах уже переиспользовать ее. Перегрузка все равно выделяет новую память за счет ключевого слова val - попробуй применить другой подход, где память выделяется только в абстрактном классе.
Класс в данном контексте — это описание будущего конкретного экземпляра. Мы описываем сущность одного абстрактного пользователя. Поэтому множественное название будет уместно разве что для списка пользователей, но не для одного конкретного экземпляра.
Мне все таки не нравится, что у всех пользователей будет возможность добавления флага админ. Лучше создать дочерний от юзера тип пользователя, чтобы только он имел соответствующие полномочия
В системе класс с таким названием уже существует. Тип Unit возвращается, например, как результат выполнения метода, который ничего не возвращает. Не рекомендуется использовать зарезервированные имена для классов или переменных.
🧾 Решение¶
abstract class User(val name: String) {
fun readForum() {
println("$name is reading the forum.")
}
fun writeMessage(message: String) {
println("$name wrote: $message")
}
abstract fun showActions()
}
class RegularUser(name: String) : User(name) {
override fun showActions() {
println("Regular user actions: Read forum, Write message.")
}
}
class Administrator(name: String) : User(name) {
fun deleteUser(user: User) {
println("$name deleted user: ${user.name}")
}
fun deleteMessage(message: String) {
println("$name deleted message: $message")
}
override fun showActions() {
println("Administrator actions: Read forum, Write message, Delete user, Delete message.")
}
}
fun main() {
val regularUser = RegularUser("John")
val administrator = Administrator("Admin")
regularUser.readForum()
regularUser.writeMessage("Hello, World!")
regularUser.showActions()
administrator.readForum()
administrator.writeMessage("Notice: Please follow the rules.")
administrator.deleteUser(regularUser)
administrator.deleteMessage("Hello, World!")
administrator.showActions()
}