Boas Práticas, Fundamentos, Técnicas

Design Patterns – Singleton

Olá Pessoal,

No mundo da O.O. uma das  práticas que podemos aplicar em diversos cenários são os Design patterns (ou Padrões de Projeto), que por sinal são modos de resolver problemas recorrentes e que garantem boa reutilização e também expressam de uma forma elegante a resolução de um determinado problema.

Os Design Patterns são classificados em:

  • Padrões de Criação;
  • Padrões  de Estruturas e
  • Padrões de Comportamento.

Cada uma dessas classificações acima englobam diversos tipos de padrões. Nesse post abordaremos o Design Patterns chamado Singleton. Esse Pattern é caracterizado por permitir apenas uma instância de um objeto no sistema e fornecer um ponto de acesso a essa instância, sendo caracterizado como um padrão de criação.

Existem contextos em que poderá haver a necessidade de ter esse tipo de implementação. Por exemplo com classes que possuem dados sobre o sistema, sobre um determinado dispositivo. Imagine que você esta trabalhando em uma aplicação mobile e precisa capturar algum dado do aparelho, ou atualizar determinada informação. Outro exemplo seria configurações de um aplicativo que poderiam ser solicitadas em determinados momentos da execução. Diversos são os cenários que podemos aplicar essa técnica.

O padrão Singleton também é alvo de várias discussões, alguns acham que não há necessidade de utilizar dessa forma, outros preferem combinar padrão Factory, pois poderá limitar a herança e/ou polimorfismo. Enfim, essa é uma discussão para outro momento.

Para transformar uma classe em Singleton existem 3 modificações a serem feitas na classe.

1 – Criar uma instância privada e estática dessa classe;

2 – Criar um método que seja o ponto de acesso ao único objeto criado e

3 – Tornar o construtor padrão privado.

Abaixo temos uma classe chamada Dispositivo bem simples, vamos transformá-la num Singleton. A classe possui dois atributos (Marca e Modelo) e dois métodos chamados Ligar e Desligar além da sobrecarga do método ToString Conforme figura 1.

Singleton1Figura 1 – Classe Comum de Um Dispositivo

Com a nossa classe comum, vamos fazer as três alterações citadas acima para transformá-la num Singleton. As alterações podem ser acompanhadas na figura 2.

Singleton2

Figura 2 – Classe com as alterações necessárias para atender o padrão Singleton.

A partir desse momento, a forma de utilização dessa classe deixa de ser como já conhecemos, não podemos mais instanciar um objeto dessa classe usando o operador new, isso é feito internamente pelo método getInstance que passa a ser o nosso ponto de acesso ao objeto da classe Dispositivo. Na figura 3 podemos ver como deverá ser utilizada.

Singleton3Figura 3 – Exemplo de uso

Essa é a forma que deverá ser utilizada. O método getInstance, verifica se há alguma instância já criada, caso não haja, será criada uma nova instância senão, ele retornará a instância já existente. A Figura 4 mostra o exemplo em funcionamento.

Singleton4

Figura 4 – Exemplo em execução

Bom, essa é uma forma de tratar um tipo de situação num determinado contexto, porém isso exige cuidado na aplicação ou seja, quando aprendemos sobre Design Patterns, costumamos contrair uma doença chamada “Patternite” onde queremos aplicar sempre, seja qual for o pattern. Porém o ideal é deixar que a plicação “peça” o padrão mais adequado, o desenvolvedor perceberá que aquela situação será bem tratada se for aplicado o pattern X.

Quanto ao Singleton, existe um detalhe que será comentado num próximo post, ele não é thread safe, ou seja se mais de uma thread solicitar esse objeto, teremos problemas, e existem formas de contornar essa situação que serão vistas em breve!

Abraço!

Padrão
.NET, Visual Studio

Ferramentas Microsoft gratuitas para estudantes de T.I.

Olá Pessoal,

Muita gente não sabe, mas a Microsoft disponibiliza gratuitamente em um site chamado DreamSpark, ferramentas de desenvolvimento e infra para estudantes. Essas ferramentas são disponibilizadas através de uma verificação da instituição de ensino em que o aluno frequenta. Antes de iniciar o download, será necessário encontrar a sua instituição na lista do site e prosseguir informando os dados. O processo é bem simples e rápido. Caso a sua instituição não conste na lista, uma alternativa seria a carteira internacional do estudante, trata-se de uma carteira que   tem validade em quase todos os países do mundo, será necessário desembolsar um pequeno valor e enviar seus dados e fotos para o site que emite a carteira.

Para quem pretende se destacar e aprender novas tecnologias como desenvolvimento para Windows8, games, Web essa é uma ótima chance de ter boas  ferramentas disponíveis e base de informação suficiente para o aprendizado!

Enjoy!

Abraço!

 

Padrão
Processos, Técnicas

Agilidade X Qualidade de Software

 Olá pessoal, um dia desses, a Sara Barbosa colocou a seguinte questão no twitter: “Agilidade não é o mesmo que qualidade, Qualidade não é o mesmo que agilidade ?!” Preferi não responder na hora pois essa é uma questão que envolve muitos pontos de vista, e são inúmero os fatores que podem influenciar um projeto. A interpretação que dei a essa questão é se um produto desenvolvido de forma ágil sempre terá qualidade e se um produto de qualidade significa que foi desenvolvido de forma ágil.

Bom, primeiro precisamos ter uma definição sobre o que é qualidade de software. O primeiro ponto, sobre esse assunto é, qualidade para quem? Cliente ou desenvolvedor ou ambos? Claro que o ideal é que o produto tenha qualidade para o cliente e para o desenvolvedor, pois isso resultará em bons resultados na entrega, manutenção e evolução do software.

Os processos ágeis têm como principal objetivo a adaptação as mudanças, pois sabemos que elas são inevitáveis. A partir do momento em que começamos a parar de lutar contra as mudanças e passamos a utilizá-las para atingir o nosso objetivo, teremos como resultado um produto com maior qualidade para o nosso cliente e também para os desenvolvedores. Existem práticas ágeis de desenvolvimento que contribuem muito para obter um código mais limpo, mais legível e consequentemente mais fácil de manter e evoluir. Práticas da XP (Extreme Programming) como programação em par e TDD são bons exemplos que podemos utilizar. Portanto, quando trabalhamos com processos ágeis, estamos mais próximos dos objetivos e consequentemente da qualidade do produto.

Quando temos um produto de software de boa qualidade nas mãos, não necessariamente isso significa que ele foi desenvolvido por um processo ágil. Em primeiro lugar, vamos analisar a seguinte questão: Qual é a metodologia (ou processo) de desenvolvimento mais ágil que existe? Talvez muitas coisas venham em sua mente agora, mas a resposta a essa pergunta, é o famoso DEPENDE. Por que? Porque a agilidade empregada em uma organização pode variar, ela depende do tamanho do time de desenvolvimento, depende dos recursos disponíveis, do tamanho do projeto, da presença de alguém fornecendo feedback e acompanhando o desenvolvimento do produto, etc. Para uma organização envolvida em um projeto de grande porte, geograficamente distribuído e envolvendo dezenas de desenvolvedores, talvez um RUP seja o processo mais ágil que eles consigam trabalhar, ou até mesmo um Waterfall. Nesse cenário, o caminho até o objetivo final pode ser mais oneroso, mas isso não significa que o resultado não seja um produto de boa qualidade.

Portanto, adotando processos ágeis estamos caminhando para um resultado de qualidade, tanto para o cliente quanto para o desenvolvedor, porém a agilidade não é o único caminho para se atingir a qualidade esperada num produto de software, sendo assim, qualidade não necessariamente significa agilidade.

Recomendo fortemente dar uma lida no texto produzido por Klaus Wuestefeld entitulado:  O Círculo Vicioso do Software Retranqueiro, retrata bem o cenário que vivemos no desenvolvimento de softwares.

Padrão
Enquetes

Enquete sobre desenvolvimento ágil de softwares

Padrão
.NET, Eventos

Palestra sobre Scrum e TFS

Olá pessoal, nessa última semana de outubro aconteceu na Univille a Semana da Informática onde eu dei uma palestra sobre Scrum e Plataforma Microsoft. A ideia era dar um overview do Scrum visto que havia pessoas que sabem o que é Scrum, pessoas que nunca ouviram falar e pessoas que já trabalham com Scrum.

Em seguida fiz uma rápida demostração utilizando o Team Foundation Server e o Visual Studio 2010. Espero que os alunos tenham saído com algum conhecimento a mais, ou da ferramenta ou do framework Scrum.

enjoy!

Abraços!

Padrão
Uncategorized

Uma linguagem necessária

Esse texto é na verdade um resumo de uma conversa que tive com um professor um dia desses pelo corredor da universidade onde estudo aqui em Joinville (Udesc).

Como profissional de tecnologia tenho visto que muitos dos colegas de profissão não dão a devida importância para uma linguagem extremamente necessária, a língua portuguesa.  Há certo preconceito por parte dos profissionais de tecnologia, principalmente desenvolvedores em relação a língua portuguesa. Certa vez ouvi que quem trabalha com desenvolvimento não precisa dominar o básico da língua portuguesa. Lembrando que não saber é uma coisa e não precisar é outra.

                Em primeiro lugar, devemos saber nos comunicar de forma clara e objetiva, seja na escrita ou na fala, em segundo lugar quem não tem o hábito da leitura e não tem algum domínio da língua portuguesa, terá sérias dificuldades de interpretação, e como fará ao receber um documento de requisitos em suas mãos? Ficará perguntando o tempo todo para o colega ao lado? Em terceiro lugar, o mercado está cada vez mais competitivo, é necessário que saibamos vender o nosso “peixe”, ou seja, precisamos ter um domínio ao apresentar  um projeto, uma ideia, um produto, seja para um cliente, seja na própria empresa, e se você não o fizer de forma clara, pode perder uma oportunidade.

                Sabemos que a língua inglesa é indispensável para quem é da área de T.I., porém vejo pessoas que gostam de exibir seu domínio nesse idioma e sequer sabem escrever um texto coerente, com ideias bem encadeadas, bem elaboradas e objetivas,  escrevem textos que só eles entendem. Não estou dizendo que todos os profissionais de T.I. devem dominar profundamente a língua portuguesa, o que quero dizer é que devem dominar o suficiente ao ponto que essa falta de domínio não seja um empecilho na sua vida. Se uma pessoa busca uma ascensão profissional, com certeza essa é uma das competências que ela deve dominar.

Para finalizar aí vai uma dica, a leitura é uma excelente forma de melhorar nosso vocabulário, nossa forma de se expressar, e hoje em dia onde a criatividade é indispensável, a leitura se torna ainda mais importante. Porém devemos ler qualquer coisa, seja uma ficção, um romance, um poema, qualquer coisa, sabe por quê? Porque a criatividade vem desse tipo de conteúdo, não vem de livros técnicos, lendo livros técnicos, ficaremos melhor na área que atuamos, mas isso não estimula a criatividade. Outra vez, não estou dizendo para substituir a leitura técnica por outra de um tipo diferente, estou dizendo para agregar outros tipos de leitura na sua vida!

 

Abraços!

Fernando.

Padrão