Modelando sistema para o tcc(UML)

Olá !!!

Estou precisando modelar um sistema para o TCC e fiquei com uma dúvida sobre estar
correto ou não a seguinte hierarquia de classes.

Alguém poderia me ajudar verificando se está correto ou não a seguinte estrutura ?
Se estiver incorreto poderia ajudar a corrigir ?


//----------------------------------------------------//

    class Pessoa {
        private string nome;
        private string endereco;
    }

    class PessoaFisica extends Pessoa {
        private string cpf;
    }

    class PessoaJuridica extends  Pessoa{
        private string cnpj;
    }

//----------------------------------------------------//

    class Motorista extends  PessoaFisica{
    }

//----------------------------------------------------//

    class Contato extends PessoaFisica{         
    }

//----------------------------------------------------//

    class Usuario extends  PessoaFisica{
    }


    class Gerencia extends  Usuario { 
    }


    class Administrativo extends Usuario { 
    }


    

//----------------------------------------------------//

    class Fornecedor {
        public Pessoa pessoa;  //Pessoa Fisica ou Pessoa Jurídica
        public Fornecedor(Pessoa pessoa){}
    }

//----------------------------------------------------//

    class Cliente {
        public Pessoa pessoa;  //Pessoa Fisica ou Pessoa Jurídica
        public Cliente(Pessoa pessoa){}
    }

Obrigado pela atenção

creio q ta certinho :shock:

Ta td certo, mas acho q seria melhor colocar a classe Pessoa como abstract…

obrigado pela ajuda. :wink:

O meu problema agora está em convencer os outros integrantes do grupo(Pessoas mais experientes).
Eles querem criar duas interfaces. IPessoaFisica e IPessoaJuridica. Essas classes seriam herdadas na classe
cliente e fornecedor.

Eu achei estranho e mostrei esse exemplo para eles. Eles falaram que essa seria um outra opção para o sistema.
Eu não quero outra opção. Eu quero colocar código correto.

http://www.guj.com.br/posts/list/78162.java