Escolar Documentos
Profissional Documentos
Cultura Documentos
Ingeniera Informtica
Eiffel
3 Ingeniera Informtica Programacin Dirigida a Objetos Grupo B - Curso 2006-2007
Diego Montesinos Hervs Irene Daz Valenzuela Andrs Herrera del Pino Jos Antonio Sez Muoz
1.Introduccin
2
1.Introduccin
Eiffel es un lenguaje de programacin orientado a objetos centrado en la construccin de software robusto. Diseado por Bertrand Meyer, apareci en 1985 y fu desarrollado por Meyer y Eiffel Software. Eiffel es un lenguaje con tipos fuertes, pero relajado por herencia. Implementa administracin automtica de memoria, generalmente mediante algoritmos de recoleccin de basura.
3
2.Caractersticas de Eiffel
8
2.Caractersticas
La meta del lenguaje, bibliotecas, y mtodos de programacin es crear un software que utilice mdulos lo ms reutilizables posible.
Herencia mltiple: permite que una clase herede de varias superclases. Adems posibilita a los subtipos adaptarse a sus propiedades heredades renombrndolas o estableciendo reglas de seleccin para ellas.
10
11
12
13
15
Su contribucin ms importante a la ingeniera del software es el Diseo por Contracto (DbC), en el cual se tienen:
que son usadas para asegurar la correccin del programa sin sacrificar la eficiencia.
16
18
19
21
22
23
SmartEiffel (implementacion GNU, basada en una versin anterior del lenguaje) Visual Eiffel.
Originalmente, el lenguaje Sather estaba basado en Eiffel, pero fue modificndose, y ahora incluye varias caractersticas de la programacin funcional. Parte de Apple Media Tool est basado en Eiffel.
25
El estndar fue desarrollado por ECMA International y su primera versin fue aprobada por ECMA el 21 de Junio de 2005 como el standard ECMA 367 (Eiffel: Analysis, Design and Implementation Language)
26
La segunda edicin fue adoptada por ECMA en Junio de 2006 y en el mismo ao por la ISO (Noviembre de 2006). El desarrollo software de Eiffel y de sus bibliotecas, dio lugar a implementar un estndar; Eiffel Software's EiffelStudio 5.7, que implementa algunos de los mejores mecanismos del lenguaje. El equipo de SmartEiffel se apart de este estndar para crear su porpia versin del lenguaje, el cual parece est ms cerca del estilo original de Eiffel.
27
Bertrand Meyer: Eiffel: The Language, Prentice Hall, segunda edicin, 1992 (primera edicin: 1991)
Bertrand Meyer: Object-Oriented Software Construction, Prentice Hall: primera edicin, 1988; segunda edicin, 1997.
28
Consultores, que dan informacin sobre una instancia rdenes que modifican una instancia. Esta distincin es importante en los mtodos de Eiffel. En particular: Principio de Acceso Uniforme: desde el exterior cualquier consultor es un atributo o el resultado de una operacin. La notacin es la misma en ambos casos. Principio de separacin entre las rdenes y consultores. Esto no es una regla del lenguaje, pero se entiende como una buena prctica de programacin que no se realicen cambios en el mismo. 33
3.3 Sobrecarga
Eiffel soporta la sobrecarga de funciones y operadores, es decir, los nombres de funciones pueden volver a usarse en diferentes clases, pero siempre haciendo referencia al mismo comportamiento. Para hacer uso de esta funcionalidad simplemente tenemos que asignar el mismo nombre a distintos feature en las distintas clases implicadas. Veamos un ejemplo con el operador + a + b for a,b: INTEGER a + b for a,b: REAL a + b for a,b: VECTOR [INTEGER] Sin embargo, Eiffel no soporta la sobrecarga de funciones dentro de una misma clase como ocurre en otros lenguajes como C++, por tanto, las funciones f (x: X) y f(y: Y) no podran convivir en la misma clase.
34
3.4 Genricos
Pueden definirse clases genricas que usen parmetros. Estos parmetros genricos aparecen entre parntesis.
class LIST [G]..G es llamado parmetro formal genrico. En la declaracin, G representa un tipo arbitrario, por tanto, una funcin podr devolver un valor de tipo G y una rutina usarlo como argumento. item: G do ... end put (x: G) do ... end
35
3.4 Genricos
Tambin es posible tener parmetros formales limitados, para los que el parmetro actual debe heredarse de una clase dada. Por ejemplo en class HASH_TABLE [G, KEY -> HASHABLE] una derivacin HASH_TABLE [INTEGER, STRING] slo es vlida si STRING hereda de HASHABLE. Teniendo KEY limitada por HASHABLE significa que para x: KEY podremos aplicarle a x todos los mtodos de HASHABLE.
36
3.5 Herencia
Para heredar de una o ms clases, se debe incluir la palabra reservada inherit al principio:
37
3.5 Herencia
Una clase puede sobrecargar alguno de los features heredados. Esto debe aparecer explcitamente en la declaracin, usando la palabra reservada redefine en la clausula de herencia
class C inherit A redefine f, g, h end B redefine u, v end
38
Un mtodo o feature puede ser igualmente abstracto colocando la palabra deferred en lugar de una clausula do. Si una clase tiene algn mtodo deferred debe declararse como tal, aunque tambin pueden hacerlo clases que no los contengan.
39
3.7 Renombramiento
Cuando una clase hereda de una o ms clases, toma todos sus mtodos con los nombres originales. Es posible en este lenguaje renombrarlos haciendo uso de la palabra reservada rename.
Esto es especialmente necesario en el caso de la herencia mltiple, pues puede darse el caso de colisiones entre mtodos de distintas clases, lo cual violara el principio de no sobrecarga de nombres dentro del mismo mtodo, devolviendo un error.
40
3.8 Tuplas
El tipo tupla puede verse como una forma simple de clase, dando solo atributos y el correspondiente constructor. Un ejemplo tpico sera:
TUPLE [name: STRING; peso: REAL; date: DATE] y puede usar como una forma simple de descripcin cuando una clase no es necesaria. Una instancia de una tupla es simplemente una secuencia de valores entre parentesis
3.8 Tuplas
Los componentes de una tupla pueden accederse como si fueran atributos de una clase, por ejemplo si t ha sido asignado a la tupla, t.peso sera 3.5 La notacin del punto tambin puede usarse para asignar valores a una tupla t.peso := t.peso + 0.5 Los nombres de atributos son opcionales, por tanto, puede expresarse una tupla como TUPLE [A, B, C].
42
Si queremos ejecutar las acciones solo para los elementos que cumplen una condicin
Una_lista.do_if (agent accin, agent condicin)
43
44
shared_object: SOME_TYPE once create Result.make (args) -- This creates the object and returns a reference to it through Result end
45
3.11 Conversiones
Simplemente generaliza los mecanismos de conversin de la mayora de los lenguajes de programacin, pudindose aplicar siempre que los tipos sean compatibles.
46
3.11 Conversiones
Se puede realizar:
my_string := my_date Convierte una fecha en un string. create my_string.make_from_date (my_date)
Para realizar la conversin de la primera forma, es necesario que haya un constructor implementado para dicho fin, es decir, haber implementado la segunda forma
47
Si una operacin falla en una rutina, la rutina entera falla y se produce un error. Si dicho error no lo maneja dicha rutina es transferido a la rutina superior, as sucesivamente hasta que, o bien se captura la excepcin, o llega el error al SO.
48
Para capturar las excepciones se utilizan los bloques rescue. stos se ejecutan cuando se produce un fallo. Son similares a los bloques trycatch de Java.
Se puede volver a probar a ejecutar la rutina que fall despus de realizar las operaciones de gestin del error usando la palabra retry dentro del cdigo del bloque rescue (esto no existe en Java).
49
3.13 Concurrencia
Existen bibliotecas de hebras como EiffelThreads y otras muchas, pero que an no forman parte de la espcificacin estndar oficial de Eiffel.
50
3.14 Operadores
51
3.14 Operadores
Existen tambin operadores libres que se pueden utilizar para definir sintaxis infija o prefija, por ejemplo para aplicaciones matemticas o fijas. Cada clase puede tener, adems, una funcin asociada con el operador [] para poder utilizar la notacin a[i] en las clases que tengan estructura similar a un array (vectores, matrices, ).
52
El separador de instrucciones (;) se suele omitir, salvo para separar instrucciones en la misma lnea Es usual agrupar los mtodos con caractersticas similares para una mayor legibilidad
Eiffel, a pesar de ser un L.O.O., posee una arquitectura abierta para interaccionar con software externo. Proporciona un interfaz directo con C/C++. La mayora de los compiladores de Eiffel utilizan C como lenguaje intermedio. Las ltimas versiones del compilador SmartEiffel ofrcen tambin la posibilidad de generar bytecode de Java 54