INTRODUO AO
PARADIGMA DE
ORIENTAO A OBJETOS
MENSAGEM
OBJETO B
OBJETO A
NDICE
1. Introduo
1.1. Por que estudar o paradigma de orientao a objetos ? ..........................
1.2. A natureza das novas aplicaes .............................................................
1.3. O desafio das novas tecnologias .............................................................
1.4. Os ambientes de programao modernos ................................................
1.5. Programao Orientada a Objetos...........................................................
2. Conceitos bsicos e terminologia
2.1. Abstrao de dados .................................................................................
2.2. Objetos ....................................................................................................
2.3. Mensagens ...............................................................................................
2.4. Mtodos ...................................................................................................
2.5. Classes .....................................................................................................
2.6. Herana ...................................................................................................
2.6. Polimorfismo ...........................................................................................
2.7. Relaes entre Objeto, Classe e Herana ................................................
2.7.1. Classificao/Instanciao .......................................................
2.7.2. Generalizao/Especializao ..................................................
2.7.3. Composio/Decomposio .....................................................
3. Avaliao da POO
3.1. Vantagens da POO ..................................................................................
3.2. Desvantagens da POO .............................................................................
3.3. O estilo de programao com POO.........................................................
3.4. Programao Dirigida por Eventos .........................................................
4. Linguagens Tpicas
4.1. A linguagem de programao SmallTalk ................................................
4.2. A linguagem de programao C++ .........................................................
4.3. A linguagem de programao Object Pascal ..........................................
5. O paradigma de orientao a objetos
5.1. Desenvolvimento Orientado a Objetos ...................................................
5.2. Anlise Orientada a Objetos ...................................................................
5.3. Projeto Orientado a Objetos ....................................................................
5.4. Tcnica de Modelagem de Objetos .........................................................
5.4.1. Anlise ......................................................................................
5.4.2. Projeto do sistema ....................................................................
5.4.3. Projeto dos Objetos ..................................................................
5.5. Bancos de Dados Orientados a Objetos ..................................................
5.6. Outras utilizaes da Orientao a Objetos ............................................
5.6.1. Reengenharia de Processos Orientada a Objetos .....................
5.6.2 Ambientes de Desenvolvimento de Software Orientados a
Objetos ......................................................................................
5.6.3 Interfaces Grficas de Usurio Orientadas a Objetos ...............
5.6.4 Sistemas Operacionais Orientados a Objetos ............................
6. Bibliografia
1
1
1
2
2
3
5
5
6
8
9
9
11
13
15
15
15
16
16
17
18
19
20
21
22
25
27
31
31
33
33
34
35
36
36
37
38
38
38
39
39
39
1. Introduo
O paradigma de Orientao a Objetos (OO) no apenas um nome pomposo,
uma nova terminologia ou modismo sem efeito prtico. Possui o objetivo, e consegue
obt-lo em conjunto com outras tecnologias, de atenuar o que se convencionou
chamar de crise do software. No incio do era dos computadores o hardware era to
caro que o custo do software era muitas vezes desprezado nas organizaes. As
aplicaes eram tambm, se comparadas com a atualidade, representativamente mais
simples. Com o passar do tempo observou-se que os custos associados ao hardware
diminuram gradativamente, enquanto que os custos do software aumentaram
assustadoramente. Hoje, em uma instalao os custos associados com o software
superam em vrias vezes cos custos de hardware, e a tendncia que isto aumente
cada vez mais.
complexas, a margem de erro aceitvel se torna cada vez menor, uma vez
que, a rigor, o prprio operador de um sistema est a reboque do sistema e
no o contrrio.
Alto desempenho: Novas aplicaes demandam alto desempenho em
clculos (ex.: rastreamento por satlites, previso do tempo, sistemas de
informaes geogrficas, CAD, etc.) e/ou em coordenao e comunicao
entre as partes (usando redes de computadores, por exemplo).
Classes
Herana
Polimorfismo
2.2. Objetos
Na viso de uma linguagem imperativa tradicional (Pascal, C, COBOL, etc.),
os objetos aparecem como uma nica entidade autnoma que combina a
representao da informao (estruturas de dados) e sua manipulao
(procedimentos), uma vez que possuem capacidade de processamento e armazenam
um estado local. Pode-se dizer que um objeto composto de (Figura 2.1):
Propriedades: so as informaes, estruturas de dados que representam o
estado interno do objeto. Em geral, no so acessveis aos demais objetos.
Comportamento: conjunto de operaes, chamados de mtodos, que agem
sobre as propriedades. Os mtodos so ativados (disparados) quando o
objeto recebe uma mensagem solicitando sua execuo. Embora no seja
obrigatrio, em geral uma mensagem recebe o mesmo nome do mtodo que
ela dispara. O conjunto de mensagens que um objeto est apto a receber
est definido na sua interface.
Identidade: uma propriedade que diferencia um objeto de outro; ou seja,
seu nome.
INTERFACE
OPERAO 1
ESTADO
INTERNO
OPERAO 2
IMPLEMENTAES DAS
OPERAES 1, 2 E 3
OPERAO 3
ATRIBUTOS
MTODOS
CARGO
...
...
SALRIO
LISTAR
DEPENDENTES
2.3. Mensagens
Um objeto sozinho no muito til e geralmente ele aparece como um
componente de um grande programa que contem muitos outros objetos. Atravs da
interao destes objetos pode-se obter uma grande funcionalidade e comportamentos
mais complexos.
Objetos de software interagem e comunicam-se com os outros atravs de
mensagens. Quando o objeto A deseja que o objeto B execute um de seus mtodos, o
objeto A envia uma mensagem ao objeto B (Figura 2.4). Algumas vezes o objeto
receptor precisa de mais informao para que ele saiba exatamente o que deve fazer;
esta informao transmitida juntamente com a mensagem atravs de parmetros.
MENSAGEM
OBJETO B
OBJETO A
2.4. Mtodos
Um mtodo implementa algum aspecto do comportamento do objeto.
Comportamento a forma como um objeto age e reage, em termos das suas trocas de
estado e troca de mensagens.
Um mtodo uma funo ou procedimento que definido na classe e
tipicamente pode acessar o estado interno de um objeto da classe para realizar alguma
operao. Pode ser pensado como sendo um procedimento cujo primeiro parmetro
o objeto no qual deve trabalhar. Este objeto chamado receptor (seo 2.3). Abaixo
apresentada uma notao possvel para o envio de uma mensagem (invocao do
mtodo)
receptor.nome_da_mensagem(par1, par2, par3)
Muitas vezes quando se trabalha com objetos deseja-se realizar certas
operaes no momento da criao e destruio de um objeto. Em algumas linguagens
dado um tratamento de modo a ficar transparente ao programador a sua
implementao. Em outras, necessrio utilizar mtodos especiais para este fim,
chamados de construtores e destrutores.
Construtores so usados para criar e inicializar objetos novos. Tipicamente, a
inicializao baseada em valores passados como parmetros para o construtor.
Destrutores so usados para destruir objetos. Quando um destrutor invocado, as
aes definidas pelo usurio so executadas, e ento a rea de memria alocada para o
objeto liberada. Em algumas linguagens, como C++, o construtor chamado
automaticamente quando um objeto declarado. Em outras, como Object Pascal,
necessrio chamar explicitamente o construtor antes de poder utiliz-lo.
Copyright 1996 - Carlos Alberto Kamienski - CEFET-PB - verso preliminar
2.5. Classes
Objetos de estrutura e comportamento idnticos so descritos como
pertencendo a uma classe, de tal forma que a descrio de suas propriedades pode ser
feita de uma s vez, de forma concisa, independente do nmero de objetos idnticos
em termos de estrutura e comportamento que possam existir em uma aplicao. A
noo de um objeto equivalente ao conceito de uma varivel em programao
convencional, pois especifica uma rea de armazenamento, enquanto que a classe
vista como um tipo abstrato de dados, uma vez que representa a definio de um tipo.
Cada objeto criado a partir de uma classe denominado de instncia dessa
classe. Uma classe prov toda a informao necessria para construir e utilizar objetos
de um tipo particular, ou seja, descreve a forma da memria privada e como se
realizam as operaes das suas instncias. Os mtodos residem nas classes, uma vez
que todas as instncias de uma classe possuem o mesmo conjunto de mtodos, ou
seja, a mesma interface.
Cada instncia pertence a uma classe e uma classe pode possuir mltiplas
instncias. Devido ao fato de todas as instncias de uma classe compartilharem as
mesmas operaes, qualquer diferena de respostas a mensagens aceitas por elas,
determinada pelos valores das variveis de instncia.
Em algumas linguagens, aparece tambm a definio de variveis de classe.
Variveis de classe surgem quando se tem a viso de classes sendo manipuladas como
objetos. Esta abordagem se torna til ao se tentar manter classes contendo
informao. Como exemplo, uma classe poderia armazenar o nmero de objetos que
tenham sido instanciados da classe at um certo momento. Cita-se, ainda, a
importncia de se ter classes como objetos para modelar a entidade que recebe uma
mensagem requisitando a criao de um novo objeto (como em Object Pascal).
A Figura 2.5 ilustra o relacionamento entre classes e objetos. Cada objeto
instanciado a partir de uma classe possui as propriedades e comportamento definidos
na classe, da mesma maneira que uma varivel incorpora as caractersticas do seu
tipo. A existncia de classes proporciona um ganho em reusabilidade. pois o cdigo
das operaes e a especificao da estrutura de um nmero potencialmente infinito de
objetos esto definidos em um nico local, a classe. Cada vez que um novo objeto
instanciado ou que uma mensagem enviada, a definio da classe reutilizada. Caso
no existissem classes, para cada novo objeto criado, seria preciso uma definio
completa do objeto.
10
CLASSE 1
OBJETOS DA
CLASSE 1
CLASSE 2
OBJETOS DA
CLASSE 2
CLASSE 3
OBJETOS DA
CLASSE 3
2.6. Herana
O mecanismo de herana permite a reutilizao das propriedades de uma
classe na definio de outra. A classe mais generalizada chamada superclasse e a
Copyright 1996 - Carlos Alberto Kamienski - CEFET-PB - verso preliminar
11
EXECUTIVO
PRESIDENTE
GERENTE
DIRETOR
GERENTE
DEPARTAMENTO
COLABORADOR
GERENTE
DIVISO
12
2.6. Polimorfismo
Polimorfismo refere-se capacidade de dois ou mais objetos responderem
mesma mensagem, cada um a seu prprio modo. A utilizao da herana torna-se
fcil com o polimorfismo. Desde que no necessrio escrever um mtodo com nome
diferente para responder a cada mensagem, o cdigo mais fcil de entender. Por
exemplo, sem polimorfismo, para inserir um novo empregado, seria necessrio o
seguinte cdigo:
Colaborador1.InsereColaborador
Gerente1.InsereGerente
Presidente1.InserePresidente
13
14
2.7.1. Classificao/Instanciao
A capacidade de classificar objetos (em classes) permite expressar relaes do
tipo classificao/instanciao. O relacionamento feito a partir da observao de
diversos fenmenos para categorizao dos mesmos em grupos (classes), com base no
conjunto de propriedades comuns a todos. Por exemplo, dois computadores, IBM PC
e Machintosh, podem ser classificados como instncias (objetos, modelos, ou
espcimes) da classe (categoria) Microcomputador (Figura 2.7). A relao inversa
15
MACHINTOSH
IBM PC
CLASSIFICAO
2.7.2. Generalizao/Especializao
Este tipo de relao ocorre quando, a partir a observao de duas classes,
abstramos delas uma classe mais genrica. Por exemplo, as classes
Microcomputador e Mainframe podem ser considerados casos especiais da classe
Computador. Esta classe considerada uma generalizao das duas primeiras, que
so chamadas de especializaes da classe Computador (Figura 2.8). A idia da
generalizao/especializao a base para a classificao das espcies nas cincias
naturais. Do ponto de vista de propriedades, o pressuposto que as subclasses tenham
todas as propriedades das classes de quem elas so especializaes. Deve haver pelo
menos uma propriedade que diferencie duas classes especializadas (subclasses) a
partir da mesma classe genrica (superclasse). Este o tipo de relao utilizado com o
mecanismo de herana.
ESPECIALIZAO
COMPUTADOR
MICROCOMPUTADOR
MAINFRAME
GENERALIZAO
2.7.3. Composio/Decomposio
A relao de composio (ou agregao)/decomposio permite que objetos
sejam compostos pela agregao de outros objetos ou componentes. Neste
relacionamento, so determinados que instncias (objetos) de uma classe so
compostas por instncias de outras classes. Essa operao denominada
decomposio e a relao inversa, a formao de uma nova classe como um agregado
de classes preexistentes, denominada composio. Por exemplo, instncias da
16
TECLADO
VDEO
COMPOSIO
3. Avaliao da POO
O paradigma de objetos no apenas um nome pomposo. Seu objetivo claro
melhorar a produtividade dos programadores no desenvolvimento a sistemas. A POO
realmente torna mais rpidas as atividades de programao e manuteno de sistemas
de informao. Assim como a programao estrutura melhorou a qualidade dos
sistemas em relao aos mtodos praticados anteriormente (programas estilo
spagueti recheados de comandos goto), a POO surge como um modelo promissor
para solucionar as necessidades crescentes da nossa sociedade por sistemas
informatizados.
A grande vantagem do paradigma de objetos o seu carter unificador: trata
todas as etapas do desenvolvimento de sistemas e ambientes sob uma nica
abordagem. Nesse sentido, podemos ter anlise, projeto, programao, banco de
dados e ambientes orientados a objetos, eliminando as diferenas de impedncia
entre eles.
Reusabilidade de cdigo
Escalabilidade de aplicaes
Mantenabilidade
Apropriao
17
18
19
20
Ambiente
POO
PDE
COBOL tradicional
Visual Basic
Turbo C++
Delphi
NO
NO
SIM
SIM
NO
SIM
NO
SIM
Programao Seqencial
Programao Seqencial o que se imagina quando se pensa em programao.
o modelo bsico para os programadores desde que a programao comeou, e
fcil de conceituar. Em programao seqencial, h um incio, meio e fim. Ela
unidirecional. Tipicamente um programa seqencial possui os seguintes passos:
1.
2.
3.
4.
21
4. Linguagens Tpicas
Com relao ao suporte a objetos, pode-se classificar as linguagens de
programao em: no baseadas em objetos, baseadas em objetos, baseadas em
classes e orientadas a objetos.
Uma linguagem que no suporte objetos como uma construo primitiva ,
obviamente, no baseada em objetos. Exemplos de linguagens no baseadas em
objetos so Pascal, C, FORTRAN e COBOL.
Caso uma linguagem suporte objetos, ento ela denominada como sendo
baseada em objetos. As linguagens baseadas em objetos incluem Modula-2, ADA,
CLU, Simula, SmallTalk, C++ e Object Pascal.
Para ser considerada uma linguagem baseada em classes necessrio que todo
objeto pertena a alguma classe. CLU, Simula, SmallTalk, C++ e Object Pascal so
tambm linguagens baseadas em classes, mas no o so o ADA e Modula-2. Uma
linguagem orientada a objetos baseada em classes dispostas em hierarquias.
SmallTalk, C++ e Object Pascal so orientadas a objetos, uma vez que suas classes
suportam o mecanismo de herana. CLU baseada em classes, mas no orientada a
objetos, uma vez que suas classes no suportam herana.
Linguagens baseadas em classes so um subconjunto prprio das linguagens
baseadas em objetos, enquanto linguagens orientadas a objetos so um subconjunto
prprio das linguagens baseadas em classes. A Figura 4.1 mostra o relacionamento
entre as classes de linguagens de programao baseadas a objetos.
22
BASEADAS EM
OBJETOS
+ CLASSES
BASEADAS EM
CLASSES
+ HERANA
ADA
ORIENTADAS A
OBJETOS
CLU
SMALLTALK
C++
23
24
class name
Empregado
superclass
Object
Instance variable names
nome
salario
class variable names
NumeroDeEmpregados
class methods
initialize
NumeroDeEmpregados := 0
new
| newEmp |
newEmp := super new.
NumeroDeEmpregados := NumeroDeEmpregados + 1.
^newEmp
instance methods
atualizaNome: umNome
nome := umNome
nome
^nome
atualizaSalario: umSalario
salario := umSalario
salario
^salario
class name
Gerente
superclass
Empregado
Instance variable names
comissao
25
instance methods
atualizaComissao: umaComissao
comissao := umaComissao
salario
^(salario + comissao)
26
27
28
29
30
end;
implementation
var
NumeroDeEmpregados: integer;
class procedure TEmpregado.Inicializa;
begin
NumeroDeEmpregados := 0;
end;
constructor TEmpregado.Create;
begin
inherited Create;
Nome := '';
Salario := 0.0;
NumeroDeEmpregados := NumeroDeEmpregados + 1;
end;
destructor TEmpregado.Destroy;
begin
inherited Destroy;
NumeroDeEmpregados := NumeroDeEmpregados - 1;
end;
procedure TEmpregado.AtualizaNome (umNome: string);
begin
Nome := umNome;
end;
function TEmpregado.ObtemNome: string;
begin
ObtemNome := Nome;
end;
procedure TEmpregado.AtualizaSalario (umSalario: real);
begin
Salario := umSalario;
end;
function TEmpregado.ObtemSalario: real;
begin
ObtemSalario := Salario;
end;
constructor TGerente.Create;
begin
inherited Create;
Comissao := 0.0;
end;
procedure TGerente.AtualizaComissao (umaComissao: real);
begin
Copyright 1996 - Carlos Alberto Kamienski - CEFET-PB - verso preliminar
31
Comissao := umaComissao;
end;
function TGerente.ObtemSalario: real;
begin
ObtemSalario := Salario + Comissao;
end;
end.
32
Design
With
Applications,
33
34
35
5.4.1. Anlise
O objetivo da anlise desenvolver um modelo do que o sistema ir fazer.
Este modelo expresso em termos de objetos e relacionamentos, fluxo de controle
dinmico e transformaes funcionais. O processo de obteno dos requisitos e de
discusses com o usurio solicitante deve manter-se durante toda a anlise.
Neste fase, a entrada a prpria descrio do problema e a sada um modelo
formal do mesmo. Os passos para realizar a anlise so os seguintes:
O Modelo de Objetos
O modelo de objetos descreve a estrutura de objetos de um sistema - sua
identidade, seus relacionamentos com outros objetos, seus atributos e suas operaes.
o mais importante dos trs modelos, pois enfatiza a construo da arquitetura lgica
do sistema, tendo como base os objetos e seus relacionamentos, que em geral so as
partes mais estveis de um sistema. O modelo de objetos proporciona a estrutura
necessria sobre a qual podem ser colocados os modelos dinmico e funcional.
A notao utilizada para descrio deste modelo , na verdade, uma extenso
da notao empregada no Modelo Entidade-Relacionamento (MER), pois combina os
conceitos de orientao a objetos (classes e herana) e da modelagem da informao
(entidades e associaes). Possui as seguintes caractersticas:
Utiliza grafos cujos ns representam classes de objetos e os arcos
representam relacionamentos.
As classes so organizadas em hierarquias. Elas definem os valores dos
atributos carregados por cada objeto e definem as operaes que cada
objeto faz ou recebe.
36
37
38
39
40
6. Bibliografia
Coad, P. & Yourdon, E., Object-Oriented Analysis, Prentice Hall, 1990.
Hathaway, B., Object-Orientation FAQ (Frequently-Asked Question), World-Wide
Web: (http://iamwww.unibe.ch), 1996.
Kamienski, F. V., Programao Orientada a Objetos, Relatrio Tcnico, IMECCUnicamp, fev. 1992.
Korson, T. & McGregor, J. D., Understanding Object-Oriented: A Unifying
Paradigm, Communications of the ACM, v. 33, n. 9, set. 1990.
Martin, J. Princpios de Anlise e Projeto Baseados em Objetos, Editora Campus,
1994.
Motta, G. H. M. B., Introduo Orientao a Objetos: Programao, Projeto,
Anlise e Bancos de Dados, material particular, 1995.
Motta, G. H. M. B., Programao Orientada a Objetos com Delphi, material
particular, 1995.
Rumbaugh, J. et al, Modelagem e Projetos Baseados a Objetos, Editora Campus,
1994.
Sebesta, R. W., Concepts of Programming Languages, Benjamin/Cummings, 1989.
Stroustrup, B., The C++ Programming Language, Addison-Wesley, 1986.
Takahashi, T., Liesenberg, H. K. E. & Xavier, D. T., Programao Orientada a
Objetos, VII Escola de Computao, So Paulo, 1990.
The Object Agency, Inc., A Comparison of Object-Oriented Development
Methodologies, World-Wide Web: (http://www.toa.com), 1995.
Todd, B. & Kellen, V., Delphi: A Developers Guide, M&T Books, 1995.
Wegner, P., Concepts and Paradigms of Object Oriented Programming, ACM
Object-Oriented Messenger, v. 1, n. 1, 1990.
Zdonik, S. B. & Maier, D., Readings in Object-Oriented Database Systems, Morgan
Kaufmann, 1990.
41