Открытый закрытый принцип против реализации по умолчанию
Java 8 представил концепцию реализации по умолчанию для интерфейсов? Разве это не нарушает принцип Open Closed, поскольку на основе примера на https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html кажется, что вы всегда можете открыть интерфейс для добавления новых функций?
2 ответа
В « Объектно-ориентированном программном обеспечении » (Мейер, Бертран, 1988) вводится принцип открытого-закрытого:
«программные сущности (классы, модули, функции и т. д.) должны быть открыты для расширения, но закрыты для модификации».
В любой момент он говорит, что требуется явный интерфейс (и это не так). Более того, там ясно сказано, что это относится и к функциям, а то и к целым модулям.
Объектно-ориентированный код может нарушать этот принцип... или нет, независимо от используемых им синтаксических конструкций. Это может быть правдой, что некоторые конкретные конструкции «приглашают» к нарушениям OCP, но если мы создадим многопоточность, абстрактные классы попадут в то же ведро.
Программное обеспечение может быть написано с использованием методов по умолчанию в интерфейсах и в то же время соответствовать принципу открыт-закрыт или использовать метод по умолчанию в интерфейсах и нарушать принцип открыт-закрыт.
Принцип "открыт-закрыт" - это принцип дизайна / архитектуры, и программист должен следовать этому принципу при проектировании и программировании. Язык Java не может принудительно использовать его.
Поскольку принцип OpenClosed не поддерживается языком Java, можно написать набор классов, которые нарушают или придерживаются принципа открытого-закрытого, используя JDK 1.0 (первая версия Java) и только набор языков JDK 1.0. функции. Также возможно нарушить или придерживаться принципа при использовании методов интерфейса по умолчанию в интерфейсах или любой из последних функций Java. Соблюдение принципа "открыт-закрыт" зависит от того, что написано и как написано. Java - это просто язык, на котором вам нужно выражать концепции.