CONEXÕES DE SABERES
Amirton Chagas – abc@cin.ufpe.br
Paola Accioly – prga@cin.ufpe.br
http://www.cin.ufpe.br/~abc/TAES
O PROGRAMA CONEXÕES DE SABERES

O Conexões de Saberes oferece a jovens
universitários
de
origem
popular
a
possibilidade de desenvolver a capacidade de
produzir conhecimentos científicos



Criar capacidade de intervir em seu território de
origem.
Possibilita a avaliação dos estudantes sobre o
impacto das políticas públicas desenvolvidas em
espaços populares.
Os participantes do programa recebem apoio
financeiro e metodológico.
2
O PROGRAMA CONEXÕES DE SABERES



Está implementado em diversas universidades do
país, se adequando à realidade e as necessidades
locais de cada instituição.
Necessita de um sistema para gerenciar o seu
funcionamento
Não é necessário um sistema completamente
diferente para cada universidade. Apesar das
diferenças em cada local, existe uma vasta base
comum a todas as instituições

Possibilidade de criar uma Linha de Produtos de
software para atender as necessidades específicas de
cada instituição
3
VARIAÇÕES ESCOLHIDAS


Os pontos de variação mais adequados ao estudo que
nos propomos são a Interface Gráfica e as classes que
envolvem Atividades
De acordo com a instituição, existe ou
necessidade de armazenar dados relativos a:



não
a
Carga Horária da atividade
Faixa etária dos participantes
Código do projeto ao qual a atividade está vinculada

A necessidade das instituições em torno dos dados
acima variam desde “nenhum deles” até “todos eles”.

Algumas instituições possuem Atividades de Formação e
de Lazer, outras, apenas Atividades de Formação.
4
VARIAÇÃO 1 – INTERFACE GRÁFICA:
CADASTRAR ATIVIDADE

Técnicas:
 Compilação Condicional
A própria classe contém o
código de geração dos
campos e é injetado nela
também todo o código
para mostrá-los ou não.
 Refactor: Agrupou-se o
código de criação dos
campos para cada variação


Parametrização por
Arquivos de Propriedade
Semelhante à CC, no
entanto, pode ser mudado
em runtime e não necessita
em Java de ferramentas ou
plug-ins não-nativos
 Mesmo refactor de CC

5
VARIAÇÃO 1 – INTERFACE GRÁFICA:
CADASTRAR ATIVIDADE

Orientação a Aspectos
A definição de que se deve adicionar ou não os campos
fica em arquivos separados, um para cada variação.
 Código da classe fica muito mais limpo e legível.
 Refactor: O código de criação dos componentes foi
migrado da classe para os respectivos aspectos.

VARIAÇÃO 1 – INTERFACE GRÁFICA:
CADASTRAR ATIVIDADE

Mixins
Cria-se classes com cada variação menor herdando da
classe já existente
 Para os casos de necessidade de usar mais de uma das
variações menores, cria-se uma classe com herança
múltipla das classes previamente criadas.
 Refactor: O código de criação dos componentes foi
migrado da superclasse para as respectivas subclasses.

VARIAÇÃO 1 – INTERFACE GRÁFICA:
CADASTRAR ATIVIDADE

Polimorfismo de Subtipo
Cria-se uma subclasse da superclasse para cada
variação, com todo o código necessário nela
 Duplicação de código 
 Para a escolha de qual classe usar, pode-se usar PFP,
CC, makefiles... Nossa escolha: CC

VARIAÇÃO 1 – INTERFACE GRÁFICA:
CADASTRAR ATIVIDADE

Técnicas não usadas:

Componentes


PPP


Não faria sentido usar PPP (Generics) no nosso caso, para a
escolha de qual modelo de tela seria usado, apesar de ser
possível implementar usando esta técnica
CGT


O projeto não possui implementação de containers OSGi para
podermos usar as ferramentas fornecidas
Seria uma técnica interessante para ser usada na variação
escolhida
 Não tivemos sucesso ao utilizar a ferramenta velocity.
AOM

“Canhão para matar uma mosca”
9
VARIAÇÃO 2 – CLASSES QUE ENVOLVEM
ATIVIDADE
A Variação 2 se mostrou muito semelhante à
variação 1.
 A principal diferença foi a possibilidade de
usar PPP razoavelmente


Para as outras técnicas, os comentários da
variação 1 são os mesmos, inclusive de
implementação.

Apesar de, claro, os refactors terem sido diferentes, a
essência deles foi a mesma.
VARIAÇÃO 2 – CLASSES QUE ENVOLVEM
ATIVIDADE

Parametrização por Polimorfismo Paramétrico
Temos mais de um tipo de atividade. Criamos duas
classes básicas filhas de Atividade.
 Algumas classes que usavam Atividade, passaram a
receber o parâmetro do tipo de Atividade ao qual ela
estaria associada


Depois, usamos o objeto pelo tipo polimorficamente
parametrizado anteriormente.
Dúvidas?
Download

Apresentação