¿Cómo se construyen los sistemas de software complejos?

La clave para gestionar la complejidad es la abstracción. También diría que es muy importante cuando se maneja un gran proyecto para poder retroceder a una vista de “milla de alta pulgada de profundidad”.

Por favor, dime ¿estás preguntando porque:

  1. Quiere pasar al siguiente nivel
  2. Quiere trabajar en un proyecto complejo existente
  3. ¿Desea comenzar un proyecto complejo y no sabe por dónde comenzar?

También depende del medio ambiente.
Las redes y los sistemas operativos son muy complejos, pero abstraen esto con capas. En un sistema operativo, tiene la capa de abstracción de hardware (HAL) y luego la capa de kernel, además de la capa de usuario y, en la parte superior, en el sentido de que tiene la capa de aplicación con la que interactúa el usuario, cada capa inferior se vuelve cada vez más especializada.

Dentro de una sola capa, como la capa Kernel, todavía tiene mucha complejidad, no desea que el sistema de archivos tenga que preocuparse por cuándo se debe ejecutar el código en el procesador o la seguridad del sistema, por lo que tiene diferentes servicios independientes en ejecución en sus propios silos, como el servicio del sistema de archivos frente al programador del procesador.

Si bien desea mantener los servicios en una sola capa felizmente ignorantes entre sí, desea que puedan comunicarse entre sí cuando lo necesiten, si el usuario hace clic en el botón Nueva carpeta, no podrá contar el Archivo Sistema para crear un nuevo directorio. Entonces, tiene un sistema de mensajes o eventos para señalizarse entre sí.

Si estás en un nivel mucho más alto, sigue siendo el mismo. Los programas orientados a objetos usan objetos para abstraer la complejidad. Los mensajes se pasan entre objetos llamando a funciones / métodos. Para mayor complejidad, desea utilizar patrones de diseño http://en.m.wikipedia.org/wiki/D…

Incluso para sistemas más modernos, está buscando agrupar su software en servicios independientes (compuestos de código organizado en patrones) y hablar entre ellos mediante un sistema de mensajería estándar como SOAP / REST

Shorty dijo capa por capa: en pequeñas piezas modulares también conocidas como orientadas a objetos. Cada módulo se puede definir como un hito para algún objetivo que debe lograrse. Por ejemplo, un blog que tiene 3 módulos: un módulo de usuario, un módulo para la configuración básica (nombre del blog, descripción, etc.) y, por supuesto, artículos.

Los módulos consisten en los llamados objetos. Cada objeto tiene su propia tarea específica basada en su propio st específico de reglas. Por ejemplo: para crear un módulo de artículos necesitará algún tipo de objeto de formulario para permitir que un usuario ingrese artículos. Además de un formulario, necesitará algún tipo de objeto de almacenamiento (capa de base de datos) para almacenar los artículos. Luego está el objeto de lista para mostrar una lista de datos (en este caso, los datos del artículo). Luego, la última parte es combinar estos objetos en un módulo para permitirles trabajar juntos.

El objetivo principal de un programador es hacer que los diferentes objetos sean reutilizables. Por ejemplo, el objeto de formulario. Se puede usar para ingresar artículos, pero también como un registro o tal vez un formulario de comentarios. Lo que será el formulario dependerá de qué datos (propiedades) se inserten.

No solo los objetos sino también los módulos se pueden reutilizar si se realizan correctamente. Un módulo de artículos puede servir como una sección de artículos de blog, pero también como la sección de noticias o la interfaz de la lista de correo.

El mayor problema que muchas personas tienen con este enfoque es que al principio parece que lleva más tiempo y menos eficiente que escribir un objeto que hace todo de una vez porque cada objeto separado debe ser una pieza autocontenida lista para ser probada. Los programadores, clientes o programadores sin experiencia que escriben código de procedimiento tienden a no usar el enfoque orientado a objetos porque a corto plazo parece ineficiente, lento y excesivo. Tienden a hacer que su código sea demasiado complejo y depender de otras piezas de código. Hacer que el código no sea reutilizable pero, sobre todo, no sea legible y escalable. Cuando se realizan cambios en una parte del sistema. Diferentes otras partes pueden fallar.

Ese beiing dijo. El enfoque de objeto permite la escalabilidad simplemente agregando diferentes objetos. Cuando una parte falla, solo un objeto debe repararse siempre que la salida esperada sea la misma. Por supuesto, esta explicación está un poco simplificada. Puede haber muchas más capas. Como un objeto de formulario que agrupa múltiples objetos de campo) El número de capas a menudo depende del tiempo, la legibilidad y la eficiencia. Cuantas más capas haga, mejor será la escalabilidad. Sin embargo, las capas probablemente disminuirán el rendimiento de las aplicaciones. Cuanto más pequeños sean los objetos, mejor será la escalabilidad, pero para proyectos pequeños será mucho tiempo, en el cual los enfoques más grandes y personalizados son una mejor opción.

Tiempo, paciencia, energía, talento.

Un jodido arnés de prueba realmente grande.

Un gran departamento de control de calidad.

Muchas horas hombre.

More Interesting

¿Son mejores los trabajos de entrenador de TI que los trabajos de ingeniero de software de TI?

¿Qué tipo de errores suelen detectar las pruebas de unidades de front-end?

¿Cuál es una descripción clara de una arquitectura MVC?

¿Cómo difiere el patrón de acción / reductor en la arquitectura Flux de las llamadas a funciones estándar?

¿Qué proyectos informáticos cooperativos mundiales se están realizando actualmente?

¿Qué es el algoritmo de clasificación paralela de Preparata? ¿Alguien puede explicarlo en términos simples?

Soy nuevo en la programación en una computadora portátil. ¿Cuáles son algunas herramientas y trucos que facilitarán mi vida y mejorarán mi productividad?

¿Cuándo el nombre Silicon Valley comenzó a implicar automáticamente software?

¿Qué es un salario de ingeniero civil en Dubai?

Completé mi BTech (ECE) con el 70% en 2014 y me colocaron en una pequeña empresa de software. Estoy trabajando con Qualcomm en chipsets, pero no estoy satisfecho con esto. ¿Cómo me puedo mudar a los Estados Unidos?

¿La metodología ágil es realmente buena para el desarrollador de software? ¿O es peor para ellos? ¿Y cuáles son otras mejores metodologías?

¿Qué es una herramienta de administración de rutas, cuáles son los parámetros para el problema de administración de rutas y cómo hago para crear dicho software?

¿Qué es el desarrollo ágil?

¿Cómo evaluamos la calidad de un diseño de software?

¿Dónde se usan las API en aplicaciones del mundo real?