Application Frameworks

Chama-se de application framework a um conjunto de bibliotecas (coleções de sub programas utilizadas para o desenvolvimento de “software”) ou classes (coleções de tipos encapsulados de variáveis e tipos de métodos) usadas para implementar a estrutura padrão de uma aplicação para um dado sistema operacional. A vantagem de seu emprego é o agrupamento de grande quantidade de código reusável o que economiza o esforço de reescrever código padrão a cada nova aplicação. Os application framework apresentaram grande popularidade com o advento das interfaces gráficas para o usuário (GUI) que tendem a padronizar a estrutura das aplicações. É muito mais simples usar ferramentas automáticas para a criação de GUI quando um application framework padrão é adotado.
A implementação dos application framework é feita por programação orientada a objeto e assim o código específico de cada aplicação pode utilizar a herança das classes existentes no application framework.

O application framework Microsoft para Windows é o Microsoft Foundation Classes (MFC) que foi criado em 1992 inspirado no Think Class Library (TCL) do Macintosh. Na mesma época a Borland desenvolveu o Object Windows Library (OWL) que depois foi descontinuado em favor do Visual Component Library (VCL).
A linguagem Java foi liberada em 1995. Sua biblioteca de GUI foi denominada Abstract Window Toolkit (AWT). Em 1997 foi liberada a Java Foundation Classes (JFC) que incorporou (em 1998) a interface Swing inspirada na Internet Foundation Classes, da Netscape.

Application Framework de Bruno Preiss

Na criação de programas utilizando os padrões de orientação a objetos, tais como o application framework de Bruno Preiss, sugere-se criar Projetos com a seguinte composição:
1. Um diretório (ou "package") com estruturas dos fundamentos da hierarquia de classes e padrões de projeto
2. Um diretório com a definição dos dados a serem processados
3. Um diretório (ou "package") com as estruturas de dados a utilizar (pilha, fila, lista, árvore, grafo, etc.)
4. Um diretório com a aplicação ou programa principal

Assim fazendo o diretório das estruturas dos fundamentos é único e reaproveitado sempre, os diretórios das estruturas de dados são um para cada estrutura de dados escolhida (na verdade são duas versões para cada estrutura podendo haver a implementação por “arrays” e a implementação por listas encadeadas). Para cada novo problema ou aplicação basta fazer a definição dos dados e o programa principal pois todo o resto já está pronto.
Para utilizar a hierarquia de classes e os padrões de projeto de Bruno Preiss pode-se criar um diretório (ou “package”) com os fontes obtidos do sítio do autor. Como os arquivos disponibilizados são divididos por funções algumas vezes é preciso agrupar vários arquivos do autor para criar um arquivo a ser compilado. É preciso também cuidar das extensões de arquivos. No sítio Java de Bruno Preiss todos os arquivos estão com extensão .txt e precisam ser modificados para .java. No sítio C++ todos arquivos estão com extensão .cpp e os arquivos de cabeçalho precisam ser do tipo .h havendo necessidade de separar os arquivos .h e .cpp. Deve-se lembrar que classes definidas por templates toda a definição fica no arquivo .h.
Os sítios de Bruno Preiss para C++e Java, respectivamente, são
http://www.pads.uwaterloo.ca/Bruno.Preiss/books/opus4/programs/ e http://www.pads.uwaterloo.ca/Bruno.Preiss/books/opus5/programs/

Arquivo Fonte de Bruno Preiss

LinkedList.java

pgm04_13.txt até pgm04_22.txt

Comparable.java

pgm05_01.txt

AbstractObject.java

pgm05_02.txt; pgm05_03.txt

Chr.java

pgm05_04.txt

Int.java

pgm05_05.txt; pgm08_01.txt

Dbl.java

pgm05_06.txt

Str.java

pgm05_07.txt

Container.java

pgm05_08.txt

AbstractContainer.java

pgm05_09.txt; pgm05_12.txt; pgm08_04.txt

Visitor.java

pgm05_10.txt

AbstractVisitor.java

pgm05_11.txt

Enumeration.java

pgm05_13.txt

SearchableContainer.java

pgm05_14.txt

AbstractSearchableContainer.java

pgm05_15.txt

Association.java

pgm05_16.txt; pgm05_17.txt; pgm05_18.txt

 

Arquivo Fonte de Bruno Preiss
Object.h pgm05_01.cpp
Object.cpp pgm05_02.cpp; pgm05_03.cpp
NullObject.h pgm05_04.cpp
NullObject.cpp pgm05_05.cpp
Wrapper.h pgm05_06.cpp
Wrapper.cpp pgm05_07.cpp
Container.h pgm05_09.cpp
Container.cpp pgm05_10.cpp
Visitor.h pgm05_11.cpp
PutingVisitor.cpp pgm05_12.cpp
Iterator.h pgm05_13.cpp
Ownership.h pgm05_17.cpp
SearchableContainer.h pgm05_21.cpp
Array.h pgm04_01.cpp
LinkedList.h pgm04_09.cpp até pgm04_10.cpp
HashTable.h pgm08_07.cpp
HashTable.cpp pgm08_08.cpp


Para o primeiro trabalho do Curso de Estruturas de Dados I sugere-se usar uma definição de dados como a que se segue:

  1. Para C++ usar os arquivos DataArea.h e DataArea.cpp
  2. Para Java usar o arquivo DataArea.java

Os programas principais poderiam ser feitos da forma que se segue.

  1. Para C++ usar um arquivo como o do exemplo de pilhas sobre "arrays em C++
  2. Para Java usar um arquivo como o do exemplo de pilhas sobre "arrays" em Java