Matz, que inventó Ruby, dijo que diseñó el lenguaje para que esté más orientado a objetos que Python. ¿Cómo está Ruby más orientado a objetos que Python?¿Cómo está Ruby más orientado a objetos que Python?
Respuesta
De WikiVS,
y hellip; donde en Ruby todas las funciones y la mayoría de los operadores son en realidad métodos de un objeto, varias funciones de Python son funciones de procedimiento en lugar de métodos.
La siguiente interview con Matz, el creador de Ruby, proporciona un contexto adicional a su pregunta y el punto anterior.
& hellip;
Stewart: Comencemos con un poco de historia. ¿Por qué decidiste escribir Ruby?
Matz: En 1993, estaba hablando con un colega sobre los lenguajes de scripting. Quedé bastante impresionado por su poder y sus posibilidades. Sentí que escribir guiones era el camino a seguir.
Como un fanático de la programación orientado a objetos desde hace mucho tiempo, me pareció que la programación OO también era muy adecuada para la creación de scripts. Luego miré alrededor de la red. Descubrí que Perl 5, que aún no se había lanzado, iba a implementar las características de OO, pero no era realmente lo que quería. Renuncié a Perl como un lenguaje de scripting orientado a objetos.
Luego me encontré con Python. Era un lenguaje interpretativo, orientado a objetos. Pero no sentía que fuera un lenguaje de "guiones". Además, era un lenguaje híbrido de programación de procedimientos y programación orientada a objetos.
Quería un lenguaje de scripting que fuera más poderoso que Perl, y más orientado a objetos que Python. Es por eso que decidí diseñar mi propio idioma.
& hellip;
Un ejemplo que comúnmente se da es len
, que en Python es una función incorporada. Puede implementar un método especial __len__
en sus objetos que será llamado por len
, pero len
sigue siendo una función. En Ruby, los objetos solo tienen la propiedad/método .length
, por lo que parece más orientado a objetos cuando dices en lugar de len(obj)
, aunque en las profundidades sucede más o menos lo mismo.
Dicho esto, a lo largo de los años, Python se ha movido hacia una mayor orientación a los objetos. Actualmente, todos los objetos (y los objetos definidos implícitamente por el usuario) heredan de la clase object
. Las metaclases también se han agregado, y muchas de las clases de biblioteca incorporadas y centrales se han organizado en jerarquías con la ayuda de ABC (clases base abstractas).
En mi uso intensivo de Python nunca he encontrado que falta en el departamento de OO. Puede hacer todo lo que quiero que haga con los objetos. Es cierto, Ruby se siente algo más puramente OO, pero al menos en mi experiencia esto no ha sido una preocupación realmente práctica.
Creo que el ejemplo 'len' es engañoso. En ese sentido, la sobrecarga del operador tampoco está orientada a objetos, porque 'a + b' no se parece a una llamada a un método. Lo importante es que se implemente como un método. – nikow
@nikow: el punto es que 'len' es una función real. La sobrecarga del operador es simplemente azúcar sintáctica: el compilador en realidad genera una llamada a un método. Este no es el caso con 'len' –
de Python. Como usted mismo escribió' len' generalmente llama al método '__len__'. Tener 'len' como función es azúcar sintáctica, al igual que la sobrecarga del operador. – nikow
Si toma el Python de 1993 y lo compara con Ruby, este último es más orientado a objetos. Sin embargo, después del overhaul in Python 2.2 esto ya no es cierto. Diría que Python moderno está tan orientado a objetos como se pone.
+1. Esto es muy importante. Matz anunció Ruby el 23 de febrero de 1993. Su estudio de los idiomas existentes que lo llevaron a comenzar a trabajar en Ruby habría sido obvio desde antes. Por lo tanto, debe tener en cuenta el contexto histórico, no puede simplemente compararlo con Python 3.2, necesita ver cuál fue la versión ampliamente disponible en 1992/93. Además, debes tener en cuenta el contexto "cultural": matz está muy familiarizado con Smalltalk. Cualquiera que haya usado Smalltalk usualmente tiene opiniones mucho más fuertes sobre OO que las personas que no lo han hecho. P.ej. Alan Kay dice que todos los estados deben ser privados. –
Es simple, casi todo en Ruby (incluidos los números) es un objeto; no hay valores escalares
... Como es el caso en Python. –
@Beau, AFAIK, en python, no puede insertar sus funciones en las clases incorporadas (Integer, String) ... por lo que, a ese respecto, Ruby es más OOP. – st0le
@ st0le: No creo que esto haga Ruby _more_ object oriented. El hecho de que Ruby pueda volver a abrir todas las clases para agregar más métodos no es (en mi humilde opinión) una medida de OO-ness. Java no puede "agregar métodos a las clases". [¡No puedo creer que haya usado Java como ejemplo!]. Ser capaz de Monkey-Patch/Duck-Punch es más sobre el dinamismo que OO-ness. –
- 1. ¿Cambió Python a más orientado a objetos?
- 2. ¿Cómo está Ruby completamente orientado a objetos?
- 3. ¿Está Erlang orientado a objetos?
- 4. ¿Está MongoDB orientado a objetos?
- 5. Diseño orientado a objetos con Ruby
- 6. ¿Por qué Python no está completamente orientado a objetos?
- 7. PHP ¿Está orientado a objetos o no?
- 8. ¿Mi código PHP está orientado a objetos?
- 9. Javascript orientado a objetos
- 10. Paradigma orientado a objetos Pregunta
- 11. Buscando un lenguaje orientado a objetos puros
- 12. experimento: orientado a objetos C?
- 13. ¿Cuándo está orientado a objetos no es la solución correcta?
- 14. ¿Está el lenguaje de programación C orientado a objetos?
- 15. Diseño orientado a objetos Entrevista
- 16. ¿C++ es un lenguaje orientado a objetos?
- 17. Hacer una secuencia de comandos de Python Orientado a objetos
- 18. C para un programador orientado a objetos
- 19. Sintaxis del constructor Perl orientado a objetos
- 20. ¿Qué hace que un lenguaje sea orientado a objetos?
- 21. Suicidio orientado a objetos o eliminar esto;
- 22. Problema de diseño orientado a objetos
- 23. C como un lenguaje orientado a objetos
- 24. Pregunta de diseño orientado a objetos
- 25. usando jQuery en modo orientado a objetos
- 26. Filtrado de Spam Bayesiano Orientado a Objetos?
- 27. ¿El rubí es realmente un lenguaje completamente orientado a objetos?
- 28. ¿Cómo se documenta el código MATLAB orientado a objetos?
- 29. HAS-A, terminología IS-A en lenguaje orientado a objetos
- 30. Administrar elementos en un juego orientado a objetos
* Varias funciones de Python son de procedimiento *: supongo que esto significa funciones como 'len' o' <'; esos se implementan como métodos ('__len__' y' __lt__' respectivamente). –