Ответ
Из концепции чистого объектно-ориентированного программирования (ООП) чаще всего исключают элементы, которые нарушают его основные принципы: инкапсуляцию, полиморфизм и работу с объектами как с основными строительными блоками.
Основные исключения:
- Статические методы и поля — они принадлежат классу, а не объекту, и не требуют создания экземпляра, что противоречит идее инкапсуляции состояния и поведения в объектах.
- Утилитарные классы (Utility Classes) — классы, состоящие только из статических методов (например,
Math,Collections,Arrays), которые не имеют состояния и не представляют собой сущности предметной области. - Примитивные типы данных (int, boolean, float) — в строгих ООП-языках (как Smalltalk) всё является объектом. В Java и C++ примитивы — это исключение для повышения производительности.
Пример нарушения (Java):
// Утилитарный класс со статическими методами — не является "чистым" объектом.
class StringUtils {
public static boolean isEmpty(String str) {
return str == null || str.trim().isEmpty();
}
}
// Использование не требует объекта, только класса.
StringUtils.isEmpty("test");
Почему это важно: Понимание этих исключений помогает проектировать системы, более близкие к объектно-ориентированной парадигме, где состояние и поведение тесно связаны в объектах, а не разбросаны по статическим контекстам.