Linguagem Eiffel

Grupo responsável:

  • Juan Carlos Domingues Nachtigall

Eiffel

A linguagem Eiffel foi concebida pela Eiffel Software (então conhecida como ISE) em 1985, inicialmente como uma ferramenta interna para desenvolver diversas aplicações próprias. Os engenheiros de software da Eiffel necessitavam de um poderoso ambiente para integrar os modernos conceitos da engenharia de software e orientação a objetos e não havia simplesmente nada disponível. Por esta razão, o Dr. Bertrand Meyer, fundador da Eiffel Software, concebeu o compilador Eiffel 1. Ele foi apresentado ao público na primeira The International Conference on Object Oriented Programming, Systems, Languages and Applications (OOPSLA) em outubro de 1986, onde ele atraiu considerável atenção, levando o Dr. Meyer a divulgá-lo como um produto comercial, no final de 1986.
Hoje, a tecnologia Eiffel continua a empurrar as fronteiras do desenvolvimento de software. Com a introdução do EiffelStudio TM, os programadores podem tirar partido de uma IDE eficiente para alcançar a mais alta qualidade, robustez, escalabilidade de aplicações reutilizáveis – em todas as principais plataformas. Com EiffelEnvision TM, os programadores podem ainda usar o poder da linguagem Eiffel dentro do popular ambiente do Microsoft Visual Studio. NET.
Eiffel é uma Linguagem de Programação avançada, puramente orientada a objeto que enfatiza o projeto e construção de software reusável e de alta qualidade. Toda a estrutura da programação em Eiffel é baseada em classes, sua sintaxe é similar ao PASCAL e ALGOL.

Características

  • Linguagem puramente orientada a objetos;
  • Definição única de dados: a Classe;
  • Projeto por Contrato;
  • Gerenciamento de memória automática, normalmente implementado por coleta de lixo (garbage collection);
  • Herança, incluindo herança múltipla;
  • Tipagem Estática (em tempo de compilação);
  • Separador-livre, a medida em que pontos e vírgulas são opcionais;
  • Não é case sensitive (não diferencia maiúsculas de minúsculas), favorece bastante a sua redigibilidade.
  • Eiffel tem apenas seis instruções de execução básicas:
    • Atribuição
    • Criação de um objeto
    • Chamada de rotina
    • Condicional
    • Iteração
    • Escolha (case)

Ao contrário de muitas outras linguagens Orientada Objeto, mas similar ao SmallTalk, Eiffel não permite modificar campos de objetos que não sejam do objeto atual. O mesmo ocorre com variáveis locais da rotina atual. Quaisquer modificações em outros objetos devem ser feitas através de seus respectivos métodos.

Sintaxe

A sintaxe e a estrutura da linguagem propõem-se a ser clara e simples, fácil de aprender, ler, escrever e manter; favorecendo o compartilhamento e reuso. A linguagem Eiffel evita o uso de símbolos e sinais que possam atrapalhar o entendimento do código.
A sintaxe Eiffel é um conjunto de regras que descrevem a estrutura textual das classes. Um sistema ou programa Eiffel é um coleção de classes. Acima do nível de classes, Eiffel define cluster, que são essencialmente um grupo de classes e, possivelmente, de subclusters (clusters aninhados). Os clusters não são uma construção sintática da linguagem, mas sim um padrão organizacional. Tipicamente uma aplicação Eiffel será organizada com cada classe em um arquivo separado, e cada cluster em um diretório que contém arquivos de classe. Nesta organização, os subclusters são subdiretórios. Por exemplo, pelo padrão organizacional, X é um nome de um arquivo que define uma classe denominada X.
Uma classe Eiffel contém funcionalidades, que são similares aos “membros”, “atributos” ou “métodos” de outras linguagens de programação orientadas a objeto. E contém outras propriedades, tais como uma seção de “notas” para documentação e metadados. Os tipos de dados em Eiffel são todos definidos por uma classe, tais como a INTEGER, STRING e ARRAY, etc.
Cada sistema deverá ter uma classe designada como “raiz”, com um procedimento de criação chamada de “procedimento raiz”. Executar um sistema consiste em criar uma instância da classe raiz e executar seu procedimento raiz. Geralmente, isso cria novos objetos, chamadas de novas funcionalidades, e assim por diante.

Palavras Reservadas

As palavras reservadas presentes na linguagem Eiffel são:

agent class elseif from local or select Void
alias convert end frozen loop Precursor separate when
all create ensure if not redefine then xor
and Current expanded implies note rename True
as debug export inherit obsolete require TUPLE
assign deferred external inspect old rescue undefine
attribute do False invariant once Result until
check else feature like only retry variant

Projeto por Contratos

Um método de construção de software que projeta os componentes de um sistema para que eles cooperem com base precisamente definido por contratos. Através do conceito de projeto por contrato, você enxerga seu sistema como feito de um número de componentes complementares os quais cooperam baseados em declarações precisas de obrigações e benefícios mútuos: contratos, assim como contratos entre cliente e empresa. Eiffel obriga diretamente o projeto por contrato através de construções como class invariants , pré-condições e pós-condições.
Admita por exemplo, que nós queremos que nossos contadores sejam sempre não negativos. A classe terá agora uma invariante:

indexing ... class
      COUNTER
 feature
        ...
 invariant
      item >=0
 end

E a feature decremento agora necessita de uma pré-condição, para certificar-se de que o cliente não realiza uma operação ilegal. A palavra-chave require inicia a pré-condição.

decrement is 
      -- Decrease counter by one
require 
      item > 0
do
      item := item -1
ensure
      item= old item -1
end
-- old "item" representa o valor de "item" antes do método ser chamado.

A palavra-chave ensure inicia a pós-condição.
A pré-condição diz ao cliente:

  • “Nem pense em me chamar se não tiver absoluta certeza de que counter é estritamente positivo”

A pós-condição diz:

  • “Se você for um bom garoto (cumpriu a pré-condição), aqui está o que eu prometo fazer para você quando retornar: eu irei decrementar counter em uma unidade.”

Pré-condições, pós-condições e invariantes são chamadas asserções. “

Asserções

Segundo a Sun: “Uma asserção é um comando contendo uma expressão booleana que o programador acredita ser verdadeira no momento que o comando é executado”. Ou seja, a asserção é um recurso da linguagem para testar as suposições feitas pelo programador dentro do código.

Verificação de Asserções:

  • Asserções como pré e pós-condições tem um primeiro papel de documentar o método.
  • A verificação de asserções pode ser habilitada em tempo de execução.
  • Se uma asserção não é satisfeita, então:
    • Se for uma pré-condição, o cliente do método possui uma falha.
    • Se for uma pós-condição, o método provedor é falho.

A asserção favorece em muito a confiabilidade de um programa, devido as suas prés e pós-condições.

Hello World

Um exemplo de um código “Hello World” na linguagem Eiffel.

class HELLO_WORLD

create
 
   make

feature

   make is
   
     do 
        
       io.put_strring("Hello World!%N")

     end

end

Exemplo

Um exemplo onde lê-se um número inteiro e exibe a raiz quadrada, o quadrado e o fatorial.

class

   APPLICATION

inherit

   ARGUMENTS

create

make

feature {NONE} — Initialization

   a, b, c, d: INTEGER

make

– Run application.

   do

   –| Add your code here

      io.putstring (“Digite um número: “)

      io.readint

      a := io.lastint

      b := sqrt(a)

      io.putstring (“Raiz quadrada: “)

      io.putint (b)

      c := exp(a,2)
      
      io.putstring (“Exponenciação: “)

      io.putint (c)

      d := FATORIAL(a)

      io.putstring (“Fatorial: “)

      io.putint (d)

   end

end

class

   FATORIAL

feature {NONE} — Implementation

   FATORIAL (n: INTEGER): INTEGER is

   do

      if n = 1 then Result := 1

      else Result := n * FATORIAL(n – 1)

   end

end — fatorial

end

Bibliografia

 
eiffel-1-trabalho.txt · Last modified: 2012/03/22 16:51 by clp · [Old revisions]