Escolar Documentos
Profissional Documentos
Cultura Documentos
Poo Advpl
Poo Advpl
ndice
1. Histria ............................................................................................................................................ 4
2. Introduo a Programao com Objetos ........................................................................................ 4
3. Coneceitos Bsicos ......................................................................................................................... 5
Abstrao ............................................................................................................................ 5
Encapsulao ...................................................................................................................... 5
Compartilhamento .............................................................................................................. 6
4. Modelo de Objetos e Definio de Classe ...................................................................................... 7
Definio .......................................................................................................................... 17
Dicas teis ........................................................................................................................ 17
Modelagem das classes de Exemplo ................................................................................ 18
Criao de uma classe....................................................................................................... 19
Herana com ADVPL....................................................................................................... 20
Exemplo da criao de um objeto .................................................................................... 20
10. Sugestes de Desenvolvimento.................................................................................................. 21
11. Referncia Bibliogrfica: ............................................................................................................. 21
Histrico de Alteraes
Nome
Marcelo Dolis Malatesta
Michel Willian Mosca
Data
23/02/2007
23/02/2007
Observaes
Criao
Criao
1. Histria
Nos anos 60 lanado a Simula-67 que apresentou pela primeira vez os conceitos de classes,
rotinas correlatas e subclasses. Na dcada de 70 a Seros-PARC cria a Smalltak at hoje
considerada a mais pura das LPOO. No final da dcada de 80 aparece a C++, uma linguagem
hbrida.
Orientao a Objetos o maior avano em software destes ltimos anos. uma forma mais
natural de se analisar o mundo. Ela nos permite construir sistemas melhores e, alm disso, de
maneira mais fcil. Ser a mais importante das tecnologias emergentes na rea de software nos
anos 90.
As tcnicas estruturadas que, sem dvida, atualmente so as mais populares na comunidade de
informtica, obtiveram grande aceitao desde que foram lanadas no final dos anos 70. Contudo
a medida que foram sendo utilizadas, a decomposio funcional mostrou-se inadequada em
situaes de sistemas complexos e principalmente para profissionais iniciantes. Os
aperfeioamentos introduzidos em 1984, por Sthephen M e John F Palmer e, mais tarde,
complementados por Stephen Mellor e Paul Ward, para sistemas em real-time, ajudaram a anlise
estruturada a se tornar mais eficiente. Contudo os sistemas criados com as tcnicas estruturadas
ainda so difceis de serem incrementados com novas funes e as alteraes em funes j
existentes, muitas vezes, provocam srios problemas em outras partes do software.
2. Introduo a Programao com Objetos
Um objeto uma entidade do mundo real que tem uma identidade. Objetos podem representar
entidades concretas (um arquivo no meu computador, uma bicicleta) ou entidades conceituais
(uma estratgia de jogo, uma poltica de escalonamento em um sistema operacional). Cada objeto
ter sua identidade significa que dois objetos so distintos mesmo que eles apresentem exatamente
as mesmas caratersticas.
Embora objetos tenham existncia prpria no mundo real, em termos de linguagem de
programao um objeto necessita um mecanismo de identificao. Esta identificao de objeto
deve ser nica, uniforme e independente do contedo do objeto. Este um dos mecanismos que
permite a criao de colees de objetos, as quais so tambm objetos em si.
A estrutura de um objeto representada em termos de atributos. O comportamento de um objeto
representado pelo conjunto de operaes que podem ser executadas sobre o objeto. Objetos com
a mesma estrutura e o mesmo comportamento so agrupados em classes. Uma classe uma
abstrao que descreve propriedades importantes para uma aplicao e simplesmente ignora o
resto.
Cada classe descreve um conjunto (possivelmente infinito) de objetos individuais. Cada objeto
dito ser uma instncia de uma classe. Assim, cada instncia de uma classe tem seus prprios
valores para cada atributo, mas dividem os nomes dos atributos e mtodos com as outras
instncias da classe. Implicitamente, cada objeto contm uma referncia para sua prpria classe -em outras palavras, ele sabe o que ele .
Polimorfismo significa que a mesma operao pode se comportar de forma diferente em classes
diferentes. Por exemplo, a operao move quando aplicada a uma janela de um sistema de
interfaces tem um comportamento distinto do que quando aplicada a uma pea de um jogo de
xadrez. Um mtodo uma implementao especfica de uma operao para uma certa classe.
Polimorfismo tambm implica que uma operao de uma mesma classe pode ser implementada
por mais de um mtodo. O usurio no precisa saber quantas implementaes existem para uma
operao, ou explicitar qual mtodo deve ser utilizado: a linguagem de programao deve ser
capaz de selecionar o mtodo correto a partir do nome da operao, classe do objeto e
argumentos para a operao. Desta forma, novas classes podem ser adicionadas sem
necessidade de modificao de cdigo j existente, pois cada classe apenas define os seus
mtodos e atributos.
No mundo real, alguns objetos e classes podem ser descritos como casos especiais, ou
especializaes, de outros objetos e classes. Por exemplo, a classe de computadores pessoais
com processador da linha 80x86 uma especializao de computadores pessoais, que por sua
vez uma especializao de computadores. No desejvel que tudo que j foi descrito para
computadores tenha de ser repetido para computadores pessoais ou para computadores pessoais
com processador da linha 80x86.
Herana o mecanismo do paradigma de orientao a objetos que permite compartilhar atributos
e operaes entre classes baseada em um relacionamento hierrquico. Uma classe pode ser
definida de forma genrica e depois refinada sucessivamente em termos de subclasses ou classes
derivadas. Cada subclasse incorpora, or herda, todas as propriedades de sua superclasse (ou
classe base) e adiciona suas propriedades nicas e particulares. As propriedades da classe base
no precisam ser repetidas em cada classe derivada. Esta capacidade de fatorar as propriedades
comuns de diversas classes em uma superclasse pode reduzir dramaticamente a repetio de
cdigo em um projeto ou programa, sendo uma das principais vantagens da abordagem de
orientao a objetos.
3. Coneceitos Bsicos
A abordagem de orientao a objetos favorece a aplicao de diversos conceitos considerados
fundamentais para o desenvolvimento de bons programas, tais como abstrao e encapsulao.
Tais conceitos no so exclusivos desta abordagem, mas so suportados de forma melhor no
desenvolvimento orientado a objetos do que em outras metodologias.
Abstrao
Abstrao consiste de focalizar nos aspectos essenciais inerentes a uma entidade e ignorar
propriedades ``acidentais.'' Em termos de desenvolvimento de sistemas, isto significa concentrarse no que um objeto e faz antes de se decidir como ele ser implementado. O uso de abstrao
preserva a liberdade para tomar decises de desenvolvimento ou de implementao apenas
quando h um melhor entendimento do problema a ser resolvido.
Muitas linguagens de programao modernas suportam o conceito de abstrao de dados; porm,
o uso de abstrao juntamente com polimorfismo e herana, como suportado em orientao a
objetos, um mecanismo muito mais poderoso.
O uso apropriado de abstrao permite que um mesmo modelo conceitual (orientao a objetos)
seja utilizado para todas as fases de desenvolvimento de um sistema, desde sua anlise at sua
documentao.
Encapsulao
Encapsulao, tambm referido como esconder informao, consiste em separar os aspectos
externos de um objeto, os quais so acessveis a outros objetos, dos detalhes internos de
implementao do objeto, os quais permanecem escondidos dos outros objetos. O uso de
encapsulao evita que um programa torne-se to interdependente que uma pequena mudana
tenha grandes efeitos colaterais.
O uso de encapsulao permite que a implementao de um objeto possa ser modificada sem
afetar as aplicaes que usam este objeto. Motivos para modificar a implementao de um objeto
podem ser por exemplo melhoria de desempenho, correo de erros e mudana de plataforma de
execuo.
Assim como abstrao, o conceito de encapsulao no exclusivo da abordagem de orientao a
objetos. Entretanto, a habilidade de se combinar estrutura de dados e comportamento em uma
nica entidade torna a encapsulao mais elegante e mais poderosa do que em linguagens
convencionais que separam estruturas de dados e comportamento.
Compartilhamento
Tcnicas de orientao a objetos promovem compartilhamento em diversos nveis distintos.
Herana de estrutura de dados e comportamento permite que estruturas comuns sejam
compartilhadas entre diversas classes derivadas similares sem redundncia. O compartilhamento
de cdigo usando herana uma das grandes vantagens da orientao a objetos. Ainda mais
importante que a economia de cdigo a clareza conceitual de reconhecer que operaes
diferentes so na verdade a mesma coisa, o que reduz o nmero de casos distintos que devem ser
entendidos e analisados.
O desenvolvimento orientado a objetos no apenas permite que a informao dentro de um projeto
seja compartilhada como tambm oferece a possibilidade de reaproveitar projetos e cdigo em
projetos futuros. As ferramentas para alcanar este compartilhamento, tais como abstrao,
encapsulao e herana, esto presentes na metodologia; uma estratgia de reuso entre projetos
a definio de bibliotecas de elementos reusveis. Entretanto, orientao a objetos no uma
frmula mgica para alcanar reusabilidade; para tanto, preciso planejamento e disciplina para
pensar em termos genricos, no voltados simplesmente para a aplicao corrente.
Atributos
Um atributo um valor de dado assumido pelos objetos de uma classe. Nome, idade e peso so
exemplos de atributos de objetos Pessoa. Cor, peso e modelo so possveis atributos de objetos
Carro. Cada atributo tem um valor para cada instncia de objeto. Por exemplo, o atributo idade tem
valor ``29'' no objeto Pedro Y. Em outras palavras, Pedro Y tem 29 anos de idade. Diferentes
instncias de objetos podem ter o mesmo valor para um dado atributo.
Cada nome de atributo nico para uma dada classe, mas no necessariamente nico entre todas
as classes. Por exemplo, ambos Pessoa e Companhia podem ter um atributo chamado endereo.
No diagrama de classes, atributos so listados no segundo segmento da caixa que representa a
classe. O nome do atributo pode ser seguido por detalhes opcionais, tais como o tipo de dado
assumido e valor default. A Figura
mostra esta representao.
Figura: Representao diagramtica de OMT para classes e objetos com atributos. Um diagrama
de classe com atributos apresentado esquerda. Um possvel diagrama de instncias com os
respectivos valores apresentado direita.
No se deve confundir identificadores internos de objetos com atributos do mundo real.
Identificadores de objetos so uma convenincia de implementao, e no tm nenhum significado
para o domnio da aplicao. Por exemplo, CIC e RG no so identificadores de objetos, mas sim
verdadeiros atributos do mundo real.
Operaes e Mtodos
Uma operao uma funo ou transformao que pode ser aplicada a ou por objetos em uma
classe. Por exemplo, abrir, salvar e imprimir so operaes que podem ser aplicadas a objetos da
classe Arquivo. Todos objetos em uma classe compartilham as mesmas operaes.
Toda operao tem um objeto-alvo como um argumento implcito. O comportamento de uma
operao depende da classe de seu alvo. Como um objeto ``sabe'' qual sua classe, possvel
escolher a implementao correta da operao. Alm disto, outros argumentos (parmetros)
podem ser necessrios para uma operao.
Uma mesma operao pode se aplicar a diversas classes diferentes. Uma operao como esta
dita ser polimrfica, ou seja, ela pode assumir distintas formas em classes diferentes.
Um mtodo a implementao de uma operao para uma classe. Por exemplo, a operao
imprimir pode ser implementada de forma distinta, dependendo se o arquivo a ser impresso contm
apenas texto ASCII, um arquivo de um processador de texto ou binrio. Todos estes mtodos
executam a mesma operao -- imprimir o arquivo; porm, cada mtodo ser implementado por
um diferente cdigo.
A assinatura de um mtodo dada pelo nmero e tipos de argumentos do mtodo, assim como
por seu valor de retorno. Uma estratgia de desenvolvimento recomendvel manter assinaturas
coerentes para mtodos implementando uma dada operao, assim como um comportamento
consistente entre as implementaes.
Em termos de diagramas OMT, operaes so listadas na terceira parte da caixa de uma classe.
Cada nome de operao pode ser seguida por detalhes opcionais, tais como lista de argumentos e
tipo de retorno. A lista de argumentos apresentada entre parnteses aps o nome da operao.
Uma lista de argumentos vazia indica que a operao no tem argumentos; da ausncia da lista de
argumentos no se pode concluir nada. O tipo de resultado vem aps a lista de argumentos, sendo
precedido por dois pontos (:). Caso a operao retorne resultado, este no deve ser omitido -- esta
a forma de distingu-la de operaes que no retornam resultado. Exemplos de representao de
operaes em OMT so apresentados na Figura .
Ligaes e Associaes
Ligaes e associaes so os mecanismos para estabelecer relacionamentos entre objetos e
classes. Uma ligao uma conexo fsica ou conceitual entre duas instncias de objetos. Por
exemplo, Pedro Y trabalha-para Companhia W. Uma ligao uma instncia de uma associao.
Uma associao descreve um grupo de ligaes com estrutura e semntica comuns, tal como
``uma pessoa trabalha-para uma companhia.'' Uma associao descreve um conjunto de ligaes
potenciais da mesma forma que uma classe descreve um conjunto de objetos potenciais.
A notao de diagramas OMT para associao uma linha conectando duas classes. Uma ligao
representada como uma linha conectando objetos. Nomes de associaes so usualmente
apresentada em itlico. Se entre um par de classes s existe uma nica associao cujo sentido
deva ser bvio, ento o nome da associao pode ser omitido. A Figura
apresenta um exemplo
de diagrama OMT com associaes.
Figura: Representao diagramtica de OMT para associaes entre classes (topo) e ligaes
entre objetos (abaixo).
Alguns atributos podem dizer respeito a associaes, e no a classes. Para tais casos, OMT
introduz o conceito de atributo de ligao. Quando a associao tem ainda operaes associadas,
ento ela pode ser modelada como uma classe que est ``conectada'' associao. Um exemplo
deste caso apresentado na Figura .
Figura: Representao diagramtica de OMT para associaes entre classes com atributos. Neste
caso, os atributos da associao esto representados atravs de uma classe explcita,
Autorizao. O crculo preto no final da linha da associao indica que mais de um objeto de uma
classe podem estar associados a cada objeto da outra classe. Um crculo vazado indicaria que
possivelmente nenhum objeto poderia estar associado, ou seja, o conceito de associao opcional.
Agregao
Uma agregao um relacionamento do tipo ``uma-parte-de,'' nos quais objetos representando os
componentes de alguma coisa so associados com objetos representando uma montagem. Por
exemplo, o texto de um documento pode ser visto como um conjunto de pargrafos, e cada
pargrafo um conjunto de sentenas (Figura ).
5. Herana
Generalizao e herana so abstraes poderosas para compartilhar similaridades entre classes
e ao mesmo tempo preservar suas diferenas.
Generalizao o relacionamento entre uma classe e um ou mais verses refinadas
(especializadas) desta classe. A classe sendo refinada chamada de superclasse ou classe base,
enquanto que a verso refinada da classe chamada uma subclasse ou classe derivada. Atributos
e operaes comuns a um grupo de classes derivadas so colocadas como atributos e operaes
da classe base, sendo compartilhados por cada classe derivada. Diz-se que cada classe derivada
herda as caractersticas de sua classe base. Algumas vezes, generalizao chamada de
relacionamento is-a (-um), porque cada instncia de uma classe derivada tambm uma
instncia da classe base.
Generalizao e herana so transitivas, isto , podem ser recursivamente aplicadas a um nmero
arbitrrio de nveis. Cada classe derivada no apenas herda todas as caractersticas de todos seus
ancestrais como tambm pode acrescentar seus atributos e operaes especficos.
A Figura
mostra a notao diagramtica de OMT para representar generalizao, um tringulo
com o vrtice apontado para a classe base. Um discriminador pode estar associado a cada
associao do tipo generalizao; este um atributo do tipo enumerao que indica qual a
propriedade de um objeto est sendo abstrada pelo relacionamento de generalizao. Este
discriminador simplesmente um nome para a base de generalizao.
1.2
Uma classe derivada pode sobrepor uma caracterstica de sua classe base definindo uma
caracterstica prpria com o mesmo nome. A caracterstica local (da classe derivada) ir refinar e
substituir a caracterstica da classe base. Uma caracterstica pode ser sobreposta, por exemplo,
por questes de refinamento de especificao ou por questes de desempenho.
Entre as caractersticas que podem ser sobrepostas esto valores default de atributos e mtodos
de operao. Uma boa estratgia de desenvolvimento no deve sobrepor uma caracterstica de
forma inconsistente com a semntica da classe base.
6. Interface
um tipo definido da qual no se deseja que sejam criadas instncias da mesma, mas apenas
deve ser seguida como padro para a criao de novas classes como um contrato.
Na interface so apenas definidas as assinaturas de operaes e ou propriedades que devero ser
suportadas pelas classes que utilizem a interface, sem a incluso de cdigo de programao na
interface.
O uso de interfaces esta diretamente associada troca de mensagens entre os objetos, desta
maneira o programador cria qualquer nova classe que necessite e assim mesmo as mensagens
continuam sendo trocadas entre objetos sem prejuzos ao sistema.
As classes que implementam uma interface, devem implementar todas as operaes definidas pela
interface e o respectivo cdigo de programao para que sempre que um objeto necessitar trocar
uma mensagem no cause erros.
Veja o exemplo abaixo:
7. Classe Abstrata
A classe abstrata um tipo de dado bastante similiar Interface onde tambm so definidas as
assinaturas de operaes e propriedades no podendo ser instanciado diretamente por uma
classe, servindo apenas ao propsito de ser um padro para a criao de novas classes como um
contrato. A grande diferena da Classe Abstrata para a Interface a possibilidade de apenas
definir as assinaturas das operaes, deixando a responsabilidade da implementao do cdigo da
operao para a classe que implemente a Classe Abstrata como ocorre com a Interface, ou ento
tambm implementar o cdigo de implementao para a operao na prpria Classe Abstrata
podendo o cdigo ser sobrescrito pela classe implementadora respeitando-se a assinatura original
da operao.
Definio
Classes no Protheus podem conter mtodos, propriedades e herana, conforme a sintaxe abaixo:
CLASS <NOME_DA_CLASSE> [FROM <NOME_DA_CLASSE_HERDADA>]
//Declarando uma propriedade/varivel
DATA <NOME_DA_PROPRIEDADE>
//Declarando o mtodo que executado quando a classe criada
METHOD NEW() CONSTRUCTOR
//Declarando o mtodo que no necessita ser implementado pela classe. Utilizado por
interface.
METHOD <NOME_DO_MTODO>(PARAM1, PARAMN) VIRTUAL
//Declarando um mtodo da classe
METHOD <NOME_DO_MTODO>(PARAM1, PARAMN)
ENDCLASS
O mtodo de inicializao executado sempre que uma nova instncia da classe for criada pelo
sistema e sempre deve retornar a prpria classe.
METHOD NEW() CLASS <NOME_DA_CLASSE>
//Coloque as propriedades e funes que devem ser executadas na inicializao
RETURN SELF
A criao de mtodos de uma classe realizada da mesma maneira que j estamos acostumados
a criar funes em ADVPL.
METHOD <NOME_DO_MTODO>(PARAM1, PARAMN) CLASS <NOME_DA_CLASSE>
//Coloque o cdigo de programao da funo.
RETURN
Dicas teis
//Use para acessar propriedades e mtodos da classe
::
ou
:Self
//Use para acessar propriedades e mtodos da classe herdada
:Parent
Importante: Para maiores detalhes sobre Classes e Objetos no ADVPL veja o arquivo de
ajuda do Norton Guides chamado FW19.NG.
Na construo de um modelo para uma aplicao, as seguintes sugestes devem ser observadas
a fim de se obter resultados claros e consistentes:
1. No comece a construir um modelo de objetos simplesmente definindo classes,
associaes e heranas. A primeira coisa a se fazer entender o problema a ser resolvido.
2. Tente manter seu modelo simples. Evite complicaes desnecessrias.
3. Escolha nomes cuidadosamente. Nomes so importantes e carregam conotaes
poderosas. Nomes devem ser descritivos, claros e no deixar ambiguidades. A escolha de
bons nomes um dos aspectos mais difceis da modelagem.
4. No ``enterre'' apontadores ou outras referncias a objetos dentro de objetos como
atributos. Ao invs disto, modele estas referncias como associaes. Isto torna o modelo
mais claro e independente da implementao.
5. Tente evitar associaes que envolvam trs ou mais classes de objetos. Muitas vezes,
estes tipos de associaes podem ser decompostos em termos de associaes binrias,
tornando o modelo mais claro.
6. No transfira os atributos de ligao para dentro de uma das classes.
7. Tente evitar hierarquias de generalizao muito profundas.
8. No se surpreenda se o seu modelo necessitar vrias revises; isto o normal.
9. Sempre documente seus modelos de objetos. O diagrama pode especificar a estrutura do
modelo, mas nem sempre suficiente para descrever as razes por trs da definio do
modelo. Uma explicao escrita pode clarificar pontos tais como significado de nomes e
explicar a razo para cada classe e relacionamento.
10. Nem sempre todas as construes OMT so necessrias para descrever uma aplicao.
Use apenas aquelas que forem adequadas para o problema analisado.