Как с точки зрения ООП реализовать проверку доступов? Есть 2 класса (Человек и собака). Есть 2 экземпляра человека и 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, чтобы проверять доступы в соответствии с условиями (кто может гладить).
Для реализации проверки доступов с точки зрения ООП, можно использовать принцип инкапсуляции, полиморфизма и наследования. Классы "Человек" и "Собака" будут иметь методы, которые будут проверять доступы к действиям.
Пример реализации на 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, чтобы проверять доступы в соответствии с условиями (кто может гладить).