Problema de interfaz binaria frágil


El frágil problema de la interfaz binaria o FBI es una deficiencia de ciertos compiladores de lenguajes de programación orientados a objetos , en los que los cambios internos a una biblioteca de clases subyacente pueden hacer que las bibliotecas o programas descendientes dejen de funcionar. Es un ejemplo de fragilidad del software .

Este problema se denomina más a menudo problema de la clase base frágil o FBC ; sin embargo, ese término tiene un sentido más amplio.

El problema ocurre debido a un "atajo" usado con compiladores para muchos lenguajes orientados a objetos (OO) comunes, una característica de diseño que se mantuvo cuando los lenguajes OO estaban evolucionando de lenguajes de programación estructurados no OO anteriores como C y Pascal .

En estos lenguajes no había objetos en el sentido moderno, pero había una construcción similar conocida como registro (o "estructura" en C) que contenía una variedad de información relacionada en una sola pieza de memoria. Se accedió a las partes dentro de un registro en particular realizando un seguimiento de la ubicación inicial del registro y conociendo el desplazamiento desde ese punto de partida hasta la parte en cuestión. Por ejemplo, un registro de "persona" puede tener un nombre, apellido e inicial del segundo nombre, para acceder a la inicial thisPerson.middleInitialque escribe el programador, que el compilador convierte en algo parecido a = location(thisPerson) + offset(middleInitial). Las CPU modernas suelen incluir instrucciones para este tipo de acceso común.

Cuando se desarrollaron por primera vez los compiladores de lenguaje orientado a objetos, se utilizó gran parte de la tecnología de compiladores existente y los objetos se construyeron sobre el concepto de registro. En estos lenguajes, se hacía referencia a los objetos por su punto de partida y se accedía a sus datos públicos, conocidos como "campos", a través del desplazamiento conocido. En efecto, el único cambio fue agregar otro campo al registro, que está configurado para apuntar a una tabla de método virtual inmutable para cada clase, de modo que el registro describa tanto sus datos como sus métodos (funciones). Cuando se compilan, las compensaciones se utilizan para acceder tanto a los datos como al código (a través de la tabla de métodos virtuales).

Esto conduce a un problema en programas más grandes cuando se construyen a partir de bibliotecas . Si el autor de la biblioteca cambia el tamaño o el diseño de los campos públicos dentro del objeto, las compensaciones ahora no son válidas y el programa ya no funcionará. Este es el problema del FBI.