May 03

State Pattern em ColdFusion

State é um padrão de projeto de software usado para permitir que um objeto altere o seu comportamento quando o seu estado muda. Ao utilizar este padrão, parecerá que o objeto mudou de classe.
O padrão State deve ser utilizado nas seguintes situações:
O comportamento de um objeto depende fortemente do seu estado e ele deve alterar o seu comportamento em tempo de execução dependendo do estado. Os métodos têm instruções condicionais grandes em que as condições dependem do estado do objecto. Este estado é normalmente representado por uma ou mais constantes do tipo enumerado. Frequentemente, vários métodos contém esta mesma estrutura condicional. O padrão State coloca cada ramo da instrução condicional numa classe separada. Desta forma, o estado do objecto pode ser tratado como um objecto ele próprio, o qual pode variar
Fonte: http://pt.wikipedia.org/wiki/State

Quando usar o Padrão State:

– Quando uma classe define muitos comportamentos;
– Quando classes relacionadas forem diferentes apenas no seu comportamento;
– Quando você precisar de diferentes variações de um mesmo algoritmo.

Para exemplificar o uso deste padrão vamos criar um código simples onde NÃO faz uso do State e depois veremos como aplicá-lo neste mesmo contexto.
O cenário em questão é um ventilador onde temos os estados/velocidade: Desligado, Baixa, Média e Alta. Cada vez que pressionamos o botão sua velocidade vai aumentando, quando chega no máximo (Alta) ele desliga, ou seja, Desligado -> Baixa -> Média -> Alta -> Desligado.
Read the rest of this entry »

Permanent link to this article: http://ensina.me/coldfusion/state-pattern-em-coldfusion/

Apr 30

Facade Pattern em ColdFusion

Em padrões de projeto de software, um façade (fachada em francês) é um objeto que disponibiliza uma interface simplificada para uma das funcionalidades de uma API, por exemplo. Um façade pode:

  • Tornar uma biblioteca de software mais fácil de entender e usar;
  • Tornar o código que utiliza esta biblioteca mais fácil de entender;
  • Reduzir as dependências em relação às características internas de uma biblioteca, trazendo flexibilidade no desenvolvimento do sistema;
  • Envolver uma interface mal desenhada, com uma interface melhor definida.

Fonte: http://pt.wikipedia.org/wiki/Fa%C3%A7ade

Em resumo, um Facade é um objeto que proporciona uma visão simplificada de um sistema subjacente mais complexo, o que torna mais fácil de usar e entender.

Vamos exemplificar o uso deste padrão com um sistema bem simples de construção de carros.

Um carro é formado por um conjunto de objetos e cada um deles pode ser complexo, por exemplo: Direção Hidráulica exige uma série de fatores/passos para construir, envolve caixa de direção, coluna de direção, mangueira, bomba hidráulica, polia, correia, etc… Assim como a construção do próprio carro exige uma série de objetos e passos para construí-los, imagine criar um sistema desses com um método de construção de carros onde a lógica está toda envolvida nesse método, ou seja, por si só a construção de um carro já é complexa, some isso com cada objeto subjacente que necessita ser criado para formar o todo.
Read the rest of this entry »

Permanent link to this article: http://ensina.me/coldfusion/facade-pattern-em-coldfusion/

Apr 27

Usando Polimorfismo no ColdFusion

A primeira coisa diferente do comum em Orientação a Objetos, que aprendi foi o Polimorfismo, antes até de saber o que era, Singleton, Factory e etc… Eu estava trabalhando com PHP e precisava fazer umas classes de abstração que tinha que permitir usar Bancos de Dados, MySQL e Oracle. Ou seja, o desenvolvedor, poderia implementar usando MySQL ou Oracle, usando o mesmo pacote de abstração.

E então eu fui buscar uma forma de fazer, sem ter que gerar muita manutenção para o desenvolvedor e que se possível não tivesse que fazer IFs dentro do código.
E então, através de um amigo, ouvi falar do Polimorfismo na programação e fui pesquisar.
Bom, para os que não sabem o que é o Polimorfismo, o termo vem do grego e significa “Muitas formas” (Poli = Muitas , Morphos = Formas).
O Polimorfismo te da a condição de usar referências de tipos de classes mais abstratas para representar o comportamento de classes concretas.
Read the rest of this entry »

Permanent link to this article: http://ensina.me/coldfusion/usando-polimorfismo-no-coldfusion/

Apr 27

Implementando a Camada ViewHelper

A próxima parte da nossa série de artigos sobre desenvolvimento em camadas é o ViewHelper.
O ViewHelper eu adoto para evitar de misturar html nos meus objetos.
Já vi muita implementação que uma classe retornava HTML, um exemplo seria uma classe que faz uma consulta no banco e já retorna uma >li< populada.
No html você faria:


<cfoutput>
<ul>
	#variables.objeto.getMenu()#
</ul>
</cfoutput>

Read the rest of this entry »

Permanent link to this article: http://ensina.me/coldfusion/implementando-a-camada-viewhelper/

Apr 26

APOO – Análise e Projeto Orientado a Objeto

Quando vamos começar um projeto o normal em nossas cabeças é, vamos abrir a IDE e vamos codificar.

Na verdade o início deve ser bem diferente disso.

Muita gente vai falar, para começar um projeto, devemos, definir o escopo do projeto, fazer a Análise e a documentação do projeto. Modelar o banco e aí sim, programar.

Está certo, mas quando chega na mão da Arquitetura de Software começa uma nova etapa de Análise antes de os códigos propriamente ditos serem digitados.

Existe outro tipo de Análise, que na verdade não para aí, se une ao projeto de software. Esse processo, se é que podemos chama-lo assim se chama APOO (Análise e Projeto Orientado a Objeto). Isso é matéria de faculdade em algumas universidades.

Quando iniciamos nossos projetos por essa Análise e pelo Projeto, encontramos enquanto ainda está no papel, alguns problemas que facilita aos arquitetos definirem que Design Pattern vão usar, quais são os problemas, se irão usar alguma DSL(Domain Specific Language) para tratar dos problemas, se a tecnologia que usamos por padrão realmente vai servir para o projeto e quando chegar nas mãos dos desenvolvedores, o projeto vai fluir melhor.

Ao trabalhar com APOO:

Permitimos que a Análise modele os problemas e ajuda a definir as atividades necessárias para entender o domínio do problema (o que deve ser feito). É uma maneira de investigar melhor o andamento do projeto.

O Projeto: Modela a solução e define como será implementado toda a resolução dos problemas encontrados pela análise.

Ao fazer toda a Análise, estamos garantindo informações que trarão uma visão mais clara do projeto ao cliente, já que essa análise deve ser feita focada na documentação obtida em entrevista com o cliente ou usuário da futura aplicação.

O projeto por outro lado, será útil para os programadores, que terão detalhes mais claros de suas atividades, tornando o processo de desenvolvimento mais rápido e claro.

Para fazer esse processo, deve-se pensar de forma Orientada a Objetos, e empregar uma perspectiva de Objetos, Entidades, coisas, conceitos.

O que vemos por aí, é muitas vezes as equipes de arquitetos discutindo problemas durante o desenvolvimento em tempo real, o desenvolvedor informa o problema encontrado e para-se o processo de desenvolvimento para achar uma solução. Quando deveria ter sido feito ao contrário, e o desenvolvedor não pararia nesse problema, já que o mesmo nem existiria mais.

Se nossos processos fossem assim, teríamos desenvolvedores mais felizes!

Abraços e até a próxima.

Paulo Teixeira
Post original

 

Permanent link to this article: http://ensina.me/coldfusion/apoo-analise-e-projeto-orientado-a-objeto/

Apr 26

Entendendo Injeção de Dependências

O que é a Injeção de Dependência?

A injeção de dependência é um design pattern que tem o intuito de desacoplar os objetos da aplicação. Os Objetos são instanciados do lado de fora da classe. Deve ser feito um gerenciador para essas instâncias. Esse gerenciador, conecta os objetos de forma a permitir que a aplicação use cadas instância seja necessária, ou seja, utilizamos a Injeção de Dependência quando é necessário manter baixo o nível de acoplamento entre diferentes módulos de uma aplicação.

A Injeção de Dependências nos permite ter um controle total do nosso core, já que se precisarmos modificar toda uma interface, o core fica intacto e funcionará corretamente com a nova interface. Além de em caso de uma modificação em um módulo, não afetar os demais módulos, já que os mesmos não tem um acoplamento dependente, simplesmente requerem o objeto instanciado para ser usado nas suas necessidades.
Read the rest of this entry »

Permanent link to this article: http://ensina.me/coldfusion/entendendo-injecao-de-dependencias/

Apr 25

Mediator Pattern em ColdFusion

Um mediator, em linguagem de programação de computadores, é quem desacopla e gerencia as colaborações entre um grupo de objetos. Define um objeto que encapsula as interações dentre desse grupo.
É um dos 23 padrões de projetos descritos para reutilização de softwares orientados a objetos. Ele permite a unificação da interface de um sistema. Esse padrão é considerado um padrão comportamental devido à maneira como ele pode alterar a execução do software.
Normalmente, um programa é feito por um número muito grande de classes. Então, a lógica e o código são distribuídos entre essas classes. No entanto, quanto mais classes houver no seu projeto, a comunicação entre essas classes será mais complexa. Isso faz com que a leitura e a manutenção do programa fique mais difícil, tal situação acarreta na dificuldade de mudanças no projeto, já que, uma simples mudança pode afetar todo o código e as outras classes.
Com o padrão mediator, a comunicação entre os objetos é encapsulada com um objeto mediador. Isso reduz a dependência entre os objetos que estão se comunicando.
Fonte: http://pt.wikipedia.org/wiki/Mediator

O padrão Mediator fornece uma técnica para tratar a lógica de comunicação complicada entre vários objetos que precisam interagir uns com os outros.

Quando usar?

Abaixo está um exemplo desse tipo de comunicação:
Read the rest of this entry »

Permanent link to this article: http://ensina.me/coldfusion/mediator-pattern-em-coldfusion/

Apr 23

Entendendo o Padrão Composite

Quando trabalhamos com Orientação a Objetos, existem momentos que enfrentamos alguns problemas conceituais e que se analisar-mos corretamente, misturamos a implementação e saímos da Orientação a Objetos.

Vamos pensar num cenário um pouco complexo.
Digamos que temos um sistema de gerenciamento de pedidos de automóveis em uma agência.
Porém em nosso processo de compras, temos dois tipos de produtos em modo geral.

  • Automóveis
  • Frotas

Onde Automóveis é uma compra de um ou mais automóveis por um comprador. E Frotas, seria onde uma empresa solicitaria a compra de vários automóveis afim de fazer uma frota de carros.
Read the rest of this entry »

Permanent link to this article: http://ensina.me/coldfusion/entendendo-o-padrao-composite/

Apr 20

Iterator Pattern em ColdFusion

Iterator, em programação de computadores, permite a “iteração” e um modo de acesso a elementos de um agregado de objetos, sequencialmente, sem exposição de estruturas internas.
Fonte: http://pt.wikipedia.org/wiki/Iterator

Em Orientação a Objetos frequentemente utilizamos estruturas de dados para listar algum conteúdo, normalmente há uma função no componente que retorna esses dados que podem ser de vários tipos, por exemplo: array com índice numérico, estrutura (struct) utilizando uma chave como índice, listas sequenciais, query, e por aí vai….

Por exemplo, em um carrinho de compras podemos armazenar os produtos em um array e criamos um método que retorna esse conjunto de produtos. Podemos exibir esse conteúdo do carrinho em vários lugares do sistema bem como apresentá-los de várias formas: exibir todos os itens, exibir um resumo, total dos produtos, dividir por categorias, etc..
Read the rest of this entry »

Permanent link to this article: http://ensina.me/coldfusion/iterator-pattern-em-coldfusion/

Apr 19

Implementando a Camada de Controle – Controller

Vamos a quarta parte do artigo de arquitetura para desenvolvimento em camadas, para quem ainda não viu os artigos anteriores desta série, veja os links abaixo:

Pode dar uma lida também nesse post de referência:

Uma visão sobre arquitetura de softwares.
Conforme falamos nos artigos anteriores, vamos mais uma vez apresentar de forma prática a implementação de uma metodologia de desenvolvimento de softwares em camada.
Read the rest of this entry »

Permanent link to this article: http://ensina.me/coldfusion/implementando-a-camada-de-controle-controller/

Older posts «

» Newer posts