Существуют различные шаблоны проектирования создания объектов, которые касаются тех взаимоотношений, о которых вы говорите.Действительно простой такой шаблон - это шаблон Factory.
FileSystem {
File openFile(String path);
}
FileSystem является создателем, или Factory для файлов.
Я считаю полезным разделить ихдве стороны мышления: что может этот объект сделать?Где взять один из этих объектов.
Чтобы ответить на ваш комментарий к вашему вопросу:
Часть этого придет с опытом.Руководящий принцип заключается в том, чтобы каждый класс хорошо выполнял одну работу.
Вы начинаете замечать, что определенные фрагменты кода не принадлежат создаваемому классу (например, речь идет о множестве файлов, а не об одном файле).и при этом он не принадлежит к классу, который хочет использовать созданный класс, потому что тогда код потенциально будет дублирован во многих частях кода (любой, кто хочет файл), так что есть необходимость передать ответственность некоторому классу.Ага, это Фабрика.