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