Что такое компонент

Я слушаю подкаст java posse, на этом часто обсуждаются компоненты (компоненты примечаний не являются (явно) объектами). Они жалуются на то, что Java не имеет компонентов и контрастирует с .NET. Компоненты, по-видимому, упрощают разработку приложений (а не только графических приложений).

Я могу понять из обсуждения некоторые качества, которые имеет компонент, что-то делать с развязкой (подстановка одного компонента для другого - это просто вопрос сантехники). Он имеет кое-что со свойствами, он определенно имеет что-то делать с событиями и делегатами.

Итак, на вопросы:

./Кто-нибудь может объяснить мне, что такое компонент. (и почему java beans не являются компонентами).

./Кто-нибудь может объяснить, как они помогают развитию.

./может кто-нибудь объяснить, почему у java нет их, если они так полезны.

Ответ 1

Software Engineering Radio имеет эпизод именно по этой теме: http://se-radio.net/podcast/2008-02/episode-87-software-components

Общая идея заключается в том, что программный компонент может описывать, каковы его собственные зависимости и сервисы, в виде метаданных. Я не знаю, почему вы, возможно, слышали, что Java не имеет компонентов, поскольку вы можете себе представить архитектуру Java, где компоненты описывают себя через метаданные. Я полагаю, что просто определение платформы Java само по себе не имеет архитектуры компонентов.

Обновление: действительно, не нужно представлять такую ​​архитектуру, потому что, как указывали другие, Java Beans или сервлеты, безусловно, можно рассматривать как архитектуру на основе компонентов.

Ответ 2

Термин компонент является одним из самых двусмысленных и переоцененных в OO.

Большинство людей согласятся, что компонент состоит из группы классов, которые совместно используют один или несколько интерфейсов. Один из классов берет на себя роль "front-end", то есть реализует интерфейс, но делегирует работу другим классам внутри группы. Как вы говорите, компоненты должны быть заменены без остальной системы, зная.

Отличным примером архитектуры на основе компонентов был COM. Это отличный пример, потому что он был так сильно использован и жестко определен. Но учтите, что потребность в этой архитектуре была основана на негибкости модели компиляции и развертывания С++.

в Java вы можете сделать очень много для класса, не нарушая совместимость с остальной частью системы. Таким образом, нет необходимости создавать жесткие, основанные на компонентах архитектуры. Но все зависит от того, как вы определяете этот термин, например, любой проект, построенный с использованием инъекции зависимостей, может рассчитываться как "компонентный".

Ответ 3

Хотя в начале Java понятие компонента во много раз было связано с компонентами Gui, общий смысл компонента в разработке программного обеспечения выходит за рамки этого понятия.

Проще говоря, компонент представляет собой часть программного обеспечения, которое можно использовать повторно. Подобно кирпичам, мы объединяем и объединяем их для создания целого приложения. Ключевое понимание программных компонентов в современных средах - это Метаданные, которые описывают содержимое компонентов и позволяют повторно использовать.

В 1996 году JDK 1.0 была первой управляемой средой выполнения, предоставляющей компоненты с метаданными. В этом случае компонентами являются .class файлы, содержащие байт-коды и метаданные. Тем не менее, и согласно спецификации Java, a .class содержит только одно определение типа. Таким образом, для развертывания набора типов в качестве компонента мы можем использовать архив Jar, содержащий несколько файлов .class.

С другой стороны, на платформе .Net, которая обеспечивает ту же идею использования повторно используемых компонентов, компонент может содержать более одного определения типа. В этом случае компонент (aka assembly in.Net) представляет собой файл .dll или .exe.

Ответ 4

Это зависит от того, что вы подразумеваете под "компонентом". Этот термин может означать много разных вещей во многих разных контекстах, поэтому он может легко запутываться. С учетом сказанного здесь мое понимание предмета:

Компонент отличается от объекта (хотя объекты часто используются для представления и сборки компонентов). Разница заключается в нескольких вещах:

  • Объекты, как правило, просто "вещи", тогда как компоненты являются актерами. Разница заключается в том, что компонент является частью процесса, а объект представляет собой абстрактную идею.
  • Компоненты помогают обеспечить повторное использование кода и возможность подключения, поскольку они в основном небольшие "подпрограммы" (или иногда программы сами по себе), которые идеально подходят для работы с другими компонентами.
  • Вы склонны чаще видеть компоненты в системах обмена сообщениями "ничего общего", например Erlang или Kamaelia, главным образом потому, что эти типы фреймворков лучше всего подходят для компонентно-ориентированного проектирования.

Есть много хороших примеров компонентно-ориентированного дизайна, но моим первым выбором будет UNIX. Основная идея UNIX заключается в том, что это скорее набор небольших программ, предназначенных для совместной работы, а не состоящий из нескольких монолитных программ.

Ответ 5

Программное обеспечение поставляется в нескольких группах. Вот куски Java.

  • Заявления.
  • Функции метода. Несколько операторов.
  • Класс. Несколько атрибутов и функции метода.
  • Файл. Один или несколько классов. Один класс - это открытый класс в файле, другие классы скрыты в файле.
  • Пакет. Несколько классов. Они образуют иерархию.

"Компонент", "Слой", "Уровень" и другие философские группировки - как правило - условные. Среда VB COM имела формализм для компонентов. Все остальные рассматривают их как идеи.

Beans являются классами. Может ли быть один класс компонентом? Может быть. Компонент обычно представляет собой набор классов. Иногда всего два - формальный интерфейс и реализация.

Компоненты помогают сосредоточиться на логической группировке классов, пакетов, группировок и т.д.

Поскольку компонент является условным, каждый язык более или менее имеет их. Существует несколько языковых формализмов для компонентов. Они не нужны. Это идея или принцип, который вы используете для структурирования своего мышления.

Вы можете с некоторой осторожностью определить подход к "компонентам" с интерфейсом и метаданными и множеством других функций.

Ответ 6

Я особенно не знаю .NET-компонентов, но из Java POV я бы сказал, что компонент - это какой-то функциональный блок, который должен иметь определенный интерфейс/принцип использования. Хотя Java не имеет компонентов в качестве языковой концепции, в Java есть компоненты IMHO. Техническими компонентами будут, например,:

  • EJBs
  • сервлетов

Функциональными компонентами будут, например,:

  • Автоматическое обновление для приложения
  • Механизм формулы, который позволяет выполнять расчеты по модели данных

Архитектурные компоненты могут быть JAR файлами или пакетами OSGi.

Конечно, всегда есть место для интерпретации;)