Paradigmas de Linguagens de
Programação
Linguagem Orientada a Objetos 1
Augusto Sampaio e Paulo Borba
Departamento de Informática
Universidade Federal de Pernambuco
Explorando Conceitos
• Encapsulamento
– Módulos, pacotes
• Information hiding
– Mecanismos de visibilidade
• Tipos abstratos
• Objetos e classes
• Pacotes e classes parametrizadas
Pacotes
• Grupo de declarações (variáveis, constantes,
tipos, procedimentos, funções, classes,
subpacotes)
• Agrupamento de conceitos fortemente
relacionados
• Facilita entendimento, reuso e manutenção
• Encapsulamento
Pacotes com Informações
Escondidas
• Pacotes com facilidades para exportar e
esconder declarações:
– Essenciais versus Auxiliares
– O que? versus Como?
•
•
•
•
Independência de detalhes de implementação
Facilita reuso e manutenção
Information hiding
Tipos abstratos, objetos e classes
Tipos Abstratos
• Pacotes definindo tipos e escondendo a
representação de seus elementos
• Estruturação: dados versus funções
• Tipo definido por operações, não valores
• Independência da representação dos
elementos.
• Facilita reuso e manutenção
Tipos Abstratos (exemplo em Ada)
package directory_type is
type Dir is limited private
procedure insert (dir : in out Dir;
name : in Name;
number: in Number);
procedure lookup (...);
private
type DirNode;
type Dir is access DirNode;
type DirNode is record ... end record;
end
Package body directory_type is
procedure insert ( );
-- codigo para insert
procedure lookup (...);
-- codigo para lookup
end directory_type;
use directory_type;
homedir : Dir;
workdir: Dir;
...
insert (workdir, me, 6041);
insert (homedir, me, 8715);
lookup (workdir, me, mynumber, ok)
Objetos (forma primitiva)
• Pacotes definindo variáveis escondidas e
exportando operações de acesso às mesmas
• Estruturação: dados versus funções
• Independência da representação das
variáveis
• Controla como e em que ordem as variáveis
podem ser acessadas
• Facilita reuso e manutenção
Objetos (forma primitiva)
• Similar a Tipo abstrato + Variável deste tipo,
com certas restrições:
– um dos argumentos de uma operação do tipo é a
variável utilizada para armazenar o resultado de
tal operação
• Nessa forma, objetos são cidadãos de segunda
classe: não podem ser argumentos ou
resultados de operações, etc
• Não há herança ou dynamic binding
Objeto (exemplo em Ada)
package directory_object is
procedure insert (name : in Name;
number: in Number);
procedure lookup (...);
end directory_object;
package body directory_object is
type DirNode;
type DirPtr is access DirNode;
type DirNode is record ... end record;
root : DirPtr
procedure insert ( ); -- codigo para insert
procedure lookup (...); -- codigo para lookup
begin
...; -- inicializa diretorio
end directory_object;
use directory_object;
directory_object.insert (me, 6041);
directory_object.lookup (me, mynumber, ok)
Classes de objetos
• Em Ada, usando um generic package
generic package directory_class is
-- como na def de directory_object ...
end directory_object;
package body directory_object ...
package homedir is new directory_class;
package workdir is new directory_class;
workdir.insert (me, 6041);
homedir.insert (me, 6041);
workdir.lookup (me, mynumber, ok);
Pacotes Parametrizados
•
•
•
•
Pacotes são abstrações de declarações
Abstrações podem ser parametrizadas
Parâmetros: valores, tipos, pacotes, etc.
O mesmo conceito pode ser aplicado para
classes (templates de C++, generics de
Java)
Leitura
• Programming Language Concepts and
Paradigms
– Capítulo 6
Exercícios e Projetos
• Estenda a Linguagem Orientada a Objetos 1
com os seguintes recursos:
– Subtipos e herança múltipla de código
– Expressão new para criação de objetos
– Classes parametrizadas, como templates em
C++
– Pacotes como em Java
– Tipos abstratos
Download

Linguagem Imperativa 1 - Centro de Informática da UFPE