Esse artigo faz parte da revista Clube Delphi Edição 74. Clique aqui para ler todos os artigos desta edição
image
Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.

Programação Orientada a Objetos no Delphi

Conceitos e Implementação – Parte 1

A Programação Orientada a Objetos (POO) proporciona inúmeros beneffclos ao desenvolvimento de sistemas. Dentre eles, pode-se destacar que a POO tem se mostrado uma maneira eficiente de representar elementos do mundo real para a construção de sistemas computacionais, através do uso de classes e objetos. Além disso, a reutilização e o incremento do grau de manutenibilidade refletem na diminuição dos efeitos que as manutenções causam.

Essas características estão dentre aquelas que têm proporcionado uma difusão cada vez maior da POO entre os desenvolvedores de software. Porém, para obter tais benefícios, é necessário conhecer bem os conceitos da orientação a objetos, tais como: encapsulamento, herança e polimorfismo, utilizando-os eficientemente na construção de sistemas.

Além disso, do conhecimento desses conceitos à sua aplicação em uma linguagem de programação, existem diversos fatores a serem analisados e obstáculos a serem superados. Um dos principais fatores é compreender como a linguagem de programação adotada, nesse caso o Delphi, aborda e implementa tais conceitos. Isso torna-se fundamental para construção de sistemas orientados a objetos eficientes.

Este artigo tem como finalidade demonstrar de maneira prática, através de exemplos,como o Delphi aborda os principais conceitos da programação Orientada a Objetos e está estruturado em seções que tratam de assuntos como classes, atributos e métodos, encapsulamento, herança, polimorfismo, associação e interfaces.

Modelo de classes

Os exemplos utilizados neste artigo são baseados no diagrama de classes apresentado na Figura 1, permitindo contextualizar os conceitos e códigos apresentados, facilitando seu entendimento.

image
Figura 1. Diagrama de classes de aplicação exemplo

No diagrama, pode-se perceber um conjunto de classes,cada qual com seus atributos e métodos. Além disso,existe uma associação do tipo l-para-N entre as classes Departamento e Funcionario, e uma hierarquia de classes a partir de Funcionario.Tal diagrama demonstra parte de uma aplicação cujo objetivo é calcular salários de funcionários de .diferentes tipos, como: mensalistas e diaristas.

Classes, Atributos e Métodos

Conceitualmente as classes são representações de elementos do mundo real. Dessa formação compostas basicamente de membros chamados atributos e métodos. Os atributos são responsáveis por armazenar os dados de uma determinada instância (objeto) da classe. Já os métodos são responsáveis, além de outras funções, por realizar ações sobre o conjunto de atributos,obtendo e modificando os seus valores quando necessário.

Classes são definidas em units, que podem ser utilizadas por um ou mais programas. Além disso, uma unit pode conter uma ou mais definições de classes. As units são divididas em seções como interface, implementação, inicialização e finalização.As palavras reservadas interface, implementation, initialization e finalization demarcam essas seções, respectivamente.

Na seção interface são declaradas constantes, variáveis, tipos de dados, procedimentos e funções que estão disponíveis dentro da unit. A implementação propriamente dita dos procedimentos, funções e métodos das classes ocorre na seção implementation. Existe uma paridade entre os elementos declarados na seção interface e codificados na seção implementation, com algumas exceções vistas mais adiante.

As seções initialization e finalization são opcionais e podem conter códigos que são executados na inicialização e finalização da aplicação, respectivamente. Podem ser usadas, por exemplo, para inicializar e finalizar estruturas de dados definidas na unit.

Uma questão importante refere-se ao fato de que uma unit pode referenciar outras units através da palavra reservada uses. Dessa forma, tais units tornam-se dependentes entre si, permitindo que os tipos de dados de uma unit podem ser vistos e acessados por outra. No caso das classes.os seus métodos podem ser acessados de acordo com os tipos de visibilidade definidas para cada caso.

Além disso,referências podem ser definidas para as seções da unit separadamente, ou seja, podemos referenciar um conjunto de units para a seção interface e outro para a seção implementation.

Entretanto, deve-se ter um cuidado em relação às referências circulares, que ocorrem quando uma unit faz referência à outra, tendo essa outra, também uma referência à unit anterior, na mesma seção. Podem existir referências mútuas entre units, porém em seções diferentes. A Listagem 1, demonstra a estrutura de uma unit com suas características.



unit untClasses; 
interface 
uses {Lista de units para uso na interface} 
    {Definiç!o dos tipos de dados. constantes. 
            variáveis. etc.} 
implementation 
uses {Lista de units para uso na implementação} 
     { Implementação dos métodos definidos da classe} 
initialization 
    {Implementação de códigos de inicialização 
            da unit} 
finalization 
     {Implementação de códigos de finalização 
            da unit} 
end. 
 ... 

Quer ler esse conteúdo completo? Tenha acesso completo