You are on page 1of 55

Captulo 12

Suporte para
a Programao
Orientada a Objetos
Conceitos de Linguagens de Programao Robert W. Sebesta

Tpicos do Captulo 12
Introduo
Programao orientada a objetos
Questes de projeto para programao orientada a objetos
Suporte para programao orientada a objetos em Smalltalk
Suporte para programao orientada a objetos em C++
Suporte para programao orientada a objetos em Java
Suporte para programao orientada a objetos em C#
Suporte para programao orientada a objetos em Ada 95
Suporte para programao orientada a objetos em Ruby
Implementao de construes orientadas a objetos
Conceitos de Linguagens de Programao Robert W. Sebesta

Introduo
Muitas linguagens de programao orientadas a objeto
Algumas suportam programao procedural e orientada a dados (por
exemplo, Ada 95 e C++)
Algumas suportam programao funcional (por exemplo, CLOS)
Linguagens mais novas no suportam outros paradigmas, mas usam suas
estruturas imperativas (por exemplo, Java e C#)
Algumas so linguagens de programao orientadas a objetos puras (por
exemplo, Smalltalk e Ruby)
Conceitos de Linguagens de Programao Robert W. Sebesta

Programao orientada a objeto


Tipos de dados abstratos
Herana
Herana o tema central da programao orientada a a objetos e das
linguagens que a suportam
Polimorfismo
Conceitos de Linguagens de Programao Robert W. Sebesta

Herana
Aumento de produtividade pode ocorrer com o reso
Tipos de dados abstratos so difceis de reusar sempre precisam
de mudanas
Definies de tipos de dados abstratos so todas independentes e no
mesmo nvel
Herana permite novas classes definidas nos termos das j existentes
Conceitos de Linguagens de Programao Robert W. Sebesta

Conceitos de orientao a objetos


Tipos de dados abstratos so geralmente chamados de classes
Instncias de classes so objetos
Uma classe derivada por meio de herana de outra classe uma classe
derivada ou uma subclasse
A classe da qual a nova classe derivada sua classe pai ou
superclasse
Subprogramas que definem as operaes em objetos de uma classe
so mtodos
Conceitos de Linguagens de Programao Robert W. Sebesta

Conceitos de orientao a objetos


(continuao)
Chamadas aos mtodos so mensagens
A coleo completa de mtodos de um objeto chamada de protocolo
de mensagens ou interface de mensagens
Mensagens tm duas partes um nome de mtodo e o destino
do objeto
Se uma nova classe uma subclasse de uma nica classe pai, ento o
processo de derivao chamado de herana simples
Conceitos de Linguagens de Programao Robert W. Sebesta

Conceitos de orientao a objetos


(continuao)
A herana pode ser complicada por controles de acesso s entidades
encapsuladas
Uma classe pode esconder entidades de suas subclasses
Uma classe pode esconder entidades de seus clientes
Uma classe tambm pode ocultar entidades para seus clientes, mas
permitir s suas subclasses v-los
Uma classe pode modificar um mtodo herdado
O novo mtodo sobrescreve o mtodo herdado
Este, ento, chamado de mtodo sobrescrito
Conceitos de Linguagens de Programao Robert W. Sebesta

Conceitos de orientao a objetos


(continuao)
H dois tipos de variveis em uma classe:
Variveis de classe
Variveis de instncia
H dois tipos de mtodos em uma classe:
Mtodos de classe
Mtodos de instncia
Herana simples herana mltipla
Uma desvantagem da herana como uma forma de aumentar a
possibilidade de reso que ela cria dependncias entre classes em
uma hierarquia
Conceitos de Linguagens de Programao Robert W. Sebesta

Vinculao dinmica
Uma varivel polimrfica pode ser definida em uma classe que capaz
de referenciar (ou apontar) os objetos da classe e objetos de qualquer
dos seus descendentes
Quando uma hierarquia de classe inclui as classes que sobrescrevem
mtodos e esses mtodos so chamados por uma varivel polimrfica,
a ligao para o mtodo correto ser dinmica
Conceitos de Linguagens de Programao Robert W. Sebesta

Conceitos de vinculao dinmica


Um mtodo abstrato um que no inclui uma definio (apenas define
um protocolo)
Uma classe abstrata inclui pelo menos um mtodo virtual. Um classe
abstrata no pode ser instanciada
Conceitos de Linguagens de Programao Robert W. Sebesta

Questes de projeto
A exclusividade dos objetos
As subclasses so subtipos?
Verificao de tipos e polimorfismo
Herana simples e mltipla
Alocao e liberao de objetos
Vinculao esttica e dinmica
Classes aninhadas
Inicializao de objetos
Conceitos de Linguagens de Programao Robert W. Sebesta

A exclusividade dos objetos


Tudo um objeto
Vantagem - elegncia e pureza
Desvantagem - operaes lentas para objetos simples
Adicionar objetos a um sistema de tipos completo
Vantagem - operaes rpidas em objetos simples
Desvantagem - resulta em um sistema confuso (dois tipos de entidades)
Incluir um estilo imperativo para tipos primitivos escalares, mas
implementar todos os tipos estruturados como objetos
Vantagem - operaes rpidas em objetos simples e um sistema de tipos
relativamente pequeno
Desvantagem - ainda alguma confuso por causa dos dois sistemas
de tipo
Conceitos de Linguagens de Programao Robert W. Sebesta

As subclasses so subtipos?
Um relacionamento -um(a) se mantm entre uma classe derivada e
sua classe pai?
Se uma classe derivada um(a) classe pai, ento os objetos da classe
derivada devem expor todos os membros que so expostos por objetos da
classe pai
Uma classe derivada um subtipo se tiver um relacionamento -um(a)
com sua classe pai
Os mtodos da subclasse que sobrescrevem mtodos da classe pai
devem ser compatveis em relao ao tipo com seus mtodos sobrescritos
correspondentes
Conceitos de Linguagens de Programao Robert W. Sebesta

Verificao de tipos e polimorfismo


O polimorfismo pode exigir uma verificao de tipo dinmico de
parmetros e o valor de retorno
Verificao de tipos dinmica custa tempo de execuo e posterga a
deteco de erros de tipo
Se o mtodo sobrescrevedor tiver o mesmo nmero de tipos de
parmetros e de retorno do que o mtodo sobrescrito, a verificao
pode ser esttica
Conceitos de Linguagens de Programao Robert W. Sebesta

Herana simples e mltipla


Herana mltipla permite uma nova classe herdar de duas ou mais
classes
Desvantagens de herana mltipla:
Complexidade de linguagem e implementao
Potencial ineficincia
Vantagem:
s vezes, bastante conveniente
Conceitos de Linguagens de Programao Robert W. Sebesta

Alocao e liberao de objetos


De onde so os objetos alocados?
Se eles se comportam como tipos de dados abstratos, ento talvez eles
possam ser alocados de qualquer lugar
Alocados da pilha de tempo de execuo
Explicitamente criados no monte com um operador ou funo, como new
Se eles so todos dinmicos do monte, existe a vantagem de ter um
mtodo de criao e acesso uniforme por meio de ponteiros ou variveis
de referncia
Se os objetos so dinmicos da pilha, existe um problema relacionado
aos subtipos
A liberao explcita ou implcita?
Conceitos de Linguagens de Programao Robert W. Sebesta

Vinculao esttica e dinmica


Todas as vinculaes de mensagens a mtodos so dinmicas?
Se nenhuma for, vai perder as vantagens de vinculao dinmica
Se todos forem, ineficiente
Conceitos de Linguagens de Programao Robert W. Sebesta

Classes aninhadas
Se uma nova classe necessria em apenas uma classe, no h razo
para definir para que ele possa ser vista por outras classes
Pode a nova classe ser aninhada dentro da classe que a usa?
Em alguns casos, a nova classe est aninhada em um subprograma, em
vez de em outra classe
Questes de projeto:
Quais recursos da classe aninhadora so visveis para a classe aninhada
e vice-versa?
Conceitos de Linguagens de Programao Robert W. Sebesta

Inicializao de objetos
Quando um objeto de uma subclasse criado, a inicializao associada
do membro herdado da classe pai implcita ou o programador deve
lidar explicitamente com ela?
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte para programao orientada


a objetos em Smalltalk
Smalltalk uma linguagem de programao orientada a objetos pura
Tudo um objeto
Todos os objetos tm memria local
Toda a computao por meio de objetos enviando mensagens para
objetos
Nenhuma das aparncias das linguagens imperativas
Todos os objetos so alocados do monte
Toda liberao implcita
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte para programao orientada


a objetos em Smalltalk (continuao)
Verificao de tipos e polimorfismo
Todas as vinculaes de mensagens a mtodos dinmica
Uma mensagem para um objeto inicia uma busca na classe qual o objeto
pertence para achar um mtodo correspondente. Se a busca falha, ela
continua na superclasse dessa classe, assim por diante, at a classe de
sistema, Object, que no tem uma superclasse
A nica verificao de tipos em Smalltalk dinmica, e o nico erro de tipo
ocorre quando uma mensagem enviada para um objeto que no tem um
mtodo correspondente
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte para programao orientada


a objetos em Smalltalk (continuao)
Herana
Uma subclasse Smalltalk herda todas as variveis de instncia, mtodos
de instncia e mtodos de classe de sua superclasse
Todas as subclasses so subtipos
Smalltalk suporta herana simples; ela no suporta herana mltipla
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte para programao orientada


a objetos em Smalltalk (continuao)
Avaliao de Smalltalk
A sintaxe da linguagem simples e altamente regular
um bom exemplo do poder que pode ser fornecido por uma linguagem
pequena
Lento, em comparao com programas compilados de linguagens
imperativas convencionais
A vinculao dinmica de Smalltalk permite que erros de tipo passem sem
ser detectados at a execuo
Introduziu a interface grfica com o usurio
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte para programao orientada


a objetos em C++
Caractersticas gerais:
Evolui de C e SIMULA 67
Est entre as linguagens de programao orientadas a objeto mais
usadas
Sistema de tipos misto
Construtores e destrutores
Elabora os controles de acesso para entidades de classe
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte para programao orientada


a objetos em C++
Herana
Uma classe no precisa ser a subclasse de alguma classe
Controles de acesso aos membros podem ser
Privados
Pblicos
Protegidos
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte para programao orientada


a objetos em C++
Adicionalmente, o processo de subclasses pode ser declarado com
controles de acesso (privado ou pblico), que define potenciais
mudanas no acesso a subclasses
Derivao privada herana pblica e membros protegidos so privados
nas subclasses
Derivao pblica e membros protegidos so tambm pblicos e
projegidos nas subclasses
Conceitos de Linguagens de Programao Robert W. Sebesta

Exemplo de herana em C++


class base_class {
private:
int a;
float x;
protected:
int b;
float y;
public:
int c;
float z;
};

class subclass_1 : public base_class { };


// In this one, b and y are protected and
// c and z are public

class subclass_2 : private base_class { };


// In this one, b, y, c, and z are private,
// and no derived class has access to any
// member of base_class
Conceitos de Linguagens de Programao Robert W. Sebesta

Reexportao em C++
Um membro que no acessvel em uma subclasse (por causa da
derivao privada) pode ser declarado para ser visvel usando um
operador de resoluo de escopo (::), por exemplo,
class subclass_3 : private base_class {
base_class :: c;

}
Conceitos de Linguagens de Programao Robert W. Sebesta

Reexportao (continuao)
Uma motivao para usar derivao privada
Uma classe fornece membros que devem ser visveis, ento eles so
definidos para serem membros pblicos. Uma classe derivada adiciona
alguns novos membros, mas no quer que seus clientes vejam os
membros da classe pai, mesmo que tivessem de ser pblicos na definio
da classe pai
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte para programao orientada


a objetos em C++ (continuao)
Herana mltipla suportada
Se houver dois membros herdados com o mesmo nome, ambos podem
ser referenciados usando o operador de resoluo de escopo
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte para programao orientada


a objetos em C++ (continuao)
Vinculao dinmica
Um mtodo pode ser definido para ser virtual, o que significa que pode
ser chamado por meio de variveis polimrficas e vinculao dinmica
a mensagens
Um funo virtual pura no tem corpo e no pode ser chamada
Qualquer classe que inclua uma funo virtual pura e uma classe abstrata
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte para programao orientada


a objetos em C++ (continuao)
Avaliao
A herana em C++ mais intrincada do que a de Smalltalk em termos de
controle de acesso
C++ fornece herana mltipla
Em C++, o programador deve decidir em tempo de design que mtodos
sero estaticamente vinculados e que deve ser dinamicamente vinculado
Vinculao esttica mais rpida!
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em Java
Como o projeto de classes, herana e mtodos em Java similar ao de
C++, nesta seo focamos apenas as diferenas
Caractersticas gerais
Todos os dados so objetos, exceto valores dos tipos primitivos escalares
Todos os objetos em Java so dinmicos do monte explcitos. A maioria
alocada com o operador new, mas no existe um operador de liberao
explcito
Um mtodo finalize implicitamente chamado quando o coletor de lixo
esta prestes a recuperar o armazenamento ocupado pelo objeto
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em Java (continuao)
Herana
Java suporta diretamente apenas herana simples, mas um tipo de classe
abstrata, chamada de interface fornece suporte parcial para herana
mltipla
Uma interface pode conter apenas constantes nomeadas e declaraes
de mtodo, por exemplo

public interface Comparable <T> {


public int comparedTo (T b);
}

Mtodos podem ser difinidos como final (no pode ser sobrescrito)
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em Java (continuao)
Dynamic Binding
Em Java, todas as chamadas a mtodos so dinamicamente vinculadas a
menos que o mtodo chamado tenha sido declarado como final
A vinculao esttica usada tambm se o mtodo for esttico (static)
ou privado (private), em que ambos os modificadores no permitem
sobrescrita
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em Java (continuao)
Diversas variedades de classes aninhadas
Todas possuem a vantagem de serem ocultas de todas as classes em
seus pacotes, exceto para a classe aninhadora
Classes no estticas aninhadas diretamente em outras so classes
internas
Classes aninhadas podem ser annimas
Uma classe aninhada local definida em um mtodo de sua classe
aninhadora
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em Java (continuao)
Avaliao
O projeto de Java para suporte programao orientada a objetos
similar ao de C++
Java no suporta programao procedural
No permite classes sem pais
Usa vinculao dinmica como a maneira normal de vincular chamadas
a mtodos s definies de mtodos
Usa interfaces para fornecer uma forma simples de suporte para herana
mltipla
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em C#
Caractersticas gerais
O suporte de C# para programao orientada a objetos similar ao
de Java
Inclui tanto classes quanto estruturas
Classes so similares s de Java
Estruturas so de alguma forma construes dinmicas da pilha menos
poderosas
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em C# (continuao)
Herana
C# usa a sintaxe de C++ para definir classes
Um mtodo herdado da classe pai pode ser substitudo na classe derivada
marcando sua definio na subclasse com new
A verso da classe pai ainda pode ser chamada prefixando a chamada
com base:
base.Draw()
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em C# (continuao)
Vinculao dinmica
Para permitir vinculao dinmica de chamadas a mtodos:
O mtodo da classe base deve ser marcado como virtual
Os mtodos correspondentes nas classes derivadas devem ser marcados
com override
Uma classe que inclui ao menos um mtodo abstrato uma classe
abstrata, que deve ser marcada como abstract
Todas as classes C# so derivadas de uma classe raiz nica, Object
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em C# (continuao)
Classes aninhadas
Uma classe C# que diretamente aninhada em uma classe aninhadora se
comporta tal como uma classe aninhada esttica em Java
C# no suporta classes aninhadas que se comportam como as classes
aninhadas no estticas de Java
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em C# (continuao)
Avaliao
C# a linguagem orientada a objetos baseada em C projetada mais
recentemente
As diferenas entre o suporte de C# para programao orientada a objetos
e o de Java so relativamente pequenas
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em Ada 95
Caractersticas gerais
Ada 95 foi derivada de Ada 83, com algumas extenses significativas
As classes de Ada 95 so uma nova categoria de tipos chamadas
de tipos etiquetados
Os tipos etiquetados so definidos em pacotes, que permitem que eles
sejam compilados separadamente
Os subprogramas que definem as operaes em um tipo etiquetado
aparecem na mesma lista de declarao que a declarao de tipo
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em Ada 95 (continuao)
Herana
Tipos derivados em Ada 95 so baseados em tipos etiquetados
Novas entidades so adicionadas s entidades herdadas colocando-as
em uma definio de registro
Todas as subclasses so subtipos
No tem suporte para herana mltipla
Conceitos de Linguagens de Programao Robert W. Sebesta

Exemplo de tipo etiquetado


Package Person_Pkg is
type Person is tagged private;
procedure Display(P : in out Person);
private
type Person is tagged
record
Name : String(1..30);
Address : String(1..30);
Age : Integer;
end record;
end Person_Pkg;
with Person_Pkg; use Person_Pkg;
package Student_Pkg is
type Student is new Person with
record
Grade_Point_Average : Float;
Grade_Level : Integer;
end record;
procedure Display (St: in Student);
end Student_Pkg;

// Note: Display is being overridden from Person_Pkg


Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em Ada 95 (continuao)
Vinculao dinmica
A vinculao dinmica forada por meio do uso de um tipo polimrfico,
que representa todos os tipos em uma hierarquia de classes cuja raiz de
um tipo em particular
Outras vinculaes so estticas
Qualquer mtodo pode ser dinamicamente vinculado
Tipos base puramente abstratos podem ser definidos em Ada 95 com a
incluso da palavra reservada abstract
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em Ada 95 (continuao)
Avaliao
Ada oferece suporte completo para programao orientada a objetos
C++ oferece uma forma melhor de herana mltipla do que Ada
Ada no tem inicializao de objetos (por exemplo, construtores)
A vinculao dinmica nas linguagens orientadas a objetos baseadas
em C restrita aos ponteiros e/ou s referncias a objetos, em vez de
ser para os objetos propriamente ditos; Ada 95 no tem tal restrio,
mais ortogonal
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em Ruby
Caractersticas gerais
Tudo objeto
Toda a computao feita por passagem de mensagens
Definies de classe so executveis, permitido que elas permaneam
abertas durante a execuo
Definies de mtodo tambm so executveis
Todas as variveis em Ruby so referncias a objetos e so todas
sem tipos
O controle de acesso diferente para dados do que para mtodos
Conceitos de Linguagens de Programao Robert W. Sebesta

Suporte a programao orientada a objetos


em Ruby (continuao)
Herana
O controle de acesso a mtodos herdeiros pode ser diferente das classes pais
Subclasses no so necessariamente subtipos
Mixins podem ser criados com mdulos, fornecendo uma espcie de herana
mltipla
Vinculao dinmica
Todas as variveis so referencias a objetos de qualquer classe
Avaliao
No suporta classes abstratas
No suporta herana mltipla
Controle de acesso para os membros de classe mais fraco do outras linguagens
orientadas a objetos
Conceitos de Linguagens de Programao Robert W. Sebesta

Implementao de construes orientadas


a objetos
Duas partes interessantes e desafiadoras
Estruturas de armazenamento para variveis de instncia
Vinculaes dinmicas de mensagens a mtodos
Conceitos de Linguagens de Programao Robert W. Sebesta

Armazenamento de dados de instncias


Registro de instncia de classe (RIC) armazena o estado de um objeto
Esttico (construdo em tempo de compilao)
Cada classe possui seu prprio RIC. Quando uma derivao ocorre, o
RIC da subclasse uma cpia do da superclasse, com entradas para
as novas variveis de instncia adicionadas no final
Dado que a estrutura do RIC esttica, o acesso a todas as variveis
de instncia pode ser feita como feito nos registros
Eficiente
Conceitos de Linguagens de Programao Robert W. Sebesta

Vinculao dinmica de chamadas


a mtodos
Mtodos em uma classe que so estaticamente vinculados no
precisam se envolver no RIC para a classe; mtodos que sero
vinculados dinamicamente devem ter entradas nessa estrutura
Chamadas a um mtodo podem ento ser conectadas ao cdigo
correspondente por meio desse ponteiro no RIC
A estrutura de armazenamento para a lista frequentemente chamada de
uma tabela virtual de mtodos (vtable)
As chamadas a mtodos podem ser representadas como deslocamentos a
partir do incio da vtable
Conceitos de Linguagens de Programao Robert W. Sebesta

Resumo
A programao orientada a objetos envolve trs conceitos fundamentais: tipos de dados,
abstratos, herana e vinculao dinmica
Questes de projeto: exclusividade de objetos, subclasses e subtipos, verificao de
tipo e polimorfismo, herana simples e mltipla, vinculao dinmica, liberao explcita
ou implcita de objetos e classes aninhadas
Smalltalk uma linguagem orientada a objetos pura
C++ tem dois sistemas de tipos (hbrida)
Java no uma linguagem hbrida como C++; suporta apenas programacao orientada
a objetos
C# baseada em C++ e Java
Ruby uma nova linguagem orientada a objetos pura
JavaScript no uma linguagem de programao orientada a objetos, mas fornece
variaes interessantes
Implementar linguagens de programao orientada a objetos envolve novas estruturas
de dados