quinta-feira, 29 de dezembro de 2011

UML - Abordagem simplificada


Esse é o Batman ele não documentava seus sistemas, não era possível entender a ligação entre suas classes e ai ele acabou achando melhor se fantasiar para os antigos clientes dele não o reconhecerem.


Mentirinha antes de começar


Olá meus amigos e amigas tudo bem? Hoje vou iniciar um processo de vários artigos para explicar sobre a UML tentando ser mais claro e breve possível até por que, diferente do que nosso ícone da música brasileira falava “não temos todo tempo do mundo” rsrs...
Para vc entender de forma clara esses artigos eu vou pedir que siga algumas instruções abaixo:

Vc estudou UML na faculdade? Achou um saco? Confuso? Seu professor aparentava não entender nada de programação Orientada a Objetos e tentava cuspir UML sem dominio algum? Se a resposta for sim, não se assuste, isso é muito normal pois o corpo docente da maioria das universidades pensam que para saber UML não é preciso conhecer alguns paradigmas importantes, mas eles estão errados então a primeira instrução é esquecer aquela matéria da faculdade assim vc não se complica.

Entender um pouco sobre orientação a objetos é muito importante, não vou entrar no mérito de explicar POO aqui por isso se vc não entender o que é herança, polimorfismo e encapsulamento peço por gentileza para que leia um pouco antes e depois volte aqui mas olha, é para ler mesmo ta? Vc até vai entender meus artigos caso não entenda POO mas provavelmente muita coisa vai ficar sem sentido.

Vou explicar em várias partes sendo assim cada artigo tem um “continue”.

Então vamos la...

O que é UML? segundo a wikipedia

A Unified Modeling Language (UML) é uma linguagem de modelagem não proprietária de terceira geração. A UML não é uma metodologia de desenvolvimento, o que significa que ela não diz para você o que fazer primeiro e em seguida ou como projetar seu sistema, mas ela lhe auxilia a visualizar seu desenho e a comunicação entre objetos.
Basicamente, a UML permite que desenvolvedores visualizem os produtos de seus trabalhos em diagramas padronizados. Junto com uma notação gráfica, a UML também especifica significados, isto é, semântica. É uma notação independente de processos, embora o RUP (Rational Unified Process) tenha sido especificamente desenvolvido utilizando a UML.
É importante distinguir entre um modelo UML e um diagrama[1] (ou conjunto de diagramas) de UML. O último é uma representação gráfica da informação do primeiro, mas o primeiro pode existir independentemente. O XMI (XML Metadata Interchange) na sua versão corrente disponibiliza troca de modelos mas não de diagramas.

Agora em linguagem popular UML é uma linguagem de modelagem de software, boa para documentar um sistema e para modelar ele antes de programar. A UML independe de qualquer tecnologia mas necessáriamente alguns aspectos devem ser em tecnologias que suportam LÓGICO a orientação a objetos (JAVA, PHP, PYTHON, C#...), e independe de qualquer metodologia.

Para desenvolver um sistema de software é importante seguir/entender essas praticas a seguir...



Levantamento e Análise de Requisitos
Compreender as necessidades do usuario e o que ele deseja que o sistema desenvolvido realize, isso é feito principalmente por entrevistas, onde o engenheiro de software tenta compreender como funciona atualmente o processo a ser informatizado e quais serviços o cliente precisa que o software forneça.
Devem ser realizadas tantas entrevistas quanto for necessário para que as necessidades do usuario seja bem compreendida. Na entrevista o engenheiro deve auxiliar o cliente a definir quais informações deverão ser produzidas, quais deverão ser fornecidas e qual o nível de desempenho exigido do software.

Prototipação
Uma técnica bastante popular e de fácil aplicação, consiste em desenvolver rapidamente um “rascunho” do que seria o sistema de informação quando estivesse finalizado. Um protótipo normalmente apresenta pouco mais do que a interface do software a ser desenvolvido, ilustrando como as informações seriam inseridas e recuperadas no sistema e apresentando alguns exemplos com dados fictícios de quais seriam os resultados apresentados pelo software, principalmente em forma de relatórios. Assim evita de o cliente receber algo que não esperava.
Fica claro que é muito importante explicar para um cliente que aquilo não é o sistema mas sim uma visualização com dados estaticos, senão ele pode achar que vc esta o enganando.

Prazos e custos
A dura e necessária fase dos prazos e custos. Como determinar um prazo real? Qual será o custo total do desenvolvimento? Qual deverá ser o valor estipulado para a venda do projeto de software? Como determinar a real complexidade do desenvolvimento de software? Geralmente o cliente quer muito saber 2 questões após umas entrevistas que é QUANTO e QUANDO.
Estimar tempo é realmente um tópico muito complexo da engenharia de software, na realidade por melhor modelado que um sistema tenha sido, ainda assim fica difícil determinar com exactidão os prazos finais de entrega do software.
Uma boa modelagem auxilia a estimar a complexidade de desenvolvimento de um sistema e isto por sua vez ajuda em muito a determinar os prazos finais em que o software será entregue, no entanto, é preciso possuir diversos sistemas de informação com níveis de diculdade e caracteristicas semelhante ao software desenvolvido.
Mas não é possível conseguir uma data exata, mas sim uma data aproximada.


ManutençãoPossivelmente mais importante que as outras questões abordadas anteriormente existe a questão da manutenção. Alguns autores afirmam que muitas vezes a manutenção de um software pode representar de 40 a 60% do custo total do projeto. Alguém poderá então dizer que a modelagem é necessária para diminuir os custos com a manutenção.
Uma manutenção aqui pode piorar algo ali, precisa-se estar documentado isso

Documentação histórica
Uma documentação que ve se as praticas estão melhorando, as metodologias, etc...

Por que tantos diagramas?
Alguns tem a ideia de aparesentar o sistema por uma visão mais externa como é um exemplo do diagrama de caso de uso, enquanto que outros oferecem uma visão mais aprofundada do software, apresentando um enfoque mais técnico ou ainda visualizando apenas uma característica específica do sistema ou um determinado processo. A utilização de diversos diagramas permite que falhas sejam descobertas, diminuindo a possibilidade da ocorrência em erros futuros.
Sendo assim, não é obrigatório fazer TODOS os diagramas, mas sim os que baseado na necessidade do sistema o engenheiro de software julga necessário.

Rápido resumo dos Diagramas da UML
A seguir é descrito rapidamenter cada um dos diagramas oferecidos pela UML, destacando suas principais características. Convém alertar que a nova versão UML 2.0 recentemente lançada criou três novos diagramas que não são encontrados nas versões anteriores, além de “promover” dois sub-diagramas independentes, bem como trocar a nomenclatura de outros dois diagramas que já existiam nas versões anteriores da linguagem.
No próximo post sobre UML foi descrever de forma rápida cada diagrama. Obrigado e até a próxima.

sexta-feira, 2 de dezembro de 2011

Compactar e descompactar no console do Linux

Fala gente tudo bem? Estou meio sem tempo por conta do fim da facul e de umas mudanças em minha vida profissional. Mas hoje vou falar sobre algo que havia prometido... COMO COMPACTAR arquivos no console.


Apenas listar o conteúdo

  tar -tvf wordpress-3.2.1-pt_BR.tar.gz

Descompactando tar.bz2

tar jxvf pacote.tar.bz2
Tem uma variação legal que é inciar o local onde você quer descompactar (você tem que ter permissões de escrita no diretório de destino)
tar jxvf pacote.tar.bz2 -C $HOME/tmp
tar jxvfC pacote.tar.bz2  $HOME/tmp


Extraindo apenas um arquivo

tar -xzvf wordpress-3.2.1-pt_BR.tar.gz wordpress/wp-admin/media-new.php


descompactando e descartando a pasta pai

tar jxvf pacote.tar.bz2 --strip 1
veja também: http://ur1.ca/0253w from stack overflow


criando um pacote tar.bz2

tar cjvf nome.tar.bz2 ./pasta


listando o conteúdo de um pacote tar

tar -tf conf-sys.21-08-2009-113639.tar.bz2  | awk '{print $6}'


Empacotar arquivos locais em um host remoto

tar -czf - * | ssh example.com "cat > files.tar.gz"
 
tar cjvf - ./instal-dbdesigner | ssh srvescola 'cat >  install-DBdesigner.tar.bz2'
criar pacote tar.gztar czvf nomedopacote.tar.gz /pasta
extrair pacote tar.gztar zxvf pacote.tar.gz [ -C /caminho/opcional/para/extracao/ ]
criar pacote tar.bz2tar cjvf nomedopacote.tar.bz /pasta
extrair pacote tar.bz2tar jxvf pacote.tar.bz2 -C /pasta/

Compactando tudo menos pastas

tar -cvzf arch.tgz $(find /path/dir -not -type d)
 
tar -cvf /path/dir.tar /path/dir* --exclude "/path/dir/name" --exclude "/path/dir/opt"
 
# entrei como root no diretório /var/chache/apt/archives
tar -cjvf pacotes.tar.bz2 $(ls *.deb)


como construir um pacote tar do stdin?

Qualquer comando que produza uma lista de arquivos pode ser usado
tar cvzf archive.tgz `ls -1 *`

criando pacotes tar com 7z

tar cf - /path/to/data | 7z a -si archivename.tar.7z
Using 7z to create archives is OK, but when you use tar, you preserve all file-specific information such as ownership, perms, etc. If that's important to you, this is a better way to do it.


para instalar o 7zip no ubuntu faça

sudo apt-get install p7zip 7zip-full p7zip-rar lzma lzma-dev
 
# demais descompactadores
# descompactadores
apt-get install -y unace rar unrar zip unzip p7zip-full p7zip-rar sharutils uudeview mpack lha arj cabextract file-roller

Referências

quarta-feira, 9 de novembro de 2011

Conceito. Desenvolvimento com ZF

Fala pessoal tudo bom? Hoje não vou fazer um post mas sim deixar aqui um SLIDE que estou mostrando de forma conceitual e rápida como funciona o desenvolvimento ágil e prático com o Zend Framework ligado a outras tecnologias...


segunda-feira, 7 de novembro de 2011

Entenda Singleton

Olá tudo bem? Hoje vou falar sobre um assunto muito interessante para o desenvolvimento atual, vou falar sobre Singleton!


Mas espera ai... o que é singleton? Pesquisei no google e vi que Singleto é um whisky.....
Sério um WHISKY! Eita, em um blog assim eu vou ficar falando sobre bebidas? 
Não! Na verdade SINGLETON é uma palavra muito falada atualmente no desenvolvimento mas muitas pessoas não sabem nem a que se refere e as vezes até falam por ai Oo'...

Singleton é um padrão de desenvolvimento(os famosos Design Patterns) . Sabe? assim como o MVC, DAO... Lógico que não é igual ao MVC,DAO pois não é possível que alguém tenha criado o mesmo padrão duas vezes não acham? O Singleton é na verdade bem específico pois sua proposta é para garantir a existência de uma única instância de uma classe, permitindo um acesso global a esta instância.


Quando é necessário utilizar?
Muitos projetos necessitam de classes que sejam instanciadas apenas uma vez, por exemplo:
Classes de conexão com banco de dados, entre outras. veja um exemplo prático do php.net (fique ligado[a] nos comentários do código)





  1. <?php
  2. class Exemplo{
  3.     // Guarda uma instância da classe
  4.     private static $instance;
  5.    
  6.     // Um construtor privado; previne a criação direta do objeto
  7.     private function __construct()
  8.     {
  9.         echo 'Sou um construtor';
  10.     }
  11.     // O método singleton
  12.     public static function singleton()
  13.     {
  14.         if (!isset(self::$instance)) {
  15.             $c = __CLASS__;
  16.             self::$instance = new $c;
  17.         }
  18.         return self::$instance;
  19.     }
  20.    
  21.     // Método exemplo
  22.     public function latir()
  23.     {
  24.         echo 'Au!';
  25.     }
  26.     // Previne que o usuário clone a instância
  27.     public function __clone()
  28.     {
  29.         trigger_error('Clone is not allowed.', E_USER_ERROR);
  30.     }
  31. }
  32. ?>

Isso permite que uma instância única de Exemplo seja recuperada.


  1. <?php
  2. // Isso falharia porque o construtor é privado
  3. $test = new Exemplo;
  4. // Isso sempre vai recuperar uma instância da classe
  5. $test = Exemplo::singleton();
  6. $test->latir();
  7. // Isso irá emitir um E_USER_ERROR.
  8. $test_clone = clone $test;
  9. ?>



Conclusão

A utilização do pattern singleton permite uma facilidade maior no controle das classes que não devem ser instanciadas mais do que uma vez.
Normalmente uma classe singleton é utilizada em conjunto com uma classe factory que em breve eu irei explicar.


s-i-g-a-m-e @pv_fusion