Você está na página 1de 8

Projeto final de disciplina

Algoritmos e Estruturas de Dados – 2009.2

Rede Social
Caio Cesar Dantas da Silva

Dyego Caldas Luz

Gustavo Nogueira Alves

Resumo

O projeto apresenta o desenvolvimento de um


sistema desktop baseados nas mais famosas redes
sociais da internet batizado de Selankut. O sistema
possibilita aos usuários meios de relacionar-se e
comunicar-se com os demais. Para tanto, foram
usadas estruturas de dados complexas, grafos, para
que representar os relacionamentos entre os
usuários da rede, banco de dados MySQL para
armazenar as informações dos usuários e Gtkmm
com Glade para desenvolvimento da interface.

01 de dezembro de 2009
1. Introdução
Rede Social é uma das formas de representação dos relacionamentos
afetivos ou profissionais dos seres entre si ou entre seus agrupamentos de
interesses mútuos. Sistemas que seguem essa linha funcionam através da
interação social, buscando conectar pessoas e proporcionar sua
comunicação. Essas redes sociais estão hoje instaladas principalmente na
Internet devido ao fato desta possibilitar uma aceleração e ampla
diversidade de divulgação de idéias e da absorção de novos elementos em
busca de algo em comum.
O estudo das redes sociais foi basicamente iniciado pelas ciências
exatas e, em seguida, promovido pela sociologia, numa perspectiva de
análise estrutural das redes sociais. O matemático Euler foi o responsável
pelos primeiros passos da teoria das redes e foi o criador da teoria dos
grafos. O grafo é um conjunto de nós, conectados por arestas que, em
conjunto, formam uma rede.
Os grafos desempenham o papel fundamental no Selankut, é a partir
deles que se é representada as relações dos usuários na rede. As relações
representadas são auto-ajustadas de acordo com a freqüência de visitação
dos usuários nos perfis dos demais.
Nas próximas seções abordaremos o funcionamento do sistema
mostrando as opções do usuário para relacionamento e de comunicação e
quais as principais estruturas e algoritmos utilizados.

2. Funcionamento
Para ter acesso ao sistema o usuário precisa fornecer login e senha.
Esses dados serão comparados com os dados cadastrados no banco de
dados. Se o usuário e senha informados existem e/ou estão corretos ele
permitirá acesso.
Caso o usuário não possua login e senha, ele deverá realizar seu
cadastrado fornecendo os dados, como mostrado na figura abaixo. Um
ponto importante é o fato do sistema não permitir que sejam cadastrados
dois usuários com o mesmo login, caso isso aconteça uma mensagem de
erro é mostrada ao usuário.
Figura 1 e 2 – Tela de login e cadastro do usuário respectivamente

Após o sistema ter liberado acesso ao usuário uma página inicial é


gerada. Nela o usuário tem acesso a um leque de informações e opções.
Figura 3 – Página inicial do usuário

Do lado direito da tela é apresentado ao usuário sua lista de amigos.


Clicando sobre o botão visitar, o usuário é redirecionado a página do
perfil do amigo no qual visualizará suas informações, amigos e poderá
enviar um recado.

Figura 4 – Visualizar perfil


Na parte inferior da página o usuário receberá uma lista de amigos
relacionados ou sugeridos. São amigos de seus amigos que
provavelmente o usuário quer manter algum relacionamento. Para
adicioná-lo a sua lista de amigos o usuário só precisará clicar no botão
“Adicionar...”. Depois de adicionado esse amigo não será mais sugerido.
Na aba “Visualizar Recados” será listado todos os recados do
usuário mostrando quem enviou o recado.

Figura 3 – Visualizar recados

3. Desenvolvimento da Aplicação

3.1 Metodologias de Desenvolvimento Ágil

Extreme Programming, ou simplesmente XP, é uma metodologia


ágil para equipes pequenas e médias e que irão desenvolver software
com requisitos vagos e em constante mudança. Para isso, adota a
estratégia de constante acompanhamento e realização de vários
pequenos ajustes durante o desenvolvimento de software baseado em
quatro valores fundamentais: comunicação, simplicidade, feedback e
coragem.
Por essas razões decidimos utilizar essa metodologia como carro
chefe do nosso projeto, possibilitando uma maior interação entre os
participantes do projeto e diminuindo a criação de ilhas de conhecimento.
3.2. Interface Gráfica

Pensando em uma melhor utilização do sistema por parte dos


usuários finais, foi construída uma interface intuitiva e amigável
utilizando Gtkmm e a ferramenta de criação de interfaces Glade.
O desenvolvimento em Gtkmm possibilita o desenvolvimento de
aplicações C++ de uma maneira mais eficiente e objetiva por ter sido
desenvolvida totalmente orientada a objetos.
Para criação da interface o Glade gera um arquivo XML que será
manipulado pelo GTKmm. Esse arquivo XML contém a distribuição de
widgets (botões, labels, images...).
As ações do usuário são capturadas por meio de um loop infinito
gerado pela função pré-definida GTK::Main::run(). Esse loop caracteriza a
utilização do paradigma de orientação a eventos.
Toda ação capturada pelo loop é direcionada aos seus respectivos
sinais que são métodos que realizam atividades internas e realizam os
algoritmos do sistema.

3.3. Banco de Dados

Bancos de dados são conjuntos de registros dispostos em estrutura


regular que possibilita a reorganização dos mesmos e produção de
informação.
Um banco de dados é usualmente mantido e acessado por meio de
um software conhecido como Sistema Gerenciador de Banco de Dados
(SGBD).
Para armazenamento de informações do sistema (informações dos
usuários, recados, relações de amizade) foi utilizado o SGDB MySQL 5.4 e
o módulo de interface libmysqlclient para manipulação do banco pelo C+
+.
O uso do banco de dados facilita a manipulação dos dados
cadastrados já que o MySQL oferece diversas funções pra inserção,
edição, remoção e busca.

3.4. Grafo de Relacionamento


A rede é formada basicamente por duas estruturas. A primeira
estrutura Usuário contém uma chave (id) e dois ponteiros, um apontando
para outro usuário e o segundo para a estrutura Amigo. A segunda
estrutura, Amigo, contem também uma chave (id) e um ponteiro para
outro Amigo.
O objetivo principal é que cada Usuário aponte para uma lista de
Amigos, essa lista representa seus relacionamentos na rede (amigos
adicionados). Assim teremos um Usuário base que terá uma lista de
Amigos e uma lista de Usuários, onde cada Usuário, que correspondem
aos relacionamentos do Usuário base, tem outra lista de Amigos,
formando um grafo implementado através de listas encadeadas.
No exemplo abaixo o Usuário base é João. Este se relaciona com
Maria, José e Hugo. Portanto estes estão nas listas de Amigos e de
Usuários, percebemos que cada Usuário da lista (Maria, José, Hugo) tem
uma lista de Amigos que representa seus relacionamentos.

Figura 5 – Grafo de relacionamento de João.

Perceba que os id’s da primeira lista de Amigos são iguais aos id’s
da lista de Usuários, isso acontece, pois ambas as listas representam os
relacionamentos de João.

3.5. Auto-ajuste
Para melhorar a busca de usuários, usamos estruturas auto-
ajustáveis ordenadas de acordo com a quantidade de visitas em um
perfil. Esse método é conhecido como contador de freqüência. Cada nó
do grafo possui um contador no qual é mantido o número de acessos
efetuados ao perfil que aquele nó representa.
Essa freqüência é mantida no grafo enquanto o usuário está
usando o sistema. Efetuado o “logoff” estas informações são gravadas
diretamente no banco de dados possibilitando a reutilização do sistema, a
partir da recuperação dos dados ao efetuar o “login”.

4. Conclusão
A rede social Selankut foi desenvolvida baseada em metodologias
ágeis e manipulação de estruturas de dados complexas e algoritmos
eficientes. Unido a uma interface intuitiva busca proporcionar uma
experiência satisfatória ao usuário final.
Durante a criação do projeto, enfrentamos algumas dificuldades
pelo fato de estarmos trabalhando com uma estrutura de dados nova,
pela ausência de especificação, de conteúdos confiáveis e fontes
cientificas de informção além da própria complexidade do projeto em si.
Dentre o que gostaríamos de ter implementado, devido a esses fatores,
citamos a criação de sockets que permitiria a utilização do sistema em
rede, que não foi possível ser implementada a tempo.
5. Referências
[1] MySQL Documentation. http://dev.mysql.com/doc/. Ultimo acesso em
25/11/2009.

[2] Teoria dos Grafos. http://pt.wikipedia.org/wiki/Teoria_dos_grafos.


Ultimo acesso em 25/11/2009.

[3] gtkmm Documentation. http://www.gtkmm.org/documentation.shtml.


Ultimo acesso em 28/11/2009.

[4] Szwarefiter, J., Markenzon, L., Estruturas de dados e seus algoritmos


em . 2ª Edição. Ed.
LTC, 1994.