OOP no es importante por sí mismo, sino por lo que lleva consigo. Algo que se ocupa de la capacidad de abstraer y aislar, agrupar cosas juntas y exponer solo las partes que se requieren para interactuar juntas.
Esta es una técnica de ingeniería común llamada "modularización", que permite crear sistemas complejos como agregación de sistemas más simples, sin ocuparse de todos los detalles a alto nivel, y que requieren que los componentes sean reemplazables, incluso sin que sean exactamente mismo.
Esos "conceptos de ingeniería" se han tratado de mantener en el desarrollo de software desde el momento en que el producto de software se ha vuelto más grande que la "capacidad de desarrollador único", lo que requiere una forma de hacer que los desarrolladores trabajen en piezas independientes, y dejar que esas piezas interactuar juntos
Dicho esto, esos principios no se encuentran necesariamente solo en OOP (si la teoría de la computación es válida, hay infinitos métodos posibles para llegar a esos resultados).
OOP es simplemente un intento exitoso de poner esas cosas juntas, dando a esos términos generales (como módulos, encapsulación, sustitución) definiciones más precisas y conceptualización elaborada sobre esas definiciones (patrones) que pueden encajar en los lenguajes de programación.
Piense primero en OOP no como una " característica del lenguaje " sino como un " léxico común " que hace que los ingenieros de software se acerquen al diseño del software.
El hecho de que un lenguaje dado tenga o no primitivas que impongan directamente ese léxico asegurando, por ejemplo, que una "cápsula" no se abra inadvertidamente por quién no se supone que lo haga, es un aspecto secundario del diseño de OOP. Es por eso que incluso los grandes proyectos de C a menudo se "gestionan como" OOP, incluso si el lenguaje en sí no ofrece soporte directo para eso.
La ventaja de todo eso no es reconocible hasta que el tamaño de un proyecto permanezca en la capacidad de desarrollador único para comprender y rastrear todo lo que hace (de hecho, en esa situación, incluso puede verse como "sobrecarga") o en un pequeño grupo que desarrolla algo en Un corto período. Y esa es la razón principal por la cual los estudiantes de tercer año que estudiaron OOP en términos de una "característica del lenguaje" a menudo lo malinterpretan produciendo código mal diseñado.
La forma en que OOP se ajusta a los idiomas depende de cómo los diseñadores de idiomas interpretan el principio de OOP en su propia construcción.
Entonces, la "encapsulación" en C ++ se convierte en "miembros privados" (y una "cápsula" se convierte en una clase), la "sustitución" se convierte en anulación de funciones virtuales o en la parametrización / especialización de plantillas, etc., mientras que en D una cápsula es un "módulo" (y la sustitución continúa a través de clases, etc.), haciendo así cierto paradigma o patrón directamente disponible en un idioma dado y no en otro y así sucesivamente.
Lo que buscan los reclutadores al hacer preguntas de OOP es simplemente verificar su capacidad para abstraer y concebir el diseño de software para futuros proyectos y desarrollos de gran tamaño. OOP, para ellos es solo un "diccionario" que supusieron que tanto usted como ellos conocen para que puedan hablar sobre otras cosas más generales o concretarlas en una implementación específica.