Если объект возвращает DTO как представление самого себя
Как? DTO это объект, который просто описывает некую модель данных и не имею поведения (
Wikipedia). Ладно, с этим всё равно, едем дальше
нельзя менять свойства объекта из вне, это могут делать только методы объекта
Ну это уже смотря на логику... К примеру, наведу пример из .Net, возьмите стандартный класс от Microsoft по типу Console (Класс для работы с консолью). Там же есть свойства, по типу BackgroundColor, Height, Width и т.д. Изменение размеров окна является нарушением инкапсуляции?
То представление инкапсуляции, что вы имеете, оно опирается только на наличие модификаторов доступа public и private. Является ли инкапсуляцией наличие модификаторов доступа? Нет, потому что не было бы описано 100500 книг и статей по поводу двух модификаторов доступа. Инкапсуляция - это, в первую очередь, целостность объекта, т.е., что объект может взаимодействовать сам с собой через внутренние методы (По типу того, как вы описали).
Но неужели объект не может меняться снаружи, или он не может меняться через публичные свойства? Если бы это было запрещено, то в конвенциях к ООП писалось бы такое ещё и жирным шрифтом, что: "НЕЛЬЗЯ ДЕЛАТЬ СВОЙСТВА ПУБЛИЧНЫМИ".
Для примера, есть такой языка как C++ (Думаю, что вы слышали). Там, в отличии от более продвинутых языков программирования, нет большей части упрощающего функционала (Синтаксического сахара, называйте как хотите). Весь объект строится из полей и методов (С различными комбинациями модификаторов доступа). Есть ли там инкапсуляция? Да. Запрещены ли там публичные поля? Нет.
машина машина должен решать задачи по перевозке водителя,
А если вам скажут настроить взаимодействие двух машин? Да, тут свойства использоваться вряд ли будут, но будет ли нарушение инкапсуляции то, что другая машина будет влиять на первую? Нет. Как они будут это делать? Определённо через методы. Зачем тогда есть публичные свойства и поля?
Класс который содержит поля - является структурой данных (без поведения). класс который содержит и структуры данных (т.е. свойства) и поведение является объектом.
Любой класс является классом. Конкретная реализация описания класс является объектом. Структура данных (Вообще модель данных) является самым простым типом класса. Если у класса есть методы для описания поведения, то он всё равно остаётся объектом некого класса. Как выше написал уже
Владимир Коротенко :
dto являются легчайшими объектами взаимодействия с бд, они просто по своей сути не могут содержать в себе логики
мы хотим при оплате добавить еще какое-нибудь поведение, поверх стандартного
Наследование, ещё один принцип ООП. Если полностью закрытый класс даже для наследования (sealed) значит тут уже как не крутись, у вас ничего не получится, как бы вы не ХОТЕЛИ УСОВЕРШЕНСТВОВАТЬ функционал. Значит так задумано вышестоящим разработчиком/ами
но как без знания объекта это сделать
Для этого есть документации. Задумайтесь, на сколько часто вы закрываете свои классы от наследования, когда пишете код?
Не будем же мы после каждого требования бизнеса изменять старый код.
Будете. Будете делать всё что вам скажут, абсолютно.