Levitanus
как организовать слабое (сейчас у меня в голове только сильное) взаимодействие классов
Ты всё это можешь делать в одном модуле. К модульности это никак не относится.
А что насчёт модульности:
Вот прямо можешь в питоне смотреть. Есть, например, модуль csv. Что он делает? Он предоставляет инструментарий для работы с csv-форматом. Он может его читать, может его писать, может переключаться между разными диалектами этого формата.
А этот модуль выводит на экран что-нибудь? Нет.
А этот модуль может обрабатывать звук? Нет.
А этот модуль может скачивать ссылки из Интернета? Нет.
А этот модуль знает язык XML? Нет.
То есть модуль - это такая независимая от всего остального вещь, которая для чего-то предназначена, и это что-то оно одно.
Так вот модульность есть не только на уровне файлов. В программировании модульность есть в функциях, модульность есть в классах. То есть каждая функция, каждый класс, каждый модуль в виде файла в каком-то языке является модулем в контексте теории программирования. Поэтому нужно точно и определённо отвечать на вопрос “Что делает эта штука?”.
В некоторых языках модуль в контексте этих языков вообще распространяется на несколько файлов. В Go, в Java, ещё там в нескольких такая фигня есть (там они пакетами называются). Поэтому ты можешь путаться, что такое модуль. Но в контексте программирования понятие модуля означает только один модуль - независимую единицу, имеющую “прочность” и “связность”.
И вот когда у тебя модуль отвечает точно на вопрос “Что делает этот модуль?”, то этот модуль называется функционально прочным, потому что у него только одна функция, а не несколько.
tags: module