Eiffel

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 15 de marzo de 2021; las comprobaciones requieren 13 ediciones .
eiffel
Semántica orientado a objetos
clase de idioma orientado a objetos , orientado a clases , genérico , concurrente
tipo de ejecución compilado
Apareció en 1986
Autor Bertrand Meyer
Desarrollador Software de Bertrand Meyer y Eiffel
extensión de archivo .e
Liberar EiffelStudio 22.05 [1]  (31 de mayo de 2022 ) ( 2022-05-31 )
sistema de tipos estricto , estático
Implementaciones principales EiffelStudio [2] , SmartEiffel [3] , Visual Eiffel [4] , Gobo Eiffel [5] , El compilador Eiffel tecomp [6]
sido influenciado Ada , Algol-60 , Simula , Z
influenciado C# , D , Delphi , Java , Lisaac , Ruby , Sather , Ada
Licencia doble: GPL y corporativo
Sitio web eiffel.org
Plataforma multiplataforma
sistema operativo FreeBSD , Linux , macOS , OpenBSD , Solaris , Windows

Eiffel es un lenguaje de programación orientado a objetos con una sintaxis similar a Algol desarrollada por Bertrand Meyer . El método de programación por contrato se implementó por primera vez en este lenguaje .

Hay compiladores Eiffel para Windows , DOS , OS/2 y UNIX . La mayoría de las implementaciones de Eiffel generan código C , es decir, se implementan como un traductor . Luego, este código se compila utilizando el compilador de C. Sin embargo, existen sistemas que también generan código máquina directamente. Por ejemplo, Visual Eiffel . [cuatro]

Origen del nombre

El idioma "Eiffel" lleva el nombre del ingeniero Gustave Eiffel , quien construyó la famosa torre que lleva su nombre. Al elegir este nombre para el idioma, sus creadores se centraron en las siguientes características de la Torre Eiffel:

Por lo tanto, los creadores insinuaron que el sistema de programación Eiffel le permite construir grandes sistemas de software de forma rápida y rentable usando una cantidad relativamente pequeña de módulos de software de las bibliotecas de Eiffel Software, y también expresaron la esperanza de que los sistemas de software creados usando el sistema Eiffel larga vida estará destinado [7] .

Características principales

¡Hola Mundo!

Corto:

clase HELLO create make feature make do print ( "Hello World%N" ) end end

o ampliado, siguiendo el estilo de escritura:

note description : "¡Hola programa mundial!" autor : "Elizabeth W. Brown" clase HOLA crear hacer función hacer -- Imprime un mensaje simple. hacer imprimir ( "Hola mundo%N" ) final final

Ejemplos de código y características del lenguaje

Un ejemplo de declaración de clase en Eiffel:

clase CUADRADO heredar RECTÁNGULO -- CUADRADO es una subclase de RECTÁNGULO -- se puede especificar más de un bloque heredado. -- para cada clase principal, se puede especificar una lista de métodos heredados. -- esto resuelve el problema de múltiples conflictos de herencia. crear -- función de lista de nombres de constructores -- las propiedades descritas aquí son visibles para todos los clientes. -- Más precisamente, esto es equivalente a la función {ANY} -- lo que significa que las funciones definidas en esta sección -- están disponibles para la clase ANY y todos sus descendientes. -- Y dado que la clase ANY es el padre de todas las clases (el origen del gráfico de clase), -- que no especifican explícitamente las clases padre, -- esto significa que puede ser utilizada por cualquier característica de clase { NIÑO } -- las propiedades descritas aquí están disponibles para que las use la clase CHILD y sus descendientes cuentan con { NINGUNO } -- las propiedades descritas aquí están ocultas para que las usen los clientes. -- Más específicamente, solo disponible para la clase NONE, que es el sumidero del final del gráfico de clase

donde propiedades es el nombre general de los campos de datos y métodos. Es decir, atributos ( atributos en inglés  ) y subrutinas ( rutinas en inglés ) en la terminología de Eiffel. Las subrutinas en subclases (herederas de clases) pueden reemplazar (redefinir) las heredadas solo si sus firmas se ajustan (es decir, coinciden).  

Otro ejemplo:

clase COMPLEJO create make feature real_part , imag_part : REAL feature make ( r , i : REAL ) do real_part := r imag_part := i end end

La declaración de una variable se parece a la declaración de variables en lenguajes similares a Pascal:

id_variable : TIPO

Por ejemplo:

número_complejo : COMPLEJO

Inicialización (creación) de un objeto con una llamada de constructor:

crear número_complejo . hacer ( 2.4 , 3.2 )

Anteriormente, se usaba una sintaxis ligeramente diferente, en la que la palabra de servicio createse reemplazaba por un signo de exclamación doble !!:

!! número_complejo . hacer ( 2.4 , 3.2 )

El lenguaje Eiffel no tiene destructores, pero sí un recolector de basura automático. Cuando no queden referencias al objeto, el recolector de basura lo destruirá.

El lenguaje Eiffel admite la herencia múltiple (secciones múltiples inherit).

Las clases abstractas se definen agregando una palabra reservada deferred("diferida"):

clase diferida FIGURA -- final del cuerpo de la clase

Las propiedades "retrasadas" se definirán en las clases descendientes. Para poder crear un objeto de clase, no debe contener ninguna propiedad "diferida".

La propiedad más característica del lenguaje Eiffel son las aserciones incorporadas para crear un contrato forzado entre la declaración de llamada y el código de subrutinas llamado (ver también: Plankalkül ).

Todos los accesos a las propiedades de los objetos son dinámicos de forma predeterminada, aunque los compiladores pueden averiguar dónde se puede reemplazar el enlace dinámico por el enlace estático y, naturalmente, hacerlo. Esta característica permite no introducir el concepto virtual("virtual"). Por el contrario, se introduce el concepto frozen(“congelado”), es decir, una propiedad “no redefinible”.

El lenguaje distingue dos tipos de datos a nivel de descripciones: de referencia y expanded("estructurales", "expandidos"), lo que también se aplica a las declaraciones de variables. Esto le permite minimizar la diferencia entre una referencia de objeto y el objeto mismo. Esta diferencia se muestra en la asignación, copia y creación de objetos.

Redefiniendo Operaciones

La sintaxis de operación está disponible para las subrutinas. Es decir, el operador infijo +es un alias para el método plus, pero * para product:

class INTEGER característica ... característica más alias "+" ( otro : como Actual ): como Actual do ... fin alias de producto "*" ( otro : como Actual ): como Actual hacer ... terminar ... terminar

Esta sintaxis es una evolución de la forma en que Clu redefine las operaciones . A diferencia de C++ y Clu, Eiffel también permite la definición de operaciones libres cuyos caracteres pueden consistir en uno o más caracteres del siguiente conjunto

:\? = ~ / ! # $ % & * + - / < > @ ^ ` |

siempre que el símbolo o combinación de símbolos no se utilice en la sintaxis de Eiffel para otros fines. Aquí hay ejemplos de posibles operaciones gratuitas:

!-! @ |> <| -|-> <-|- ==> <== ++

Razones de la débil difusión de la lengua

Los compiladores con Eiffel del autor del lenguaje son caros y no tan comunes como los compiladores C/C++, que en un momento limitaron la distribución de este lenguaje, no hubo alternativas free/free durante mucho tiempo.

Estilo de diseño del programa

El lenguaje Eiffel está diseñado con el máximo énfasis en la simplicidad de las construcciones del lenguaje. Por lo tanto, define solo una construcción para el bucle.

desde la inicialización hasta la condición de salida del bucle bucle final del cuerpo del bucle _ _

Al programar en Eiffel, se considera una buena práctica cumplir con ciertas reglas de formato.

Gracias a esto, los códigos fuente se leen como si fueran documentación. Un incentivo adicional para seguir las reglas es el rigor de los propios compiladores con respecto al diseño. Muchos de ellos ( SmartEiffel [3] en particular ) no permiten que los códigos fuente tengan un formato incorrecto, encuentran muchas desviaciones del estilo, muestran advertencias o incluso se niegan a compilar.

Aquí hay algunas pautas para formatear el código fuente:

  • las palabras de servicio se escriben en negrita (relevantes para la impresión y salida a monitores modernos)
  • todos los identificadores están en cursiva
  • a diferencia de los lenguajes tipo C, Eiffel tiene una actitud negativa hacia las abreviaturas. En lugar de drvMngr, se acostumbra escribir driver_manager
  • todas las clases se escriben en mayúsculas
LISTA de clases
  • las variables se escriben en minúsculas
recuento_de_ovejas : INTEGER
  • Las constantes siempre empiezan con mayúscula.
Gravedad : REAL = 9.81
  • se recomienda utilizar una fuente no monoespaciada
  • al comienzo de cada clase, es conveniente insertar información sobre ella: quién la escribió, cuándo, la funcionalidad de la clase. Toda esta información se escribe al principio del archivo con la clase.
note description : "Una descripción de esta clase". autor : clase "Vasya Pupkin" CLASE -- fin del cuerpo de la clase
  • después del nombre de cada procedimiento en la siguiente línea, es deseable describir el resultado de su acción:
característica IP : INTEGER -- La dirección IP de la máquina local. do -- fin del cuerpo de la solicitud
  • una característica de Eiffel es el punto y coma opcional ";" al final de las construcciones sintácticas.

Notas

  1. ¡EiffelStudio 22.05 está disponible! .
  2. EiffelStudio Un entorno de desarrollo integrado completo . Consultado el 22 de noviembre de 2010. Archivado desde el original el 23 de noviembre de 2010.
  3. 1 2 SmartEiffel, el compilador GNU Eiffel, herramientas y bibliotecas . Consultado el 22 de noviembre de 2010. Archivado desde el original el 13 de abril de 2011.
  4. 1 2 Sitio de inicio de Visual Eiffel (enlace descendente) . Consultado el 7 de mayo de 2022. Archivado desde el original el 15 de junio de 2021. 
  5. Compilador Gobo Eiffel . Consultado el 8 de enero de 2009. Archivado desde el original el 16 de enero de 2009.
  6. tecomp: El compilador Eiffel . Consultado el 8 de enero de 2009. Archivado desde el original el 17 de enero de 2010.
  7. ¿De dónde viene el nombre? . https://www.eiffel.com . Consultado el 17 de julio de 2019. Archivado desde el original el 7 de junio de 2019.

Literatura

  • Bertrand Meyer. Construcción de Software Orientado a Objetos. 2ª edición, Prentice Hall, 1997.
  • Bertrand Meyer. Eiffel: el lenguaje
  • Invitación a Eiffel. Del ISE.
  • Ricardo Paige. Una visión general de Eiffel
  • Jean-Marc Jezequel. Ingeniería de Software Orientada a Objetos con Eiffel

Enlaces