Я немного запутался в поведении объектов в ООП - PullRequest
1 голос
/ 01 мая 2019

Я прочитал, что поведение объекта - это действие, выполняемое объектом (в реальной жизненной ситуации), но в программировании контекстом является не операция / действие , выполняемое над объектом , как описано способ.

Например, в приведенном ниже коде у нас есть метод для отображения полного имени сотрудника. В этом случае действие выполняется объектом или это действие выполняется над объектом? Как отображение полного имени может быть поведением объекта, когда мы сравниваем его с поведением собаки (например, лай, сон и т. Д.). Спасибо за вашу помощь

class employee:

    raise_value=1.05
    def __init__(self,first,last,pay):

        self.first=first
        self.last=last
        self.pay=pay

    def emp_fullname(self):
        return "Full name is {} {}".format(self.first,self.last)

    def set_raise(self):
        self.new_sal=float(self.pay)*employee.raise_value
        return 'My new salary is {}'.format(self.new_sal)

e1=employee("Chyanit","Singh","60000")
e2=employee("Parag","Singh","40000")

e1.emp_fullname()

Ответы [ 2 ]

3 голосов
/ 02 мая 2019

Поведение объекта всегда в ответ на внешний стимул.В ОО сообщение передается «чем-то», а ваш объект реагирует каким-то образом.Если сообщение является запросом информации, оно вызовет ответственность за знание объекта;если сообщение является событием или запросом на выполнение чего-либо, это вызовет ответственность за поведение.Операции будут зависеть от состояния объекта и характера события.Иногда событие содержит «снимок» текущего общего состояния системы, которое дает контекст для выполнения операций объекта.Обратите внимание, что что бы ни делал объект, он не влияет на его внешний контекст.

Существует третья обязанность - предоставить услугу.Большинство ООП-программ фактически обслуживают сервисы, которые являются просто преобразованиями передаваемых им контекстов без какого-либо влияния на сами объекты.В них очень мало ответственности за поведение или знания.

В вашем классе employee у вас есть и знания, и обязанности в отношении поведения.Экземпляр класса сможет ответить на запрос полного имени сотрудника и «вести себя» таким образом, чтобы изменить его внутреннее состояние, то есть получить новую зарплату.Единственное, что я хотел бы изменить, это переименовать set_raise в raise_salary, чтобы он выглядел менее похожим на метод установки.

0 голосов
/ 01 мая 2019

Методы выполняются объектом или на нем. Это не должно быть одно или другое. GetFullName() и SetFullName(first,last) оба метода. Первый выполняется объектом; как собака лает, это дает вам что-то. Последнее выполняется на объекте, как если бы вы назвали свою новую собаку или дали ей кость.

Этот вопрос может или не может помочь вам понять, что метод: В чем разница между методом и функцией?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...