Уведомления

Группа в Telegram: @pythonsu

#1 Май 29, 2019 21:54:00

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

Не нарушил ли я принцип подстановки Лисков?

подскажите пожалуйста полностью ли соответствует нижеприведённый код принципу подстановки Барбары Лисков?

 class PizzaStorage:
    def __init__(self):
        self.count = 10
    def minus(self, count):
        self.count = self.count - count
class Customer:
    def __init__(self, name, storage):
        self.name = name
        self.storage = storage
    def eat(self):
        self.storage.minus(1)
class FatCustomer(Customer):
    def __init__(self, name, storage, logger):
        super().__init__(name, storage)
        self.logger = logger
    def eat(self):
        self.storage.minus(1)
        self.logger.write_to_log('fat eat')
    def sayThanks(self):
        print('thanks!')
class Logger:
    def write_to_log(self, text):
        print('LOG: ', text)
pizzaStorage = PizzaStorage()
customer = Customer('bill', pizzaStorage)
fatCustomer = FatCustomer('bob', pizzaStorage,  Logger())
customer.eat()
print(pizzaStorage.count)
fatCustomer.eat()
print(pizzaStorage.count)

как видите, я унаследовал FatCustomer от Customer. Эти два экземпляра класса имеют почти одинаковый метод eat(). Этот метод в обоих случаях делает необходимое действие(удаление пиццы из хранилища). НО один из этих методов совершает дополнительное действие - пишет в лог.

с одной стороны принцип Лисков не нарушается, потому что оба объекта могут одинаково успешно удалить пиццу. но с другой стороны принцип лисков нарушается, потому что, методы eat() не полностью иденитчны

Офлайн

#2 Май 30, 2019 05:40:21

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Не нарушил ли я принцип подстановки Лисков?

zlodiak
Старайтесь не наследовать неабстрактные типы и тогда все будет хорошо LSP



Офлайн

#3 Май 30, 2019 11:15:15

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Не нарушил ли я принцип подстановки Лисков?

Всё норм, только в методе eat класса FatCustomer должно быть Customer.eat(self) в место self.storage.minus(1)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version