[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-oop-v-chem-raznitsa-mezhdu-kompozitsiey-i-agregatsiey":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},11,"v-chem-raznitsa-mezhdu-kompozitsiey-i-agregatsiey",1,"oop","ООП","🔷","В чем разница между композицией и агрегацией?","Ассоциация обозначает связь между объектами. Композиция и агрегация — частные случаи ассоциации «часть-целое».\n\n**Композиция** — вложенный объект не может существовать без владельца (владелец создаёт и уничтожает его):\n\n```java\nclass Engine {\n    private final int horsepower;\n\n    Engine(int horsepower) {\n        this.horsepower = horsepower;\n    }\n}\n\nclass Car {\n    private final Engine engine; \u002F\u002F Engine живёт и умирает вместе с Car\n\n    Car(int horsepower) {\n        this.engine = new Engine(horsepower); \u002F\u002F Car сам создаёт Engine\n    }\n}\n```\n\n**Агрегация** — вложенный объект существует независимо, передаётся извне:\n\n```java\nclass Driver {\n    private final String name;\n\n    Driver(String name) {\n        this.name = name;\n    }\n}\n\nclass Car {\n    private Driver driver; \u002F\u002F Driver может существовать без Car\n\n    Car(Driver driver) {\n        this.driver = driver; \u002F\u002F Car получает Driver извне\n    }\n}\n```\n\nКоротко: если `new` внутри класса — композиция, если объект приходит снаружи — агрегация.\n\nПредпочтительнее использовать агрегацию и внедрять зависимости через конструктор. Это автоматически делает код тестируемым и следует принципу *Dependency Inversion* из SOLID. Композицию стоит применять, когда есть чёткая причина «спрятать» создание объекта внутрь класса.","","junior",[7,15,16,17],"композиция","ассоциация","агрегация",[],null,{"title":21,"description":22,"ogTitle":23,"ogDescription":24,"keywords":25,"schemaAnswer":30,"featuredSnippetReady":31},"Композиция и агрегация в Java — в чём разница — Gymterview","Композиция — вложенный объект не существует без владельца. Агрегация — объект передаётся извне и живёт независимо. Примеры кода в Java.","Композиция vs агрегация — разница с примерами кода","Композиция: new внутри класса, объект умирает с владельцем. Агрегация: объект приходит снаружи и живёт независимо. Примеры на Java.",[26,27,28,29],"композиция и агрегация Java","разница композиция агрегация","ассоциация ООП","has-a отношение Java","Композиция и агрегация — частные случаи ассоциации «часть-целое». Композиция — вложенный объект не может существовать без владельца (владелец создаёт и уничтожает его). Агрегация — вложенный объект существует независимо, передаётся извне.",true]