É um debate interessante e não tenho como dizer o que é o correto, além disso esta abstração extrapola uma linguagem em específico.
Em minha visão, os pacotes devem armazenar classes que estão no mesmo nível.
Por que considerar o mesmo nível?
Se você observar, a indentação se assemelha com a divisão de classes em pacotes, uma vez que você consegue visualizar a hierarquia das instruções.
Mas saindo da indentação e voltando às classes, você pode perceber que faz sentido distribuir as classes em pacotes considerando a hierarquia.
Uma coisa a ser considerada na orientação a objeto é que o espelho desta não é o programador, muito menos 0 e 1.
Citação:
A programação orientada a objetos tem como principais objetivos reduzir a complexidade no desenvolvimento de software e aumentar sua produtividade. … Além do conceito de objeto, a programação OO tem como alicerces os conceitos de encapsulamento, classe, herança e polimorfismo.
Fonte: www.training.com.br/lpmaia/pub_prog_oo.htm
Citação:
Um objeto é um elemento computacional que representa, no domínio da solução, alguma entidade (abstrata ou concreta) do domínio de interesse do problema sob análise. Objetos similares são agrupados em classes. No paradigma de orientação a objetos, tudo pode ser potencialmente representado como um objeto.
Fonte: www.dca.fee.unicamp.br/cursos/PooJava/objetos/conceito.html
A meu ver, a melhor fonte de compreensão da orientação a objeto deve ser os substantivos concretos, pois é mais fácil perceber as diferenças entre níveis hierárquicos.
Depois aquilo que é abstrato e por último os comportamentos compartilhados (essenciais à construção de interfaces).
Agora no campo da percepção, tratar um objeto como um elemento meramente computacional pode fazer você perder o foco em algo simplório, um objeto computacional deve ser a representação de uma entidade, logo, quem deve ser adaptado é o objeto computacional e não o objeto de estudo.
No esboço mal feito que fiz, eu poderia criar varias entidades independentes com foco em desacoplamento, cada entidade com responsabilidades limitadas.
Por exemplo, não cabe ao gerente, implementar a sua tela de consulta pois foge a sua responsabilidade, contudo ele pode ter quantas telas de consulta necessitar podendo explorar seus recursos.
Me limitei a OO, pela forma de abstrair mas creio que possa fazer o mesmo com outras linguagens, pois a implementação de um algorítmico deve independer de uma determinada linguagem.
Citação:
De fato, o paradigma “orientação a objeto”, tem bases conceituais e origem no campo de estudo da cognição, que influenciou a área de inteligência artificial e da linguística, no campo da abstração de conceitos do mundo real.
Fonte: https://pt.wikipedia.org/wiki/Orientação_a_objetos
Por fim, os pacotes estarão organizados de acordo com a abstração a ser realizada, na representação do mini mundo/universo a ser implementado.
Posso até estar errado em tudo, mas não o fiz com a intenção de errar, mas sim com a avaliação de que faz sentido e a chance de estar correto é maior do que estar errado.
Té+