Подумайте, сколько геттеров и сеттеров вы можете избавиться. В надежной ОО-структуре объекты экспортируют поведение друг другу, а не данные. Например, скелет модели геттера / сеттера человека:
class Person:
def set_name(value):
def get_name:
def set_age(value):
def get_age:
def set_drink(value):
def get_drink:
def set_favorite_drink(value):
def get_favorite_drink:
А вот некоторый (псевдо) код, который использует Person:
def order_drink(person)
if person.age >= 21:
puts "#{person.name} can have a drink"
person.drink = bar.order(person.favorite_drink)
else:
puts "#{person.name} cannot drink (legally)."
Вот как вы можете сделать так, чтобы при заказе напитка принимал участие человек, не имеющий добытчиков или сеттеров:
class Person:
def order_drink_from(bar):
if self.age >= 21:
puts "#{self.name} can have a drink"
self.drink = bar.order(favorite_drink)
else:
puts "#{self.name} cannot drink (legally)"
используется так:
person.order_drink_from(bar)
Я не скажу, что вам никогда не понадобятся геттеры в ОО-программе. Но я скажу так: сеттеры, в частности, должны заставить вас переосмыслить дизайн. И каждый раз, когда вы пишете либо получатель, либо установщик, пусть тихий голос в вашей голове спросит вас, есть ли способ заставить объекты экспортировать поведение, а не данные.