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 ) |
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]
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] .
Corto:
clase HELLO create make feature make do print ( "Hello World%N" ) end endo 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 finalUn 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 clasedonde 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 endLa declaración de una variable se parece a la declaración de variables en lenguajes similares a Pascal:
id_variable : TIPOPor ejemplo:
número_complejo : COMPLEJOInicializació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 claseLas 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.
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 ... terminarEsta 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:
!-! @ |> <| -|-> <-|- ==> <== ++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.
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:
Lenguajes de programación | |
---|---|
|
Internacionales Ecma | Normas|
---|---|