¿Qué es un componente de software?

Componente , objeto y sistema son términos que tienen diferentes significados específicos en diferentes contextos.

Un sistema es un término genérico utilizado para describir un mecanismo / tecnología / diseño / … que funciona para cumplir un conjunto de funciones.

Un componente es un subsistema.

Un objeto es solo un objeto.

Un auto es un sistema. Este sistema tiene componentes como el motor, los asientos y el tablero de instrumentos. Un automóvil es un objeto y algunos de sus componentes también son objetos.

El motor del automóvil es un componente del automóvil y también un sistema en sí mismo. También es un objeto.

El tráfico es un sistema con componentes como carreteras, normas, letreros, automóviles, pasajeros, conductores, peatones, etc.

Cada programa / aplicación de software es un sistema y tiene diferentes componentes. Desde la perspectiva de un diseñador de UX, los componentes de un sistema de software pueden ser su navegación, diferentes secciones, formularios y pantallas. Desde la perspectiva de un arquitecto de software, este sistema tiene componentes principales como servicios frontend y varios servicios de backend. Desde la perspectiva de un desarrollador, este sistema tiene diferentes componentes como bibliotecas y clases.

El término objeto, en software, se usa para cualquier cosa en la memoria. Un int en C o una instancia de una gran clase en Java son ambos objetos. El enfoque orientado a objetos agrega algunas restricciones sobre cómo definir, inicializar y acceder a los objetos en un programa y estas adiciones naturalmente sobrecargan el significado del término objeto en consecuencia.

Hay diferentes significados específicos del término componente como puede ver en otras respuestas a esta pregunta. Para un desarrollador web, un componente web es una pieza de software que se puede agregar a un documento HTML sin causar conflictos con el documento de host / destino. Para otro marco / plataforma / sistema, un componente puede significar algo más.

En resumen, puede obtener cientos de respuestas diferentes para la pregunta “¿Qué es un componente?” si le preguntas a cincuenta desarrolladores diferentes. Más allá de todos estos significados sobrecargados en diferentes sistemas, un componente siempre es solo un subsistema .

Puede haber niveles de componente. Los componentes deben ser reutilizables, lo que significa que puede instanciarlos en cualquier contexto y pueden operar como espera. Deben ser inherentemente multiinquilinos, lo que significa que no tienen datos globales y cambiantes, excepto si se aplican a todos los usos. No deberían tener muchas dependencias y arrastrar muchos otros componentes. El uso del componente no debería afectar su pila de software existente, lo que significa que deben ejecutarse o ser capaces de ejecutarse en un contenedor OSGi o OSGi y no tener conflictos de nombres con otros componentes.

A veces llamado componente, software diseñado para funcionar como un componente de una aplicación más grande. Una buena analogía es la forma en que las computadoras personales se construyen a partir de una colección de componentes estándar: chips de memoria, CPU, buses, teclados, ratones, unidades de disco, monitores, etc.

Entonces, existe esta definición de ingeniería de software basada en componentes. En pocas palabras, los componentes de software son piezas de software poco acopladas que encapsulan un grupo de piezas de software estrechamente acopladas. Donde “estrechamente acoplado” generalmente significa unión temprana de las piezas y “flojamente acoplado” generalmente significa unión tardía.

More Interesting

¿Cuáles son algunas de las preocupaciones comunes en la adaptación de Scrum para un equipo de desarrollo?

Con el aumento de la automatización, ¿está disminuyendo la necesidad de desarrolladores? ¿Debo elegir mi carrera en desarrollo de software o ciencia de datos?

¿Cómo es la perspectiva laboral para ingenieros de software en Canadá y Australia? ¿Y cuál es bueno para las relaciones públicas?

¿Es suficiente un título en Ingeniería de Sistemas (enfoque CS) para hacerme elegible para trabajos en desarrollo de software, administración, ingeniería y finanzas?

¿Cómo se ve un equipo de desarrollo de software realmente bueno? (¿Qué lo hace genial?)

Si estamos construyendo un marco de prueba automatizado interno, ¿será mejor tener uno en C # y uno en Java?

¿Debo dejar mi trabajo para hacer un MBA? ¿Proporcionará un MBA un beneficio en comparación con el salario que ganaría trabajando durante la misma duración?

¿Qué proyecto o empresa utiliza el modelo de cascada?

¿Cómo encuentra un buen ingeniero de software un mejor segundo trabajo?

¿Debo reescribir un componente de software libre de errores pero hinchado en nuestro producto por ninguna otra razón que no sea para hacerlo más elegante?

¿Es la automatización de procesos robóticos la próxima gran novedad en la automatización?

¿Cuáles son los 10 mejores algoritmos que todo ingeniero de software debe saber de memoria?

¿Cuál es alguna de las técnicas innovadoras en la red de entrega de contenido (CDN)?

Cómo vender código desarrollado para un proyecto de clase

¿Puede un ingeniero de software con 8 años de experiencia, después de pasar 2 años en la empresa, postularse y unirse a otra empresa como 8 años de experiencia (no 10) y un aumento del 20%?