Paradigmas de linguagens computacionais bruno edson martins de albuquerque filho marcelo rodrigues nunes mendes
Recife, 20 de maio de 2004. OBJECT PASCAL 1. Introdução
2. Origem 2.1 Pascal e Object Pascal
4.1 Estrutura Geral de uma Unit
4.2 A RTL e a biblioteca de classes do Delphi
4.3 Um exemplo de programa em Delphi
Arquivo AbstractAnimals.dpr
PARADIGMAS DE LINGUAGENS COMPUTACIONAIS
PABLO DE SANTANA BARBOSA
Trabalho apresentado sobre a história e características da linguagem Object Pascal aos professores Hermano Perrelli e Luis Menezes.
Recife, 20 de maio de 2004.
Nas páginas a seguir descreveremos resumidamente a linguagem Object Pascal. Não poderíamos, no entanto, deixar de falar um pouco sobre o ambiente de desenvolvimento integrado (IDE) Delphi. Como veremos no restante deste artigo, há uma relação muito estreita entre essa linguagem e o IDE. O nosso objetivo aqui é dar uma visão geral dessa linguagem, procurando dar ênfase nas origens dela. O artigo começa com a descrição da origem da linguagem Object Pascal (e do Delphi). A seguir veremos características que tornam essa linguagem tão diferente da conhecida linguagem estruturada Pascal. Depois falaremos sobre a especificação e a utilização da Object Pascal.
Pascal foi definida em 1970 pelo Prof. Niklaus Wirth do Swiss Federal Institute of Technology (Zurich), como extensão do ALGOL (linguagem de programação voltada para computação científica). Em um congresso em Zurich, um comitê internacional designou o ALGOL como uma linguagem independente de plataforma. Isto deu mais liberdade para as características que eles poderiam colocar na linguagem, mas também tornou mais difícil a escrita de compiladores para ela. A carência de compiladores em muitas plataformas, combinada com sua carência de ponteiros e muitos tipos de dados básicos tais como caracteres, fez com que ALGOL não fosse amplamente aceito, o que fez com que essa linguagem acabasse quase totalmente abandonada, exceto como linguagem para descrição de algoritmos.
A especificação formal de Pascal foi publicada em 1971. O nome da linguagem foi dado em homenagem ao filósofo e matemático francês Blaise Pascal que inventou uma máquina de calcular mecânica. Pascal é bastante orientado a dados, dando ao programador a capacidade de definir tipos de dados personalizados. Com esta liberdade veio a rígida checagem de tipos, que garantiu que tipos não se misturariam. Pascal pretendia ser uma linguagem educacional, e foi amplamente adotada como tal. Pascal é de escrita mais livre, diferente de FORTRAN, assim os estudantes não tinham que se preocupar com formatação. Além disso, Pascal se parece muito com uma linguagem natural, tornando muito fácil o entendimento do código escrito com ele.
Object Pascal é a extensão orientada a objetos da linguagem Pascal que foi desenvolvida pela Apple em parceria com Wirth, inventor de Pascal. Ela descende de uma tentativa anterior de produzir uma versão orientada a objetos de Pascal, chamada ClasCal, que foi inicialmente utilizada nos computadores Lisa da Apple. Na realidade existiram poucas modificações na sintaxe de Object Pascal em relação a Pascal. Um novo tipo de dados foi adicionado, o objeto. Em adição, É possível especificar uma lista de procedimentos e funções, referenciados como métodos, para um tipo de objeto particular. Estes métodos definem as ações que aquele objeto deste tipo pode realizar. Como adiantamos na introdução essa linguagem tem uma estreita relação com o IDE Delphi, entenderemos como isso ocorre na próximo seção onde descreveremos de maneira breve a história da evolução do Turbo Pascal ao Delphi.
Com o lançamento, em novembro de 1983, do Turbo Pascal 1.0, a Borland iniciou sua jornada no mundo das Ferramentas e ambientes de desenvolvimento. Na criação do Turbo Pascal a Borland licenciou um núcleo de compilador, desenvolvido por Anders Hejlsberg, mais rápido e barato que os existentes na época. Turbo Pascal introduziu um ambiente de desenvolvimento integrado (IDE), onde era possível editar o código, executar o compilador, observar os erros e voltar para as linhas que contém esses erros. O compilador Turbo Pascal foi um dos mais vendidos em todos tempos, o que tornou a linguagem popular em PC's.
Delphi foi uma proposta da Borland para uma nova geração de ambiente de desenvolvimento visual para Windows, baseado na linguem de programação Object Pascal. Após o desenvolvimento de Turbo Pascal 1.0, Anders se tornou o arquiteto de todas as versões do compilador Turbo Pascal e das primeiras três versões de Delphi. Como arquiteto chefe da Borland, Hejlsberg secretamente tornou Turbo Pascal numa aplicação de desenvolvimento de linguagem orientada a objeto, completa e com um ambiente realmente visual com suporte para acesso a banco de dados, assim se originou o Delphi.
Tudo começou com a primeira versão do Delphi. Na época, a estratégia baseada em formulários e orientada a objetos, o compilador extremamente rápido, o ótimo suporte a banco de dados, a íntima integração com a programação Windows e a tecnologia de componentes atraíram a atenção da comunidade de desenvolvedores de software. O elemento, mais importante desse produto, no entanto, era a sua linguagem, Object Pascal, a fundação de todo o resto. O Delphi 2 apresentou novas características, como: objetos de múltiplos registros, suporte à automação OLE, o tipo de dados variante, um suporte e uma integração melhores com o Windows 95, o tipo de dados string longa e a herança visual de formulários. O Delphi 3 incluiu a tecnologia de visão de código, o suporte à depuração DLL, os modelos de componentes, o TeeChart, o Decision Cube, a tecnologia WebBroker, os pacotes de componentes, os ActiveForms e uma grande integração com o COM. O Delphi 4 incluiu o editor AppBrowser, novos recursos do Windows 98, melhor suporte a OLE e COM, componentes de bancos de dados estendidos e muitas adições e melhorias nas classes básicas da VCL. O Delphi 5 incluiu mais aperfeiçoamentos ao IDE, suporte estendido a bancos de dados (com os conjuntos de dados específicos ADO e Interbase), uma versão melhorada do MIDAS com suporte à Internet, a ferramenta de controle de versão TeamSource, capacidades de conversão, o conceito de quadros e componentes novos. O Delphi 6 adicionou todo esse suporte a recursos para o desenvolvimento independente de plataforma com a CLX, uma biblioteca de tempo de execução estendida, o mecanismo de bancos de dados dbExpress, serviços da Web, mais aperfeiçoamentos no IDE e muitas classes e componentes. Por fim, chegamos ao Delphi 7. Essa versão tornou mais robustas algumas dessas novas tecnologias com aperfeiçoamentos e correções (como por exemplo, no SOAP e no DataSnap) além de oferecer suporte a tecnologias mais recentes (como os temas do Windows XP e UDDI). Outra novidade é o fato de pela primeira vez, a Borland fornecer um compilador que não vise o processador Intel, mas sim a plataforma CIL do .NET.
Como podemos ver, o Delphi possui muitos recursos, e apesar de ser uma ótima ferramenta e, até certo ponto, simples de usar, trata-se de um ambiente complexo de programação que envolve muitos elementos. O leitor iniciante pode até ficar assustado com tantas siglas e tantas tecnologias envolvidas. No entanto, no restante do texto, procuramos fazer uma introdução às principais características da programação Delphi, focando principalmente na orientação a objetos. Para maiores detalhes, consultar as referências no final desse artigo.
A linguagem Object Pascal possui muitas semelhanças com a linguagem Pascal. Basicamente a estrutura básica da sintaxe não foi modificada. No entanto, há uma mudança radical no paradigma da linguagem Object Pascal: A essa linguagem foram acrescentadas características orientadas a objeto que mudam radicalmente o estilo de programação. Aqui serão analisadas justamente essas novas características. Não será, portanto, discutido nesse documento a parte básica da linguagem, vinda de Pascal.
Podemos citar as seguintes características como as mais importantes extensões que foram acrescentadas à linguagem Pascal para obter a linguagem Object Pascal:
Definição de novos tipos por meio das palavras reservadas type e class.
Encapsulamento – É obtido usando os modificadores de acesso: public, protected e private. Outro recurso poderoso que a linguagem apresenta para a obtenção de encapsulamento são as propriedades.
Polimorfismo (Dynamic Binding) – o método a ser chamado é conhecido apenas em tempo de execução, dependendo do tipo do objeto para o qual o método foi chamado. Obtemos polimorfismo com o uso das palavras reservadas virtual (ou dynamic) e override.
Métodos abstratos. Uma característica interessante de Object Pascal é que, ao contrário da maioria das outras linguagens orientadas a objeto, é permitido criar instâncias de classes com métodos abstratos (embora não seja permitido chamar tais métodos, o que geraria uma exceção).
Exceções – O mecanismo de exceções de Object Pascal baseia-se em quatro palavras reservadas: try, except, finally, raise.
Suporte a Multithreading.
Aplicações em Delphi são compostas por um arquivo de projeto (.DPR), Forms e Units. Um Form é uma janela na qual podem ser acrescentados componentes de interface gráfica. Uma Unit é um arquivo do tipos .PAS, que guarda o código das Forms ou a definição de tipos e funções.
Uma Unit se divide em duas seções:
- Seção de Interface: aqui estão variáveis e definições de tipos. Essa é a parte visível da Unit às outras Units. Tipos definidos aqui podem ser usados em qualquer outra Unit que a utilize (por meio da cláusula 'uses').
- Seção de Implementação: Essa seção só é acessada de dentro da própria Unit. Nela estão as definições (implementações) das funções e procedimentos declarados na seção de interface.
*obs. Em Object Pascal duas ou mais classes podem ser definidas na mesma Unit. Como os especificadores de acesso restringem o acesso apenas a código fora da Unit, se mais de uma classe for definida na mesma Unit, uma poderá acessar livremente a implementação da outra, independentemente dos modificadores de acesso.
Muitos recursos que os programadores Delphi têm à sua disposição vêm da RTL (Run Time Library – Biblioteca de Tempo de Execução) da linguagem Object Pascal. Essa biblioteca contém uma série de funções úteis agrupadas em Units.
O real poder da programação visual do Delphi, no entanto, está na sua enorme biblioteca de classes. Nela encontramos centenas de classes, com milhares de métodos. Essas classes podem ser usadas diretamente no código pelo programador ou implicitamente, no projetista visual de formulários. Hoje, a biblioteca está dividida em RTL, mencionada anteriormente, que contém classes e componentes não visuais, VCL (Visual Component Library), que abriga os componentes visuais clássicos do Windows e a CLX (Component Library for Cross-Platform), que contém componentes para várias plataformas.
O exemplo a seguir foi tirado do site http://www.marcocantu.com/md7/default.htm. Esse é o site de um dos livros que foi usado como referência na construção desse artigo. Nele você poderá encontrar todos os exemplos desse livro. Escolhemos esse exemplo, por ser simples, mas ao mesmo tempo demonstrar, dentre outros, os conceitos de polimorfismo e herança. O programa é composto basicamente de quatro arquivos: o arquivo de projeto (.DPR), o arquivo de definição de tipos (.PAS) e os arquivos de definição do Form (.PAS e .DFM). Só mostraremos dois deles que descrevem bem o que queremos mostrar. O exemplo completo é fornecido em anexo.
// Arquivo AbstractAnimals.dpr
program AbstractAnimals;
AnimF in 'AnimF.pas' {FormAnimals},
Anim in 'Anim.pas';
Application.CreateForm(TFormAnimals, FormAnimals);
// Arquivo Anim.pas
function GetKind: string;
TDog = class (TAnimal) // Herança
function Eat: string; virtual;
TCat = class (TAnimal) // Herança
constructor TAnimal.Create;
Kind := 'An animal';
function TAnimal.GetKind: string;
GetKind := Kind;
constructor TDog.Create;
Kind := 'A dog';
Voice := 'Arf Arf';
PlaySound ('dog.wav', 0, snd_Async);
function TDog.Eat: string;
Eat := 'A bone, please!';
constructor TCat.Create;
Kind := 'A cat';
Voice := 'Mieow';
PlaySound ('cat.wav', 0, snd_Async);
function TCat.Eat: string;
Eat := 'A mouse, please!';
*Vale ressaltar o fato mencionado anteriormente de que, ao chamar um método abstrato, (nesse caso voice da classe TAnimal) ocorrerá uma exceção.
Object Pascal é utilizado em dois ambientes de desenvolvimento, Delphi, para o sistema operacional Windows e Kylix, para Unix e nestes ambientes é possível desenvolver aplicações que necessitem da orientação a objetos.
No ambiente Delphi, por ser baseada em formulários, compilável, suportar acesso a banco de dados e conter várias bibliotecas na plataforma Windows, que é a mais utilizada, torna-se mais simples desenvolver aplicações que possuam interface gráfica com usuário (GUI – Grafic User Interface). Dessa forma, é utilizada, dentre outras, em aplicações em desktop, na web e principalmente em banco de dados.