Hay una propiedad de OOP puro que puede ayudar con el ejemplo que pasa fácilmente por debajo del radar, pero el modelo object-capability lo hace explícito y se centra en. El documento vinculado ("De objetos a capacidades" (FOtC)) entra en el tema en detalle, pero (en resumen) el punto de las capacidades es que la capacidad de un objeto para afectar su mundo se limita a los objetos a los que tiene referencia. Eso puede no parecer significativo al principio, pero es muy importante cuando se trata de proteger el acceso y afecta qué métodos de una clase están disponibles en los métodos de otras clases.
La opción A) da acceso a la cuenta John a la cuenta Betty, mientras que la opción B) le da a Betty acceso a la cuenta John; ninguno es deseable. Con la opción C), el acceso a la cuenta está mediado por un banco, por lo que solo los bancos pueden robar o falsificar dinero. La opción D) es diferente de las otras tres: las otras muestran un mensaje que se envía pero no la implementación, mientras que D) es una implementación de método que no muestra qué mensaje maneja ni a qué clase lo maneja. D) podría ser fácilmente la implementación de cualquiera de las tres primeras opciones.
FOTC tiene el principio de una solución que incluye algunas otras clases:
- selladores & unsealers,
- bolsos, que son un poco como las cuentas en que contienen dinero, pero no necesariamente tienen un dueño.
- pastillas de menta, que son las únicas cosas que pueden crear carteras con saldos positivos
una pastilla de menta tiene un/par unsealer sellador, lo que dota a un bolso cada vez que la menta crea uno. Los monederos supervisan los cambios de saldo; usan el sellador cuando disminuyen el equilibrio, y el que se destrama para transferir de un bolso a otro. Los monederos pueden generar carteras vacías. Debido al uso de selladores & unsealers, un bolso solo funciona con otros bolsos creados por la misma menta. Alguien no puede escribir su propio bolso para falsificar dinero; solo un objeto con acceso a una casa de moneda puede crear dinero. La falsificación se previene limitando el acceso a las mentas.
Cualquier persona con acceso a un bolso puede iniciar una transacción al generar un bolso vacío y transferir dinero desde el primer bolso en el mismo. El bolso temporal se puede enviar a un destinatario, que puede transferir dinero del bolso temporal a algún otro bolso que posea. El robo se previene limitando el acceso a carteras. Por ejemplo, un banco tiene carteras en nombre de clientes en cuentas. Como un banco solo tiene acceso a los monederos de las cuentas de sus clientes y carteras temporales, solo el banco de un cliente puede robarle al cliente (aunque tenga en cuenta que en una transferencia entre cuentas bancarias, hay dos clientes que pueden ser víctimas, de ahí dos posibles ladrones).
A este sistema le faltan algunos detalles importantes, como las autoridades monetarias (que tienen referencias a una o más casas de moneda) para crear dinero.
En general, las transacciones monetarias son difíciles de implementar de forma segura, y por lo tanto, pueden no ser los mejores ejemplos para aprender los conceptos básicos de OOP.
Esta pregunta parece estar fuera del tema porque se trata de la revisión del código y cabría en el código review.stackexchange.com –