Começando a fazer classes para fins de teste

Ola amigos do GUJ, tudo bem?

Esperto que sim!

È o seguinte, eu ja estudei o capitulo 7 - Definições sobre a Orientação a Objetos,
e o capitulo 13 - Manipulação de Banco de Dados com Java.

O livro é esse:

Java 6 Desenvolvendo e Implementando Aplicações Ensino Didático Sérgio Furgeri 2° Edição.

Fiz uns exercicios que o professor passou:

1 . Utilizando o conceito de encapsulamento, crie uma superclasse abstrata Empregado.

Ex.: public abstract class Empregado{ }.

A classe deve declarar os atributos nome, sobrenome e CPF de um empregado. Esses atributos devem ser inicializados por meio de um construtor da classe.
Sobrescreva o método toString(), herdado da superclasse Object, para que ele retorne uma representação de string de Empregado.

Crie o método abstrato remuneracao() que será implementado pelas subclasses de Empregado.

Ex.: public abstract double remuneracao().
  1. Estenda a superclasse Empregado e crie uma subclasse concreta EmpregadoAssalariado.

A classe deve declarar o atributo salario. Esse atributo deve ser inicializado no construtor da classe, porém por meio de seu método set() correspondente.

O salário será validado pelo método set() correspondente. Dessa forma, caso o salário fornecido na criação de um objeto da classe seja menor que zero, deverá ser atribuído zero ao salário; caso contrário, será atribuído o salário fornecido.

Sobrescreva o método toString(), herdado da superclasse Empregado, para que ele retorne uma representação de string de EmpregadoAssalariado.
Implemente o método abstrato remuneracao(), da superclasse abstrata, de forma que ele retorne o salário do empregado.

  1. Estenda a superclasse Empregado e crie uma subclasse concreta EmpregadoHorista.

A classe deve declarar os atributos horasTrab(quantidade de horas trabalhadas) e salarioHora(valor da hora trabalhada). Esses atributos devem ser inicializados no construtor da classe, porém por meio de seus métodos set() correspondentes.

As horas trabalhadas devem ser validadas de forma que, caso a quantidade de horas trabalhas fornecidas seja menor que zero, deverá ser atribuído zero a horasTrab; caso contrário, estando a quantidade de horas trabalhadas dentro do intervalo fechado 0-168, será atribuída a quantidade de horas fornecidas.
Valide o valor da hora trabalhada da mesma forma que foi validado o salário no exercício anterior.

Sobrescreva o método toString(), herdado da superclasse Empregado, para que ele retorne uma representação de string de EmpregadoHorista.
Implemente o método abstrato remuneracao(), de forma que ele retorne o salário do empregado da seguinte forma:

Caso o empregado tenha trabalhado horas extras(horasTrab > 40) o valor dessas horas será aumentado em 50% do valor normal da hora de trabalho.
Caso contrário, o salário será calculado pelo produto entre as horas trabalhadas e o valor normal da hora de trabalho.

  1. Escreva uma classe que demostre o processo polimorfico da hierarquia de classes criada nos exercícios anterioires.

Caso o objeto sendo referenciado seja um objeto EmpregadoAssalariado , o salario do empregado deverá ser acrescido de 15%, a título de reajuste salaria.

Todos esses exercícios eu ja fiz, e consegui entender beleza.

Agora estou querendo começar a fazer umas JFrames para treinar.

Tipo criar uma Classe conexao, uma classe para criar a janela de login!

Ae que está, eu nao sei como fazer, tipo, eu tenho que criar uma classe para criar a Janela de Login, e outra Classe para fazer os eventos dessa janela?

Tenho que criar somente uma classe com o método main ?

Como fica essas questões?

Como fica a questão de organização, herança entre essas classes?

Estou perdido…

Bom, embora seja perfeitamente possível fazer tudo em apenas uma classe (interface e persistência), o correto é não misturar as coisas.
Você pode considerar um programa como um carro, o motor é responsável por dar força, utilizando o combustível que vem do tanque, para que os pneus possam movimentá-lo.
Não é o motor que movimenta o carro, ele não faz tudo sozinho, cada peça tem uma importância.
Se pensar assim, fica fácil de entender por que precisa da classe para a tela, da classe para controle e da classe para persistir no banco.