No puedo pensar en un lugar mejor entre los hermanos SO para plantear tal pregunta. Originalmente quería preguntar "¿Python es un lenguaje puro OO?" pero teniendo en cuenta los problemas y algún tipo de incomodidad que las personas experimentan al tratar de definir el término, decidí comenzar por obtener una definición clara del término en sí.
Sería bastante justo comenzar con la correspondencia del Dr. Alan Kay, quien ha acuñado el término (tenga en cuenta la inspiración en analogía biológica con las células u otros objetos vivos).
Existen las siguientes formas de abordar la tarea:
- Haga un análisis comparativo enumerando los lenguajes de programación que pueden exhibir (o no hacerlo) ciertas propiedades únicas y suficientes para definir el término (aunque Smalltalk, Scala,
Java, etc.) son ejemplos posibles, pero IMO de esta manera parece no estar realmente completo ni fructífero ) - Dé una definición formal (o cercana a ella, por ejemplo, en un estilo más académico o matemático).
- Dé una definición filosófica que dependería totalmente del contexto semántico del lenguaje concreto o de una experiencia de programación a priori (debe haber alguna posibilidad de una explicación exitosa por parte de la comunidad).
Mi versión actual: "Si un cierto lenguaje de programación ( formal ) que puede ( gramaticalmente ) diferenciar entre operaciones y operandos, así como inferir sobre el tipo de cada operando si este tipo es un objeto (en el sentido de OOP) o no, entonces llamamos dicho lenguaje es un lenguaje OO siempre que haya al menos un tipo en este lenguaje que sea un objeto. Finalmente, si todos los tipos de lenguaje son también objetos, definimos dicho lenguaje como lenguaje OO puro (fuerte) ".
Agradecería cualquier posible mejora de la misma. Como puede ver, acabo de hacer que la definición dependa del término "objeto" (a menudo completamente referenciado como clase de objetos).
[EDITAR]
Además, uso la noción (afortunadamente bien entendida) de un tipo como en los idiomas escritos. La programación de tipos de datos o la programación orientada a tipos no es solo una interpretación sintáctica (del texto del programa, es decir, cómo tratar ciertos valores de literales y variables de datos, algo que evoluciona hacia la seguridad de los tipos), sino que puede atribuirse a la gramática del lenguaje y estudiarse de manera formal. (usando lógica matemática) como los llamados sistemas de tipos . Tenga en cuenta que exigir que un sistema de tipos particular tenga un llamado tipo universal es una de las formas de definir la pureza del lenguaje OO (hay formas de expandir esto semánticamente).
nótese bien
cómo responder a :
- ayuda si especifica un libro o una referencia que respalde / explique su comprensión de la terminología y los conceptos (por lo general, una buena definición cubre o hace referencia a todos los conceptos dependientes, excepto los de primaria).
- si es posible, indique una categoría con sangría de su respuesta / definición si no está claro lo contrario (ver arriba: 1 - por ejemplo de lenguaje, 2 - lógica matemática, 3 - descripción técnica y filosofía de programación)
- la clasificación es importante (y también porque el término OO puro se incluye en el término OO) al responder, intente descomponer elementos del paradigma OO de otras metodologías bien conocidas (y de ninguna manera confundirlos / superponerlos, por ejemplo, típicamente se pueden cubrir elementos de programación modular / incorporado con la programación OO): intente distinguir la OOP de (incluyendo o siendo parte de) programación funcional, programación lógica (especialmente altamente especializada), tipos de datos Abstarct (ADT), modular, metaprogramación (genéricos y tiempo de macroexpansión de LISP), Contratos (por ejemplo, Eiffel), Orientado a aspectos (AO), (la diferencia entre la clasificación declarativa y funcional, así como las definiciones históricas de la estructura de Dijkstra son claras)
sobre la dificultad de dar una definición formal : sorprendentemente, es muy fácil dar una descripción matemática de OOP en forma de cierto sistema lógico (formal) (muy probablemente basado en tipos) y definiendo un concepto tras otro. Incluso se puede tratar de hacer algo más práctico aplicando ese formalismo a la verificación de seguridad de tipos o aspectos de diseño de lenguaje nuevo que simplemente el entretenimiento abstractoo el ejercicio (también formulación de búsqueda de OOP en la teoría de tipos intuitiva , tipos dependientes , independientemente, en formalismos FOL como cálculo lambda y solo usando la teoría de categorías). Un punto principal aquí es que, como era de esperartales formulaciones IMO están fuertemente sesgadas (defectuosas) por una comprensión inicialmente incompleta de OOP (en ingeniería informática) y terminan siendo casi inaccesibles después (por lo tanto, apenas contribuyen al mundo de la programación, tal vez excepto que cierto porcentaje encuentra aplicaciones del mundo formal al ser integrado a los idiomas populares ).
Entonces, sí, es difícil dar exactamente una "buena" definición, no solo una definición. Pero estoy seguro de preguntar esto aquí debido a su experiencia y participación directa, muchachos.