2008-10-12 12 views
11

Escucho el podcast java posse, en esto a menudo hay discusión sobre los componentes (los componentes de la nota no son (claramente) objetos). Lamentan el hecho de que Java no tiene componentes, y el contraste con .NET sí lo tiene. Los componentes aparentemente hacen que desarrollar aplicaciones (no solo aplicaciones GUI) sea más fácil.Qué es un componente

Puedo deducir de la discusión ciertas cualidades que tiene un componente, es algo que tiene que ver con el desacoplamiento (sustituir un componente por otro es solo una cuestión de fontanería). Tiene algo que ver con las propiedades, definitivamente tiene algo que ver con eventos y delegados.

Así que para las preguntas:

./ ¿Puede alguien explicar a mí lo que es un componente. (y por qué los beans Java no son componentes).

./ ¿Alguien puede explicar cómo ayudan al desarrollo.

./ ¿Alguien puede explicar por qué java no las tiene si son tan útiles.

Respuesta

2

Software Radio Ingeniería tiene un episodio de exactamente este tema: http://se-radio.net/podcast/2008-02/episode-87-software-components

La idea general es que un componente de software puede describir lo que sus propias dependencias y servicios son, en forma de metadatos. No sé por qué habrás oído que Java no tiene componentes, ya que puedes imaginar una arquitectura en Java donde los componentes se describen a sí mismos a través de metadatos. Supongo que es solo que la definición de la plataforma Java en sí misma no tiene una arquitectura de componentes.

Actualización: De hecho, uno no necesita imaginar una arquitectura así porque, como señalaron otros, Java Beans o Servlets ciertamente podrían considerarse arquitecturas basadas en componentes.

+0

Gracias por señalar el enlace, sin duda echaré un vistazo. En cuanto a por qué no creo que los componentes no existan ... bueno, en este momento no tengo claro qué son, así que no formulo aseveraciones de ninguna manera. Pregúntale a Joe Nuxoll que es el tipo que parece querer decir que aún no existe. –

+0

PD Joe Nuxoll es uno de los presentadores de java posse (http://www.javaposse.com/) recomienda este podcast ... a cualquier persona interesada en el desarrollo de Java. –

+0

Cuando escuché este [podcast] (http://stackoverflow.com/questions/196087/what-is-a-component), me confundí cuando dijo algo así como: "Hay un mercado de componentes donde la gente crea componentes y luego los colocan en este repositorio global donde la gente puede tomar ... y ensamblar sus sistemas desde ... No creo que esta idea se pueda materializar, no veo que eso suceda ". Entonces, ¿qué pasa con repositorios como Maven Central Repository, o NPM para el Nodo JS? –

3

El término componente es uno de los más ambiguos y usados ​​en exceso en OO.

La mayoría de las personas estarían de acuerdo en que un componente está formado por un grupo de clases, que colaboran para implementar una o más interfaces. Una de las clases asume el papel del "front-end", es decir, implementa la interfaz pero delega el trabajo a las otras clases dentro del grupo. Como dices, los componentes deberían ser reemplazables sin que el resto del sistema lo sepa.

Un gran ejemplo de una arquitectura basada en componentes fue COM. Es un gran ejemplo porque fue muy utilizado y rígidamente especificado. Pero tenga en cuenta que la necesidad de esta arquitectura se basa en la inflexibilidad del modelo de compilación y despliegue de C++.

en Java puede hacer muchísimo a una clase sin romper la compatibilidad binaria con el resto del sistema. Entonces no hay tanta necesidad de construir arquitecturas rígidas basadas en componentes. Pero todo depende de cómo se defina el término, por ejemplo, cualquier proyecto creado con inyección de dependencia podría contar como 'componente'.

0

No conozco los componentes .NET en particular, pero desde Java POV, diría que un componente es una unidad funcional que debería tener un principio de interfaz/uso definido. Si bien Java no tiene componentes como concepto de lenguaje, existen componentes de IMHO en Java. Componentes técnicos serían por ejemplo .:

  • EJBs
  • Servlets

componentes funcionales serían, por ejemplo,:

  • Actualización automática para una aplicación
  • mecanismo de Fórmula que permite realizar cálculos en un modelo de datos

componentes arquitectónicos podrían ser archivos JAR o OSGi paquetes.

Por supuesto, siempre hay espacio para la interpretación;)

1

Depende de lo que entendemos por "componente". El término puede significar muchas cosas diferentes en muchos contextos diferentes, por lo que puede ser confuso. Dicho esto, aquí está mi comprensión de la materia:

Un componente es diferente de un objeto (aunque los objetos se utilizan a menudo para representar y construir componentes). La diferencia es un par de cosas:

  1. Los objetos tienden a ser solo "cosas" mientras que los componentes son actores. La diferencia es que un componente es parte de un proceso, mientras que un objeto representa algún tipo de idea abstracta.
  2. componentes ayudan a garantizar la reutilización de código y enchufabilidad porque son básicamente pequeños "sub-programas" (o, a veces los programas en sí mismos) que, idealmente, se pueden adaptar para trabajar bien con otros componentes.
  3. que tienden a ver más componentes en los sistemas de paso de mensajes "nada compartido" como Erlang o Kamaelia, sobre todo porque esos tipos de marcos tienden a ser los más adecuados para el diseño orientado a componentes.

Hay muchos buenos ejemplos de diseño orientado a componentes, pero mi primera opción sería UNIX. La idea básica detrás de UNIX es que se trata más de un conjunto de pequeños programas diseñados para trabajar juntos en lugar de estar formados por varios programas más monolíticos.

1

software viene en varias agrupaciones. Aquí están los fragmentos de Java.

  • declaraciones.
  • funciones método. Múltiples declaraciones
  • Clase. Múltiples atributos y funciones de método.
  • Archivo. Una o más clases Una clase es la clase pública en el archivo, otras clases están ocultas en el archivo.
  • Paquete. Múltiples clases Estos forman una jerarquía.

"Componente", "Capa", "Nivel" y otras agrupaciones filosóficas son generalmente nocionales. El entorno VB COM tenía un formalismo para los componentes. Todos los demás los tratan como solo ideas.

frijoles son clases. ¿Puede ser una sola clase ser un componente? Tal vez. Un componente es generalmente un grupo de clases. A veces tan solo dos: una interfaz formal y una implementación.

Componentes ayudará a centrarse en una agrupación lógica de clases, paquetes, agrupaciones, etc.

Dado que un componente es nocional, todos los idiomas más o menos las tiene. Hay pocos formalismos de lenguaje para los componentes. No son realmente necesarios. Es una idea o un principio que utilizas para estructurar tu pensamiento.

Puede, con cierto cuidado, definir un enfoque de "componentes" con una interfaz y metadatos y muchas otras características.

2

Aunque en los inicios de Java la noción de componente estuvo muchas veces relacionada con los componentes de Gui, el sentido genérico de componente en la ingeniería de software va más allá de esa noción.

En pocas palabras, un componente es una pieza de software, que es reutilizable. Al igual que los ladrillos, los combinamos y los unimos para crear una aplicación completa. La información clave de los componentes de software en entornos modernos es Metadatos, que describe el contenido del componente y permite la reutilización.

En 1996, el JDK 1.0 fue el primer entorno de tiempo de ejecución administrado que proporcionaba componentes con metadatos. En este caso, los componentes son archivos .class que contienen bytecodes y metadatos. Sin embargo, y según la Especificación de Java, un archivo .class solo contiene una definición de tipo. Entonces, para desplegar un conjunto de tipos como un componente, podemos usar un archivo Jar que contiene varios archivos .class.

Por otro lado, en la plataforma .Net, que proporciona la misma idea de los componentes reutilizables, un componente puede contener más de una definición de tipo. En este caso, un componente (también conocido como assembly en .Net) es un archivo .dll o .exe.

Cuestiones relacionadas