.NET, Banco de Dados, Certificação, Dica de leitura, Mova-se, Técnicas, Visual Studio

Certificações Microsoft – Por onde começo?

Olá pessoal, o objetivo desse post é esclarecer um pouco mais sobre a nova linha de certificações Microsoft, e também ajudar a direcionar aquele profissional que pretende obter uma certificação mas não sabe por onde começar.

A Microsoft criou uma linha de certificações chamada MTA – Microsoft Technology Associate. Essas provas são a “base da pirâmide” para uma carreira nas tecnologias Microsoft. O objetivo dessas provas são fornecer um conhecimento sólido dos fundamentos na tecnologia em que você pretende se especializar. Fazendo uma prova MTA, você já é um MTA Certification e já possui os conhecimentos fundamentais para seguir em frente.

Dentro do nível MTA, o profissional deve escolher qual área pretende seguir carreira, podendo optar por uma das três áreas conforme figura 1.

Áreas Microsoft

Figura 1 – Áreas na plataforma Microsoft

Mais detalhes: http://www.microsoft.com/learning/en-us/mta-certification.aspx

Como já sabemos o nível MTA visa garantir o conhecimento necessário para as outras provas (MCSD e MCSA ou quem sabe um dia MCM), então essa prova é obrigatória? Não, você não precisa se tornar um MTA para fazer as outras provas. Se você já é um profissional que tem experiência na sua tecnologia, então você pode pular esse nível. Porém se você está começando agora, certamente esse é o seu ponto de partida na carreira.

Em resumo, agora temos o nível MTA (de cada área) para iniciar, e a partir desse nível, cada um escolhe a carreira que pretende seguir. Para compreender melhor como ficou o RoadMap das provas vamos ver a figura 2.

Provas Microsoft

Clique para Download em PDF.

Figura 2 – RoadMap das provas

Existem dois centros de testes que você pode agendar a sua prova, Certiport para quem é estudante e Prometric para quem não possui nenhum vínculo acadêmico. Para o caso dos estudantes, é necessário verificar se a sua instituição está registrada no Certiport, verifique com seu professor ou chefe do departamento.

Um caminho para aprender e ajudar na preparação para as provas no nível MTA é através do Microsoft Virtual Academy que oferece diversos treinamentos gratuitos para desenvolvedores, profissionais de infra e banco de dados.

Lembrando que o mercado está carente de profissionais qualificados, enquanto sobram ideias, planos de marketing, investimentos dos mais variados, profissionais com uma boa qualificação ainda são uma pequena parcela do mercado, portanto uma certificação será muito bem vinda!

 Abraços!

Padrão
.NET, Boas Práticas, Técnicas

String VS StringBuilder – O Coiote não pega o Papa Léguas!

O título desse post remete a dois personagens bem conhecidos de todos (principalmente das crianças) em que um deles sempre tenta capturar o outro, porém esse último é muito mais veloz e raramente se dá mal. A ideia por trás dessa analogia é que algumas vezes tentamos utilizar tipos de dados com limitações de desempenho em nossos códigos e então saímos fazendo mil coisas (“gambiarras”) para tentar se aproximar do melhor desempenho possível, nem preciso comentar o resultado final. Esse fato no leva ao problema de atualização de conhecimento, pesquisas, estudos sobre as novidades de uma linguagem e/ou uma ferramenta. Aquela famosa frase “Para quem só conhece o martelo como ferramenta, parafuso é prego” cabe perfeitamente aqui.
Quando precisamos trabalhar com strings, o primeiro tipo que vem a mente é o tipo String ou string (essa última é apenas um apelido). Legal, esse é o tipo mais conhecido, e naturalmente, mais usado. Acontece que um objeto do tipo String é imutável, o que isso significa? Significa que uma vez atribuído um valor a um objeto desse tipo, esse valor jamais mudará, isso mesmo, jamais mudará. Mas então como eu consigo fazer concatenações e o novo valor é atribuído ao objeto? O que ocorre por baixo dos panos é algo que talvez você nunca imaginasse, a cada nova atribuição de valor a um objeto String, é criado um novo objeto semelhante que agora contém o valor antigo mais o valor atual. Isso mesmo, um novo objeto é criado e isso é transparente aos desenvolvedores. Você simplesmente solicita o valor do objeto e lá está ele.
No momento em que um novo objeto é criado, o objeto antigo continua na memória heap a disposição do garbage collector. A figura 1 mostra esse cenário, podemos ver que ao final das concatenações sucessivas temos um único objeto que iremos trabalhar e mais quatro objetos aguardando para serem eliminados da memória.

StringVSStringBuilderFigura 1

A cada nova iteração criamos um novo objeto e descartamos o antigo, isso causa um overhead imenso nas aplicações e um péssimo aproveitamento da memória do computador. Ma então o que devemos fazer quando precisarmos utilizar strings em iterações? A solução presente no .NET chama-se StringBuilder. Essa classe foi especialmente desenhada para trabalhar com strings dinâmicas, strings em que o valor muda constantemente e garante uma performance excelente quando recebe grande quantidade de dados. Os métodos disponíveis para trabalhar com StringBuilder fazem uma referência a mesma instância e não a uma nova como no caso da String. Vamos ver na prática como isso funciona. A figura 2 mostra dois métodos, o primeiro faz um loop de 20000 iterações utilizando um objeto StringBuilder e ao final exibe em milissegundos o tempo gasto. O segundo método faz a mesma coisa porém utilizando um objeto String.

ExemploCodigo

Figura 2

ExemploStringBuilder_2

Figura 3

Ao compararmos os resultados da figura 3, podemos concluir a enorme diferença no tempo de execução. Quando chamamos o método que utiliza String, gastamos um tempo de 2637 milissegundos e o mesmo loop utilizando StringBuilder consumiu apenas 10 milissegundos.
Então o tipo de dados String é um tipo ruim de trabalhar? A resposta é que String não é um tipo de dados ruim para trabalhar, porém ela atende exatamente aquilo que ela se propôs a atender, trabalhar com strings estáticas ou com poucas mudanças.

Abraços!

Padrão
Uncategorized

Resumo do Livro Engenharia de Software de Ian Sommerville 8ª Ed.

Segue um resumo que preparei do livro de Ian Sommerville  – Engenharia de Software 8ª Ed. Esse resumo aborda os principais tópicos dos capítulos 1 ao 7. Aproveitem! Imagem

Introdução a Eng. De Software

É um ramo da engenharia com foco no desenvolvimento de softwares dentro de custos, prazos adequados e alta qualidade. Software é abstrato, não há limitações físicas. Essa falta de limitações pode torna-lo extremamente complexo e de difícil compreensão.

O conceito de ES foi proposto em 1968 em uma conferência para discutir o que foi chamado de “crise do software”, que resultava do surgimento de novos hardwares de computadores baseados em CI’s e tornava sistemas impensáveis até então em projetos realizáveis e mais complexos que os anteriores. O desenvolvimento informal não era suficiente, atraso, não confiável, difícil de manter, baixo desempenho. Novas técnicas surgiram pois o custo do hardware caía enquanto do software aumentava. Até hoje em dia essas técnicas não são aplicadas efetivamente por muitas empresas.

O QUE É SOFTWARE?

                Além do programa executável, são todos os dados de documentação(sistema e usuário), arquivos de conf. necessários a operação do software.

Existem 2 tipos de produtos de software:

  1. Produtos genéricos: Sistemas do tipo Stand-alone e vendido no mercado para qualquer cliente;
  2. Produtos sob encomenda (ou personalizados):  Encomendado por um determinado cliente/ ou modificado para ele;

DIFERENÇAS:

Nos produtos genéricos quem controla a especificação é a empresa que desenvolve. Já nos produtos sob encomenda, essa especificação é controlada pela empresa que compra o produto.  Existe também o caso em que um produto genérico é modificado para atender um cliente específico (ERP’s como SAP).

O QUE É ENG. DE SOFT.?

É uma disciplina de engenharia relacionada com todos os aspectos da produção de software, desde a especificação até a manutenção.

Por que Disciplina? – Os engenheiros aplicam teorias métodos e ferramentas onde for apropriado e de forma seletiva mesmo quando não existem teorias e métodos aplicáveis, e fazem as coisas funcionarem.  Trabalham também sob restrições organizacionais e financeiras.

Todos os aspectos? – Porque também se relaciona com atividades do gerenciamento do projeto, desenvolvimento de ferramentas, métodos e teorias que apoiem a produção.

Em geral utiliza-se uma abordagem sistemática e organizada, mas pode ser extremamente eficaz selecionar uma abordagem alternativa e menos formal para uma determinada circunstância.

DIFERENÇA ENTRE E.S. E C.C.

A C.C. diz respeito as teorias e os métodos que formam a base para computadores e softwares. A E.S. se dedica aos problemas práticos da produção de software. Teorias mais elaboradas da C.C. nem sempre podem ser aplicadas a E.S. nos seus problemas reais e complexos.

DIFERENÇA ENTRE ENG. DE SOFTWARE E DE SISTEMAS

A Eng. Sistemas trata de todos os aspectos do desenvolvimento e da evolução de sistemas complexos. Relacionada ao desenvolvimento de hardware, políticas e processos de implantação e a própria Eng. De Soft. Mais envolvida com definição de arquitetura, integração de partes e menos envolvidos com eng. Dos componentes, hardware, software etc.   Enquanto a Eng. De Soft. se dedica aos problemas práticos da produção do software e faz parte da engenharia de sistemas.

O QUE É PROCESSO DE SOFTWARE?

É um conjunto de atividades e resultados associados que produz um produto de software(software, documentação, etc).

Atividades de processos comuns a todos os processos:

1 – Especificação: Definição do que será produzido;

2 – Desenvolvimento: Projetado e programado;

3 – Validação: Verificação se o que foi feito é o que o cliente deseja.

4 – Evolução: Adaptação as mudanças futuras e/ou melhorias;

Diferentes tipos de sistemas necessitam de diferentes tipos de desenvolvimento. Ex.: Alguns podem requerer que sejam especificados totalmente antes do desenvolvimento, para outros, essas atividades podem ocorrem em paralelo. O uso de um processo inadequado pode reduzir a qualidade ou a utilidade do produto de software a ser desenvolvido e/ou aumentando os custos de desenvolvimento.

O QUE É UM MODELO DE PROCESSO DE SOFTWARE?

É uma descrição simplificada do processo sob uma determinada visão. Os modelos incluem atividades do processo, produtos de software e os papéis das pessoas envolvidas.

A maioria dos modelos é baseada em um dos 3 modelos gerais ou paradigmas de desenvolvimento:

  • CASCATA – Fases separadas de processos. Uma fase não inicia sem que outra termine e seja aprovada.
  • DESENVOLVIMENTO ITERATIVO – Intercala as atividades. Desenvolvido rapidamente com base em especificações abstratas e depois é refinado com informações dos clientes para que possa satisfazer a necessidade desse.
  • E.S. BASEADA EM COMPONENTES – Supões que partes do sistema da já existem. Concentra-se mais na integração dessas partes do que no seu desenvolvimento a partir do início.

QUAIS SÃO OS CUSTOS DA ENG. DE SOFT.?

Não existe uma resposta simples. No modelo cascata, os custos de especificação, projeto, implementação e integração são medidos separadamente. Nesse caso, integração e testes são as atividades mais caras, entre 40 e 50% do custo total de desenvolvimento.

Na abordagem iterativa, não existe uma linha precisa entre especificação, projeto e desenvolvimento. Custos de especificação reduzidos, pois apenas uma especificação de alto nível é produzida antes do desenvolvimento, e também precisa de uma atividade de teste independente uma vez que a implementação inicial esteja completa.

A CBSE  tem sido aplicada  apenas nos últimos tempos, e sabemos que os custos de desenvolvimento são menores que os custos de integração e testes, porque é necessário assegurar que os componentes utilizados, realmente satisfazem as especificações e funcionam conforme o esperado, mas além disso não há dados precisos para os custos.

Custos também incorrem em alterações após a sua liberação para o uso. Os custos de evolução variam muito de acordo com o tipo de sistema.

Essa abordagem de custos é válida para softwares sob encomenda.  Nos produtos genéricos, há uma abordagem evolucionária, e os custos de especificação são relativamente baixos. Já os custos de testes são mais altos justamente por serem previstos para rodar em diferentes ambientes de configuração.

Os custos de evolução de produtos genéricos são relativamente difíceis de serem estimados, pois não são avaliados separadamente como nos softwares sob encomenda, mas são simplesmente custos de desenvolvimento.

O QUE SÃO MÉTODOS DE ENG. DE SOFTWARE?

                Um método é uma abordagem estruturada para o desenvolvimento de software, cujo objetivo é facilitar a produção de software de alta qualidade dentro de custos adequados. Não há um método ideal, e diferentes métodos possuem diferentes áreas onde são mais aplicáveis. Todos os métodos são baseados na ideia de modelos de desenvolvimento.

O QUE É CASE?

São ferramentas utilizadas para dar apoio as atividades do processo de software, tais como análise, modelagem, depuração e testes. Todos os métodos vêm atualmente com uma tecnologia case associada.

OQUE SÃO ATRIBUTOS DE UM BOM SOFTWARE?

Os atributos de um software refletem o comportamento do software, enquanto esse está em execução, sua estrutura e organização dos fontes bem como a documentação associada.

Alguns atributos: Facilidade de entendimento dos fontes, tempo de resposta a uma consulta. O conjunto de atributos varia de acordo com a sua aplicação. Pode-se resumir em: Facilidade de manutenção, confiança, eficiência e aceitação.

QUAIS SÃO OS DESAFIOS CHAVES DA E.S.?

Hoje a E.S. se depara com 3 desafios:

Desafio da heterogeneidade: É necessário que os sistemas de software operem com sistemas distribuídos e também com sistemas mais antigos (legados). Necessário técnicas para desenvolver sistemas flexíveis e confiáveis para adaptar-se a essa heterogeneidade.

Desafio de entrega: Muitas técnicas tradicionais demandam tempo para obter a qualidade. O desafio da entrega consiste em reduzir os tempos de entrega dos sistemas grandes e complexos sem comprometer a qualidade.

Desafio da confiança:  Os softwares estão presentes em todos os aspectos da nossa vida e precisamos confiar nele. O desafio da confiança consiste em desenvolver técnicas que demonstrem aos usuários que é possível confiar nele.

RESPONSABILIDADE PROFISSIONAL E ÉTICA

Confidencialidade: respeitar a confidencialidade de seus funcionários ou clientes independente ou não de acordo formal.

Competência: Não deve conscientemente aceitar um trabalho que esteja fora da sua competência.

Direitos sobre propriedade intelectual: Estar ciente das leis locais, patentes e assegurar que a propriedade intelectual de funcionários e clientes esteja protegida.

Mau uso de computadores: Evitar mau uso desde o trivial (como jogos por exemplo) até o mais sério (disseminação de vírus).

Baixar o Resumo no formato PDF.

Abraços!

Padrão
Eventos, Mova-se, Uncategorized

Meu primeiro TDC – (2010 São Paulo) – A Luz no fim do túnel

Imagem

Quem já participou de alguma edição do T.D.C., sabe do que estou falando.  Através de um amigo meu (Marcos Dallagnelo) fiquei sabendo de um evento para desenvolvedores que aconteceria em São Paulo. Ao dar uma olhada na grade de palestras fiquei impressionado com a variedade de tecnologias abordadas além de nomes bem conhecidos da comunidade de desenvolvimento. Decidimos ir e participar de todos os dias (na época eram 3 dias). Saímos de Joinville-SC às 21:30 com destino a São Paulo. A viagem levou em torno de 8 horas, e próximo às 05:30 da manhã já estávamos na rodoviária do Tietê. Tomamos um banho e pegamos o metrô até a paulista.

Chegando lá, tomamos um café com aquelas moças que vendem bolinhos e copos de café na beira da avenida (achei bem barato até rsrs) e em seguida partimos para a universidade Anhembi Morumbi. Às 07:00 horas já estávamos em frente a universidade aguardando o início do evento, enquanto isso ficamos ali trocando uma ideia e fazendo um networking, foi bem legal! Eu estava com medo que o sono batesse forte durante o evento, pois oito horas de estrada deixam você desgastado.  Esse era nosso primeiro dia no TDC, sexta feira 21/08. Nesse dia participamos da trilha de testes. Fomos para o auditório principal da universidade onde ocorreu a abertura daquele primeiro dia de evento. Já de início pudemos perceber que o dia seria promissor, além do nível dos palestrantes, organização, e a variedade de tópicos abordados atenderia a todas as expectativas do público ali presente. O sono bateu? Lógico que não, era impossível estar no TDC e cochilar. Uma grande maioria dos colegas participantes comigo (presentes na sala) eram da área de testes (claro, eu estava na trilha de testes). Como sei da importância de testar bem uma aplicação, participei dessa trilha, e vi coisas fantásticas, imagina para quem é tester!

O Sábado foi a vez do .Net, aí sim já estava em casa. Foi a partir desse dia que comecei a ver a luz no fim do túnel, comecei a ver tecnologias e abordagens totalmente novas e isso empolga muito! Digo que comecei a ver luz no fim do túnel porque foi a partir daí que comecei a me dedicar em aprender ainda mais sobre a tecnologia e explorar ao máximo as ferramentas que utilizo. Vi que o que eu vinha fazendo era algo como “Martelada Designer”, fazendo tudo apenas com if, while e for. Posso afirmar que esse evento foi um marco na minha vida profissional, a partir daí passei a estar ligado em comunidades, eventos e tudo o que diz respeito a isso. Cheguei a dar palestras em universidades aqui da região e escrever alguns artigos para a revista .Net magazine (a qual devido a outros projetos me afastei temporariamente, logo volto).

Faltou o terceiro dia né, bom o terceiro dia foi o dia do Agile, para fechar com chave de ouro a mudança que vivi. Palestras que abordavam diversas perspectivas em torno da agilidade e uma demostração de coach ao final do dia foi sem dúvida espetacular. Já estamos no domingo e é hora de retornar para Joinville. Saímos as 22:30 de São Paulo e perto das 06:00 já estávamos em casa. Então um banho e voltar a realidade.

Participei do TDC 2011 em Floripa e sempre que posso estou presente nesse evento. Vale muito a pena participar de um evento como esse, você volta com outra visão do que faz no dia a dia. Recomendo.

Agora estamos com o TDC 2013 saindo do forno, eu quero estar presente nesse também, e quem puder participe, vale a pena!

Abraços!

Padrão
Eventos

Evento Técnico – #BluDotNet

Olá Pessoal,

No dia 06 de abril de 2013 acontecerá mais um evento em Blumenau da comunidade BluDotNet.  O evento contará com nomes bem conhecidos da comunidade de desenvolvedores e a grade de palestras está bem interessante! Deem uma conferida:

  • Desenvolvendo com Kinect
    por Gabriel Cardoso – Benner Sistemas/SC
  • Acceptance Test Driven Development
    por Rafael Mueller – Inventti/SC
  • ASP.NET WEB API
    por Giovanni Bassi – Lambda3/SP – MVP de C#
  • Desenvolvendo software como serviço para negócios
    por Fernando Correia – Benner Sistemas/SC
  • Adotando Continuous Delivery
    por Marcelo Oliveira e Rafael Magrin – ThoughtWorks/RS
  • Fundamentos do CQRS
    por Elemar Junior – Promob/RS – MVP de C#

Apesar de ser gratuito, as vagas são limitadas, então faça sua inscrição.

Abraço!

Padrão
.NET, Banco de Dados, Boas Práticas

LocalDb – Uma alternativa simples e rápida

Performance é um item crucial no dia a dia dos programadores. Queremos agilidade em todas as tarefas do dia a dia. Mas muitas vezes precisamos usar ferramentas que não seriam necessárias se tivéssemos alguma alternativa melhor. Na grande maioria dos casos podemos dizer que “matamos mosquito com bazuca”, ou seja temos uma ferramenta cheia de recursos e acabamnos por utilizar uma funcionalidade bem específica (e usamos sempre a mesma funcionalidade) da ferramenta.

O SQL Server é um banco de dados poderoso que vem acompanhado de uma enorme variedade de recursos para um bom gerenciamento dos dados. Na grande maioria das vezes instalamos o SQL Server apenas para ler e gravar dados, ou seja um simples repositório de dados. Só que isso tem um preço, estamos desperdiçando ciclos de CPU e memória com ferramentas que jamais usaremos.

Como uma alternativa a esse cenário a Microsoft disponibilizou uma feature do SQL Server Chamada LocalDb.

Mas o que é o LocalDb?

O Local Db é uma versão simplificada (nem por isso desprovida dos recursos principais) do Sql Server Express, voltada para os desenvolvedores afim de evitar a instalação desnecessária  de uma edição completa do SQL Server.

Vantagens:

  • Instalação rápida e simples. Versão 32 bits tem 28 MB e a versão 64 bits 33 MB;
  • Não necessita configuração e administração;
  • Suporta procedures, triggers, tipos geométricos e geográficos, e o memso suporte a T-SQL Language;
  • Reduz o consumo de memória e CPU, pois só é iniciado quando necessário e também é desligado automaticamente se deixar de ser utilizado por um tempo;
  • Não precisa de instância adicional (como o Express);
  • Instalação única para todos os usuários do computador;
  • Suporta XML,BLOB, LINQ;
  • Sem limite de conexões.

Requisitos:

  • Privilégios Administrativos para instalação;
  • 140 MB de espaço disponível;
  • .Net 4.0 (para atualizar para 4.02).

Limitações:

  • Não roda em Windows XP, Server 2003 e 2000;
  • Uma instalação de 32 bits não roda em Windows 64 bits;
  • Visual Studio 2010 RTM não suporta LocalDb;
  • Não roda em dispositivos móveis;
  • Limite do tamanho do banco em 10 GB;
  • Utiliza apenas uma CPU;

 

Bom, temos então uma opção ao desperdício de recursos quando usamos o SQL Server da maneira mais básica. Eu particularmente prefiro essa versão instalada no meu note, do que deixar diversos serviços rodando de maneira desenecessária e deixando mais tudo mais lento.

O LocalDb pode ser baixado nesse link.

Links e Referências:

http://msdn.microsoft.com/pt-br/library/hh510202.aspx

http://www.sqlcoffee.com/SQLServer2012_0004.htm

http://blogs.msdn.com/b/jerrynixon/archive/2012/02/26/sql-express-v-localdb-v-sql-compact-edition.aspx

http://blog.lambda3.com.br/2013/03/restore-com-localdb/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+Lambda3Blog+%28Blog+Lambda3%29

Abraço!

Padrão
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