Você está na página 1de 105

Paradigma de Orientao a Objetos

O que um paradigma?
Paradigma: [Aurlio, 1998]
[Do gr. pardeigma, pelo lat. paradigma]. S. m.
1. Modelo, padro; 2. Aquilo que serve de exemplo ou norma; 3. Base para a avaliao de qualidade ou quantidade.

Exemplos: paradigma de BD Relacional; paradigma de programao estruturada; ...

O que o Paradigma de Orientao a Objetos?


Um conjunto de princpios computacionais (conceitos, tcnicas, mtodos, ...) que definem uma base comum e um conjunto de caractersticas essenciais da abordagem e dos sistemas OO
Sistemas, modelos e linguagens podem
ser construdos com base no paradigma OO e/ou podem prover caractersticas do paradigma OO

Como usar o Paradigma OO?


O paradigma OO pode ser usado como
um modelo ou padro para verificar se um sistema ou modelo tem caractersticas OO
Exemplo: Uma determinada linguagem de programao orientado a objetos?

uma norma para desenvolver sistemas com caractersticas OO


Exemplo: como garantir que meu software ser OO?

uma base para avaliar a qualidade de sistemas OO


Exemplo: o meu modelo de desenho um modelo OO?

Aplicaes do Paradigma OO
Algumas reas que usam conceitos de OO
Linguagens de programao Modelagem de dados e SGBD Interfaces de usurio e Sistemas Operacionais Processamento Distribudo Aberto (ODP) Gerncia de Redes de Telecomunicaes (TMN) Protocolos de Comunicao (IP, HTTP) Engenharia de Software

Fundamentos do Paradigma OO
No existe definio formal universal
Existem, no entanto, conceitos e caractersticas que esto presentes em diversas abordagens OO

O objeto o conceito fundamental, incluindo


identidade e propriedades de objeto encapsulao de estrutura e comportamento conjunto de abstraes para modelagem mecanismos de herana e de comunicao

Definio de Objeto
uma representao de um conceito existente em um determinado Contexto de Modelagem
Um objeto pode representar um conceito
concreto: um carro uma entidade que tem cor, ano, marca, modelo, proprietrio, ... abstrato: um projeto uma entidade que envolve cronograma, equipe, lder, objetivos, oramento, ...

Representao de Objetos na UML


Objeto uma representao de um conceito; no o conceito em si!

meuCarro:Carro numchassis: chassis = YFBW9E56RG ano = 1994 :Carro


Objeto annimo

genesis:Projeto codigo = 10 oramento = 10000

...
Objetos nomeados

...

agente:
Objeto rfo

Propriedades de Objeto
Um objeto possui quatro tipos de propriedades
Atributos que o caracterizam
cor, ano, marca, modelo, ...

Associaes que o relacionam com outros objetos


proprietrio (associao com um objeto Pessoa), ...

Comportamentos que ele pode realizar


manter(velocidade); ir_para_frente(marcha); marcha_r(); virar(direo, ngulo); travar_portas(); parar(); ...

Regras que ele deve obedecer


se em_movimento ento travar_portas();

Anatomia de um Objeto
Propriedades de objetos podem ser separadas em
Estruturais: atributos e associaes Comportamentais: operaes e regras

Com estas propriedades um objeto capaz de


lembrar de fatos: atributos conhecer e se relacionar com outros objetos: associaes realizar aes: operaes e mtodos manter propriedades: regras

Estado de Objeto
O Estado de um objeto o conjunto de valores de todas as suas propriedades
valores dos atributos identidade dos objetos associados algoritmos que implementa os mtodos definio das regras sobre o objeto
Exemplo: o estado do objeto Carro
cor: vermelho; ano:1999; marca: Ferrari; modelo: F-44; proprietrio: Sr. Rico:Pessoa ; mtodo manter velocidade{}; ...

Viso Alternativa do Estado de Objeto


Certos autores consideram que o Estado do Objeto se restringe aos valores estruturais
Inclui atributos e associaes
Exemplo: o estado do objeto Carro
cor: vermelho; ano:1999; marca: Ferrari; modelo: F-44; proprietrio: Sr. Rico:Pessoa

Exclui o comportamento (algoritmos e regras)


Isto facilita a implementao do conceito de Classe, mas restringe a capacidade dos objetos

Representao de Estado de Objetos na UML


c1:Carro numchassis = YBM547F56 ano = 1994 cor = vermelho proj1:Projeto cdigo = 10 oramento = 10000

...

...

prop1:Proprietrio nome = Joo da Silva cpf: CPF = 335657838-37 identidade = 9615728

...

Identidade de Objeto
Todo objeto possui um Identificador (OID)
O OID um atributo implcito de todo objeto
gerado pelo sistema na criao do objeto
O projetista no tem acesso definio do OID do objeto diferente do conceito de chave: mudar nome, sexo ou CPF no muda a pessoa

O OID imutvel
Aps sua criao um OID nunca pode ser modificado

O OID nico em um sistema OO


O sistema nunca gera o mesmo OID para dois objetos

Encapsulao de Objeto
Cpsula: [Aurlio, 1998]
[Do lat. capsula]. S. f. membrana que reveste uma substncia

No paradigma OO uma membrana opaca e indestrutvel que isola e protege o objeto


Todo objeto est em uma cpsula
Por isso diz-se que o objeto est encapsulado

uma aplicao do princpio de Information Hiding


Quanto mais isolado o conceito, menor o impacto de sua mudana no restante do contexto

Interface e Implementao de Objeto


A encapsulao o principal conceito OO pois protege o objeto do restante do sistema
Porm, a cpsula (opaca e indestrutvel) impede que o objeto interaja com o mundo exterior! Soluo: dividir o objeto em duas partes
Interface: no encapsulada
Permite a interao do objeto com o sistema

Implementao: encapsulada
Isola a essncia do objeto do restante do sistema

Interface de Objeto
A interface define o comportamento externamente visvel de um objeto
Isto feito atravs da especificao de operaes
Uma operao
indica um comportamento que o objeto prov ao mundo exterior (isto , ao resto do sistema) um compromisso que o objeto firma com o sistema compromissos devem ser honrados!

A interface no define todo o comportamento de um objeto


Certas aes so invisveis para o mundo exterior

Operaes de um Objeto
Uma operao define um comportamento externamente visvel de um objeto
Cada operao definida por uma assinatura
Nome da operao + Tipos dos parmetros de entrada + Tipos dos parmetros de sada
Exemplo: a operao ir_em_frente (in marcha int, out marcha_atual int) define um comportamento do objeto Carro A operao tem como parmetro de entrada a marcha a ser empregada no deslocamento, e retorna a marcha em uso no momento da solicitao da operao Outros objetos podem solicitar que o objeto Carro realize esta operao

Representao de Interface na UML

Carro IProprietrioCarro <<Interface>> Movimento Carro + manter(velocidade:Real) + ir-para-frente(in marchain:Int, out marchaout:Int) + marcha-r()

. . .

Interface e Responsabilidades de Objeto


A interface estabelece as responsabilidades do objeto, permitindo uma interao disciplinada e controlada
o objeto se compromete a realizar o comportamento descrito pelas operaes em sua interface
o compromisso diz o qu deve ser feito, mas no como ser feito

Certos autores admitem que a interface tambm contenha regras, atributos e associaes
Assim, crescem as responsabilidades do objeto perante o sistema
Responsabilidade de lembrar: atributos Responsabilidade de conhecer: associaes Responsabilidade de realizar: operaes Responsabilidade de ser coerente: regras

Isso contraria o princpio de ocultao de informaes!

Implementao de Objeto
A implementao encapsulada isola e protege a essncia do objeto, ou seja, o estado do objeto
contm todas as definies do comportamento
mtodos e regras

contm todas as definies da estrutura


descrio e valores dos atributos e associaes

somente operaes ficam fora da implementao


uma operao implementada por um mtodo

prov independncia de dados e de funes


mudanas na implementao de um objeto no so propagadas para o sistema, se a interface for mantida

Mtodo e Operao de Objeto


ambas as definies esto associadas ao comportamento do objeto
mtodos e regras implementam o comportamento definido pelas operaes da interface
realizam de fato as atividades definidas nas operaes

mtodos e regras so internos ao objeto


no so externamente visveis
alguns implementam operaes; outros realizam funes de manuteno interna do objeto Toda operao tem um mtodo, mas no vice-versa

Representao de Mtodos, Operaes, Regras e Propriedades de Mtodos na UML


:Carro marchaatual: Int; + manter(in v:Velocidade) + ir-para-frente(in marchain:Int, out marchaout:Int) + marcha-r() # mostrar-velocidade():Real{isQuery} - acionar-ventilador() {mostrar-velocidade deve executar em tempo-real}

...

Protocolo de Comunicao OO
Objetos se comunicam exclusivamente atravs do intercmbio de mensagens
Uma mensagem contm
a assinatura de uma operao, com parmetros reais a solicitao de um objeto cliente para execuo da operao indicada por um objeto servidor
mtodos so encapsulados, logo no podem ser invocados Exemplo: objeto Proprietrio envia mensagem para objeto Carro solicitando deslocamento para frente em 1a marcha
marchain 1; Carro.ir-para-frente(in marchain, out marchaout);

Protocolo de Comunicao OO
O objeto cliente deve conhecer o destinatrio da mensagem
Toda mensagem tem um objeto servidor alvo
objetos so conhecidos pelo seu OID

Ao receber a mensagem o objeto servidor


tenta casar a mensagem com as suas operaes
Se isto for possvel ele escolhe o mtodo que implementa a operao
portanto o cliente no controla o mtodo executado

Execuo da Comunicao entre Objetos


Uma mensagem enviada por um mtodo do objeto cliente e transportada pelo sistema OO at a interface do servidor
O protocolo de comunicao OO exige mecanismos de tempo-deexecuo para identificao e localizao do objeto servidor
Interface Implementao

Operao(parmetros)

Interface Implementao

Cliente

Resposta

Servidor

Iniciativa de Comunicao OO
Objetos podem ter dois papis
Objetos ativos tomam a iniciativa da comunicao Objetos passivos somente respondem
Em geral, qualquer objeto pode ser ativo (cliente) ou passivo (servidor) em diferentes interaes

Um mtodo s ativado por uma mensagem


Problema: como comear a comunicao?
Isto pode ser feito via estmulo externo ou via um objeto principal definido pelo sistema Objetos de Comunicao detectam eventos externos Objeto Principal ativado na carga do sistema

Mecanismo de Resposta
Sncrono: resposta obrigatria (embutida)
Interface Implementao Operao(parmetros) Resposta Interface Implementao

Assncrono: resposta opcional (via mensagem)


Interface Implementao Operao(Resposta) Operao(parmetros) Interface Implementao

Destinatrios de Mensagens
H duas categorias de mensagens OO
ponto-a-ponto
h um nico destinatrio, identificado pelo seu OID
O mecanismo de execuo OO deve localizar os destinatrios

broadcast
a mensagem vai para todos os objetos do sistema, sem que o emissor os identifique individualmente
O mecanismo de execuo identifica e localiza os destinatrios

Existe sempre um nico emissor da mensagem


a diferena entre identificao e localizao importante!

Conceitos Subjacentes Comunicao OO


Mecanismo (ou sistema) de Execuo OO
responsvel pela identificao de objetos
atribuio e reconhecimento de OIDs

responsvel pela localizao de objetos


resoluo de endereo a partir do OID

mantm o barramento de comunicao do sistema OO


qualquer objeto tem acesso implcito a esse barramento
permite que objetos se comuniquem com abstrao de detalhes

facilita a distribuio de objetos


transparncia de localizao
processamento distribudo aberto (ODP)

Concorrncia em Sistemas OO
O Mecanismo de Execuo OO deve permitir
Concorrncia inter-objetos
mais de um objeto ativo em um determinado instante

Concorrncia intra-objeto
mais de um mtodo ativo em um objeto em um dado instante

O suporte a objetos e sistemas concorrentes


pode ser implementado via threads
o sincronismo embutido no intercmbio de mensagens

permite implementar sistemas de tempo-real


um mecanismo de prioridade deve ser associado s mensagens

Representao de comunicao de objetos na UML


:Motorista

ir-para-frente(1, 2)

:Carro

Comunicao em um Diagrama de Colaborao

O Conceito de Abstrao
Abstrao: [Aurlio, 1998] S. f.
Ato de separar um ou mais elementos de uma totalidade complexa (coisa, representao, fato), os quais s mentalmente podem subsistir fora dessa totalidade
Uma abstrao permite capturar um determinado aspecto existente em uma realidade, eliminando detalhes irrelevantes

Cada tipo de abstrao representa fielmente o seu aspecto alvo, de acordo com um significado predefinido
Exemplo: a classificao uma abstrao que permite identificar propriedades que caracterizam um certo conjunto de conceitos, sem se preocupar com as especificidades de cada elemento do conjunto

Abstraes do paradigma OO
Aplicam princpios bsicos da Engenharia de Software
Dividir para Conquistar e Separao de Preocupaes
Cada abstrao OO permite analisar separadamente um certo aspecto dos objetos de um sistema
aspectos estticos e dinmicos aspectos informacionais, funcionais e de controle

O conjunto de abstraes OO permite reconstruir a viso total do sistema de objetos

Resumo das Abstraes do paradigma OO


As Abstraes OO
Classificao Instanciao Associao Composio Generalizao Especializao

Permitem
identificar e compor objetos complexos Construir estruturas para organizar objetos Compartilhar e reutilizar propriedades Relacionar e agrupar conjuntos de conceitos Redefinir, especializar e generalizar esses conceitos

Classificao de Objetos
Rene as propriedades comuns a um conjunto de objetos
Abstrai todas as caractersticas que no so compartilhadas por todos os objetos considerados
Exemplo: a classe jornal define propriedades comuns aos objetos O Popular, Dirio da Manh, ...

O resultado da aplicao da Abstrao de Classificao sobre um conjunto de objetos uma Classe de Objetos
A Classe permite a representao abstrata de objetos
Todo elemento de uma classe possui as mesmas propriedades

Representao de Classe de Objetos na UML


Carro
# numchassis : Chassis {frozen} # ano: Ano # cor: String = branco ... + manter(in v:Velocidade) + ir-para-frente(in marchain:Int, out marchaout:Int) + mostrar-velocidade() {isQuery} ...
{mostrar-velocidade deve executar em tempo-real}

Responsabilidades
-- gerenciar estado do carro -- tratar movimentaes do carro ...

Instanciao de Objeto
Cria uma nova instncia de objeto a partir de uma classe
Instncias so objetos e possuem todas as propriedades de sua classe
Ex.: Folha de So Paulo uma instncia (objeto) da classe Jornal compartilha todas as propriedades da classe Jornal com os demais objetos desta classe define um estado particular (valores) para essas propriedades

Uma instncia o resultado da aplicao da abstrao de instanciao sobre uma Classe de Objetos
uma maneira de criar objetos, mas no a nica maneira

Criao de Instncias via Classe


O empacotamento de definies em uma Classe permite a sua reutilizao via instanciao
uma instncia prov valores para as propriedades predefinidas na classe

A criao de instncias pode ser


esttica: objetos so definidos em tempo de compilao dinmica: objetos so criados em tempo de execuo

A Instanciao requer suporte de execuo


alocao/desalocao de memria, coleta de lixo, identificao de objeto, ...

Alternativas para Criao de Objetos


A Instanciao de Classe no a nica maneira de se criar objetos Um Objeto Prototpico (ou Prottipo) um modelo para criar outros objetos
Evita a proliferao de classes em sistemas em que
objetos evoluem rpida e continuamente instncias possuem mais diferenas que semelhanas Um objeto criado reutilizando as definies de um ou mais objetos prototpicos

Representao e criao de Instncias na UML


meuCarro:Carro numchassis: chassis = YFBW9E56RG ano = 1994 :Carro
Objeto annimo Objeto nomeado

...
<<

create>>
:Carro

:Fbrica

Identificao de Instncias
OID permite distinguir instncias de uma classe A identificao poderia se basear no estado do objeto
Ex: a instncia da classe Jornal cujo valor para o atributo nome Folha de So Paulo Porm, o paradigma OO no exige que o estado de um objeto seja nico em sua classe!
Pode haver duas instncias distintas da classe Jornal cujo valor do atributo nome Folha de So Paulo

Duas instncias podem ser idnticas (mesmo OID) ou iguais (mesmo estado)

Associao de Classes e Ligao de Objetos


Uma ligao estabelece uma correlao entre conceitos representados por objetos
Ex.: o objeto OPopular, da classe Jornal, est ligado ao objeto Grfica J.Cmara, da classe Editora

Uma associao classifica as ligaes entre objetos


Representa as propriedades comuns ao conjunto de ligaes entre objetos
Objetos e ligaes especficos so abstrados Permanece a associao entre as Classes de Objetos
Ex.: objetos da classe Jornal devem estar associados a objetos da classe Editora

Representao de Associao e Ligao na UML


Editora :Editora nome = OJC endereo = Avenida....
1 Edita responsvel * produto

Jornal

:Jornal nome = O Popular data-criao = 10/05/1950 responsvel: Editora = 124

...

...

Supondo OID = 124

Abstrao de Composio
Permite definir um conceito complexo a partir da combinao de outros conceitos
as propriedades de um objeto resultam da aplicao da abstrao de composio sobre um conjunto de atributos, associaes e comportamentos

Composio pode ser recursiva


um formulrio composto de cabealho, corpo e rodap o corpo do formulrio pode conter outro formulrio

Composio de Objetos Complexos


Um objeto pode ser composto por outros
O paradigma OO define construtores de tipos que permitem construir (tipos de) objetos complexos
tupla, lista, conjunto, bag (sacola), array, ...

a estrutura de um objeto complexo definida em termos de estruturas de outros objetos usando uma combinao arbitrria e recursiva de construtores
Ex.: a estrutura da classe Jornal uma tupla composta das propriedades: nome, tiragem, data de fundao, editora, ...

Propriedades da Composio OO
A composio de um objeto complexo
No viola a encapsulao dos sub-objetos
Comunicao exclusivamente via mensagens

Permite compartilhamento sem redundncia


Apenas o OID guardado na composio

Representa a semntica Parte-Todo, com variaes


composio simples (agregao de sub-objetos independentes) composio forte (sub-objetos no existem fora da composio) composio fsica (componentes com um nico compositor composio de ctalogo (componentes com vrios compositores)

Agregao e Composio na UML


A agregao estabelece uma relao tipo Parte-Todo entre conceitos
um conceito representa o Todo, definindo uma agregao de elementos os demais conceitos representam as Partes agregadas a unio dos componentes (partes) constitui o conceito definido no agregao (todo)

Em uma composio (ou agregao composta)


um componente pertence a um e somente um Todo o Todo responsvel pela criao e destruio das partes

Representao de Agregao na UML


Jornal :Jornal nome = O Popular colunas: Set of Coluna = {377,356,...}
1..* *

Coluna :Coluna

altura = 250 largura = 500

...

...

Supondo OID=356

Representao de Composio na UML


Janela :Janela altura= 50 largura= 30 barras: Set of BarraRolagem={227,3456,...}
1 1..2

BarraRolagem

BarraHorizontal: BarraRolagem altura = 40 largura=5

...

...

Supondo OID=227

Abstrao de Especializao
Permite refinar conceitos de uma classe
A especializao de um conceito deve ser compatvel com o conceito original
A subclasse pode tornar mais especfica uma definio da classe original A Edio de Domingo especializa a Edio Semanal do jornal

A aplicao da abstrao de Especializao origina uma ou mais subclasses (isto , subconjuntos)


A especializao deve ter critrios definidos e pode ser Total ou Parcial; Disjunta ou Sobreposta

Abstrao de Generalizao
Permite abstrair diferenas entre classes
As propriedades comuns so sintetizadas em uma nica superclasse (isto , um superconjunto)

O significado da abstrao de generalizao o oposto da abstrao de especializao


A superclasse Edio representa um conceito genrico, eliminando particularidades das edies de Domingo e Semanal

Generalizao e Especializao na UML


Veculo peso:Real Comprimento:Real ir-para-frente() marcha-a-r()

CarroPasseio qtdPassageiros:Int qtdPortas:Int levantarVidro() ligarLuzLeitura()

Trator numEixos:Int capacidadeP:Real levantar-p() baixar-p()

Estrutura de Objetos em um Sistema OO


A estrutura dos objetos abstrada em Classes
O processo de modelagem segue estabelecendo relacionamentos entre classes
Relacionamentos devem refletir fielmente a realidade modelada H quatro tipos de relacionamentos
Generalizao/Especializao Agregao e Composio Associaes genricas Dependncias

Relacionamentos entre Classes


Definem a estrutura esttica do sistema OO
Generalizao e Especializao
Formam hierarquias de Superclasses e Subclasses

Agregao e Composio
Formam grafos de Classes Complexas

Associaes genricas
Formam relacionamentos genricos entre classes

Dependncias
Denotam o uso de uma classe por outra classe

Delegao de Responsabilidades
A estrutura esttica do sistema mostra como os objetos podem se comunicar
Usando esta estrutura um objeto pode redirecionar suas responsabilidades para outros objetos
Este um mecanismo de reutilizao importante para o paradigma OO

A delegao permite que um objeto fatore suas tarefas, dividindo-as com outros objetos
Para o cliente, o objeto realmente faz a operao
De fato, o objeto prov a resposta, mas no faz o servio!

Paradigma OO

Mecanismos essenciais do paradigma


Herana e Polimorfismo Suporte para execuo: persistncia, concorrncia e distribuio de objetos

Classe de Objetos
Mecanismo para reutilizao de implementao
as propriedades (estrutura e comportamento) de objetos de uma classe so definidas uma nica vez, na classe, e no para cada objeto

Classe fbrica e armazm de objetos


uma classe conhece todas as suas instncias

Classes podem ser consideradas meta-objetos


Atributos de classe: quantidade de instncias, ... Mtodos de classe: criao de instncia, ... Em sistemas OO puros, a classe um objeto

Superclasse e Subclasse
A especializao/generalizao origina um relacionamento do tipo -Um entre classes
Mecanismo para reutilizao de projeto
a subclasse reutiliza as solues propostas pela superclasse

Mecanismo para estruturao do sistema


Hierarquia de especializao
A classe mais genrica chamada de Superclasse e a mais especializada de Subclasse a especializao no pode ser recursiva

Instncia e Membro de Classe


Superclasse e Subclasse no so definies absolutas
so papis de uma classe em uma especializao um objeto instncia de sua classe e membro de todas as suas superclasses
Um membro pode ser usado no lugar de uma instncia A recproca no verdadeira
Um trator pode ser usado como veculo, mas um veculo no pode ser usado como trator

Herana
um mecanismo de reutilizao
Um cliente de herana reutiliza (herda) definies de um servidor de herana

No se deve confundir Herana com Especializao!


H vrias maneiras de se utilizar herana
A especializao de classes apenas uma delas...
Ex.: um sistema que no possui o conceito de especializao pode ter mecanismos de herana baseados em objetos

Taxonomia de Herana
H vrias classificaes para os mecanismos de herana
quanto escolha das propriedades a reutilizar
total ou parcial

quanto ao nmero de servidores


simples ou mltipla

quanto ao tipo de servidor


de classe ou de objeto

quanto ao momento da reutilizao


esttica ou dinmica

Herana Total ou Parcial


Essa taxonomia de herana define a escolha das propriedades que sero herdadas Na Herana Total
Todas as propriedades do servidor so reutilizadas pelo cliente da herana, de modo obrigatrio
variante: herana total com possibilidade de substituio

Na Herana Parcial
permitido ao cliente escolher as propriedades que deseja reutilizar
Pode dificultar o entendimento do sistema

Herana Simples ou Mltipla


Define o nmero de servidores diretos da herana
Na Herana Simples um nico servidor a fonte direta das propriedades a serem reutilizadas
pode haver servidores indiretos Ex.: na hierarquia de generalizao

Na Herana Mltipla muitos servidores contribuem com propriedades que o cliente reutiliza
Pode gerar conflito de nomes
resoluo pelo sistema (regra default) resoluo pelo projetista (escolha explcita)

Herana de Classe ou de Objeto


Define o tipo de servidor da herana Na herana de Classe o servidor uma classe
A implementao mais comum desse tipo de herana se baseia em especializao total (com substituio) de classe
Outras abordagens so possveis Ex.: C++ permite herana parcial, sem criar subclasse

Na herana de Objeto o servidor um objeto


o caso de objeto prototpico
Permite herdar propriedades e estado (valores) Evita proliferao de classes

Herana Esttica ou Dinmica


Define o tempo em que a herana resolvida
Na Herana Esttica todos os aspectos de reutilizao so conhecidos em tempo de compilao Na Herana Dinmica a interao entre objetos leva a mudanas de propriedades em tempo de execuo Variaes
Herana de parte: uma herana parcial de mtodos transmitidos via mensagem Herana de escopo: o objeto cliente da herana varia seu comportamento de acordo com o contexto definido pelo servidor de herana

Herana de Classe por Especializao


o padro de facto para uso de herana A subclasse reutiliza todas as propriedades de todas as suas superclasses
Em geral, os sistemas OO implementam herana
Simples: evita conflitos de nomes Total: probe supresso de propriedades e garante compatibilidade entre instncias e membros com Substituio: permite substituir propriedades, mas mantendo a compatibilidade com a superclasse com Incluso: permite incluir novas propriedades na subclasse

Questes sobre Herana


Herana viola encapsulao!
Cliente no deve usar o conhecimento herdado Acesso deve ser via interface do servidor da herana

Evoluo de Esquema potencialmente perigosa!


Esta evoluo no herana dinmica (a mudana de comportamento no decorre da interao entre objetos) Mudana em servidor de herana propagada para todos os clientes Pode afetar a compatibilidade das substituies, mesmo que o cliente da herana respeite a encapsulao

Abordagens dos Mecanismos de Reutilizao


So classificados quanto
ao momento de definio: esttico ou dinmico ao tipo de declarao: implcito ou explcito ao cliente do mecanismo: objeto ou grupo de objetos

Abordagem Template: Classe e Herana


objetos so criados pela frma da classe da qual reutilizam (estaticamente) as definies de propriedades, as quais podem ser redefinidas (implicitamente) via subclasse (cliente da reutilizao o grupo de objetos)

Abordagem Empatia: Prottipo e Delegao


objetos so criados imagem de um objeto prottipo e reutilizam (dinamicamente) propriedades pela delegao (explcita) de tarefas (cliente da reutilizao cada objeto)

Polimorfismo
Um sistema computacional considerado polimrfico se
a mesma funo pode ter comportamentos distintos quando aplicada a diferentes tipos de dados
Ex.: a funo +
aplicada a dois nmeros produz a soma aplicada a dois strings produz a concatenao

Em Linguagens de Programao este conceito chamado de operation overloading (sobreposio de operaes)

Polimorfismo em Sistemas OO
Um sistema OO considerado polimrfico se
a mesma operao pode ter comportamentos distintos quando aplicada a diferentes objetos
Ex.: a operao display aplicada a um objeto texto produz a apresentao de um texto e aplicada sobre um objeto grfico produz uma sada grfica

O polimorfismo verdadeiro mantm a semntica da operao; o polimorfismo ad hoc uma mera coincidncia de nomes
Ex: abrir sobre janela e arquivo tm semnticas diferentes Isto deve ser evitado: causa dificuldade de entendimento!

Polimorfismo Intra-Objeto
um falso polimorfismo
a mesma operao pode ter comportamentos distintos quando aplicada ao mesmo objeto com diferentes argumentos
Ex.: a operao display de um objeto pode ter como argumento o dispositivo de apresentao a apresentao gerada ser diferente para dispositivos de tipos diferentes (tela e impressora, por exemplo)

o polimorfismo s ocorre se a assinatura for idntica


nome da operao; tipos dos argumentos; e tipo de retorno (este ltimo desconsiderado pelo mecanismo de polimorfismo) o mtodo deve ativar o comportamento polimrfico de acordo com os valores dos argumentos

Polimorfismo e Herana
Muitos sistemas OO se baseiam em polimorfismo para permitir redefinio de comportamento herdado
isto contribui para a flexibilidade e adaptabilidade
um novo objeto pode ser introduzido para realizar todo o comportamento do objeto existente (por herana), adaptando partes desse comportamento a uma nova realidade (por polimorfismo)

tanto o comportamento antigo quanto o novo podem conviver simultaneamente no Sistema OO


esta possibilidade garante flexibilidade para adaptao do sistema OO a novas necessidades Manuteno envolve especializao, no alterao de cdigo!

Polimorfismo e Herana de Classe


o padro de facto para reutilizao e refinamento de comportamento em Sistemas OO
A Superclasse define o comportamento genrico
Cada subclasse herda esse comportamento e pode implementar seus prprios mtodos, redefinindo o comportamento herdado

O sistema deve selecionar o mtodo a ser executado de acordo com a classe do objeto que recebeu a mensagem
Ex.: a mensagem Desenha( ) pode ser enviada para objetos da superclasse Figura ou para objetos das subclasses Polgono e Crculo Um membro sempre pode ser usado no lugar de uma instncia

Polimorfismo e Ligao Adiada


Para oferecer polimorfismo, em geral, preciso prover ligao adiada (late binding)
Ex.: ao invocar a operao Desenha() sobre uma varivel, s em tempo de execuo pode-se saber se ela contm uma instncia ou um membro de Figura o mtodo a ser executado s definido em tempo de execuo o prprio sistema seleciona o mtodo adequado Este mecanismo tambm conhecido como ligao dinmica (dynamic binding)

Classe e Tipo de Objeto


Uma classe define um tipo de objeto (interface e propriedades)
Um tipo de objeto A compatvel com outro tipo de objeto B se a interface de A contm a interface de B Dois tipos so equivalentes se eles so mutuamente compatveis

O polimorfismo tem que lidar com a compatibilidade de tipos em tempo de execuo (ligao dinmica) No entanto, possvel fazer checagem de tipo em tempo de compilao Isto protege o objeto de mensagens que ele desconhece

Checagem de Tipo de Objeto


Ex.: considere as variveis A, B e C.
cada varivel pode referenciar uma instncia ou um membro, no sendo possvel definir estaticamente a classe de cada varivel no entanto, sabemos que o tipo de objeto de cada varivel ser sempre compatvel com o tipo da sua respectiva superclasse

Seja a operao A := C.op1(B)


o tipo de objeto C deve suportar a operao op1, tendo como argumento um objeto do tipo de objeto B o tipo de retorno da operao op1 no tipo de objeto C deve ser compatvel com o tipo de objeto A logo, podemos determinar estaticamente se essa operao permitida; porm, os mtodos s podem ser definidos na execuo

Suporte de Tempo de Execuo OO


A escolha de uma plataforma OO deve considerar o suporte a
Nomeao e persistncia de objetos
OID, indexao, estruturas de armazenamento, cluster de objeto, acesso ao dicionrio de objetos

Concorrncia e criao dinmica


sincronizao de comunicaes, coleta de lixo, mensagens prioritrias (tempo real), polimorfismo (ligao dinmica), transaes, tratamento de excees

Distribuio e replicao
transparncia de localizao, controle de verses e rplicas, evoluo de esquema, recuperao de falhas

Persistncia de Objetos
Objetos transientes morrem com sua aplicao Objetos persistentes permanecem aps a execuo do programa que os criou
Sistemas convencionais oferecem persistncia de dados usando sistemas de BD ou arquivos Em Sistemas OO esta soluo envolve a Linearizao de objetos
um processo potencialmente caro SGBDs OO oferecem solues eficientes uma classe pode conter objetos persistentes e transientes

SGBD OO
Precisam oferecer todos os servios que SGBD tradicionais oferecem
transaes, persistncia, distribuio, recuperao de falhas, ...

Precisariam prover todos os mecanismos de tempo de execuo OO, mas ainda no o fazem com eficincia
nomeao de objetos distribuda, evoluo de esquema, ...

Dificuldades adicionais
ausncia de modelo de dados e linguagem padronizadas (ODMG/OQL uma proposta; SQL-4 outra) ausncia de diretivas de projeto (normalizao OO) Como garantir a qualidade do projeto?

Reviso do paradigma OO
Caractersticas de Sistemas OO:
reutilizao, integrao de dados e funes, facilidade de manuteno (flexibilidade, adaptabilidade, expansibilidade), rastreamento de conceitos, desenvolvimento incremental e evolutivo, ...

Objeto
composto de interface (operaes) e implementao (propriedades: atributos, associaes, mtodos) possui identidade e define um estado para suas propriedades encapsula um conceito e permite que novos conceitos sejam adicionados sem modificar o cdigo do sistema mtodos podem ser adicionados para incluir funcionalidade ao sistema sem modificar o cdigo existente

Reviso do paradigma OO
Classe / Tipo de Objeto
define um molde para construo de objetos permite reutilizar uma definio diversas vezes (instanciao)

Abstraes
modelam o conhecimento e estruturam o sistema OO princpio de dividir para conquistar

Encapsulao
constri Tipo Abstrato de Dados princpio de ocultao de informao

Polimorfismo
mensagem pode ser enviada sem conhecer a classe do servidor extenso/adaptao de comportamento genrico

Reviso do paradigma OO
Reutilizao
pode ser prevista durante projeto
abordagem template esttica, definio implcita e per grupo Herana: reutilizao via compartilhamento de definies

pode ser definida em tempo de execuo


abordagem de empatia dinmica, definio explcita e per objeto delegao: reutilizao via redirecionamento de tarefas

Comunicao
protocolos sncronos/assncronos concorrncia inter/intra objeto (multi-thread) suporte a distribuio e tempo-real (mensagens prioritrias)

Desenvolvimento de Software
Software um produto complexo que necessita de projeto para garantir qualidade
um sistema de qualidade atende aos seus requisitos requisitos tpicos de um bom sistema
produz resultados corretos, de modo rpido e confivel fcil de aprender, de usar, de manufaturar e de testar portvel e compatvel com outros sistemas pode ser facilmente modificado, adaptado e estendido

Mtodos de desenvolvimento guiam a construo de software de qualidade

Ambiente de Desenvolvimento OO
Precisaria oferecer todas as facilidades dos CASE tradicionais
gerncia de configurao, referncias cruzadas, ...

Precisaria prover suporte para mtodos de projeto OO, mas se limita ao suporte programao OO
o ambiente deveria guiar o desenvolvedor no processo de estruturao do software OO: escolha de objetos, interfaces, ...

Dificuldades adicionais
selecionar elementos para reutilizao em bases de objetos que evoluem constantemente propagao de atualizaes nas bases de reutilizao

Teoria e Prtica de Desenvolvimento OO


Ciclos de vida tradicionais adotam uma separao rgida entre etapas
Na prtica, observa-se que o processo de desenvolvimento iterativo e interativo

Mtodos de desenvolvimento tradicionais enfatizam a decomposio funcional


Na prtica, comprova-se que a estrutura mais estvel a dos dados, no a das funes

Caractersticas dos mtodos OO


Adotam ciclo de vida interativo e iterativo
sem separao rigorosa entre fases

Organizam o software em torno de objetos


dados e funes so integrados o sistema um conjunto de objetos interagindo

Enfatizam a encapsulao
dados e comportamento so ocultos no objeto Interfaces bem definidas entre objetos

Processo de Desenvolvimento OO
Um sistema OO
no um conjunto de funes! um conjunto de objetos interagindo em uma arquitetura cliente/servidor

Anlise e Projeto de alto nvel determinam


servios oferecidos e protocolo de comunicao

Projeto detalhado inclui


especificao de estruturas e algoritmos

Processo de Desenvolvimento OO
Anlise e Projeto de alto nvel (top-down)
realizados de forma concorrente e iterativa
baseados em um conjunto uniforme de modelos

Projeto detalhado (bottom-up)


postergado para o final do ciclo de vida
No o final do processo (ciclo de vida iterativo)

feito para cada objeto (information hiding)


implementao segue diretamente (middle-out)

Conseqncias da Abordagem OO
Processos e estruturas no so congelados
flexibilidade e capacidade de adaptao

Modificaes no geram mudanas estruturais


encapsulao evita efeito domin

Desenvolvimento com Tipos Abstratos (TADs)


independncia de estruturas e procedimentos

Representao do espao do problema


ausncia de mapeamentos entre anlise e projeto rastreabilidade

Etapas de Desenvolvimento OO
Mtodos OO, em geral, abrangem
1. Especificao baseada em Requisitos
Em termos de objetos e servios, no de funes

2. Identificao de objetos e suas interfaces


Levantamento de atributos, detalhamento de servios, caractersticas funcionais de alto nvel

3. Definio de interaes entre objetos


Identificao de servios requeridos e oferecidos, troca de mensagens, parmetros

Etapas de Desenvolvimento OO
4. Refinamento visando reutilizao
Identificao de objetos compartilhados (composio de objetos) e hierarquias de especializao (herana), reviso de interfaces e protocolos

5. Introduo de conceitos bottom-up


Projeto, codificao e teste de classes essenciais; criao ou incremento de biblioteca de classes

6. Validao
Testes, feedback dos usurios sobre projeto e produto, realizar nova iterao no ciclo de vida

Reutilizao em Desenvolvimento OO
O ciclo de vida OO visa atingir reutilizao
A idia gastar mais esforo em desenvolvimento e menos em manuteno
biblioteca de classes e padres de projeto representam esforo adicional de desenvolvimento

O ganho em reuso e manutenibilidade compensador!


Solues so reaproveitadas (biblioteca e padres) Efeitos colaterais so controlados (encapsulao)

Fatorao no Desenvolvimento OO
O projeto tradicional monoltico
Feito de uma vez, no incio do ciclo de vida, com pouco conhecimento sobre o problema

O desenvolvimento OO fatorado
O sistema final sintetizado a partir de componentes desenvolvidos isoladamente
Partes do sistema podem estar prontas (biblioteca), outras partes em projeto e outras em implementao

Desenvolvimento OO a Soluo?
O paradigma OO tem potencial, mas no uma panacia!
Deve ser usado de maneira metdica para alcanar os objetivos esperados
reutilizao manutenibilidade e flexibilidade para adaptao encapsulao de informao (information hiding) desenvolvimento iterativo e incremental uniformidade e representatividade de modelos, ...

Mtodos de Desenvolvimento OO
Propem abordagens sistemticas para
representar objetos que compem um sistema especificar um projeto de software usando estes objetos

Existe um forte componente bottom-up neste processo: o objeto


Mtodos tradicionais so basicamente top-down Mtodos OO misturam bottom-up e top-down

Abordagem dos Mtodos OO


Misturam duas abordagens
bottom-up: inerente ao uso de objetos top-down: adicionada, em geral, via componente
Um componente de software encapsula um conjunto de classes de um nvel mais baixo de abstrao

O projeto OO inclui vrios nveis de abstrao


Classes so agrupadas em componentes, e estes em componentes mais abstratos
Um componente representa uma classe para o nvel superior (com interface e implementao)

Projeto OO
Enfoque bottom-up
detalha as propriedades de cada objeto

Enfoque top-down
estrutura: composio, associao e especializao comunicao: interaes em servios complexos

Fase inicial do projeto


identificar classes que modelam a realidade distribuir o comportamento entre as classes determinar colaboraes entre componentes

Refinamento do Projeto OO
fatorar e estruturar propriedades
hierarquias de herana

determinar protocolos de comunicao


consolidar interfaces de classes e componentes

identificar classes Concretas e Abstratas


classe abstrata no instanciada, mas especializada
define atributos e mtodos bsicos (herana) mecanismo de especificao de outras classes

classe concreta instanciada em objetos


reutilizao por instanciao, no por herana

Frameworks Orientados a Objetos


A longo prazo, reuso de projeto mais importante que reuso de cdigo
Classes permitem reuso de projeto, mas em uma granularidade muito fina Um Framework um conjunto de classes que formam a arquitetura tpica de um certo tipo de aplicao
Classes do framework so projetadas para serem refinadas e utilizadas como um grupo

Frameworks Orientados a Objetos


Frameworks oferecem mecanismos e regras
para reuso de cdigo (instanciao de classes) para reuso de projeto (propriedades e comportamentos de objetos em uma aplicao)

Um framework define um projeto genrico de um subsistema (padro de projeto)


pode ser refinado (via especializao) e configurado (via parmetros) para compor um dado subsistema
Exemplo: Frameworks para construo de interfaces

Frameworks Orientados a Objetos


Frameworks so mais que bibliotecas!
Classes de um framework cooperam para atingir objetivos complexos
O suporte a estes objetivos mais importante que os componentes individuais Logo, frameworks so voltados para certos domnios de aplicao Uma aplicao pode ser montada a partir dos componentes (abstratos e concretos) do framework

Concluses
Origens e aplicaes do POO Princpios fundamentais do POO Representao de conceitos com o POO Mecanismos essenciais do POO Desenvolvimento de software com o POO Mudanas culturais para POO

Bibliografia
Object-Oriented Concepts, Databases, and Applications. Editado por Won Kim e Frederick Lochovsky. Addison-Wesley, 1989. Communications of the ACM - Special issue on Object-Oriented Paradigm. Vol.33, num.9, set/90. Engenharia de Software. Roger S. Pressman. Ed. McGraw-Hill, quinta edio, 2001. Software Engineering - An Object Oriented Perspective. Eric J. Braude. Ed. John Wiley & Sons, 2001. Design Patterns for Object-Oriented Software Development. Wolfgang Pree. Addison-Wesley, 1994. Object-Oriented Database Systems Concepts and Architectures. Elisa Bertino e Lorenzo Martino. Addison-Wesley, 1993.

Bibliografia
Object-Oriented Software Construction. Bertrand Meyer. Prentice-Hall, 1997, segunda edio. Object-Oriented Modeling and Design for Database Applications. Michael Blaha e William Premerlani. Prentice-Hall, 1998. Anlise e Projeto Orientados a Objetos Estudos de Caso. Edward Yourdon e Carl Argila. Makron Books, 1999. UML Destilled Applying the Standard Object Modeling Language. Martin Fowler e Kendall Scott. Addison-Wesley, 1997. The Unified Modeling Language User Guide. Grady Booch, James Rumbaugh e Ivar Jacobson. Addison-Wesley, 1999. Design Patterns Elements of Reusable Object-Oriented Software. Erich Gamma et al. Addison-Wesley, 1995.