Вам следует прочесть книгу по объектно-ориентированному анализу и проектированию. Эти вопросы касаются принципов ОО.
Ваш лучший вариант, по моему скромному мнению, - взять книгу вроде: HF: OOA & D . Я прочитал его, и он ответил на ВСЕ твои вопросы.
Если 2 файла повторяют некоторый код, вы должны вывести этот код в функцию и использовать его в 2 файлах.
Помните, что у класса есть только одна ответственность, тогда вы должны поместить эту функцию в нужное место, например, если это код утилиты, вы не можете поместить его в модуль утилит.
Когда класс подходит? Вы должны провести некоторый анализ предметной области в случаях использования вашей проблемы и посмотреть на существительные, которые являются классами-кандидатами вашей программы.
Как это определить? Перед кодированием вы должны проанализировать и спроектировать свою проблему.
Короче, я рекомендую вам эту книгу, это все, что вам нужно: PP