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 TRABALHO A OUTROS OBJETOS
UM EXEMPLO NO DOMÍNIO DE ENDEREÇOS
UMA EMPRESA TEM UM ENDEREÇO (DIGAMOS SÓ UM)
UMA EMPRESA "TEM" UM ENDEREÇO
PODEMOS DEIXAR O OBJETO EMPRESA RESPONSÁVEL PELO OBJETO ENDEREÇO E TEMOS AGREGAÇÃO COMPOSTA (COMPOSIÇÃ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 DAQUILO QUE É DIFERENTE
A HERANÇA É VISTA DIRETAMENTE NO CÓDIGO
PROBLEMAS DA HERANÇA
O ENCAPSULAMENTO ENTRE CLASSES E SUBCLASSES É FRACO (ACOPLAMENTO É FORTE)
MUDAR UMA SUPERCLASSE PODE AFETAR TODAS AS SUBCLASSES
ISSO VIOLA UM DOS PRINCÍPIOS BÁSICOS DE PROJETO O-O (FRACO ACOPLAMENTO)
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
OBSERVE QUE TAMBÉM PODEMOS INVERTER A COMPOSIÇÃO (UMA PESSOA TEM UM OU MAIS PAPEIS)
PENSE NA IMPLICAÇÃO PAR A INTERFACE DE "PESSOA"
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
EM VEZ DE CODIFICAR UM COMPORTAMENTO ESTATICAMENTE, DEFINIMOS PEQUENOS COMPORTAMENTOS PADRÃO E USAMOS COMPOSIÇÃO PARA DEFINIR COMPORTAMENTOS MAIS COMPLEXOS
5 REGRAS PARA O USO DE HERANÇA (COAD)
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 (MUTAÇÃ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