Интерфейсы и модульность
Запись от CoderHuligan размещена 30.01.2024 в 17:15
Показов 5610
Комментарии 62
|
Слово "интерфейс" происходит от двух слов - inter (между) и face (лицо), т. е. то что находится между лицами. Как взаимодействуют между собой к примеру люди? Посредством языка, т.е. того, что является интерфейсом между двумя и более, лицами. Без интерфейса взаимодействие невозможно. Даже язык жестов является таким же интерфейсом, как и любой другой язык. Сразу отмечу, что любой язык как интерфейс, является чисто внешней сущностью, которая вполне независима от лиц её использующих. Причем одно лицо может пользоваться разными интерфейсами (языками). Итак, любой интерфейс это язык (если он интерфейс). Причем не может быть так, что одно лицо имеет свой уникальный интерфейс, а другое свой. Тогда взаимообщение лиц попросту невозможно или было бы затруднено. Гораздо выгоднее иметь универсальный в рамках какой-то общности интерфейс. Во всяком случае к этому стоит стремиться. Если речь идет о программировании, тот тут мы часто имеем ввиду взаимодействие модулей/классов. Модули в языке Паскаль, по моему, есть чисто искусственное явление. Язык Дельфи это унаследовал. Язык Оберон, потомок Модулы, имеет загружаемые по требованию модули, и это уже большой шаг вперед. Но мы о другом. Классы в ООП, как и модули Паскаля, предоставляют свой интерфейс во внешний мир, делая доступными для него свои паблик поля, или через геттеры и сеттеры, что в общем одно и тоже: мы приоткрываем внутренности модуля/класса внешнему миру. Казалось бы: а как иначе? Как иначе строить взаимодействие между модулями/классами? Проблема тут одна: каждый отдельный модуль/класс предоставляет во внешний мир свой собственный интерфейс, а значит и язык, который обязаны знать все остальные. А я уже писал, что лучше иметь универсальный язык. Проблема возникает, когда мы хотим изменить модуль/класс. Допустим хотим добавить в паблик функцию еще один параметр. Если это сделать, то мы должны будем изменить все модули/классы, которые пользуются интерфейсом этого модуля/класса. Предоставляя внешнему миру даже свои паблик поля, мы связываем этот внешний мир с конкретным классом. Это всегда проблемы. Выходом из положения может быть создание особого языка (именно языка!), который бы разделяли все модули системы. Когда мы вызываем публичную функцию какого-то класса или пользуемся переменной, мы по сути становимся заложниками имен этих сущностей, их типов и их сигнатур. Если бы каждый модуль ничего не знал о других модулях, но просто посылал сообщение и параметры через некий общий для всех интерфейсный модуль, посредством особого универсального языка, то отпала бы необходимость в глобальных данных, что всегда проблемы, а также изменение одного модуля не влияло бы на другие, так как ни один модуль ничего не знает о других, кроме универсального языка, который все модули должны поддерживать. Тогда не потребуются и области имен. Повторяю: один язык лучше, чем много уникальных языков. Ну а реализацию данного механизма лучше поручить особому языку программирования, который бы скрывал детали реализации межмодульного взаимодействия, предоставляя универсальные механизмы по передаче/получении сообщений. Вот это и будет подлинное ООП.. |
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 62
Комментарии
-
А на мой взгляд совсем не логична. Вы проводили какие то исследования? Есть статистика по всем правилам сформированная?
Сообщение от CoderHuligan
Запись от voral размещена 28.02.2024 в 15:09
-
и
Если цель создать не удобного франкенштейна - может быть. Во всех случаях надо использовать реальный многочасовой/многогодовой опыт множества проектов и людей. Если проектировать дизайн исходя из "лично мне так сейчас кажется".... такое себе. Надо съесть несколько пудов соли сначала с тем, что есть. И именно по полной программе, на сложных проектах... вот тогда уже можно будет делать выводы...
Сообщение от CoderHuligan
А так.. ну потратите 5 лет на рассуждения в какой последовательности писать, как избавиться от неймспейсов и т.п. потом еще лет 10 писать первую версию.... а в итоге окажется, что максимальный уровень приложений, который можно написать это "привет мир"Запись от voral размещена 28.02.2024 в 15:15


