"CADA PADRÃO DESCREVE UM PROBLEMA QUE OCORRE FREQUENTEMENTE E ENTÃO DESCREVE O CERNE DA SOLUÇÃO AO PROBLEMA DE FORMA A PODER USAR A SOLUÇÃO MILHÕES DE VEZES EM SITUAÇÕES SEMELHANTES"
CONTÊM O SOMATÓRIO DA EXPERIÊNCIA DOS MELHORES PROJETISTAS O-O!
ESTÃO REVOLUCIONANDO O PROJETO DE SOFTWARE O-O DESDE 1994 QUANDO O FAMOSO LIVRO DA "GANG OF FOUR" APARECEU (VER BIBLIOGRAFIA)
ELEMENTOS ESSENCIAIS DE UM PADRÃO:
UM NOME
DESCREVE O PROBLEMA DE PROJETO, SUAS SOLUÇÕES E CONSEQUÊNCIAS EM POUCAS PALAVRAS
PERMITE PROJETAR NUMA NÍVEL MAIS ALTO DE ABSTRAÇÃO
PERMITE FALAR COM OUTROS SOBRE SOLUÇÕES E DOCUMENTAR CÓDIGO, JÁ QUE OS NOMES DE PADRÕES ESTÃO FICANDO PADRONIZADOS
(EQUIVALENTE A PADRONIZAR "LISTA ENCADEADA", "PILHA", ETC. NO MUNDO DAS ESTRUTURAS DE DADOS
O PROBLEMA
DESCREVE QUANDO APLICAR O PADRÃO
DESCREVE O PROBLEMA E O CONTEXTO
PODE DESCREVER PROBLEMAS ESPECÍFICOS DE PROJETO (EX. COMO REPRESENTAR ALGORITMOS COMO OBJETOS)
PODE DESCREVER ESTRUTURAS DE OBJETOS OU DE CLASSES QUE SÃO SINTOMAS DE UM PROJETO INFLEXÍVEL
AS VEZES, O PADRÃO LISTA CONDIÇÕES QUE DEVEM SE APLICAR PARA USAR O PADRÃO
A SOLUÇÃO
DESCREVEM OS ELEMENTOS CONSTITUINTES DO PROJETO, SEUS RELACIONAMENTOS, RESPONSABILIDADES E COLABORAÇÕES
A SOLUÇÃO NÃO DESCREVE UM PROJETO OU IMPLEMENTAÇÃO CONCRETOS PORQUE UM PADRÃO É UM GABARITO DE SOLUÇÃO PARA VÁRIAS SITUAÇÕES
AS CONSEQUÊNCIAS
OS RESULTADOS E TRADE-OFFS DA APLICAÇÃO DO PADRÃO
DIZ RESPEITO A TRADE-OFFS DE ESPAÇO, TEMPO, FLEXIBILIDADE, EXTENSIBILIDADE, PORTABILIDADE
ALGUNS ANOS ATRÁS (E NA CABEÇA DE ALGUNS PROGRAMADORES AINDA!), A HERANÇA ERA CONSIDERADA A FERRAMENTA BÁSICA DE EXTENSÃO E REUTILIZAÇÃO DE FUNCIONALIDADE
A COMPOSIÇÃO ESTENDE UMA CLASSE PELA DELEGAÇÃO DE TRABALHO PARA OUTRO OBJETO
A HERANÇA ESTENDE ATRIBUTOS E MÉTODOS DE UMA CLASSE
HOJE, CONSIDERA-SE QUE A COMPOSIÇÃO É MUITO SUPERIOR À HERANÇA NA MAIORIA DOS CASOS
A HERANÇA DEVE SER UTILIZADA EM ALGUNS (RELATIVAMENTE POUCOS) CONTEXTOS
UM EXEMPLO DE COMPOSIÇÃO
USE COMPOSIÇÃO PARA ESTENDER AS RESPONSABILIDADES PELA DELEGAÇÃO DE DE TRABALHO A OUTROS OBJETOS
UM EXEMPLO NO DOMÍNIO DE RESERVAS DE AVIÃO
UM PASSAGEIRO PODE TER VÁRIAS RESERVAS DE VÔOS
JÁ QUE O OBJETO PASSAGEIRO É RESPONSÁVEL PELOS OBJETOS DE RESERVAS, TEMOS AGREGAÇÃO
UM EXEMPLO DE HERANÇA
ATRIBUTOS, CONEXÕES A OBJETOS E MÉTODOS COMUNS VÃO NA SUPERCLASSE (CLASSE DE GENERALIZAÇÃO)
ADICIONAMOS MAIS DESSAS COISAS NAS SUBCLASSES (CLASSES DE ESPECIALIZAÇÃO)
TRÊS SITUAÇÕES COMUNS PARA A HERANÇA
UMA TRANSAÇÃO É UM MOMENTO NOTÁVEL OU INTERVALO DE TEMPO)
EXEMPLO NO DOMÍNIO DE RESERVA E COMPRA DE PASSAGENS DE AVIÃO
BENEFÍCIOS DA HERANÇA
CAPTURA O QUE É COMUM E O ISOLA DO QUE É DIFERENTE
A HERANÇA É VISTA DIRETAMENTE NO CÓDIGO
PROBLEMAS DA HERANÇA
O ENCAPSULAMENTO ENTRE CLASSES E SUBCLASSES É FRACO
MUDAR UMA SUPERCLASSE PODE AFETAR TODAS AS SUBCLASSES
ISO VIOLA UM DOS PRINCÍPIOS BÁSICOS DE PROJETO O-O
AS VEZES UM OBJETO PRECISA SER DE UMA CLASSE DIFERENTE EM MOMENTOS DIFERENTES
COM HERANÇA, A ESTRUTURA ESTÁ PARAFUSADA NO CÓDIGO E NÃO PODE SOFRER ALTERAÇÕES FACILMENTE EM TEMPO DE EXECUÇÃO
A HERANÇA É UM RELACIONAMENTO ESTÁTICO QUE NÃO MUDA COM TEMPO
CENÁRIO: PESSOAS ENVOLVIDAS NA AVIAÇÃO
PROBLEMA: UMA PESSOA PODE MUDAR DE PAPEL A ASSUMIR COMBINAÇÕES DE PAPEIS
FAZER PAPEIS MÚLTIPLOS REQUER 7 COMBINAÇÕES (SUBCLASSES)
SOLUCIONANDO O PROBLEMA COM COMPOSIÇÃO: UMA PESSOA E VÁRIOS PAPEIS POSSÍVEIS
AQUI, ESTAMOS USANDO DELEGAÇÃO: DOIS OBJETOS ESTÃO ENVOLVIDOS EM ATENDER UM PEDIDO (DIGAMOS setNome)
O OBJETO Tripulação (DIGAMOS) DELEGA setNome PARA O OBJETO Pessoa QUE ELE TEM POR COMPOSIÇÃO
TÉCNICA TAMBÉM CHAMADA DE FORWARDING
É SEMELHANTE A UMA SUBCLASSE DELEGAR UMA OPERAÇÃO PARA A SUPERCLASSE (HERDANDO A OPERAÇÃO)
DELEGAÇÃO SEMPRE PODE SER USADA PARA SUBSTITUIR A HERANÇA
SE USÁSSEMOS HERANÇA, O OBJETO Tripulação PODERIA REFERENCIAR A PESSOA COM this
COM O USO DE DELEGAÇÃO, Tripulação PODE PASSAR this PARA Pessoa E O OBJETO Pessoa PODE REFERENCIAR O OBJETO ORIGINAL SE QUISER
EM VEZ DE Tripulação SER UMA PESSOA, ELE TEM UMA PESSOA
A GRANDE VANTAGEM DA DELEGAÇÃO É QUE O COMPORTAMENTO PODE SER ESCOLHIDO EM TEMPO DE EXECUÇÃO E VEZ DE ESTAR AMARRADO EM TEMPO DE COMPILAÇÃO
A GRANDE DESVANTAGEM É QUE UM SOFTWARE MUITO DINÂMICO E PARAMETRIZADO É MAIS DIFÍCIL DE ENTENDER DO QUE SOFTWARE MAIS ESTÁTICO
5 REGRAS PARA O USO DE HERANÇA
O OBJETO "É UM TIPO ESPECIAL DE" E NÃO "UM PAPEL ASSUMIDO POR"
O OBJETO NUNCA TEM QUE MUDAR PARA OUTRA CLASSE
A SUBCLASSE ESTENDE A SUPERCLASSE MAS NÃO FAZ OVERRIDE OU ANULAÇÃO DE VARIÁVEIS E/OU MÉTODOS
NÃO É UMA SUBCLASSE DE UMA CLASSE "UTILITÁRIA"
NÃO É UMA BOA IDÉIA FAZER ISSO PORQUE HERDAR DE, DIGAMOS, HASHTABLE DEIXA A CLASSE VULNERÁVEL A MUDANÇAS FUTURAS À CLASSE HASHTABLE
NÃO É UMA BOA IDÉIA PORQUE ENFRAQUECE A ENCAPSULAÇÃO
CLIENTES PODERÃO SUPOR QUE A CLASSE É UMA SUBCLASSE DA CLASSE UTILITÁRIA E NÃO FUNCIONARÃO SE A CLASSE EVENTUALMENTE MUDAR SUA SUPERCLASSE
EXEMPLO: X USA Y QUE É SUBCLASSE DE VECTOR
X USA Y SABENDO QUE É UM VECTOR
AMANHÃ, Y ACABA SENDO MUDADA PARA SER SUBCLASSE DE HASHTABLE
X SE LASCA!
PARA CLASSES DO DOMÍNIO DO PROBLEMA, A SUBCLASSE EXPRESSA TIPOS ESPECIAIS DE PAPEIS, TRANSAÇÕES OU DISPOSITIVOS
EXEMPLO DA APLICAÇÃO DAS REGRAS
CONSIDERE AGENTE, TRIPULAÇÃO E PASSAGEIRO COMO SUBCLASSES DE PESSOA
REGRA 1 (TIPO ESPECIAL): NÃO PASSA. UM PASSAGEIRO NÃO É UM TIPO ESPECIAL DE PESSOA: É UM PAPEL ASSUMIDO POR UMA PESSOA
REGRA 2 (MUTRAÇÃO): NÃO PASSA. UM AGENTE PODE SE TRANSFORMAR EM PASSAGEIRO COM TEMPO
REGRA 3 (SÓ ESTENDE): OK.
REGRA 4: OK.
REGRA 5: NÃO PASSA. "PASSAGEIRO" ESTÁ SENDO MODELADO COMO TIPO ESPECIAL DE PESSOA E NÃO COMO TIPO ESPECIAL DE PAPEL
OUTRO EXEMPLO: TRANSAÇÕES
RESERVA E COMPRA PODEM HERDAR DE TRANSAÇÃO?
REGRA 1 (TIPO ESPECIAL): OK. UMA RESERVA É UM TIPO ESPECIAL DE TRANSAÇÃO E NÃO UM PAPEL ASSUMIDO POR UMA TRANSAÇÃO
REGRA 2 (MUTAÇÃO): OK. UMA RESERVA SEMPRE SERÁ UMA RESERVA, E NUNCA SE TRANSFORMA EM COMPRA (SE HOUVER UMA COMPRA DA PASSAGEM, SERÁ OUTRA TRANSAÇÃO). IDEM PARA COMPRA: SEMPRE SERÁ UMA COMPRA
REGRA 3 (SÓ ESTENDE): OK. AMBAS AS SUBCLASSES ESTENDEM TRANSAÇÃO COM NOVAS VARIÁVEIS E MÉTODOS E NÃO FAZEM OVERRIDE OU ANULAM COISAS DE TRANSAÇÃO
REGRA 4 (NÃO ESTENDE CLASSE UTILITÁRIA): OK.
REGRA 5 (TIPO ESPECIAL DE PAPEL/TRANSAÇÃO/DISPOSITIVO): OK. SÃO TIPOS ESPECIAIS DE TRANSAÇÃO