Linguagem Eiffel

Histórico, sintaxe, semântica, tipos, estrutura de controle e exemplos.

Archive for abril 2009

Histórico

leave a comment »

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 ContractTM.

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 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.

Anúncios

Written by maxdangelo

21/04/2009 at 12:00

Publicado em Eiffel

Tagged with ,

Paradigma

leave a comment »

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.

Tabela comparativa – Paradigma

Smalltalk Java Eiffel
Puramente orientada a objetos Orientada a objeto, mas com estruturas primitivas Puramente orientada a objetos

Written by maxdangelo

21/04/2009 at 11:59

Publicado em Eiffel

Tagged with , ,

Sintaxe

leave a comment »

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.

Eiffel separa os desenvolvedores dos hackers. A linguagem Eiffel não tem cantos escuros para ser explorado. Não existem “gurus em Eiffel”. Pode-se aprender a língua em poucas horas, e dominá-la em poucos dias. Dentro de uma semana, o ato de codificação em Eiffel se torna automático como o ato de escrever, e de repente se deixou de pensar em “programação” como sendo “a arte negra de convencer um compilador para transformar o seu código no objeto desejado”.

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.e é 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.

Written by maxdangelo

21/04/2009 at 11:58

Publicado em Eiffel

Tagged with

Estrutura de dados

leave a comment »

Classe Array

A classe ARRAY no Eiffel é um recipiente ou uma estrutura de dados que permite que muitos objetos do mesmo tipo possam ser armazenados e recuperados da estrutura de dados (array). Um elemento de um array é indexado pela sua posição na matriz.

exemplo de array com números reais

exemplo de array com números reais

Aqui se tem um pequeno exemplo de como fica o código Eiffel para definir um array e qual o efeito sobre a estrutura de dados.

efeito sobre o array

efeito sobre o array

Classe Linked_List

Para utilizar uma estrutura de dados em lista encadeada em Eiffel, basta utilizar-se da classe LINKED_LIST. A lista usa um cursor para apontar para o elemento corrente na lista.

O cursor pode mover-se para frente e para trás na lista, assim ele pode ser usado para fazer a varredura da lista. Para saber se um elemento está na lista, por exemplo, o cursor é definido para o início da lista, e vai sendo movido para frente, item por item, até que o item desejado seja encontrado ou o final da lista seja atingido.

Uma lista em Eiffel é um objeto com um estado interno, o estado é definido pelo conteúdo da lista em si, e pela posição do cursor.

lista encadeada em Eiffel

lista encadeada em Eiffel

A classe possui comandos para alterar a posição do cursor, e consultas para descobrir onde ele está. Existem comandos para alterar um elemento da lista da posição atual do cursor, e consultas para verificar o valor encontrado. As rotinas que mudam ou retornam elementos da lista usam a posição atual do cursor ou o elemento imediatamente anterior ou posterior a posição atual do cursor. Há também recursos para combinar ou separar um conjunto de listas de objetos.

operações com lista

operações com lista

As principais funções da classe LINKED_LIST é mostrada abaixo. Existem três tipos de recursos: os que tratam da própria lista, com o cursor, e com os elementos da lista.

Lista

make cria uma lista vazia
count: INTEGER retorna o número de elementos da lista
merge_left (other: like Current) adiciona a lista other a esquerda do cursor
merge_right (other: like Current) adiciona a lista other a direita do cursor
wipe_out remove todos os elementos da lista

—————————————————————————————————–

Cursor

forth move o cursor uma posição pra frente
back move o cursor uma posição pra trás
start move o cursor para a primeira posição
finish move o cursor para a última posição
go_i_th (i: INTEGER) move o cursor para a posição i na lista
isfirst: BOOLEAN o cursor está na primeira posição?
islast: BOOLEAN o cursor está na última posição?

—————————————————————————————————–

Elementos

item: G elemento atual
first: like item primeiro elemento
last: like item ultimo elemento
previous: like item elemento anterior
next: like item próximo elemento
put (v: like item) insere o valor na posição atual
put_left (v: like item) insere o valor na posição anterior
put_right (v: like item) insere o valor na posição posterior
remove remove o valor da posição atual do cursor
remove_left remove o valor da posição anterior ao cursor
remove_right remove o valor da posição posterior ao cursor

Written by maxdangelo

21/04/2009 at 11:57

Subprogramas, parâmetros, concorrência, exceções

leave a comment »

Assim como em Smalltalk os subprogramas de Eiffel são métodos implementados em classes e submetidos a todas as regras a que essa é submetida.

Já os parâmetros são passados por valor ou referência constituindo uma lista de argumentos advinda do programa chamador

Concorrência é implementada por bibliotecas para networking e threading, como EiffelNet e EiffelThreads, através da implementação de semáforos.

Finalmente, as exceções são tratadas por cláusulas, a saber:

  • Rescue, Que permite ao programador tratar a exceção com uma mensagem por exemplo
  • Retry, que permite ao programador avaliar a exceção e, caso seja possível, efetuar a correção e chamar novamente o código problemático.

Tabela comparativa – Subprogramas, parâmetros, concorrência, exceções

Smalltalk Java Eiffel
Subprogramas Métodos implementados em classes Métodos implementados em classes
Parâmetros Passagem por valor e referência 2 tipos de Parâmetro: Formais e Reais;

Não há passagem por referência, apenas por valor

Os dados são passados do chamador para a rotina chamada através de uma lista de argumentos.
Concorrência Suportada através de classes padrão com uso de semáforos Monitor

Lock

Semáforo

Um certo número de bibliotecas para networking and threading estão disponíveis, tais como EiffelNet e EiffelThreads.
Exceções Seis ações padrão para tratamento, a saber: return, retry, retryUsing, pass (default), resume, outer exceções são classes derivadas da classe Exception, são lançadas pelo comando throw e são tratadas pela estrutura try-catch-finally Possui as cláusulas RESCUE e RETRY para tratamento de exceções.

Written by maxdangelo

21/04/2009 at 11:40

Aplicações

leave a comment »

Eiffel é uma linguagem que não se restringe a um tipo de aplicação. Sendo utilizado para desenvolvimento em diversos setores (indústrias, financeiros, tecnologia e educacionais). Aplicações embarcadas também são cobertas pela linguagem Eiffel, principalmente pela característica multi-plataforma da linguagem.

Alguns exemplos bem sucedidos da utilização da linguagem Eiffel:

  • Software de simulação para o programa antimísseis do departamento nacional de defesa americano.
  • Soluções para empresa de armazenamento de dados high-end.
  • Aplicações comerciais para pequenas empresas.
  • Sistemas ERP e CRM desenvolvidos em Eiffel.
  • Sistemas de automação para indústria química.

Tabela comparativa – Aplicações

Smalltalk Java Eiffel
Gerenciamento de arquivos, desenho de pontes, chat, aplicações em bolsa, web browser Dispositivos Pequenos e Móveis:

Java ME (Micro Edition) -celulares, PDA

Java Card  – Smartcard

Java FX – Prox. geração de aplicativos Internet

Java TV – Serviço de TV Interativa

Desktops:

Java SE (Standard Edition) – Plataformas Macintosh, Linux, Windows

Médios e Grandes Negócios:

Java EE (Enterprise Edition) –

Servidores e Desktops; aplicações móveis s/fio e fixas. Aplicativos de Vendas, Supply Chain, serviços, etc.

Eiffel é uma linguagem que não se restringe a um tipo de aplicação. Sendo utilizado para desenvolvimento em diversos setores (indústrias, financeiros, tecnologia e educacionais). Aplicações embarcadas também são cobertas pela linguagem Eiffel, principalmente pela característica multi-plataforma da linguagem.

Written by maxdangelo

21/04/2009 at 11:31

Publicado em Eiffel

Tagged with , ,

Exemplo

leave a comment »

Este é um exemplo clássico 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

Written by maxdangelo

21/04/2009 at 11:30

Publicado em Eiffel

Tagged with , , ,