Olá pessoal. Estou fazendo um trabalho de escola, na verdade preciso começar… mas a questão de herança no problema abaixo está me complicando (quem herda de quem…) Preciso definir variáveis, métodos, classes (a superclasse, etc) do seguinte problema:
Uma rodoviária de transporte interurbano deseja informatizar seus serviços.
Na rodoviária existem várias empresas de ônibus que são caracterizadas pelo nome e CNPJ. Em cada empresa trabalhamm funcionários caracterizados pelo CPF, nome e endereço. Os funcionários são atendentes, motoristas. Os atendentes são caracterizados também pelo horário de trabalho. Os motoristas são caracterizados também pelo número da carteira de motorista profissional. Os ônibus possuem placa, ano de fabricação, capacidade do bagageiro. O ônibus pode ser comum, caracterizado pela quantidade de acentos, ou pode ser leito, caracterizado pela quantidade de poltronas.
Uma viagem é realizada por um ônibus, por um funcionário motorista e uma linha a ser atendida. Uma linha é caracterizada por nome, horário de início, a duração e formada por várias rodoviárias em que o ônibus pode passar em um determinado horário.
As rodoviárias são caracterizadas pelo nome, endereço, cidade e estado.
Quando um passageiro compra uma passagem, contém informações da viagem além da poltrona e do atendente. O passageiro é caracterizado pelo nome, RG e endereço.
Construa o diagrama de classes e implemente em uma linguagem de programação orientada a objetos
Preciso pelo menos definir as classes (quais são) e quem herda de quem no processo de herança.
Obrigado!
Saudações a todos!
Herança é definida pela relação é um, onde um filho “é um” tipo do pai.
Então busque frases que marcam isso, como essa aqui:
“Os funcionários são atendentes, motoristas”
Note que aqui ele diz que um motorista “é um funcionário”, assim como um atendente.
É diferente de quando ele os motoristas “são caracterizados”, pois daí ele está falando dos atributos da classe motorista, não de uma relação “é um” entre duas classes.
Correto, entendi o que é herança. Mas dentro de um aplicativo eu posso ter mais de uma superclasse? achei este problema muito confuso, não dá pra visualizar quem é a superclasse. São muitas informações ao mesmo tempo… Eu precisava definir primeiramente quais são as classes, e quem herda de quem?
valeu! Saudações.
Cada classe, no Java, pode ter apenas uma única superclasse, porém a superclasse também é uma classe, portanto, pode ter uma superclasse.
No caso da relação que eu indiquei, Funcionario é superclasse de Motorista e Atendente.
Acho que agora você vai entender onde quero chegar!
Entendi que Funcionários é a superclasse de Motorista e Atendente. No entanto quero saber se a classe Funcionários herda da classe Empresa de ônibus, uma vez q possuem a variável de instância “nome” em comum?
E assim em diante, eu não estou conseguindo programar este problema porque não consigo visualizar quais são as classes que herdam (indiretamente…).
Valeu mais uma vez!
Pergunte a si mesmo:
Funcionário é uma Empresa de ônibus? Se sim, existe herança, se não, não tem herença.
Trate herança como se fossem especializações.
OnibusLeito é um onibus, portanto OnibusLeito é uma especialização de Onibus.
Motorista é um funcionário, portanto Motorista é uma especialização de Funcionário.
“É UM” é a pergunta chave para saber se existe especialização ou não.
Não herdam.
Você até pode criar uma classe “CoisaQueTemNome”, mas seria uma classe inútil.
Só ter um único atributo em comum não faz com que precisemos juntar as duas classes com uma superclasse.
Também não vejo muito motivo para criar uma classe Pessoa em comum para Empresa e Funcionário, como sugeriram no outro tópico.
Embora seja certamente interessante criar a classe de Endereço e associar a essas duas (por associação, não por herança).
A regra básica é: sempre prefira associação ao invés de herança.
Estou compreendendo, mas a dúvida ainda continua, pois tenho que utilizar herança mesmo. Na matéria dada em sala de aula ainda não foi explicado o que é associação, portanto, o trabalho deve ser resolvido com herança e polimorfismo.
Então, basicamente, quais seriam as classes que eu deveria criar neste problema? e quais classes herdariam de outras classes?
Se responderem esta pergunta eu consigo resolver o trabalho.
Saudações!
Obrigado.
É o que dissemos. Provamente são só aquelas classes mesmo.
O resto não parece se enquadrada na relação de herança.