Pregunta

Hay una especie de belleza en Relaciones supervenecientes. Considere los siguientes ejemplos:

  1. Los átomos están compuestos por partículas subatómicas, las moléculas están compuestas de átomos, las células están compuestas de moléculas, los órganos están compuestos por células, las personas están compuestas de órganos, las sociedades están compuestas de personas.
  2. Las complejas estrategias del Juego de Go se basan en la necesidad de hacer estructuras con "dos ojos" para que sobrevivan, sin embargo, la cosa de "dos ojos" nunca se declara en las reglas, pero en sí misma es una propiedad emergente de las reglas muy simples de GO.
  3. La integridad de Conway's_game_of_life se puede probar en términos de planeador, pistolas y naves espaciales, que están a su vez en función del concepto de encendido y apagado conjunto muy simple de reglas.

En todos los casos, un conjunto mínimo de objetos y un conjunto mínimo de reglas finalmente conducen a una estructura muy compleja.

Mi primera pregunta: ¿Es posible delinear un conjunto pequeño y minimalista de "objetos" y "reglas" de programación que se pueden usar para construir un lenguaje OOP?

Ahora el inteligente El científico informático probablemente apuntará a la integridad de Regla 110 ¡Y di que esto es todo lo que necesitas! Pero eso no es exactamente lo que estoy buscando. Más bien, con el riesgo de plantear una pregunta mal definida, ¿cuáles son los conceptos más simples y comprensibles humanos que se pueden construir en un lenguaje de programación orientado a objetos?

Para un ejemplo malo e incompleto que insinúe lo que quiero, defina tres objetos conceptuales: un referencia, a función, y un titular de la información. Entonces (¿nivel 2?) Definir un estructura Ser un titular de información que contiene otra información a través de referencias a otras carpetas de información. Un rudimentario clase (¿Nivel 3?) Aumentarían las estructuras con referencias a las funciones, pero se debería construir una estructura adicional para manejar conceptos de funciones privadas versus públicas. En última instancia, deberíamos llegar a un lenguaje OOP con todas las funciones que se construyó únicamente en conceptos fundamentales y en ninguna parte lo hicimos hacer trampa por optimizaciones de codificación o sal sintáctica con código de máquina. E idealmente, el resultado final aún sería un código atractivo y legible.

Mi segunda pregunta: ¿Hay algún lenguaje OOP que ya se acerque a esto?

¿Fue útil?

Solución

Prototipos

los IO La referencia del lenguaje da una buena pista: el más simple Aprotaque para OOP parece ser Programación basada en prototipos. Todo lo que necesitas es básicamente matrices asociativas y Funciones de primera clase.

Dado que se pueden implementar muchas estructuras de datos, incluido el diccionario En términos de las funciones, pronto nos debemos a un poco de azúcar de sintaxis y cálculo de lambda, que cubre un modelo de cálculo completo de Turing-Turing.

Otros consejos

IO es probablemente el idioma más cercano a lo que estás buscando.

Pregunta interesante, pero no estoy completamente seguro de que sea sensato.

Considere que 1 y 0 son nuestros átomos en informática. Son estrictamente indivisibles. Y las combinaciones variables de ellas dan lugar a programas con todo tipo de propiedades sorprendentes. Pero, no es apropiado escribir en 1 y 0, ya que el nivel de abstracción es demasiado bajo.

Creo que el mismo problema se convertiría en su idioma. Si fuera lo suficientemente flexible como para permitir la construcción de algo, sería inutilizable, y si no fuera así, no cumpliría con sus requisitos.

Smalltalk se basa en un conjunto muy limitado de primitivas, pero los ideoms OO son atómicos allí. En teoría, puede construir un lenguaje complejo arbitrario además de una base tan simple como Lógica de SK o cálculo lambda. Las características de OO no son diferentes, pueden reducirse a un conjunto más primitivo. Cualquier sistema OO sobre una macros LISP primitiva puede ser un buen ejemplo.

Actualizar: y echar un vistazo a Sistemas de reescritura de término En general, es una técnica poderosa para definir una semántica compleja además de cosas más simples.

También recomendaría leer un libro http://www.cambridge.org/gb/knowledge/isbn/item1132720/?site_locale=en_gb

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