O documento discute técnicas para trabalhar com código legado, como usar interfaces ao invés de classes concretas para melhorar o design, polimorfismo e testes. Ele também apresenta ferramentas como "Extract Interface" para extrair interfaces de classes existentes e melhorar o modelo de código.
9. “ This class is too big and I don't want it to get any bigger”
10. RuleParser - current: string - variables: Hasmap - currentPosition: int + evaluate(string): int + branchExpression(Node left, Node right): int + causalExpression(Node left, Node right): int + variableExpression(Node node): int + nextTerm(): string - hasMoreTerms(): boolean + addVariable(string name, int value)
11. Em geral, as classe apresentam nomes com prefixos ou sufixos similares como segue abaixo: evaluate branchingExpression nextTerm addVariable causalExpression hasMoreTerms variableExpression valueExpression
17. Reservation - duration: int - dailyRate: int - date: Date - customer: Costumer - fees: List + extend(days) + extendForWeek() + addFee(FeeRider)<<delegates>> - getPrincipalFee(): int + getTotalFee() :int + getAdditionalFee(): int
18. Esquema da classe Reservation duration getPrincipalFee extend dailyRate extendForWeek date customer getTotalFee getAdditionalFees fees addFee
19. duration getPrincipalFee extend dailyRate extendForWeek date customer getTotalFee getAdditionalFees fees addFee Métodos aglomerados em Reservation
20. duration getPrincipalFee extend dailyRate extendForWeek date customer getTotalFee getAdditionalFees fees addFee Métodos aglomerados em outra classe
21.
22. Ao adicionar novas funcionalidades lembre-se... ...que ao adicionar novas funcionalidades, acima de tudo, o design atual já funcionava. Sejam classes grandes ou sem padrões, elas atualmente exercem funções e muitas vezes de maneira eficiente.