Articulo de referencia

Comparación de lenguajes de programación (programación orientada a objetos)

Esta comparación de lenguajes de programación compara cómo los lenguajes de programación orientados a objetos, como C++ , Java , Smalltalk , Object Pascal , Perl , Python y otro...

Esta comparación de lenguajes de programación compara cómo los lenguajes de programación orientados a objetos, como C++ , Java , Smalltalk , Object Pascal , Perl , Python y otros, manipulan las estructuras de datos .

Construcción y destrucción de objetos

Declaración de clase

Miembros de la clase

Constructores y destructores

Campos

Métodos

Propiedades

Cómo declarar una propiedad llamada "Bar"

Implementado manualmente

Implementado automáticamente

Operadores sobrecargados

Operadores estándar

Indexadores

Castings de tipo

Acceso para miembros

Cómo acceder a los miembros de un objeto x

Disponibilidad de los miembros

Variables especiales

Métodos especiales

Manipulación de tipos

Gestión de espacios de nombres

Contratos

Véase también

Notas

  1. parámetro = el argumento puede repetirse si el constructor tiene varios parámetros.
  2. SAP se reservó el uso de la destrucción.
  3. 1 2 3 4 5 6 7 8 9 10 11 12 Este lenguaje utiliza la recolección de basura para liberar la memoria no utilizada.
  4. Esta sintaxis crea un valor de objeto con duración de almacenamiento automática.
  5. Esta sintaxis crea un objeto con duración de almacenamiento dinámica y devuelve un puntero a él.
  6. Los objetos OCaml se pueden crear directamente sin pasar por una clase.
  7. 1 2 3 4 5 6 7 Este lenguaje admite herencia múltiple . Una clase puede tener más de una clase padre.
  8. Si no se especifica una clase padre, la clase se convierte en una clase raíz. En la práctica, esto casi nunca se hace. Generalmente, se debe usar la clase base convencional del framework que se esté utilizando, comoNSObjecten el caso de Cocoa y GNUstep, oObjecten otros.
  9. Normalmente, la@interfaceparte se coloca en un archivo de encabezado y la@interfaceotra parte se coloca en un archivo de código fuente separado.
  10. Prefijos para nombres de clases y protocolos que se utilizan convencionalmente como una especie de espacio de nombres
  11. En Python, las interfaces son clases cuyos métodos tienencomo cuerpo un objeto .
  12. La clase es un objeto.Simplemente envíe un mensaje a la superclase (st-80) o al espacio de nombres de destino (Visualworks).
  13. El espacio de nombres es un objeto.Simplemente envíe un mensaje al espacio de nombres padre.
  14. El recolector de basura llama a un finalizador cuando un objeto está a punto de ser eliminado. No hay garantía de cuándo se llamará ni de si se llamará en absoluto.
  15. En ABAP, el constructor debe definirse como un método (ver comentarios sobre el método) con las siguientes restricciones: el nombre del método debe ser "constructor" y solo se pueden definir parámetros "importantes".
  16. Aquí va una lista opcional separada por comas de inicializadores para objetos miembros y clases padre. La sintaxis para inicializar objetos miembros es
    "member_name(parameters)"
    Esto funciona incluso para miembros primitivos, en cuyo caso se especifica un parámetro y ese valor se copia en el miembro. La sintaxis para inicializar las clases padre es
    "class_name(parameters)".
    Si no se especifica un inicializador para una clase miembro o padre, se utiliza el constructor predeterminado .
  17. Cualquier procedimiento Eiffel puede utilizarse como procedimiento de creación, también conocido como constructor. Véase el párrafo Eiffel en Constructor (informática) .
  18. Implementar {DISPOSABLE}.dispose garantiza quese llamará a dispose cuando el objeto sea recolectado por el recolector de basura.
  19. Esta construcción "inicializador" se usa raramente. En OCaml, los campos se inicializan normalmente directamente en su declaración. Solo se utiliza "inicializador" cuando se requieren operaciones imperativas adicionales. En otros lenguajes, los "parámetros del constructor" se especifican como parámetros de la clase en OCaml. Consulte la sintaxis de declaración de clases para obtener más detalles.
  20. Esta sintaxis se suele utilizar para sobrecargar constructores.
  21. En JavaScript, el constructor es un objeto.
  22. Los constructores pueden emularse con un método de fábrica que devuelva una instancia de clase.
  23. 1 2 3 El identificador de ámbito debe aparecer una sola vez en la declaración del archivo; todas las declaraciones de variables posteriores a este identificador de ámbito tendrán su ámbito, hasta que se encuentre otro identificador de ámbito o se alcance el final de la declaración de la clase.
  24. En ABAP, los campos o métodos específicos no se declaran como accesibles desde elementos externos. En cambio, las clases externas se declaran como amigas para tener acceso a los campos o métodos de la clase.
  25. En C++, los campos específicos no se declaran como accesibles desde fuera. En cambio, las funciones y clases externas se declaran como amigas para tener acceso a los campos de la clase. Consulte las secciones "Función amiga" y "Clase amiga" para obtener más detalles.
  26. Simplemente envía un mensaje a la clase.
    clase addInstVarName: campo . clase removeInstVarName: campo .
  27. 1 2 3 4 Simplemente asígnele un valor en un método.
  28. Python no tiene campos privados; todos los campos son accesibles públicamente en todo momento. Existe una convención en la comunidad que consiste en anteponer un guion bajo a los detalles de implementación, pero el lenguaje no lo exige.
  29. Todos los datos de clase son 'privados' porque el estándar COBOL no especifica ninguna forma de acceder a ellos.
  30. La declaración e implementación de métodos en ABAP son independientes. La instrucción `methods` se utiliza dentro de la definición de la clase. El método (sin "s") se utiliza dentro de la implementación de la clase. El argumento `parameter = argument` puede repetirse si hay varios parámetros.
  31. En ABAP, el nombre del parámetro de retorno se define explícitamente en la firma del método dentro de la definición de la clase.
  32. En C++, la declaración y la implementación de métodos suelen estar separadas. Los métodos se declaran en la definición de la clase (que normalmente se incluye en un archivo de cabecera ) utilizando la sintaxis
  33. Si bien el cuerpo de un método puede incluirse con la declaración dentro de la definición de la clase, como se muestra en la tabla, esto generalmente no es recomendable. Dado que la definición de la clase debe incluirse con cada archivo fuente que utilice los campos o métodos de la clase, tener código en la definición de la clase provoca que el código del método se compile con cada archivo fuente, aumentando así el tamaño del código. Sin embargo, en algunas circunstancias, es útil incluir el cuerpo de un método con la declaración. Una razón es que el compilador intentará insertar en línea los métodos incluidos en la declaración de la clase; por lo tanto, si aparece un método muy corto de una sola línea , puede resultar más rápido permitir que el compilador lo inserte en línea, incluyendo el cuerpo junto con la declaración. Además, si aparece una clase o método plantilla , todo el código debe incluirse con la declaración, ya que solo con el código se puede instanciar la plantilla.
  34. 1 2 Simplemente asígnele una función en un método.
  35. Implementación alternativa:
    def bar (): doc = "La propiedad bar." def fget ( self ): return self . _bar def fset ( self , value ): self . _bar = value return locals () bar = property ( ** bar ())
  36. Estos ejemplos requieren que elmódulo Class::Accessor esté instalado.
  37. 1 2 3 Aunque Eiffel no admite la sobrecarga de operadores, puede definir operadores.
  38. PHP no admite la sobrecarga de operadores de forma nativa, pero se puede agregar soporte utilizando el paquete PECL "operator" .
  39. La clase debe implementar la interfaz ArrayAccess .
  40. La clase debe sobrecargar@{}(desreferenciar el array) o crear una subclase de uno deTie::Arraylos métodosTie::StdArraypara interceptar operaciones con arrays.
  41. 1 2 En ABAP, los argumentos deben pasarse utilizando esta sintaxis:
    x->method(«exporting parameter = argument» «importing parameter = argument» «changing parameter = argument» «returning value(parameter)»
    parameter = argumentpuede repetirse si hay varios parámetros
  42. C++ no tiene la palabra clave "super" porque es posible la herencia múltiple, lo que podría generar ambigüedad sobre a qué clase base se hace referencia. En su lugar,BaseClassName::memberse puede usar la sintaxis para acceder a un miembro sobrescrito en la clase base especificada. Microsoft Visual C++ proporciona la palabra clave no estándar "__super" para este propósito; sin embargo, no es compatible con otros compiladores.
  43. 1 2 3 4 5 6 7 8 9 La palabra clave aquí no es un valor y solo se puede usar para acceder a un método de la superclase.
  44. Pero teme, no tienen el mismo valor.
  45. solo para tipos opcionales
  46. 1 2 En este lenguaje, a los métodos de instancia se les pasa el objeto actual como primer parámetro, que convencionalmente se denomina "self", pero esto no es obligatorio.
  47. En Eiffel, "Precursor" es en realidad una llamada al método del mismo nombre en la superclase. Por lo tanto, Precursor(args) es equivalente a "super.currentMethodName(args)" en Java. No hay forma de llamar a un método con un nombre diferente en la superclase.
  48. En Ruby, a diferencia de otros lenguajes, `super` es en realidad una llamada al método del mismo nombre en la superclase. Por lo tanto, `super(args)` en Ruby es equivalente a `super.currentMethodName(args)` en Java. No hay forma de llamar a un método con un nombre diferente en la superclase.
  49. En OCaml, la declaración de un objeto puede comenzar opcionalmente con un parámetro que se asociará al objeto actual. Este parámetro se denomina convencionalmente "self", pero no es obligatorio. Es recomendable incluir un parámetro para poder llamar a los propios métodos.
  50. En OCaml, una declaración de herencia ("inherit") puede asociarse opcionalmente con un valor, con la sintaxis " inherit parent_class «parámetros» as super". Aquí, "super" es el nombre que se le da a la variable asociada con este objeto padre. Puede tener otro nombre.
  51. Sin embargo, si se necesita la capacidad de tener un valor "opcional" en OCaml, entonces envuelva el valor dentro de unoptiontipo, cuyos valores sonNoneySome x, que podrían usarse para representar "referencia nula" y "referencia no nula a un objeto" como en otros lenguajes.
  52. suponiendo que "x" e "y" son los objetos (y no punteros). Se puede personalizar sobrecargando el==operador
  53. Solo accesible desde dentro de la clase, ya que elclone()método heredadoObjectes protegido, a menos que la clase sobrescriba el método y lo haga público. Si se utiliza elclone()método heredadoObject, la clase debe implementar laCloneableinterfaz para permitir la clonación.
  54. La clase debe implementar la interfazComparablepara que este método se estandarice.
  55. Implementado por el métododel objetocopyWithZone:
  56. compare: es el nombre convencional para el método de comparación en las clases Foundation. Sin embargo, no existe un protocolo formal.
  57. Solo si el objeto cumple con elPrintableprotocolo.
  58. Solo si el objeto cumple con elDebugPrintableprotocolo.
  59. Solo si el objeto cumple con elEquatableprotocolo.
  60. Solo si el objeto cumple con elComparableprotocolo.
  61. Solo si el objeto cumple con elhashValueprotocolo.
  62. Puede personalizarse mediante el__str__()método
  63. Puede personalizarse mediante el__repr__()método
  64. Puede personalizarse mediante el__copy__()método
  65. Puede personalizarse mediante el__eq__()método
  66. Solo en Python 2.x y versiones anteriores (eliminado en Python 3.0). Se puede personalizar mediante el__cmp__()método
  67. Se puede personalizar mediante el__hash__()método del objeto. No todos los tipos son hashables (los tipos mutables generalmente no lo son).
  68. Puede personalizarse mediante el__clone()método
  69. 1 2 Se puede personalizar sobrecargando el operador de conversión de cadena del objeto.
  70. Este ejemplo requiere el uso de Data::Dumper
  71. Este ejemplo requiere el uso de ing Storeble
  72. Este ejemplo requiere el uso de Scalar::Util
  73. La información de tipo en tiempo de ejecución en ABAP se puede recopilar utilizando diferentes clases de descripción como CL_ABAP_CLASSDESCR.
  74. 1 2 3 4 5 La conversión ascendente es implícita en este lenguaje. Se puede usar una instancia de subtipo donde se necesita un supertipo.
  75. Solo para objetos que no son de clase. Sixes un objeto de clase,[x class]solo devuelvex. El método en tiempo de ejecuciónobject_getClass(x)devolverá la clase dexpara todos los objetos.
  76. 1 2 3 Este lenguaje es de tipado dinámico. No es necesario realizar conversiones entre tipos.
  77. Este lenguaje no proporciona información de tipo en tiempo de ejecución. No es necesaria porque es de tipado estático y la conversión descendente es imposible.

Referencias