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();
}
}
}
}

terça-feira, 1 de setembro de 2009

What is Enterprise Portal? (Parte 2)




    Hoje continuaremos a falar sobre Enterprise Portal com o objetivo de ajudar as pessoas que buscam sua certificação mb6-825. Falaremos um pouco sobre configuração e instalação
Segurança do Enterprise Portal
    A segurança do EP usa uma combinação de features do:
  • Microsoft Active Directory
  • WSS ou MOSS
  • Controle de acesso do Ax
Acesso de usuários do Enterprise Portal
    O diagrama a seguir mostra como o Microsoft Active Directory, SharePoint Services e o controle de acesso do Ax controlam o acesso do usuário e o conteúdo disponível usando EP
Se o usuário não está listado no AD, o usuário não pode acessar qualquer recurso da rede. Assim mostramos a importância do Active Directory no Enterprise Portal
Objetos do Enterprise Portal na AOT
Quando abrimos o a AOT do Microsoft Dynamics Ax podemos reparar que há um nó chamado web. Os itens relacionados ao EP estão nesse nó. Os elementos do nó Web entram nos dois maiores grupos:
  • Microsoft Dynamics AX 2009 Web objects ( como Web Forms, Web Reports, Web Menu Itens, Web Contents e mais

  • Web Files (Site Definitions, Page     Definitions, Site templates e mais)
    Vamos listar alguns sub-nós:
  • Web Forms - É a interface do usuário Web com a base de dados. Use o Web Form para mostrar, trocar e inserir dado. O design de um Web Form assemelha-se aos forms standarts do Ax.
  • Web Reports – Habilita os usuários da web para imprimir ou mostrar informações resumidas da base de dados em uma variedade de layouts
  • Web Menu Items – Referencia os elementos de navegação: URL's e Actions(Ax Classes)
  • Web Content – Referencia os elementos de conteúdo: Display(Web Forms) e Output(Reports/Web Reports)
  • Web Menus – Use web menu items para linkar a páginas    de web parts, classes ou queries
  • Web Files – Arquivos requisitados pelo EP no servidor é mantido dentro de web files.

  • Web Modules – Módulos que correspondem a centros de atividades específicos do EP acessados usando um menu universal


    Data Sets
    Para acessar dados no Ax com o EP, você deve usar um data set. Depois que o Data Set é criado, pode criar um AxDataSource em um User Control para acessar o Data Set.

Briefing da prova:
1. Microsoft Dynamics AX 2009 and the Enterprise Portal Framework include customizable home pages
called Role Centers. Role Centers display specific data, reports, alerts, and other tasks associated with:
A.A user's job role profile.
B.A user's work location.
C.A user's preferred language option.
D.A user's work schedule. 
Answer: a 
2. Microsoft Dynamics AX 2009 Enterprise Portal uses several common Microsoft software components.
Which of the following is not used by Enterprise Portal?
A.IIS
B.Windows SharePoint Services
C.Microsoft SQL Server
D.Internet Security and Acceleration Server 
Answer: d 
3.  In  the  overall  architecture  of  Enterprise  Portal,  a  software  component  is  required  to  make  the
connection  between  the Enterprise Portal Web  site  and  the Microsoft Dynamics AX  2009  application.
What software component is used to make this connection?
A.AOT
B.IIS
C..NET Business Connector
D.Microsoft Active Directory 
Answer: c 
4. Microsoft Dynamics AX 2009 and the Enterprise Portal framework include Role Centers. What are Role
Centers?
A.Customizable home pages that display reports and other key business information.
B.Configuration pages where users are assigned specific job functions.
C.Configuration pages where user permissions are configured based on job role.
D.Special Web pages where user job assignments can be posted. 
Answer: a 
5. The Microsoft Dynamics AX 2009 Enterprise Portal is designed for the following users
Choose the 3 that apply.
A.Users external to the organization, such as customers and trading partners.
B.Those users who only require occasional access to Microsoft Dynamics AX 2009 data.
C.An employee who is traveling and needs to access their own Microsoft Dynamics AX 2009 data.
D.An employee who is an office worker and does not travel as part of their job. 
Answer: abc

sexta-feira, 28 de agosto de 2009

Contando caracteres sem o Lenght no C#

Salve salve amigos desenvolvedores, ontem foi proposto na faculdade criar um metodo que retorna-se o numero de caracteres de uma string, sem usar funções como o Lenght, abaixo segue uma solução em C# para o desafio proposto




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

//Desenvolvido por Momô
//visite jedidevelopers.blogspot.com

namespace dev5{
class Program
{
public void contadorString(string nome)
{
string letras;
//variavel usada para imprimir as letras q ja foram contadas
int contador = 1;
//contador de letras
Console.WriteLine(nome + "\n");
int a;
a = Convert.ToInt16(nome.ToCharArray().Count());

while (a >= contador)
{
//extraindo letra por letra da string principal
letras = nome.Substring(0, contador);
contador = contador + 1;
//imprime a letra extraida da string e o numero de letras ate o momento
Console.WriteLine("letras do nome " + letras + "\n" + "numero de caracteres " + (contador - 1));
Console.ReadLine();
}

//saiu do loop, fim da contagem de caracteres
Console.WriteLine("Fim da contagem de caracteres");
Console.ReadLine();
}
static void Main(string[] args)
{
//instância a classe
Program p = new Program();
//chama o metodo contadorString e passa a string a ser contada
p.contadorString("jedidevelopers.blogspot.com");
}
}
}


Isso ae,
Abraço e bom fds

quinta-feira, 27 de agosto de 2009

What is Enterprise Portal? (Parte 1)

Hoje falaremos sobre Microsoft Dynamics Ax Enterprise Portal 2009 voltado pra um público que busca sua certificação MB6-825.
Enterprise Portal é uma combinação de muitas technologias standart da Microsoft, que tem por finalidade extender a interface disponível no Client do Microsoft Dynamics Ax 2009 para um portal web. Seus componentes principais são:
  • Windows SharePoint Services and Microsoft Office SharePoint Server

  • .NET Business Connector

  • IIS

  • Criação e Implantação do Site

  • Role Centers and User Interface
Arquitetura do Enterprise Portal

Enterprise Portal Web Site Parts

O Enterprise Portal (EP) usa o Windows SharePoint Services (WSS) componentes para construir as páginas da web.
Na terminologia do SharePoint, uma página de Web Part (Web page do SharePoint) é montada usando Web Parts. Exemplos de Web Part:


  • Discussion lists

  • Announcements

  • Document Workspaces

Navegando pelo Enterprise Portal

As Web Parts do EP são agrupadas para assegurar uma consistência e um leiaute uniforme para o usuário em todo o portal. Uma visão esquemática é mostrada no diagrama a seguir:

Por hoje é isso, futuramente daremos algumas dicas para a prova de certificação MB6-825, peço que comentem nossos posts pedindo assuntos a serem abordados, tanto Enterprise Portal como outros assuntos sobre desenvolvimento. Até a próxima!!

quarta-feira, 26 de agosto de 2009

Dica de Livos C#

Pra vocês que estão começando a programar e escolheram o C#, seguem algumas dicas de alguns ótimos livros pra começar a desenvolver!

C# HOW TO PROGRAM - DEITEL

Bom, este é um ótimo livro de C#, e como diria um amigo meu "Se a sua mãe ler este livro e se empenhar, ela aprende a programar"

http://www.amazon.com/How-Program-Harvey-M-Deitel/dp/0130622214

tem edição em portugues tambem

Head firs C#

Livro com uma abordagem diferente sobre programação, muito bom também e até com algumas piadinhas perdidas pelo livro

http://www.amazon.com/Head-First-C-Andrew-Stellman/dp/0596514824

Também tem edição em portugues


BEGINNING C# Programando
Um bom livro sobre C#, este eu não cheguei a ver, mas tenho indicações de amigos como um livro muito interessante tambem sobre C#

Logo mais, mais dicas sobre livros
=D

terça-feira, 25 de agosto de 2009

x++ Ajustando a declaração de Variaveis

O método abaixo, deve ser criado na Classe EditorScript, e ajustara a declaração de variavéis conforme às BEST PRACTICES do AX.



void adjust_Declaration(editor e)
{
str copiaLinha;
str ajustadeclaracao;
int maiorEpaco;
int contamaiorLinha;
int contaPosCaracter;
int quantEspVazio;
int verifmaiorLinha;
int posInicial = e.selectionStartLine();
int posFinal = e.selectionEndLine();
int nivel;
int maiorLinha;
container linhas;
;

//Esse laço percorre todas as linhas selecionadas e insere as linhas no container
for (contamaiorLinha = posInicial; contamaiorLinha <= posFinal; contamaiorLinha++)
{
e.gotoLine(contamaiorLinha);
verifmaiorLinha = 0;
nivel = 1;
copiaLinha = ""; //variavel auxiliar para tratar os dados inseridos no container

//Esse laço percorre toda a linha para verificar qual é o maior tipo de variavel para
//ajustar as melhores práticas nas outras linhas
for (contaPosCaracter = 1; contaPosCaracter <= strlen(e.currentLine()); contaPosCaracter++)
{
if (substr(e.currentLine(),contaPosCaracter,1) != " " && (nivel == 1 || nivel == 2))
{
verifmaiorLinha++;
nivel = 2;
}
else if (nivel == 2 && substr(e.currentLine(),contaPosCaracter,1) == " ")
{
nivel = 3;
}
if (nivel != 1)
{
copiaLinha += substr(e.currentLine(),contaPosCaracter,1);
}

}
//seta o maior tipo de variavel
if (verifmaiorLinha > maiorEpaco)
{
maiorEpaco = verifmaiorLinha;
maiorLinha = contamaiorLinha;
}
linhas = conins(linhas, contamaiorLinha, copiaLinha);
}

copiaLinha = "";
nivel =1;
e.gotoLine(maiorLinha);

//esse laço trata o a maior tipo de variavel inserindo a quantidade de espaços em branco
//entre o tipo e o nome da variavel
for (contaPosCaracter = 1; contaPosCaracter <= strlen(e.currentLine()); contaPosCaracter++)
{
if (substr(e.currentLine(),contaPosCaracter,1) != " " && (nivel == 1 || nivel == 2))
{
nivel = 2;
}
if (nivel == 2 && substr(e.currentLine(),contaPosCaracter,1) == " ")
{
nivel = 3;
do
{
maiorEpaco++;
if(substr(e.currentLine(),contaPosCaracter,1)== " ")
{
copiaLinha += substr(e.currentLine(),contaPosCaracter,1);
contaPosCaracter++;
}
else
{
if((strlen(copiaLinha) mod 4) != 0)
{
copiaLinha += " ";
}
}
verifmaiorLinha++;
}
while ((strlen(copiaLinha) mod 4) != 0);
copiaLinha += substr(e.currentLine(),contaPosCaracter,1);
}
else if (nivel != 1)
{
copiaLinha += substr(e.currentLine(),contaPosCaracter,1);
}
}
//apaga a linha que tem o maior tipo do container
linhas = condel(linhas, maiorLinha - (posInicial - 1), 1);
//insere a linha que tem o maior tipo no container com a linha tratada
linhas = conins(linhas, maiorLinha - (posInicial - 1), copiaLinha);

//esse laço apaga todas a linhas selecionadas do codigo
for ( contamaiorLinha = posFinal; contamaiorLinha >= posInicial; contamaiorLinha--)
{
e.gotoLine(contamaiorLinha);
e.deleteLines(contamaiorLinha);
}
e.gotoLine(PosInicial);
e.gotoCol(1);
e.insertLines("\n");

//Esse laço trata as linhas e insere as linhas no codigo.
for ( contamaiorLinha = posInicial; contamaiorLinha <= posFinal; contamaiorLinha++)
{
ajustadeclaracao = " ";
if(contamaiorLinha != maiorLinha)
{
nivel = 1;
for (contaPosCaracter = 1; contaPosCaracter <= strlen(any2str(conpeek(linhas, contamaiorLinha - (posInicial - 1)))); contaPosCaracter++)
{
if (substr(any2str(conpeek(linhas, contamaiorLinha - (posInicial - 1))), contaPosCaracter, 1) == " " && nivel == 1)
{
copiaLinha = "";
for (quantEspVazio = 0; quantEspVazio < (maiorEpaco + 4) - strlen(ajustadeclaracao); quantEspVazio++)
{
copiaLinha += " ";
}
while (substr(any2str(conpeek(linhas, contamaiorLinha - (posInicial - 1))), contaPosCaracter, 1) == " ")
{
contaPosCaracter++;
}
quantEspVazio = strlen(any2str(conpeek(linhas, contamaiorLinha - (posInicial - 1))));
ajustadeclaracao = ajustadeclaracao + copiaLinha + substr(any2str(conpeek(linhas, contamaiorLinha - (posInicial - 1))), contaPosCaracter, quantEspVazio);
nivel = 2;
contaPosCaracter = strlen(any2str(conpeek(linhas, contamaiorLinha - (posInicial - 1)))) + 1;
}
else
{
ajustadeclaracao = ajustadeclaracao + substr(any2str(conpeek(linhas, contamaiorLinha - (posInicial - 1))), contaPosCaracter, 1);
}
}
if (contamaiorLinha != posFinal)
{
ajustadeclaracao += "\n";
}
e.gotoLine(contamaiorLinha);
e.insertLines(ajustadeclaracao);
ajustadeclaracao = " ";
}
else
{
if (contamaiorLinha != posFinal)
{
ajustadeclaracao = "\n";
}
e.insertLines(" " + any2str(conpeek(linhas, contamaiorLinha - (posInicial - 1))) + ajustadeclaracao);
}
}





Abaixo um exemplo de como funciona o adjust_Declaration Script.
Observar a Identação do Código.