Repositório contendo um exemplo de projeto de programação orientada a objetos desenvolvido em Java.
O projeto conta com uma classe abstrata denominada Pessoa
, duas classes filhas de Pessoa
denominadas Paciente
e Funcionario
, uma classe filha de Funcionario
denominada Medico
, assim como uma classe denominada Prontuario
que implementa uma interface denominada Consulta
.
classDiagram
class Pessoa {
#String nome
#int idade
}
<<abstract>> Pessoa
class Paciente {
-String gravidade
-float peso
-float altura
-boolean alta
}
Pessoa <|-- Paciente
class Funcionario {
#int id
#float salario
+ receber()
}
Pessoa <|-- Funcionario
class Medico {
-String especialidade
-boolean plantao
+receber()
}
Funcionario <|-- Medico
class Consulta {
+examinar() *
+diagnosticar(diagnostico) *
+receitar() *
+receitar(comprimido, quantidade, horario) *
+receitar(injecao, quantidade) *
+liberar() *
+internar() *
}
<<interface>> Consulta
class Prontuario {
-Paciente paciente
-Medico medico
-String diagnostico
-String receita
}
Consulta <|.. Prontuario
Prontuario *-- Paciente
Prontuario *-- Medico
A classe Pessoa
se trata de uma classe abstrata com os atributos protegidos nome
e idade
, assim como seu método construtor e métodos getters e setters.
A classe Paciente
herda os atributos de Pessoa
e conta ainda com os atributos privados gravidade
, peso
, altura
e alta
, assim como seu método construtor e métodos getters e setters.
A classe Funcionario
herda os atributos de Pessoa
e conta ainda com os atributos protegidos id
e salario
, assim como seu método construtor e métodos getters e setters.
A classe conta ainda com um método público denominado receber
que confirma o recebimento do salário no console.
public void receber() {
System.out.println("Funcionário(a) " + this.nome + " recebeu " + this.salario + " pelo mês corrente.");
}
A classe Medico
herda os atributos e métodos de Funcionario
e conta ainda com os atributos privados especialidade
e plantao
, assim como seu método construtor e métodos getters e setters.
A classe também sobrepõe o método receber
herdado da classe Funcionario
, pois o médico recebe o salário por plantão realizado.
@Override
public void receber() {
System.out.println("Doutor(a) " + this.nome + " recebeu " + this.salario + " pelo plantão realizado.");
}
A interface Consulta
define os métodos utilizados em um ciclo de consulta que inicia com o exame dos sintomas do paciente, segue para o diagnóstico médico, posteriormente é receitado o procedimento necessário ao paciente e é decidido sua alta ou internamento.
A classe Prontuario
possui os atributos privados paciente
, medico
, diagnostico
e receita
, assim como seu método construtor e métodos getters e setters.
A classe conta ainda com a implementação dos métodos da interface Consulta
.
O método confirma o início da consulta no console.
@Override
public void examinar() {
System.out.println("Doutor(a) " + this.medico.nome + ", está examinando o paciente " + this.paciente.nome);
}
O método recebe o diagnóstico médico como parâmetro e o armazena no atributo diagnostico
.
@Override
public void diagnosticar(String diagnostico) {
this.setDiagnostico(diagnostico);
}
O método pode ser utilizado de três formas diferentes, sem parâmetros, com um parâmetro String
e dois parâmetros int
, assim como com um parâmetro String
e um parâmetro int
.
Quando o método é chamado sem parâmetros o atributo receita
recebe a informação de que o paciente necessita de uma cirurgia.
@Override
public void receitar() {
this.receita = "Paciente " + this.paciente.nome + " necessita de operação.";
}
Quando o método é chamado com um parâmetro String
e dois parâmetros int
o atributo receita
recebe a informação de que o paciente necessita tomar uma certa quantidade de um comprimido definido em um certo intervalo de tempo.
@Override
public void receitar(String comprimido, int quantidade, int horario) {
this.receita = "Paciente " + this.paciente.nome + " deve tomar " + quantidade + " comprimido(s) de " + comprimido + " a cada " + horario + " hora(s)";
}
Quando o método é chamado com um parâmetro String
e um parâmetro int
, o atributo receita
recebe a informação de que o paciente necessita tomar uma certa quantidade de uma injeção definida.
@Override
public void receitar(String injecao, int quantidade) {
this.receita = "Paciente " + this.paciente.nome + " deve tomar " + quantidade + " ml de " + injecao;
}
O método define o atributo alta
do paciente para true
.
@Override
public void liberar() {
this.paciente.setAlta(true);
}
O método define o atributo alta
do paciente para false
.
@Override
public void internar() {
this.paciente.setAlta(false);
}
Os códigos apresentados nesse repositório partem de estudos iniciados no curso de POO do Prof. Gustavo Guanabara no canal Curso em Vídeo no YouTube.