В чем разница между компонентно-ориентированным и объектно-ориентированным языком?
Я столкнулся с этой строкой в книге о WCF:
... и языки, используемые для написания COM-компонентов (например, С++ и Visual Basic), были в лучшем случае объектно-ориентированными, но не компонентно-ориентированными...
В чем разница между двумя?
Ответ 1
Мое мнение/понимание, вероятно, неверно, и я собираюсь застрелить его, чтобы написать это.
Объект, ориентированный на "меня", означает способ распознавания ключевых моделей данных, необходимых для контекста проблемы и соответствующих методов, которые манипулируют состоянием этих данных, также в контексте проблемы. Это шаблон для организации данных. Другая модель организуется просто на основе функций, разделенных на управляемые уровни - процедурные.
Компонентно ориентированный шаблон не заботится о том, как вы организовываете свои различные модели данных, но , как вы связываете их. Так они общаются друг с другом. Это может быть много способов COM/RPC, веб-сервисов (REST/SOAP) и т.д. Это развязка или плотная связь.
И автор просто пытается сказать, что возможности COM были построены с использованием языка, который не предоставляет COM-средства, встроенные в него.
Мое понимание заключается в том, что утверждение неверно как выбор связывания компонентов, является абстракцией на более высоком уровне, чем тот, на котором язык, например, C/С++. COM просто обеспечивает один из способов привязки компонентов.
Ответ 2
Вот мой прием,
Наследование и интерфейсы, по-видимому, являются темой, о которой много говорится при обсуждении 2.
Я также думаю, что дизайн Component подразумевает, что вы имеете дело с черными ящиками
Компонентный дизайн также охватывает системы, выходящие за пределы одного пространства памяти. Поэтому вызовите веб-службы или другие удаленные службы.
Я бы не сказал, что это конкурирующие парадигмы, но разные парадигмы.