Estou utilizando um pacote que provê diversas operações matriciais, porém, não calcula pseudo-inversa corretamente. Implementei um algoritmo que faz esse calculo e agora preciso incorporá-lo a minha aplicação. A minha duvida é como fazer isso sem alterar o pacote que utilizo (JAMA), e sem comprometer o reuso, quero apenas adicionar ao objeto Matrix do JAMA a responsabilidade de calcular a sua pseudo-inversa. Alguém conhece um padrão que me ajude com este problema.
Obrigado a todos.
Nunca mexi com esse pacote, mas não seria somente uma simples herança?
class MyMatrix extends Jama.Matrix {
/** Corrected way */
public Jama.Matrix getPseudoInverse();
}
...
Jama.Matrix m = new MyMatrix();
Jama.Matrix pseudoInverse = m.getPseudoInverse();
É exatamente isso mesmo thingol, porém não tenho certeza se essa é a melhor solução. Não tenho experiencia com programação, mais já li em diversos lugares que não é uma boa prática o uso da herança de forma indiscriminada.
Estive lendo mais essa tarde e acredito que o padrão decorador de conta do problema. Posso criar uma classe MatrizPseudoInversa com o método getPseudoInversa() e fazer:
Jama.Matrix X = …
MatrizPseudoInversa m = MatrizPseudoInversa(X);
Jama.Matrix Y = m.getPseudoInversa();
Agora não sei se isso é uma decomposição funcional, pois MatrizPseudoInversa é basicamente apenas o algoritmo de inversão então deixaria de ser um padrão para ser um anti-padrão.