Normalmente, pelo que você postou, seria assim:
- Uma empresa possui 1 ou mais departamentos, num limite de 10.
- Um departamento possui 1 ou mais funcionários, num limite de 100. Um departamento só pode fazer parte de uma empresa.
- Um funcionário só pode ser de 1 departamento.
Assim, você usaria agregação.
Numa explicação rápida:
Herança -> a classe A herda de B quando ela é uma especialização de B, sendo chamada de subclasse de B. B, portanto, é uma generalização de A e também a superclasse dela. Pra facilitar, usamos a regra do "é um": um gerente É UM funcionário, logo a classe gerente seria uma especialização de funcionário:
class Gerente extends Funcionario
Em Java, muitas vezes a superclasse é abstrata, de modo que não pode ser instanciada. Um exemplo clássico é das classes Pessoa e Funcionário:
abstract class Pessoa {
...
}
class Funcionario extends Pessoa {
...
}
Você não quer que existam pessoas genéricas, apenas funcionários (ou objetos de outras classes que herdem de Pessoa).
Agregação -> a classe A é agregada em B se a classe B mantém uma coleção de objetos de A (como um array). Aplica-se a regra do TEM UM: um fórum TEM UM usuário, logo usuário é agregado em fórum:
class Forum {
...
private Usuario[] usuarios;
...
}
Composição -> mesma ideia da agregação, também utilizando a regra do TEM UM. A diferença é que a composição é mais forte que a agregação: se um objeto A é composto por um ou mais objetos de B, A não tem sentido de existir sem B. Exemplo: um carro TEM UM motor, sendo que um carro sem motor não tem sentido, uma vez que não cumpre o seu objetivo principal (transportar pessoas ou objetos), assim como um motor sem carro também não tem muita utilidade.
A empresa, no entanto, pode existir sem nenhum funcionário, assim como um funcionário pode continuar existindo mesmo sem estar em uma empresa.
Outra dica é que, normalmente, na composição um objeto é ligado fisicamente ao outro, de modo que o envolvedor é responsável pelo envolvido: uma janela TEM UM botão, sendo que a janela sem o botão não serve para nada. Do mesmo modo, um botão sem janela nem pode existir. Ao destruir a janela, o botão também deixa de existir, portanto, é composição.
No caso da empresa, se ela for destruída, os funcionários continuam existindo.