quinta-feira, 27 de março de 2008

Alta Coesão

Blog referente a aula do dia 24/3/2008
Padrão GRASP Alta Coesão
A abordagem desse assunto nos leva a seguinte pergunta sempre que nos deparamos com classes complexas.
Como gerenciar a complexidade ?
A Coesão mede quão focadas ou relacionadas estão os módulos de uma classe.
Características de uma classe com baixa coesão.
- Difícil de entender
- De difícil reuso
- De difícil manutenção
- Assumi responsabilidades demais , ou seja , causa uma sobrecarga na classe.
E qual seria a solução ???
Atribuir responsabilidades aos métodos mantendo-se a coesão.
Como nós já sabemos , quanto maior a coesão mais baixo o acoplamento e isso é a melhor solução no caso.
Tipos de Coesão
Coesão Coincidental
Nela não existe nenhuma coesão entre os módulos , eles se agrupam por coincidência
public class Angu{
public void acharPadrão ( ){
}
public void calcularMedia ( ){
}
public void obterArquivo ( ){
}
Lógica
Este Padrão tem que ser respeitado assim como o baixo acoplamento, a alta coesão deve ser mantida dentro do método.
Coesão Temporal
Os módulos estão coesos , por algum evento temporal.
Ex: inicializar , finalizar.
Um outro exemplo é o famoso arquivo "INI" do Windows, vc coloca tags nesse arquivo INI que configura tudo, isso é um exemplo de coesão temporal.
Coesão de Comunicação
Nessa coesão os métodos agem sobre o mesmo dado , mas isso não significa que sejam métodos coesos, portanto não deveriam estar juntos.
Coesão sequencial
Essa aí não é tão ruim , mas esta longe de ser a melhor
Ocorre da seguinte maneira , nela os módulos estão juntos apenas pq a saída de um é a entrada do outro.
Coesão Funcional
Nela os módulos estão coesos de tal forma a trabalhar num mesmo objetivo, ou seja todos os métodos estão focados em um único objetivo.
Coesão Procedural
Esta envolvida com agrupamento de módulos, faz com que os módulos se agrupem por procedimentos, mesmo não sendo coesos.
Agora que vimos um pouco sobre alta coesão , vamos falar um pouco sobre as suas consequencias
- Melhora o reuso da classe
- Melhora o entendimento da classe
- Nela vc regula a forma de granularidade da aplicação
Bom , isso foi tudo o que eu entendi até agora , com isso nós encerramos os Padrões GRASP, espero que tenha sido útil a alguém o que eu escrevi , e fico no aguardo de comentários !!!!!
Bom fds a todos
boa prova para todos nós !!!!

quinta-feira, 20 de março de 2008

Blog referente a aula do dia 17/03

Acoplamento de controle

Ele ocorre quando se quer passar flags de controle entre objetos de forma que um objeto controle o outro objeto.

O objeto A envia uma mensagem ao objeto B e B usa o parametro para decidir o que fazer , a classe varia conforme o parametro passado para ela.

Nesse tipo de acoplamento uma classe tem o poder de controlar o comportamento da outra classe , ou seja a classe Alpha controla todo o comportamento da classe Beta, mas o que nós na verdade queremos é acabar com essa dependencia entre as classes, mas como nós fazemos isso ???

Simples , é só decompor a operação em multiplas operações primitivas.

Acoplamento de dados globais

Ocorre quando dois ou mais objetos compartilham os mesmo dados

Acoplamento de dados internos ( considerado o pior acoplamento)

Ocorre quando um objeto altera os dados globais de um outro objeto ou seja , a classe A altera a instancia de B alterando assim todo o estado de B.

Como se resolve esse problema ?

Usando - se uma variável private e um par de métodos acessores e mutatórios para controlar , principio do encapsulamento.

Bom feriado a todos !!!!!

até a próxima !!!!!!

quarta-feira, 12 de março de 2008

Blog referente a aula 10 do dia 10/03/08
Baixo acoplamento
Primeiramente o que vêm a ser acoplamento ??
Nada mais é do que a medida da dependência de uma classe em relação a outra.
Baseado nessa resposta podemos definir como baixo acoplamento a não dependência de uma classe sobre outra.
Quando existe uma dependência bem destacada entre duas classes , nós podemos dizer que entre elas existe um acoplamento forte.
Acoplamento forte ocorre muito em herança , associação , agregação , pois elas nada mais são do que relacionamentos de dependência entre duas classes.
Geralmente o Acoplamento forte apresenta alguns tipos de problemas que irei listar abaixo:
1º - É de difícil entendimento , ou seja , nesse caso para se entender uma classe seria preciso entender todas as outras.
2º - Mais difícil de se reutilizar , pois para que se possa reutiliza-lo eu tenho que mudar a classe para um outro lugar , sendo assim eu teria que levar todas as outras classes junto.
3º - De difícil manutenção, ou seja a mudança em uma classe acaba se propagando para as outras classes.
Vendo todos esses problemas , qual seria a solução mais acertada para eles ?
Se alguém respondeu que é minimizando o acoplamento , acertou em cheio.
Diminuindo-se o acoplamento, diminui-se simultaneamente o problema da dependência entre as classes, e lembre-se de que em um diagrama pode ocorrer conflito entre padrões , mas já fique sabendo que sempre que isso acontecer , não perca tempo, opte sempre pelo baixo acoplamento.
Tipos de Acoplamento
- Acoplamento de dados
- Acoplamento de controle
- Acoplamento de dados globais
- Acoplamento de dados internos

Espero que tenha sido bem proveitoso este aprendizado

Até o próximo blog

Boa semana a todos !!!

quinta-feira, 6 de março de 2008

PADRÃO CRIADOR - PARTE 2

Blog referente a aula 9 ministrada no dia 3/3/2008

By Marcos Vinicius

Padrão Criador – Parte 2

Vejamos a figura abaixo:




Como podemos ver logo acima ,trata-se de um diagrama de classes , onde lógicamente podemos contabilizar 4 classes, colocaremos em código todas as classes do diagrama caracterizando assim o seu criador.

Mas , por onde devemos começar ??

Fácil , aprendi uma importante dica , nós sempre começamos pela classe menos acoplada , ou seja aquela que é menos dependente.

Agora fica fácil determinar por onde começar , como podemos ver na figura acima das quatro classes a menos dependente é Produto , pois ela não depende de nenhuma outra classe , ao contrário de ItemVenda que depende de Produto , Venda que depende de ItemVenda e por ultimo a classe Main que pelo que eu entendi em aula depende de todas as outras 3 classes.

Bom , vamos começar então pela classe produto , que no nosso caso é a menos dependente.

Como ela ficaria em código ??

Confira abaixo:

CLASSE PRODUTO:

Public class Produto // declaração da classe Produto
{
// Quais seriam os atributos de produto ???
// Poderiam ser código do produto , descrição do produto e valor.

private integer idProduto;
private String descrição;
private Double valorUnitário;

// a seqüência abaixo seriam os nossos métodos assessores e multatórios GET e SET.

/*Antes de continuarmos preciso relembrar um pouco das funções de GET e SET, eles são usados para transformar atributos privados e atributos públicos , para que assim possam ser vistos por outras classes , mas principalmente são utilizados para dar controle a aplicação.*/

public string getDescrição(){

return descrição;
}

public void setDescrição (String valor){
descrição = valor;
}

CLASSE ITEMVENDA:

public class ItemVenda {

// Quais os atributos de ItemVenda ??

private Double qtde;
private Produto p;

// abaixo seguem os métodos assessores e mutatórios.

public void set p (produto p){
this.p = p; // lembre que o “p”em questão tem que ser o mesmo que esta no parâmetro.
}

public class Venda {

// Por se tartar de uma classe que executará vários itens , um array viria bem acalhar , mas o array apresenta problemas com relação a tamanho , portanto utilizaremos aqui uma coleção.

Private Set ItemVenda.list = new hashSet( );

// onde a coleção é caracterizada pelos sinais de maior e menor sobre a classe ItemVenda.

Agora fica a pergunta , de onde saiu esse hashSet???

Bom , desculpe a sinceridade , mas até a aula de ontem era novidade para mim , bom , como “Set” é uma classe e não pode ser instanciada , o hashSet é utilizado para que se possa instancia-la.

private Date dataVenda;
private Integer idVenda;

// agora depois de tudo o que foi feito é que eu poderei criar ItemVenda !!!!

public criarItemVenda (Produto p, Double qtde)
{
ItemVenda i = new ItemVenda( ); // o “i” no caso é uma variável de instancia atribuída

i.setP (p);
i.setQtde (qtde);
itemVendaList.add (i);
} // cria um item de venda e a adiciona a coleção.
Continuando a aula do dia 03/03/2008 , como de costume fomos ao laboratório para as aulas práticas onde mais uma vez me impressionei com o poder da ferramenta NETBEANS.

O seu poder compilação é fantástico , temos até a possibilidade de reforçar a nossa lógica , onde através do processo “DEBUG FILE” podemos percorrer a aplicação podendo assim conhecer o passo a passo de toda a execução, é até uma forma de atualização e melhoria de nossos conhecimentos em lógica, não espero a hora de terminar de baixa-la para assim descobrir mais de seus segredos.

Bom , por hoje é só pepepessoal !!! hehehe

Espero que tenham gostado dessa postagem , estava bem mais inspirado hoje !!!

Boa semana a todos !!!!!

Até o próximo blog!!!