sexta-feira, 15 de agosto de 2014

Padrões de Projeto - Strategy

       Padrões de projeto servem para estruturar a forma como os sistemas são construídos de modo a facilitar tanto a própria construção quanto a manutenção. Os padrões de projeto baseiam-se nos princípios de programação e em boas práticas, e se tornaram padrões devido terem sido usados várias vezes e terem alcançado bons resultados. O padrão STRATEGY visa tornar a estrutura do projeto mais flexível, tornando-o mais receptível a mudanças. Ele se baseia em 3 princípios:
  • Programar para interface ao invés de programar para implementação;
  • Separar o que varia do que permanece igual, encapsulando o que varia;
  • Dar preferência a composição do que a herança.
       O livro Use a Cabeça - Padrões de projetos traz um exemplo de um "jogo" que ele categoriza como um simulador de patos, que trabalha com patos de diferentes tipos: patos de verdade, patos de borracha, patos de madeira... e está sujeito a trabalhar com mais tipos de patos diferentes no futuro. A questão é que eles variam seus comportamentos, afinal, patos de madeira não voam nem grasnam, os de borracha fazem barulho, que no entanto não é um grasnar de patos de verdade, e também não voam. E por fim, no futuro ainda podem entrar outros tipos de patos no sistema. Como lidar com a mudança?
       Podemos ver a solução logo abaixo:

       Os comportamentos que pertencem a todos os patos (mostrar o pato na tela e nadar) que pelo menos por enquanto não variam, são métodos comuns (display() e swin()) que não precisaram ser "encapsulados" por uma interface em grupos de algorítimos, podendo o desenvolvedor usar apenas a sobrescrita de métodos dada pela herança caso ache necessário, o que é uma verdade no caso de display(), afinal cada pato tem uma exibição.
       Já os métodos que setam o comportamento de voar e grasnar, como variam em cada tipo de pato, foram "encapsulados" através de uma interface criada para cada um deles (FlyBehavior e QuackBehavior respectivamente). Agora esses comportamentos que compõe o nosso objeto Duck deixaram de ser métodos e passaram a ser variáveis de instância para objetos que implementem a interface FlyBehavior e QuackBehavior.
       Qual a vantagem? Bem, digamos que eu queira criar um pato de plástico, que nada porém não faz barulho, o que eu preciso adicionar de extra? Nada, basta na hora de criar a classe PatoDePlastico fazer ela instanciar a classe FlyNoWay e MuteQuack. E se eu quiser um apito para chamar patos, não posso estender de pato, afinal, não é um pato, mas eu preciso do som de pato, o que fazer? É simples! Basta usar a interface QuackBehavior como fizemos na classe Duck. Ou seja, temos um sistema flexível e expansível.
       Agora um pouco de código para mostrar como essas classes se comunicam:
      
       Como seria o construtor de uma classe que herda de Duck?
public class MallardDuck extends Duck {
       public MallardDuck(FlyBehavior fb, QuackBehavior qb) {
              flyBehavior = fb;
              quackBehavior = qb;
       }...
       O método performFly() e performQuack() da classe Duck respectivamente...
       public void performFly(){
              flyBehavior.fly();
       }
       public void performQuack(){
             QuackBehavior.quack();
       }...
       Agora os métodos da classe Duck que deixam os comportamentos de voar e grasnar dinâmicos... eles devem receber um comportamento como parâmetro.
       public void setFlyBehavior(FlayBehavior fb) {
              flyBehavior = fb;
       }
       public void setQuackBehavior(QuackBehavior qb) {
              quackBehavior = qb;
       }... 
       Pronto, o PADRÃO STRATEGY foi aplicado com sucesso. Veja que nos códigos mostrados, não nos preocupamos com as classes que implementam as interfaces, isso porque abstraímos essas classes encapsulando-as através das interfaces.

Fonte: Baseado no livro Use a Cabeça - Padrões de Projeto, 2a Edição.

quarta-feira, 30 de julho de 2014

Cargos e Salários de TI.

       A empresa de classificados Catho fez uma pesquisa para a INFO com o salário de mais de 180 cargos da área de TI do Brasil, segundo a empresa, 233 mil profissionais de 2.154 cidades de todo país foram consultados. O salário pode variar de acordo com a região.
      Os dados são de uma pesquisa recente, é bom saber para planejar uma carreira, ter uma ideia de onde se quer chegar e traçar metas para alcançar o objetivo, como por exemplo investir ou não em determinada graduação, pós graduação e certificação.
       Sem dúvida a área oferece bons salários, mas é preciso esforço e dedicação para alcançá-los.

NOME CARGO
MÉDIA
Gerente de Administração de Banco de Dados
10.559,47
Coordenador de Administração de Banco de Dados
8.339,00
Consultor de Administração de Banco de Dados
8.004,20
Supervisor de Administração de Banco de Dados
7.494,54
Administrador de Banco de Dados Sênior
7.435,72
Administrador de Banco de Dados Pleno
4.761,69
Administrador de Banco de Dados Júnior
2.813,30
Analista de Administração de Banco de Dados Sênior
5.275,16
Analista de Administração de Banco de Dados Pleno
3.684,25
Analista de Administração de Banco de Dados Júnior
2.401,82
Trainee de Administração de Banco de Dados
1.770,60
Assistente de Administração de Banco de Dados
1.211,39
Auxiliar de Administração de Banco de Dados
1.032,13
Estagiário de Administração de Banco de Dados
967,13
Gerente de Administração de Redes
10.964,87
Coordenador de Administração de Redes
7.849,21
Consultor de Administração de Redes
6.435,48
Supervisor de Administração de Redes
5.306,46
Administrador de Redes Sênior
4.674,91
Administrador de Redes Pleno
3.490,63
Administrador de Redes Júnior
2.396,31
Analista de Administração de Redes Sênior
4.248,45
Analista de Administração de Redes Pleno
2.926,18
Analista de Administração de Redes Júnior
2.304,04
Trainee de Administração de Redes
1.894,80
Assistente de Administração de Redes
1.414,56
Auxiliar de Administração de Redes
1.165,74
Estagiário de Administração de Redes
863,15
Gerente de Arquitetura da Informação
12.197,90
Coordenador de Arquitetura da Informação
9.724,90
Supervisor de Arquitetura da Informação
9.135,37
Arquiteto da Informação Sênior
7.186,43
Arquiteto da Informação Pleno
5.175,73
Arquiteto da Informação Júnior
3.489,75
Assistente de Arquitetura da Informação
1.098,01
Estagiário de Arquitetura da Informação
985,18
Gerente de Conteúdo Web
7.753,55
Coordenador de Conteúdo Web
4.110,74
Supervisor de Conteúdo Web
3.596,86
Analista de Conteúdo Web Sênior
3.342,19
Analista de Conteúdo Web Pleno
2.632,79
Analista de Conteúdo Web Júnior
1.734,25
Trainee de Conteúdo Web
1.249,92
Assistente de Conteúdo Web
1.097,65
Auxiliar de Conteúdo Web
1.046,76
Estagiário de Conteúdo Web
664,92
Gerente de Web Designer
9.646,73
Coordenador de Criação Web
6.244,46
Supervisor de Criação Web
4.710,60
Web Designer Sênior
3.925,14
Web Designer Pleno
2.002,88
Web Designer Júnior
1.802,57
Webmaster Sênior
3.700,74
Webmaster Pleno
2.343,99
Webmaster Júnior
1.698,93
Revisor de Criação Web
2.041,38
Trainee de Criação Web
1.673,94
Estagiário de Criação Web
941,61
Diretor de E-Commerce / E-Business
16.529,89
Gerente de E-Commerce / E-Business
6.820,69
Coordenador de E-Commerce / E-Business
5.027,83
Supervisor de E-Commerce / E-Business
4.885,81
Analista de E-Commerce / E-Business Sênior
4.083,83
Analista de E-Commerce / E-Business Pleno
3.247,10
Analista de E-Commerce / E-Business Júnior
2.288,60
Trainee de E-Commerce / E-Business
1.604,92
Assistente de E-Commerce / E-Business
1.246,83
Auxiliar de E-Commerce / E-Business
1.057,57
Estagiário de E-Commerce / E-Business
730,58
Diretor de Negócios Web
20.897,52
Gerente de Negócios Web
8.222,86
Coordenador de Negócios Web
5.690,37
Supervisor de Negócios Web
5.162,09
Executivo de Contas de Negócios Web
4.380,57
Analista de Negócios Web Sênior
4.361,74
Analista de Negócios Web Pleno
2.845,21
Analista de Negócios Web Júnior
2.389,69
Trainee de Negócios Web
1.134,18
Assistente de Negócios Web
982,25
Auxiliar de Negócios Web
907,27
Estagiário de Negócios Web
769,56
Diretor de Processamento de Dados
21.685,47
Gerente de Processamento de Dados
10.062,30
Coordenador de Processamento de Dados
6.627,62
Supervisor de Processamento de Dados
5.701,62
Analista de Processamento de Dados Sênior
5.321,46
Analista de Processamento de Dados Pleno
3.139,88
Analista de Processamento de Dados Júnior
2.179,79
Trainee de Processamento de Dados
1.946,62
Operador de Processamento de Dados
1.629,10
Assistente de Processamento de Dados
1.330,55
Auxiliar de Processamento de Dados
1.110,72
Digitador
1.067,06
Estagiário de Processamento de Dados
876,41
Diretor de Programação
16.003,99
Gerente de Programação
9.242,32
Coordenador de Programação
8.261,94
Supervisor de Programação
5.696,48
Analista Programador Sênior
5.386,59
Analista Programador Pleno
3.831,25
Analista Programador Júnior
2.418,84
Programador Sênior
3.955,76
Programador Pleno
3.047,77
Programador Júnior
1.805,40
Assistente de Programação
1.723,12
Trainee de Programação
1.656,30
Auxiliar de Programação
1.608,82
Estagiário de Programação
960,49
Gerente de Qualidade de Software
11.016,08
Coordenador de Qualidade de Software
5.996,16
Supervisor de Qualidade de Software
5.539,52
Analista de Qualidade de Software Sênior
4.265,15
Analista de Qualidade de Software Pleno
3.747,72
Analista de Qualidade de Software Júnior
2.061,46
Assistente de Qualidade de Software
1.121,78
Estagiário de Qualidade de Software
877,64
Analista de Redes Sociais Sênior
2.595,78
Analista de Redes Sociais Pleno
2.055,16
Analista de Redes Sociais Júnior
1.624,61
Gerente de Segurança da Informação
11.381,85
Coordenador de Segurança da Informação
7.592,71
Consultor de Segurança da Informação
6.888,44
Supervisor de Segurança da Informação
6.160,53
Analista de Segurança da Informação Sênior
6.001,47
Analista de Segurança da Informação Pleno
4.166,98
Analista de Segurança da Informação Júnior
2.477,44
Assistente de Segurança da Informação
1.247,96
Estagiário de Segurança da Informação
886,97
Diretor de Sistemas (Projetos / Desenvolvimento / Consultoria)
17.424,88
Gerente de Sistemas (Projetos / Desenvolvimento / Consultoria)
10.410,45
Coordenador de Sistemas (Projetos / Desenvolvimento / Consultoria)
7.511,99
Supervisor de Sistemas (Projetos / Desenvolvimento / Consultoria)
7.487,82
Consultor de Sistemas (Projetos / Desenvolvimento / Consultoria)
7.309,63
Analista de Sistemas (Projetos / Desenvolvimento / Consultoria) Sênior
5.744,44
Analista de Sistemas (Projetos / Desenvolvimento / Consultoria) Pleno
4.007,44
Analista de Sistemas (Projetos / Desenvolvimento / Consultoria) Júnior
2.966,88
Analista de Requisitos Sênior
6.081,47
Analista de Requisitos Pleno
3.501,20
Analista de Requisitos Júnior
2.971,26
Analista de Testes Sênior
4.056,27
Analista de Testes Pleno
3.037,55
Analista de Testes Júnior
1.960,25
Trainee de Sistemas (Projetos / Desenvolvimento / Consultoria)
1.723,39
Assistente de Sistemas (Projetos / Desenvolvimento / Consultoria)
1.342,86
Auxiliar de Sistemas (Projetos / Desenvolvimento / Consultoria)
1.303,16
Estagiário de Sistemas (Projetos / Desenvolvimento / Consultoria)
950,54
Diretor de Suporte Técnico em Informática - Help Desk
15.645,55
Gerente de Suporte Técnico em Informática - Help Desk
4.948,00
Coordenador de Suporte Técnico em Informática - Help Desk
4.883,39
Supervisor de Suporte Técnico em Informática - Help Desk
3.804,54
Consultor de Suporte Técnico em Informática - Help Desk
3.556,95
Analista de Suporte Técnico em Informática - Help Desk Sênior
2.953,98
Analista de Suporte Técnico em Informática - Help Desk Pleno
1.936,14
Analista de Suporte Técnico em Informática - Help Desk Júnior
1.616,91
Técnico de Suporte em Informática - Help Desk
1.402,62
Trainee de Suporte Técnico em Informática - Help Desk
1.366,06
Assistente de Suporte Técnico em Informática - Help Desk
1.310,50
Auxiliar de Suporte Técnico em Informática - Help Desk
1.095,81
Estagiário de Suporte Técnico em Informática - Help Desk
907,83
Diretor de Tecnologia da Informação
19.042,09
Gerente de Tecnologia da Informação
11.701,41
Consultor de Tecnologia da Informação
8.382,28
Coordenador de Tecnologia da Informação
7.036,71
Supervisor de Tecnologia da Informação
5.836,06
Analista de Tecnologia da Informação Sênior
5.684,65
Analista de Tecnologia da Informação Pleno
3.389,20
Analista de Tecnologia da Informação Júnior
2.142,81
Trainee de Tecnologia da Informação
1.605,50
Assistente de Tecnologia da Informação
1.511,20
Auxiliar de Tecnologia da Informação
1.198,63
Estagiário de Tecnologia da Informação
922,36
Diretor de Web Development
15.108,62
Gerente de Web Development
7.632,77
Coordenador de Web Development
5.964,85
Supervisor de Web Development
5.825,32
Analista de Web Development Sênior
5.077,63
Analista de Web Development Pleno
3.593,95
Analista de Web Development Júnior
2.095,19
Trainee de Web Development
2.044,86
Assistente de Web Development
1.733,37
Auxiliar de Web Development
1.429,84
Estagiário de Web Development
1.082,73


Fonte: http://info.abril.com.br/noticias/carreira/2014/02/veja-o-salario-de-180-cargos-em-ti.shtml