A programação orientada a objetos (POO) no Harbour é feita usando comandos próprios como CLASS e ENDCLASS para criar moldes, definir dados e criar funções que pertencem aos objetos.
A biblioteca nativa que gerencia a POO no Harbour é a HBClass. Ela permite criar sistemas modulares, reutilizáveis e fáceis de manter.
1. Estrutura Básica de uma Classe
Para definir uma classe, usamos os comandos CLASS e ENDCLASS. Dentro dela, definimos as características (DATA) e os comportamentos (METHOD).
Exemplo de Sintaxe:
|
2. Desenvolvendo os Métodos
Os métodos declarados dentro da classe precisam ser desenvolvidos fora dela. Usamos a sintaxe METHOD NomeDoMetodo() CLASS NomeDaClasse.
Nota Importante:
Dentro do método, usamos a palavra-chave :: (que significa self:) para acessar as variáveis e métodos do próprio objeto.
|
3. Instanciando e Usando o Objeto
Para criar e utilizar o objeto no seu programa principal, usamos o operador : (dois pontos).
|
4. Encapsulamento (Controle de Acesso)
Por padrão, as variáveis DATA são públicas. Para proteger seus dados contra modificações diretas e indevidas, use as diretivas de visibilidade:
EXPORTED: (Padrão) Acessível por qualquer parte do programa.
PROTECTED: Acessível apenas pela própria classe e por suas subclasses (herança).
HIDDEN: Acessível estritamente apenas pela própria classe onde foi criada.
|
5. Herança (Reutilização de Código)
A herança permite que uma classe filha herde todas as características e métodos de uma classe pai (FROM).
|
6. Métodos Inline (Atalhos rápidos)
Se o seu método executa apenas uma linha de comando simples, você não precisa desenvolvê-lo fora da classe. Pode criá-lo diretamente como INLINE.
|
7. Polimorfismo (Sobrescrita de Métodos)
O polimorfismo acontece quando uma classe filha herda um método da classe pai, mas altera o comportamento dele para se adequar à sua própria realidade. No Harbour, basta redefinir o METHOD na classe filha com o mesmo nome e criar a nova lógica.
Exemplo Prático:
Sistema de Folha de Pagamento
|
Executando o Polimorfismo:
|
8. Exemplo Prático:
POO integrada com DBF (Banco de Dados)
Mapear tabelas de banco de dados (neste caso, arquivos .DBF) para objetos é um padrão de projeto muito eficiente conhecido como Data Mapper ou Active Record.
A classe abaixo gerencia a tabela PRODUTOS.DBF. Ela é responsável por abrir o arquivo, carregar os dados para a memória dentro do objeto, salvar alterações e fechar o arquivo de forma limpa.
|
9. Usando a Classe de Banco de Dados no Programa Principal:
|
Nota: nas versões do Clipper acima de 5.0, a OOP poderia ser aplicada, basicamente com a mesma sintaxe acima, utilizando-se a biblioteca Class(y).