Engraçado, muita gente respondendo a mesma coisa e não foi ao mesmo tempo. Parece até que o GUJ tá com eco.
Antes de criar um atributo chamado cargo, pense no que o cargo influencia para o seu modelo de negócio. Por exemplo, se os dados gravados para um gerente forem muito diferentes dos dados gravados para um funcionário, talvez seja melhor você criar duas classes Funcionário e Gerente.
O fato é que se seus métodos começarem a testar o tipo de cargo antes de fazer as ações, então é sinal que ou você precisa criar uma nova classe, chamada Cargo, e transferir métodos para ela usando então polimorfismo, ou você deverá rever sua árvore para criar subclasses de funcionário.
Fique atento, se a cara dos métodos ficar assim:
public void processarAumento() {
switch (cargo) {
case GERENTE:
calculaAumentoGerente();
break;
case VENDEDOR:
calculaAumentoVendedor();
calculaBonusVendas();
break;
case PROGRAMADOR:
int metasSprint = obterMetasBatidas(this);
calculaAumentoProgramador(metasSprint);
break;
}
}
Ou o equivalente disso com ifs, é um sinal claro de que você deveria ter criado subclasses e não um atributo. Só fique atento que as subclasses não precisam ser necessariamente de funcionário, e sim, pode ser que sejam de uma nova classe, chamada Cargo.