Pregunta

Para aquellos de ustedes que no están familiarizados con el concepto, la inversión de abstracción es la implementación de construcciones de bajo nivel además de las construcciones de alto nivel, y generalmente se considera algo malo porque agrega complejidad innecesaria y sobrecarga innecesaria. . Por supuesto, esta es una definición subjetiva algo imprecisa.

En su opinión, ¿la programación en un lenguaje OOP de paradigma único donde todo debe ser parte de una clase y cosas como los punteros no están expuestos, como Java o C #, conduce inevitablemente a la inversión de abstracción? Si es así, ¿en qué casos?

¿Fue útil?

Solución

El paradigma único cualquier cosa viola el Primer Mandamiento de las Abstracciones, que pocas personas parecen conocer e incluso menos preocuparse.

No harás para ti ninguna abstracción que no pueda ser anulada si es necesario, que tu código esté libre de inversiones de abstracción feas.

No importa cuál sea su paradigma, una vez que comience a escribir código no trivial para resolver problemas del mundo real, terminará con algunas cosas que simplemente no se ajustan bien al paradigma. Si declaras que ese paradigma es todo lo que hay, es cuando las cosas se ponen feas.

Para mezclar un par de metáforas, cuando todo lo que tienes es un mazo, todo comienza a parecerse a una clavija, y si todos tus agujeros son redondos y de repente terminas con algunas clavijas cuadradas y no tienes sierras, (solo mazos), tienes un problema.

No hay almuerzo gratis. Todo es una compensación. Cuanto más fácil sea escribir el código, más difícil será para otra persona leer y mantener, o para que usted o cualquier otra persona pueda depurar cuando ocurran problemas por debajo del nivel de abstracción en el que está trabajando. (Y eventualmente lo harán, porque ninguna abstracción es perfecta .

Esta es la falla fundamental con "útil" tecnologías y paradigmas como código administrado, recolección de basura, compilación JIT y el "todo es un objeto" fíat. Imponen un nivel básico de abstracción que no se permite alcanzar debajo, y cuando algo sale mal por debajo de ese nivel, no hay nada que pueda hacer al respecto. Estás atrapado trabajando en una mala abstracción porque no puedes arreglarla.

Otros consejos

los programadores reales pueden escribir FORTRAN en cualquier idioma

en otras palabras, no es el lenguaje, es el programador

Java y C # tienen métodos estáticos que son equivalentes a las funciones, por lo que el lenguaje no te obliga a nada.

Dicho esto, una vez que realmente obtuve OO, no tuve ningún deseo de ir a otro estilo de programación.

Si su capa OO simple está cubriendo algo complejo, sugiero que probablemente sea su código el problema. Si OO se hace correctamente, debería ser simple hasta el metal.

No creo que un lenguaje como Java o C # sufra de esto de manera tangible, simplemente porque las bibliotecas que acompañan el marco son tan ricas que no es necesario romper con otro paradigma realmente requerido para la programación general.

Dicho esto, las bibliotecas ricas pueden sufrir una inversión de abstracción, sin embargo, debido a que las implementaciones internas a menudo están ocultas, o las clases clave están selladas, los desarrolladores que intentan extender estas bibliotecas a menudo se ven obligados a volver Implementar / replicar la funcionalidad para utilizar con éxito los puntos de extensión proporcionados por la biblioteca de la clase base: esto no es tanto un problema de lenguaje, sino una elección consciente hecha por el desarrollador de las bibliotecas de la clase base, para evitar exponer la funcionalidad que puede ser frágil o cambiar a menudo con nuevas versiones de .Net Framework / JDK.

Además, debido a que .Net Framework / Java Runtime permiten la interoperabilidad con otros lenguajes que se encuentran encima del tiempo de ejecución común, la capacidad de apuntar a otros paradigmas (como programación funcional, lenguajes dinámicos, etc.) también puede proporcionar otra ruta para separarse de restricciones de paradigma único.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top