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

21 Авг 2019 в 07:02
195 +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 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир