sexta-feira, 29 de abril de 2016

Padrão de Projeto Singleton

    Padrão de Projeto é um termo advindo da arquitetura, através dos trabalhos de Christopher Alexander em que ele documentou soluções para problemas cotidianos em arquitetura. Baseados nisso a "Gangue dos Quatro" (GoF) - formada por  Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides - descreveu problemas recorrentes em engenharia de software e soluções para estes.
     Em termos gerais os padrões de projeto denotam uma solução geral e reutilizável para um problema recorrente em um determinado contexto, no nosso, software. Vale lembrar que não se trata de reusar código, mas sim, reusar ideias.
De acordo com Christopher Alexandrer (1979):
Cada padrão é uma regra de três partes que expressa uma relação entre um certo contexto, um problema e uma solução
    Existem vários padrões de projeto, divididos entre GoF e GRASP. Singleton se caracteriza como um padrão GoF de propósito de criação com escopo relacionado aos objetos. A tabela abaixo classifica alguns padrões GoF, dentre eles o Singleton.

Mas afinal, o que é o Singleton?

    Esse padrão se caracteriza por:

  • Garantir a existência de apenas uma instância ativa de uma classe
  • Manter acesso global a este objeto
  • Inicialização Just-in-time encapsulada 

    É muito útil exatamente nas situações em que precisamos de exatamente um objeto ativo para realizar ações dentro de um sistema, além disso, é um padrão extremamente fácil de entender e também de implementar.

    A "mágica" toda está em ter um construtor privado para sua classe e um atributo estático deste objeto nesta classe, deste modo é assegurado que não serão criadas novas instâncias dessa classe, assim como fornecemos acesso global para o único objeto existente deste tipo, ou seja, a classe gerencia sua própria instância. 
    A UML abaixo caracteriza uma classe Singleton em seguida é apresentada uma implementação básica em Java:



    Existem diversas aplicações para o Singleton, muitas vezes associados a outros padrões e projeto, como Abstract Factory, Builder, e Prototype.
    Infelizmente, talvez por ser tão simples, é um dos padrões mais usados incorretamente, muitas vezes sendo usados em situações que não lhe cabem para que o programador não tenha que tratar corretamente a visibilidade dos seus objetos.


Escrito por:
Hugo Gabriel - Integrante do PET Computação

terça-feira, 26 de abril de 2016

Ciberativismo - A mudança começa nas pontas dos dedos




Saudações Jovem de Telencéfalo altamente desenvolvido! 
       
        O desenvolvimento das redes digitais configurou de tal forma as relações sociais no mundo que praticamente todos os aspectos da vida humana sofreram impacto da comunicação imediata que a internet proporciona. E diante disto, manifestações populares que até então estavam apenas nas ruas ganharam um novo campo de atuação: o Ciberesperaço
      Não há um conceito definido para o que é Ciberativismo, uma vez que, seu significado muda conforme a internet muda. Contudo, Sandor Vegh(2003) renomado Sociólogo que pesquisa movimentos sociais na internet, caracteriza - de forma geral - o Ciberativismo da seguinte maneira: 

"Um movimento politicamente motivado que acontece na internet"

     Assim, Ciberativismo está mais presente na nossa vida do que realmente imaginamos. Ao protestar na internet contra o aumento da tarifa de ônibus na nossa cidade ou contra a decisão da Anatel em limitar a taxa de dados nos provedores de internet, estamos praticando o Ciberativismo no seu sentido mais puro. 

Os Hacktivistas utilizam técnicas simples para realizar
protesto na internet. 
        Dentro do contexto de Ciberativismo - que é dividido em vários ramos - há o Hacktivismo. Para defini-lo vamos recorrer a Steven Levy - jornalista que escreve sobre tecnologia, criptografia, ciberativismo e a relação homem-internet. 



O hacktivismo é a cultura hacker s impondo e se manifestando, em favor das causas sociais e políticas, é a desobediência civil eletrônica cada vez mais legitimada. 

       Sendo assim, hacktivismo é quando um grupo de sujeitos utilizam de conhecimentos técnicos ligados a computação para protesta a favor de causas sociais e políticas. 
Caro leitor, neste momento é importante frisar a diferença entre hacker, hacktivista e ciberterrorista. 

        Hacker é o usuário que detém conhecimentos profundos da computação e age ativamente na internet em detrimento de sua própria vontade, em suma são aqueles usuários que invadem sistemas para testar sua própria capacidade técnica. Hacktivista como definido acima é o sujeito que utiliza seus conhecimentos em prol de causas sociais e o Ciberterrorista são aqueles usuários que tem por objetivo causar estragos nos sistemas por eles invadidos, como roubos de dados e informações, destruição de informações, entre outras atitudes nocivas

         O primeira grande vitória ganhada nas trincheiras do Ciberespaço foi a Luta dos Povos do Chiapa - México. Tal movimento ganhou apoio do grupo hacker The Cult of The Dead Cow, que graças à um applet Java conseguiu derrubar sites de instituições financeiras e conseguiu a atenção da mídia mundial para o massacre que acontecia no sul daquele País, para saber mais clique aqui

         Assim, hacktivismo é outra maneira de protestar a favor dos nossos direitos. 



          









sexta-feira, 22 de abril de 2016

Entrega de leites na Casa da Criança Dr João Moura



A Casa da Criança Dr João Moura é um convento construído em 1954 onde moram freiras que trabalham com prestação de serviço à comunidade. Entre as atividades do convento se faz a educação de cerca de 150 crianças com idades entre 0 e 7 anos, de segunda a sexta em horário integral. Localizado na Rua Dr. João Moura, 487, bairro São José em Campina Grande, o local é enorme e conhecido também por seus grandes jardins, parquinho para as crianças e numerosa equipe que trabalha por lá e faz tudo funcionar. Afinal, organizar um lugar enorme e com 150 crianças não é nada fácil. A Casa é uma instituição filantrópica, que depende da comunidade pra se sustentar. Portanto uma visitinha por lá pra doar qualquer coisa que seja, é sempre bem vinda.

Pensando nisso, o PET Computação organiza uma arrecadação de leites, como parte da atividade da Semana do Fera, que são trazidos pelos novos estudantes do curso de Computação da UFCG. O PET, então, encaminha esses leites para alguma instituição de caridade da cidade de Campina Grande. Novamente, a Casa da Criança Dr João Moura recebeu a doação que foi entregue nas mãos da secretária da Casa, Sandra.




Esperamos que esses leites possam servir de alimento para as crianças e que a Casa continue desempenhando esse papel tão importante de apoio aos pequeninos da nossa cidade.

Atenciosamente,
Kaio Oliveira - Assessoria de Comunicação

terça-feira, 19 de abril de 2016

Computação Evolutiva e Algoritmos Genéticos


A Computação Evolutiva é um ramo de pesquisa da Inteligência Artificial que consiste em um conjunto de técnicas de busca e otimização inspiradas na Teoria da Evolução de Darwin (1859).
Dentre essas técnicas, destacarei os Algoritmos Genéticos (AGs), em sua forma mais básica.
Na natureza, indivíduos competem entre si buscando a sobrevivência. Os mais aptos terão maior chance de gerar descendentes e todos os indivíduos estão sempre sujeitos a mutações. Os AGs simulam esses processos a fim de gerar soluções ótimas para determinados problemas. Essas soluções são tratadas como indivíduos de uma população que a cada iteração evolui, gerando uma nova população que tende a possuir um maior grau de otimização.
Seu funcionamento se dá da seguinte forma:
  1. Inicialmente uma população é escolhida, composta por indivíduos criados aleatoriamente.
  2. Avalia-se essa população através de um critério pré-estabelecido (função de aptidão ou fitness function).
  3. Através do operador de seleção, os indivíduos mais aptos, de acordo com o valor dado pela fitness function, são selecionados.
  4. Sobre estes indivíduos são aplicados operadores de cruzamento e mutação a fim de garantir uma variabilidade de soluções.
  5. Esse processo se repete até que um número predeterminado de iterações seja atingido ou até que uma solução aceitável seja alcançada.


Os AGs possuem aplicações em diversas áreas como a Engenharia, Biologia, Economia, Medicina etc. Para saber mais sobre o assunto, clique aqui.