Как с точки зрения ООП реализовать проверку доступов? Есть 2 класса (Человек и собака). Есть 2 экземпляра человека и 1 собака. Человек А хозяин собаки. Человек Б дресеровщик. У собаке может быть много хозяев, а у человека много собак.
Условие: Собаку может гладить только её хозяин. Дресеровщик может гладить любую собаку.
Как правильно построить классы, какие проверке где должны быть с точки зрения ООП?
Конкретный вопрос: Собака должна знать что её может гладить дресеровщик , или она должна спрашивать у человека может ли он её гладить?
При условии что потом могут добавится коты, которых могут гладить и хозяева и дети. А потом добавятся бабушки которые могут гладить всех.

21 Авг 2019 в 07:02
171 +1
1
Ответы
1

Для реализации проверки доступов с точки зрения ООП, можно использовать принцип инкапсуляции, полиморфизма и наследования. Классы "Человек" и "Собака" будут иметь методы, которые будут проверять доступы к действиям.

Пример реализации на Python:

class Human:
def __init__(self, name):
self.name = name
self.dogs = []
def add_dog(self, dog):
self.dogs.append(dog)
def pet_dog(self, dog):
if dog in self.dogs:
print(f"{self.name} гладит {dog.name}")
else:
print(f"{self.name} не может гладить эту собаку")
class Dog:
def __init__(self, name):
self.name = name
def pet(self, person):
person.pet_dog(self)
class Trainer(Human):
def pet_dog(self, dog):
print(f"{self.name} гладит {dog.name}")
# Создаем экземпляры людей и собаки
person_a = Human("Человек А")
person_b = Trainer("Человек Б")
dog = Dog("Собака")
# Человек А становится хозяином собаки
person_a.add_dog(dog)
# Человеки гладят собаку
person_a.pet_dog(dog) # Человек А гладит Собака
person_b.pet_dog(dog) # Человек Б гладит Собака
dog.pet(person_a) # Человек А гладит Собака
dog.pet(person_b) # Человек Б гладит Собака

В данном примере, классы "Человек" и "Собака" содержат методы для проверки доступов к действиям. Класс "Человек" имеет атрибут dogs, который содержит список собак, принадлежащих данному человеку. Метод pet_dog проверяет, может ли человек гладить данную собаку. Класс "Собака" имеет метод pet, который вызывает метод pet_dog у человека.

Для добавления котов, можно создать класс "Кот", который будет иметь аналогичный метод pet. Далее можно создать классы для детей и бабушек, которые также будут иметь методы для гладения собак и котов. Каждый из этих классов будет переопределять метод pet, чтобы проверять доступы в соответствии с условиями (кто может гладить).

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир