quarta-feira, 23 de junho de 2010

DECORATOR

Pattern Decorator

Definição:

Decorator é um design pattern para composição em tempo de execução, dessa forma você pode trazer novas funcionalidades através da escrita de novos códigos, sem alterar os códigos que já foram escritos, assim sendo respeita-se a “regra” do aberto para extensão, fechado pra modificação. Para a utilização do pattern decorator é necessário que as classes que vão decorar um objeto tenham o mesmo tipo básico da classe que vai ser decorada.

Alguns pontos positivos do pattern decorator:
• Adiciona funcionalidade a um objeto e não a classe;
• Pode usar mais de um decorator pra decorar um objeto;
• O decorator adiciona o seu próprio comportamento;
• O objeto é decorado em tempo de execução.

O pattern decorator também tem alguns pontos “negativos”:
• Não se aplica quando o cliente precisa de um tipo concreto do objeto, essa informação é escondida pelo decorator;
• Aumenta o numero de classes a serem gerenciadas
• Muitas classes podem tornar o código confuso

Situação problema:
A vodka é uma bebida que pode ser misturada com muitas outras coisas para a criação de drinks. Precisa-se de uma classe que faça o calculo de drinks que tenham como substancia principal a vodka e que possa ser alterada em tempo de execução.
Solução através do decorator
Através do pattern decorator nós instanciamos uma classe concreta vodka e de acordo com o drink que for criado vamos decorando-a com as classes decorator, que implementam a mesma interface. Desse modo de acordo com a especificação do drink vai somando o valor de cada elemento(método getPrice()) no preço e a descrição(método getDescription()) na descrição do produto.

Diagrama de classes



sábado, 6 de março de 2010

C# Calculo idade atual

pow... meu amigo Rubens me pediu um código pra calcular a idade atual através da data de nascimento e a data de hoje... bom... segue o codigo meio enfirulado... mas a lógica esta destacada... -D



using System;

namespace IdadeAtual
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Calculo para saber quantos anos você tem hoje \nInsira o ano do seu nascimento");
int ano = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Insira o mês do seu nascimento");
int mes = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Insira o dia do seu nascimento");
int dia = Convert.ToInt32(Console.ReadLine());

//Bloco para evitar erro em tempo de execução caso seja inserida uma informação inválida
try
{
//bloco de código que contem a lógica para calcular a idade atual
DateTime dataNascimento = new DateTime(ano, mes, dia);

int idadeAtual = DateTime.Now.Year - dataNascimento.Year;
if (DateTime.Now.Month < dataNascimento.Month ||
(DateTime.Now.Month == dataNascimento.Month && DateTime.Now.Day < dataNascimento.Day))
{
idadeAtual--;
}
//fim do bloco de calculo da idade atual

Console.WriteLine("Hoje você tem {0} anos", idadeAtual);
Console.ReadKey();
}
catch (Exception)
{
Console.WriteLine("Data Invalida");
Console.ReadKey();
}
}
}
}