Интерфейс - это нечто "между лицами", то, что делает возможным/упрощает взаимодействие "лиц". Интерфейсы, встроенные в языки/поддерживаемые языками программирования, просто частный случай. В общем случае интерфейсы могут быть явно не специфицированы/не объявлены, но без них взаимодействие невозможно.
ФУНДАМЕНТАЛЬНЫМ является понятие СИСТЕМЫ описывающей НЕКОТОРУЮ ИНТЕРЕСУЮЩУЮ НАС ЗАДАЧУ, ваше определение ограничивает системы случаем когда есть ВЗАИМОДЕЙСТВИЕ между компонентами
Есть много определений понятия "система", но большая часть из них сходится в том, что "система состоит из элементов и связей между элементами". Связи - это и есть взаимодействие (или описание взаимодействия). Систем, у которых элементы не взаимодействуют, не бывает, это просто нечто сложенное в кучу.
Связи, которые соединяют элементы/компоненты системы, называются "слабыми" ("сильные" связи образуют сами элементы). "Слабость" "слабых связей" заключается в том, система может их в любой момент разорвать/перестроить. Другими словами, слабые связи опосредованы, явно или скрыто. Но без связей... это не система.
Я стараюсь избегать понятия "сложность". По семантике "сложный" значит "с ложью", поскольку одним из основных свойств истины является простота (и если не простой, значит и не истинный, т.е. ложный).
Компонент не может понизить "сложность" системы, поскольку не в его воле изменить количество и смысл уровней системы, но упростить решение задач, за счёт блочной сборки, он может (для этого он и предназначен).
1. А мне насрать на семантику -есть задача которую надо решить, есть система (возможно не единственная)которая ее описывает в каком -то приближении (или точно)...Я к чему это говорю - для определения можно использовать различные фундаментальных базовых понятий и категорий - главное чтобы результат был удовлетворительным (поставленные задачи решались).
Такой подход возможен, и он давно известен. В программировании этот подход получил название "экстремального". Проблема только в том, что при данном подходе возникает проблема "отложенной сложности". То есть, берётся какая-то частная задача и решается (максимально быстро и эффективно). Заказчик доволен, программисты счастливы. Потом берётся другая задача и тоже решается быстро и эффективно. Однако наступает момент, когда приходит понимание, что между задачами существуют внутренние связи, и изменения, сделанные одной задачей, должны влиять на решение другой задачи. Наступает пора рефакторинга. И тут ВДРУГ выясняется, что внутренних связей много и задач... тоже много и переделывать надо всё, что было сделано... а заказчик уже недоволен, его приучили к быстрым решениям, и он хочет решения новых задач (в соответствии с бизнес-планом). Атмосфера накаляется, а появление удовлетворительного решения... откладывается. Вот и приходим к "отложенной сложности".
К семантике можно относится различно, главное, чтобы она к нам относилась... с пониманием...