Programação Orientada a Objetos (OOP)
A Programação Orientada a Objetos (OOP) é um paradigma de programação que utiliza "objetos" – instâncias de classes – para criar modelos baseados no mundo real. Este projeto faz uso extensivo dos conceitos de OOP, como encapsulamento, herança e polimorfismo, para garantir modularidade, reutilização de código e manutenção facilitada.
Encapsulamento
O encapsulamento é utilizado para proteger os dados das classes, permitindo que apenas métodos específicos possam acessar ou modificar esses dados. No projeto, os modificadores de acesso private, protected e public são usados para controlar a visibilidade dos atributos e métodos das classes, o signal faz parte do sistema de sinais e slots do Qt e é um mecanismo que permite a comunicação entre objetos do Qt. Ele é usado para notificar outros objetos quando um evento específico ocorre e está descrito com mais detalhes na página Implementação e Recursos Específicos do Qt.
Exemplo:
class Pessoa : public QObject
{
Q_OBJECT
public:
explicit Pessoa(const QString& nome, const QString& cpf, const QString& contato,
const QString& email, const QDate& dataNascimento);
~Pessoa();
QString getNome() const;
QString getCpf() const;
QString getContato() const;
QString getEmail() const;
QDate getDataDeNascimento() const;
protected:
QString nome;
QString cpf;
QString contato;
QString email;
QDate dataNascimento;
};
Neste exemplo, os atributos da classe Pessoa são protegidos (protected), permitindo que apenas a própria classe e suas subclasses possam acessá-los diretamente. Os métodos getNome, getCpf, etc., são públicos (public), permitindo acesso controlado aos atributos.
Herança
A herança permite que uma classe (subclasse) herde atributos e métodos de outra classe (superclasse). No projeto, a classe Pessoa é a superclasse para as classes Paciente e Colaborador.
Exemplo:
class Paciente : public Pessoa
{
Q_OBJECT
public:
explicit Paciente(const QString& nome, const QString& cpf, const QString& contato,
const QString& email, const QDate& dataNascimento,
const QString& convenio, const QString& diagnostico);
~Paciente();
bool salvarNoBanco();
signals:
void pacienteCadastrado(int id);
private:
QString convenio;
QString diagnostico;
};
A classe Paciente herda os atributos e métodos da classe Pessoa, adicionando novos atributos (convenio e diagnostico) e métodos específicos.
Modularidade e Reutilização de Código
O design do projeto foi pensado para ser modular e permitir a reutilização de código. As classes são organizadas em módulos, cada um responsável por uma funcionalidade específica, como gestão de pacientes, colaboradores, agendamentos e estoque. Isso facilita a manutenção e a expansão do sistema.
Diagrama de Classes

Atualizado