Eiffel (linguagem de programação)

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Portal A Wikipédia possui o portal:

Eiffel é uma linguagem de programação puramente orientada a objeto, que implementa as teorias sobre a orientação a objeto de Bertrand Meyer.

Sendo Bertrand Meyer um teórico francês da orientação a objeto, o nome da linguagem obviamente é uma alusão à famosa Torre Eiffel, um dos símbolos de Paris e, portanto, da França.

Sendo este autor muito atento aos fundamentos teóricos, a linguagem de programação Eiffel tem, ao lado de muitas inovações polêmicas, um retorno aos clássicos. Especificamente, são usadas nela conceitos de linguagens muito mais antigas, como Simula 67 (a primeira linguagem de programação orientada a objeto) e CLU, linguagem de programação modular devida a Barbara Liskov, outra importante teórica de técnicas de projeto e programação de software.

Dados[editar | editar código-fonte]

Eiffel é uma linguagem orientada a objeto. Sua sintaxe é similar ao PASCAL e ALGOL. Algumas de suas características são: projeto por contrato, heranças multiplas, overload de operador e classes genéricas. Entende-se por projeto por contrato como uma forma de explicitar as condições de uso dos componentes (módulos) de programas e os resultados dos mesmos, estabelecendo prés e pós-condições que devem ser satisfeitas. Eiffel tem um tipo único de dados - todos os tipos são classes - então é possível criar subclasses de classes básicas como a classe "INTEGER". A linguagem se propõe a ser de uso geral, podendo ser usada para desenvolvimento de aplicações financeiras, indústria, sistemas de telecomunicações, etc.

Histórico[editar | editar código-fonte]

Adaptação do texto do site da Eiffel Software:

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. A tecnologia se espalhou rapidamente ao longo dos anos seguintes, com um histórico de sucesso em diversos projetos industriais nos EUA, Canadá, Europa e Extremo Oriente. Logo no início, Eiffel também atraiu a atenção da comunidade acadêmica como uma ferramenta ideal para o ensino de programação em todos os níveis. Várias universidades de todo o mundo a têm usado no ensino primário de linguagens de programação.

As sucessivas versões do ambiente surgiam em média de uma vez por ano. Eiffel tornou-se objeto de maior visibilidade com a publicação, em 1988, do livro Object-Oriented Software Construction pelo Dr. Bertrand Meyer, que rapidamente se tornou um best-seller e foi traduzido para oito línguas, o livro utiliza Eiffel para explicar e ilustrar os conceitos fundamentais de orientação a objeto e Design by Contract™.

A última iteração envolvendo a tecnologia original do Eiffel foi a versão 2.3, lançada em meados de 1990. A próxima versão, Eiffel 3, foi escrito inteiramente em Eiffel. Eiffel 3 apresenta o Melting Ice Technology para recompilação rápida, um ambiente gráfico com interface totalmente inovadora para o usuário, com base em conceitos e avanços consideráveis em bibliotecas (gráficos, rede ...) e otimização do código gerado. As primeiras versões foram lançadas em Unix e seguido pelo Linux, VMS, OS / 2, Windows (Windows 3.1, Windows 95, Windows NT),. NET, e Mac OS X.

Hoje, a tecnologia Eiffel continua a empurrar as fronteiras do desenvolvimento de software. Com a introdução do EiffelStudio ™, 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 ™, os programadores podem ainda usar o poder da linguagem Eiffel dentro do popular ambiente do Microsoft Visual Studio. NET.

Características[editar | editar código-fonte]

Eiffel não é case-sensitive. Além disso, o uso de um símbolo de fim-de-instruçao é opcional e deixado a critério do programador. Muitos programadores em Eiffel optam por omitir o ponto-e-vírgula exceto quando colocam mais de uma instrução numa linha. O fato dela nao ser case-sensitive favorece bastante a sua redigibilidade.

Simplicidade[editar | editar código-fonte]

Eiffel tem apenas seis instruções de execuçao básicas:

   * Atribuição
   * Criação de um objeto
   * Chamada de rotina
   * Condicional
   * Iteração
   * Escolha (case) 

Ao contrário de muitas outras linguagens O.O., 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. Qualquer modificação em outros objetos devem ser feitas através de seus respectivos métodos.

Compiladores para a linguagem Eiffel podem ser encontrados para diversos sistemas operacionais e plataformas de hardware, destacando-se as seguintes: PC: DOS, OS/2, Windows 3.1, Windows 95, Windows NT, PC Unix(Interactive, SCO, and ESIX), Nextstep, Linux Outras plataformas de Hardware: Sparc (SunOS & Solaris), NeXTStep, HP9000, DEC 5xxx, Sony News, DG Aviion, DEC Alpha OSF-1, DEC OpenVMS, RS6000, Pyramid, QNX, Silicon Graphics, Macintosh (Motorola& PowerPC).


Tipos[editar | editar código-fonte]

Só há um tipo de dado em Eiffel: a classe. Optando por essa metodologia, a linguagem tem uma alta ortogonalidade, favorecendo a legibilidade e redigibilidade, pois não há tantos critérios a serem aprendididos, para então ser escrito um código ou então ser feita a manutenção do mesmo. Toda modelagem de outros tipos de dados deve partir de uma classe. Todo código deve existir sob o contexto de uma classe. Ela é uma linguagem estaticamente tipada e todos os erros de tipos são verificados em tempo de compilação. Ela também é fortemente tipada. Eiffel tem um número de tipos básicos (algumas vezes chamados de "embedded types")embutidos. Estes tipos básicos incluem: BOOLEAN, CHARACTER, INTEGER, REAL. Uma operação de atribuiçao só é permitida se os tipos envolvidos sejam concordantes. Vamos explicar cmo se dá isso:

* Uma classe A é um ancestral da classe B se A e B são da mesma classe ou A é um ancestral
  de um pai de B.
* Uma classe B é um descendente da classe A se A é um ancestral de B. 

A Classe B concorda com a classe A se e somente se B é um descendente de A.

Tipos de Polimorfismo[editar | editar código-fonte]

Polimorfismo Universal Paramétrico[editar | editar código-fonte]

Uma função ou uma classe que siga o polimorfismo universal paramétrico tem um parâmetro de tipo (implícito ou explícito), que determina o tipo de argumento para cada aplicação dessa função /classe.

Exemplo:

class Complexo
creation
  initComplexo
feature
  parteReal, parteImag : REAL
feature
  initComplexo (r, i : REAL) is
do
  parteReal := r;
  parteImag := i;
end;

Referência ao objeto Complexo e a inicialização deste objeto:

 c1: Complexo;
 !!c1.initComplexo(2.4, -3.2);

Polimorfismo Universal por Inclusão[editar | editar código-fonte]

Um objeto pode ser visto como pertencendo a diferentes classes que não precisam ser disjuntas

class A
create make
feature
  make is do end
  metodo is do
    print("Classe A%N")
    end
end
class B inherit A
redefine  metodo end
create make
feature
  metodo is do
    print("Classe B%N")
    end
end

Referência aos objetos e inicialização deles

!!ca.make
!!cb.make
ca:=cb
ca.metodo

Será impresso Classe B

Sobrecarga[editar | editar código-fonte]

A linguagem Eiffel não suporta duas funções/métodos com o mesmo nome mas assinaturas diferentes.

Coerção[editar | editar código-fonte]

A linguagem Eiffel não permite que um argumento seja convertido para o tipo esperado por uma função, evitando assim um erro de tipo.

Projeto Por Contrato[editar | editar código-fonte]

Texto retirado do site da Eiffel Software:

" Um conceito revolucionário para se fazer softwares confiáveis, introduzido pela Eiffel e apenas implementada na Eiffel. A idéia básica é que para fazer software confiável não é suficiente ser "cuidadoso" e utilizar todo tipo de checagem ao longo do código. Uma abordagem mais sistemática é essencial. Através do conceito de projeto por contrato, você enxerga seu sistema como feito de um número de componentes complementares - as classes em Eiffel - 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 neceessita 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 pre-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[editar | editar código-fonte]

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[editar | editar código-fonte]

   *  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
         o Se for uma pré-condição, o cliente do método possui uma falha.
         o 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"[editar | editar código-fonte]

class HELLO_WORLD

create
 
   make

feature

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

     end

end

Bibliografia[editar | editar código-fonte]

  • MEYER, Bertrand. Eiffel the Language. Hemel Hempstead: Prentice Hall International(UK), 1992. 594 pp. ISBN 0-13-247925-7
  • WIENER, Richard. An Object-Oriented Introduction to Computer Science Using Eiffel. Upper Saddle River, New Jersey, EUA: Prentice Hall, 1996. 378 pp. ISBN 0-13-183872-5

Referências[editar | editar código-fonte]

  • Eiffel Software [1]
  • Projeto Por Contrato, David Déharbe, DIMAp/UFRN [2]
  • GabrielRocha - 17 Oct 2005 [3]
  • TWiki [4]
  • Trabalho acadêmico sobre Eiffel apresentado na disciplina de Linguagem de Programação na Escola Politécnica da USP [5]

Ligações externas[editar | editar código-fonte]

Ícone de esboço Este artigo sobre programação de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.