Em resposta à resposta de Aaronaught à pergunta em:
Não posso usar apenas todos os métodos estáticos?
Não é usada menos memória para um método estático? Tenho a impressão de que cada instância de objeto carrega sua própria versão executável de uma função de membro não estática.
Independentemente da quantidade de sobrecarga envolvida na chamada de um método estático, independentemente do projeto de OO ruim e possíveis dores de cabeça no caminho, ele não usa menos memória no tempo de execução?
Aqui está um exemplo:
Eu faço um vetor de objetos inicializados com zero. Cada objeto contém um dado (um triângulo que consiste em nove duplos). Cada objeto é preenchido em sequência a partir dos dados lidos de um arquivo .stl. Apenas um método estático é necessário. O design adequado do OO determina que um método que lide diretamente com os dados seja distribuído para cada objeto. Aqui está a solução OO padrão:
foreach(obj in vec) {
obj.readFromFile(fileName);
}
Cada obj carrega readFromFile
o código compilado juntamente com os dados!
A memória é mais uma preocupação do que o desempenho, neste caso, e há MUITOS dados em um sistema restrito.
Soluções:
- Método de espaço para nome (ótimo para C ++, mas não possível em Java)
- Um método estático na classe obj. O código executável é mantido em um local no tempo de execução. Há uma pequena sobrecarga para chamar o método
- Uma classe pai da qual deriva obj, que contém o método privado
readFromFile
. Chamada comsuper.callPrivateMethod()
que chamadasreadFromFile
. Desarrumado e ainda um pouco de memória em cada objeto. - Implemente
readFromFile
fora do escopo do obj, na classe vec ou na classe de chamada. Isso, na minha opinião, quebra o encapsulamento de dados.
Percebo que, para grandes quantidades de dados, um objeto explícito para cada triângulo não é a melhor abordagem. Este é apenas um exemplo.