Você está na página 1de 54

Universidad de Granada E.T.S.

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

1.1 Caractersticas esenciales


- Mecanismos de ayuda al Diseo por contrato que se integraron firmemente con el mecanismo de herencia y otras construcciones del lenguaje. - Estructura de programa orientada a objetos, las clases son la unidad bsica. - Asignacin esttica de tipos. - Ayuda para la gestin automtica de memoria, implementada por el recolector de basura. - Papel central de la herencia, incluyendo herencia mltiple y mecanismo para hacerla segura.
4

1.1 Caractersticas esenciales


- Un sistema uniforme de tipos que maneja las semanticas de referencia y valor, donde todos los tipos (incluyendo los tipos bsicos) estn basados en clases. - Tipos genricos. - Bloques(agent) (similares a los de Smalltalk) - Rutinas 'once' (evaluadas solamente la primera vez), para la comparticin de objetos e inicializacin. - Sintaxis basada en las palabras clave de ALGOL/Pascal pero sin separador (se puede usar el punto y coma, es 5 opcional).

1.2 Caractersticas de diseo


- Eiffel enfatiza en sentencias declarativas sobre cdigo procesal. - Eiffel evita los trucos de codificacin o tcnicas de codificacin previstas. - Se intenta no slo hacer cdigo ms legible, sino tambin permitir a los programadores concentrarse en los aspectos importantes del programa sin meterse en detalles de implementacin.
6

1.2 Caractersticas de diseo


simplicidad de Eiffel se ha pensado para promover respuestas simples, extensibles y reutilizables para los problemas de computacin. compiladores proveen tcnicas de optimizacin con el objetivo de crear cdigo extremadamente eficiente, comparable a C++, por ejemplo. igual que los lenguajes de programacin vistos en la asignatura, Eiffel tambin utiliza semntica en el heap.
Al Los La

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.

2.1 Eiffel soporta...

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

2.1 Eiffel soporta...


Tipos genricos: Eiffel usa tipos parametrizados (genricos), como en otros lenguajes como Ada, Java, C#, que permiten definir un tipo sin especificar todos los otros tipos que usa. Los tipos no especificados son sustituidos por parmetros en estos puntos del cdigo.

11

2.1 Eiffel soporta...


Polimorfismo: capacidad que tienen objetos de diferentes clases de responder al mismo mensaje. Esto significa que puede haber muchos mensajes con el mismo nombre, en diferentes clases. Cada clase responde al mensaje con su cdigo propio (mtodo).

12

2.1 Eiffel soporta...


Encapsulacin : ocultamiento del estado, es decir, de los datos miembro, de un objeto de manera que slo se puede cambiar mediante las operaciones definidas para ese objeto. De esta forma, el usuario de la clase puede obviar la implementacin de los mtodos y propiedades para concentrarse slo en cmo usarlos. Por otro lado se evita que el usuario pueda cambiar su estado de maneras imprevistas e incontroladas.

13

2.1 Eiffel soporta...


Asignacin fuerte de tipos En LPs con tipos, una expresin de valores est bien formada cuando a su valor se le puede asignar un tipo, ya sea en tiempo de compilacin o de ejecucin. No se procede a la evaluacin si no se ha podido determinar por inferencia dicho tipo Podramos hablar de tipo de la expresin Los LPs en que las expresiones han de ser consistentes respecto a los tipos se dice que son LPs con asignacin fuerte de tipos
14

2.1 Eiffel soporta...


Equivalencia de mtodos y tipos: como ya sabemos de otras asignaturas, en algunos LPs, si S es subtipo de T, podemos utilizar S donde se espere un parmetro de tipo T, y si una funcin devuelve un tipo T, podra devolver tipo S sin problema ninguno. Por extensin, donde corresponde una clase cualquiera, nos podemos encontrar con cualquier subclase suya.

15

2.2 Contribucin de Eiffel

Su contribucin ms importante a la ingeniera del software es el Diseo por Contracto (DbC), en el cual se tienen:

Assertions(afirmaciones) Precondiciones Postcondiciones Invariantes de clase

que son usadas para asegurar la correccin del programa sin sacrificar la eficiencia.
16

2.2 Contribucin de Eiffel


Assertions(afirmaciones) En Eiffel, las afirmaciones son integradas en el lenguaje y son extradas automticamente para generar la documentacin de la clase.
17

2.2 Contribucin de Eiffel


Una afirmacin es un predicado (por ejemplo, una expresin booleana) situada en un programa para indicar que la afirmacin es verdad en ese lugar. Por ejemplo, el siguiente cdigo contiene dos afirmaciones: x:= 5; {x > 0} x:= x + 1 {x > 1} Se usan para ayudar a la especificacin de programas y asegurar la correccin del cdigo.

18

2.2 Contribucin de Eiffel


Algunos lenguajes de programacin modernos incluyen la sentencia de afirmacin (assert(cond)) que es una condicin que se comprueba en tiempo de ejecucin. Si la evaluacin de la condicin falla, se produce un fallo de afirmacin como resultado, el cual puede causar que la ejecucin se aborte o puede causar el reconsiderar una va alternativa para el programa. El uso de afirmaciones ayuda al programador a disear, desarrollar y comprobar la correccin del cdigo. Adems permite hacer comprobaciones durante el proceso de pruebas, durante la ejecucin, y detectar los posibles fallos, permitiendo al programador detectar bugs de sus programas.

19

2.2 Contribucin de Eiffel


Precondiciones: Es una afirmacin (condicin o predicado) que debe ser siempre verdadero al principio de la ejecucin de alguna seccin de cdigo. Si la precondicin falla, el efecto de la seccin de cdigo puede estar indefinido y puede que se produzcan errores en la ejecucin. Ejemplo: para calcular el factorial de un nmero la precondicin es que el nmero sea mayor o igual que 0.
20

2.2 Contribucin de Eiffel


Postcondiciones: Es una afirmacin (condicin o predicado) que debe ser siempre cierto justo despus de la ejecucin de un algn trozo de cdigo. Ejemplo: Para una funcin que calcule el factorial, la poscondicin puede ser que el resultado sea siempre mayor o igual que 1.

21

2.2 Contribucin de Eiffel


Invariante de representacin. Es una serie de condiciones impuestas sobre los objetos de una clase que determinan si un objeto est o no bien formado. Los mtodos de la clase deben preservar el invariante de representacin. Los invariantes de representacin son establecidos durante la construccin y continuamente se mantiene tras las llamadas a los mtodos pblicos.

22

2.2 Contribucin de Eiffel


El diseo de Eiffel est basado en la teora de la programacin orientada a objetos. El lenguaje tiene un soporte formal para tipos abstractos de datos. Bajo el correcto diseo de texto software se debe ser capaz de reproducir una documentacin para el diseo final del software a partir de la informacin de la implementacin que est formalizada para el tipo abstracto de dato.

23

2.3 Implementaciones y entornos


EiffelStudio es un entorno de desarrollo integrado (cdigo libre o licencias comerciales). Es un entorno orientado a objetos que usa tcnicas de interfaz de usurario como el pick-and-drop. EiffelEnvision es un pluggin para Microsoft Visual Studio, que permite a los usuarios editar ,compilar y depurar programas en Eiffel al usar Microsoft Visual Studio IDE.
24

2.3 Implementaciones y entornos

Existen dos implementaciones de cdigo libre:


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

2.4 Especificaciones y estndares

El lenguaje Eiffel es un estndar internacional de la ISO (International Organization for Standardization).

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

2.4 Especificaciones y estndares

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

2.4 Especificaciones y estndares

Bibliografa de especificacin del lenguaje Eiffel:

Bertrand Meyer: Eiffel: The Language, Prentice Hall, segunda edicin, 1992 (primera edicin: 1991)

Bertrand Meyer: Standard Eiffel, 1997.

Bertrand Meyer: Object-Oriented Software Construction, Prentice Hall: primera edicin, 1988; segunda edicin, 1997.

28

3.Cmo programar en Eiffel


29

3.Cmo programar en Eiffel


Un programa en Eiffel es un conjunto de clases. Pueden definirse conjuntos de clases denominados cluster. Estos conjuntos pueden subdividirse en subclusters anidados Las clases contienen features que son similares a los mtodos en otros lenguajes. En una clase se definen sus invariantes y contienen otras propiedades tales como las notes que es una seccin para incluir la documentacin. Los tipos de datos estndar son tambin clases. Todo sistema tiene una clase denominada root, que contendr un constructor llamado root procedure. Para ejecutar un programa en Eiffel se debe crear una instancia de la clase root y ejecutar su root procedure. 30

3.Cmo programar en Eiffel


Existen seis instrucciones bsicas en Eiffel: asignacin, creacin de objetos, llamada a rutinas, condicional y seleccin. Para facilitar la abstraccin de datos y el ocultamiento de informacin, Eiffel, igual que ocurra en SmallTalk no permite la asignacin entre variables de instancia de los objetos, sino que necesita de una interfaz para manejar los datos. El concepto de diseo por contrato es central en Eiffel, sus mecanismos estn muy integrados en el lenguaje. Las caractersticas del contrato se extienden por medio de la herencia.
31

3.1 Ejemplo de programa en Eiffel


class HELLO_WORLD create make feature make is do io.put_string (Hello World!) io.put_new_line end end
32

3.2 Descripcin de una clase


Una clase contiene un conjunto de feature (mtodos). Como las clases representan un conjunto de objetos, un feature es una operacin sobre estos objetos. Estas pueden ser de dos tipos:

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:

class C inherit A B ... Rest of class declaration ...

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

3.6 Clases y mtodos abstractos


Las clases pueden definirse como deferred class en lugar de como class para indicar que esas clases no pueden ser instanciadas. Es lo que en otros lenguajes se conoce como clases abstractas.

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

["Brigitte", 3.5, Anoche]


41

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

3.9 Bloques (agent)

Pueden ser utilizados para realizar iteraciones


Una_lista.do_all (agent accin)

Si queremos ejecutar las acciones solo para los elementos que cumplen una condicin
Una_lista.do_if (agent accin, agent condicin)

43

3.9 Bloques (agent)


En los ejemplos anteriores, accin y condicin son rutinas. Al poner la palabra agent delante se llama automticamente con los parmetros adecuados.

Si deseamos llamar a una rutina cualquiera, podemos hacerlo de 2 formas


a.call([args]) siendo a una rutina Directamente a ([args])

Los argumentos se pasan como una tupla

44

3.10 Mtodos una sola vez


(once routines)
Estos mtodos realizan los clculos una sola vez (en la primera llamada), y las dems veces que se invocan devuelven una referencia al resultado.

Para declarar estos mtodos utilizaremos la palabra once en lugar de do.

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

Eiffel proporciona, al igual que otros muchos lenguajes, mecanismos de conversin.

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

3.12 Manejo de excepciones

Se realiza a nivel de procedimientos.

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

3.12 Manejo de excepciones

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

La interpretacin de una operacin del tipo a+b es a.plus(b).

Para implementar un alias para una funcin se hace lo siguiente:


<func> alias <op> (<param>:<tipo>):<tipo_devuleto> ---declaracin normal de funcin--end

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

3.15 Lxico y sintaxis


Eiffel no es sensible a las maysculas Los comentarios de linea se indican con - -

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

class <nombre> inherit <clases> feature --declaraciones ... end


53

3.15 Interfaces para otras


herramientas y lenguajes

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

Você também pode gostar