Если я правильно вас понимаю, вы спрашиваете: «Зачем мне нужны переменные экземпляра с методами getter и setter для чтения / изменения этих переменных, когда я могу просто передать данные в объект с помощью аргументов метода? "Звучит ли это правильно?
Ответ дает суть того, что такое ООП (объектно-ориентированное программирование). Основная концепция ООП заключается в том, что вы создаете отдельные объекты для представления отдельных частей данных. Например, вы можете отслеживать имена и возраст некоторых групп людей;в этом случае вы будете использовать различные объекты для представления (и, соответственно, хранения, управления данными) о каждом отдельном человеке.
Персона 1 («Билл», 52)
Человек 2 ("Мэри", 13)
Человек 3 ("Лана", 29)
Цель класса в этой модели - просто определить спецификации этих объектов(например, «Человек» состоит из имени и возраста).
Почему это полезно? Во-первых, это довольно интуитивная система, поскольку вы можете думать о создаваемых объектах как о реальных реальных объектах. Во-вторых, это облегчает работу с данными, которые связаны между собой. Если, например, мы хотим объединить (объединить в строку) имя человека с его возрастом, наличие объекта, представляющего каждого человека, делает это легко! Просто посмотрите на каждый объект, один за другим, и используйте получатели для доступа к значениям для каждого экземпляра.
Чтобы сделать это не ООП-способом, нам понадобится другой способ хранения информации - возможно, в виде списка имен и отдельного списка возрастов.
Список имен: ["Билл", "Мэри", "Лана"]
Список возрастов: [52, 13, 29]
При такой настройке не так легко увидеть, какое имя относится к какому возрасту - единственное, что у них есть, связывает их - это их позиция в списке. И если бы списки были отсортированы, эти позиции могли бы измениться!
Итак, вкратце: экземпляры объектов являются отличным способом обработки многих похожих дискретных наборов данных.
Что касается того, почему мы обычно используем методы получения и методы установки при работе с этими экземплярами, вместо того, чтобы просто выставлять свойства напрямую, можно найти отличное объяснение здесь . Но стоит упомянуть, что разные языки обрабатывают это по-разному. Например, в JavaScript все свойства доступны напрямую. В Ruby их нет, и вы должны использовать сеттеры и геттеры для просмотра / изменения переменных экземпляра объекта.
Надеюсь, это обеспечит некоторую ясность!