Sucede que el proyecto se detiene y su desarrollo posterior se vuelve imposible. No es infrecuente que la raz贸n de tal falla sea la arquitectura fallida establecida al comienzo del desarrollo. 驴O tiene que discutir sobre cu谩l de las "dos sillas" es mejor, o tal vez incluso participar y no entender sinceramente c贸mo su oponente puede pensar eso?
Luego trataremos de no entender muchas abstracciones, de d贸nde provienen y qu茅 hacer con ellas.
Seg煤n Wikipedia, la abstracci贸n es una generalizaci贸n te贸rica como resultado de la abstracci贸n. A su vez, la abstracci贸n es una distracci贸n en el proceso de cognici贸n de partes no esenciales, propiedades, relaciones de un objeto (objeto o fen贸meno) para resaltar sus caracter铆sticas esenciales y regulares.
De la definici贸n podemos concluir que solo lo significativo puede ser una abstracci贸n. En este caso, la percepci贸n es solo una proyecci贸n del mundo real. Resulta que todas las reflexiones sobre lo real son reflexiones sobre nuestros modelos de lo real.
Las abstracciones forman jerarqu铆as y pueden identificarse con entidades privadas y combinar entidades similares en abstracciones de nivel superior.
Abstracciones de conciencia
Adem谩s del prisma de la percepci贸n, nuestros modelos est谩n sujetos a otra distorsi贸n: las entidades reales son extremadamente complejas y tienen diferentes aspectos y par谩metros. Al pensar o hablar sobre algo, siempre hay un contexto en el que existe un modelo. Y a veces sucede que los interlocutores de este contexto son diferentes. Y para colmo, la presencia o ausencia de experiencia (global) conduce a un cambio a煤n mayor en nuestros modelos de acuerdo con esta experiencia. Como resultado, dos personas diferentes pueden tener percepciones muy diferentes de las mismas entidades del mundo real.
Resulta que cada persona est谩 constantemente lidiando con abstracciones, queda por aprender c贸mo verlas y manejarlas claramente. Uno puede presentar la tesis de que el c贸digo del programa es una simulaci贸n de pensamiento basada en abstracciones formalizadas. Por lo tanto, en mi opini贸n, el desarrollo de software es uno de los mejores simuladores para impulsar el pensamiento abstracto.
Abstracci贸n en el desarrollo
Las interfaces de programaci贸n son quiz谩s la abstracci贸n formalizada m谩s obvia. Todo lo superfluo se corta y solo "lo que hace" permanece sin "c贸mo lo hace".
Al implementar la interfaz, creamos un modelo m谩s realista de comportamiento o interacci贸n, que ya puede responder la pregunta "c贸mo". Al combinar interfaces entre s铆, podemos crear una arquitectura de c贸digo com煤n. Con la habilidad y destreza adecuadas, la arquitectura creada de esta manera conservar谩 su estructura en el futuro. Mientras que la implementaci贸n de interfaces compuestas puede cambiar m谩s all谩 del reconocimiento.
Esta arquitectura simplifica algunos puntos en el trabajo. Las pruebas unitarias se reducen a escribir implementaciones de prueba de abstracciones "vecinas" y m茅todos de prueba que comparan entradas y salidas. El aislamiento de m贸dulos le permite realizar refactorizaciones de forma segura. Adem谩s, si la refactorizaci贸n no tuvo 茅xito y todo se rompi贸, entonces tendr谩 que revertir solo un m贸dulo. Se puede usar un m贸dulo suficientemente abstracto para tareas similares pero diferentes. Al mismo tiempo, una mala implementaci贸n no afectar谩 el trabajo de otros: el aislamiento de govnokod.
EjemploHay un m贸dulo para procesar datos de entrada, hay varias opciones para obtenerlos: de la base de datos; de archivo; por http. Este problema puede resolverse resaltando una interfaz com煤n para recibir datos y realizando una implementaci贸n para cada canal y canal de datos para la prueba. Ahora un controlador puede resolver varios problemas similares utilizando el par谩metro "canal de datos". Y si resulta que una de las implementaciones es una curva, entonces se puede rehacer para afectar a otros m贸dulos.
Las abstracciones ya no son necesarias
No hay soluciones perfectas y, por lo tanto, con las abstracciones, las cosas no son tan f谩ciles. Primero, las abstracciones son subjetivas, pueden causar debate sobre d贸nde comienza una y d贸nde comienza otra. Tambi茅n existe el problema de la abstracci贸n excesiva, cuando se crea una abstracci贸n diferente para cada tipo y tonalidad de un estornudo. En segundo lugar, este enfoque aumenta la complejidad del c贸digo al agregar nuevas entidades y nuevos niveles de jerarqu铆a. Estoy seguro de que seguir谩 habiendo deficiencias en este enfoque, algunas de ellas ser谩n subjetivas, en parte situacionales, pero habr谩
Debe haber un equilibrio en todo. Por m铆 mismo, deduje el siguiente memo.
- Si est谩 escribiendo un m贸dulo grande e importante, es mejor desconectarlo.
- Si el m贸dulo se usa mucho y / o en diferentes lugares, es mejor ocultarlo detr谩s de una abstracci贸n.
- Si el m贸dulo se debe distribuir como una biblioteca separada, es mejor usar abstracciones.
- Si es posible cambiar algoritmos o rutas de interacci贸n, es mejor implementar la interacci贸n de abstracciones.
- Si la clase se usa en otra clase y en ning煤n otro lugar, puede pensar en combinarlas o dejarla como est谩.
- Si esta es una peque帽a tarea "煤nica", es mejor no molestarse con su complicaci贸n.
- Si este es un m贸dulo que probablemente nunca cambiar谩, puede mostrar su interfaz y es mejor dejar todo como est谩 dentro.
Total
Las abstracciones son una herramienta integrada en nuestra conciencia, como cualquier otra, tienen sus pros y sus contras, pero conocer las alternativas solo ayuda a encontrar una mejor manera.