encapsulamento e modularização -...
TRANSCRIPT
![Page 1: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/1.jpg)
Departamento de ComputaçãoUniversidade Federal de Sergipe
Prof. Alberto Costa [email protected]
Linguagens de ProgramaçãoLinguagens de Programação
Encapsulamento e Encapsulamento e ModularizaçãoModularização
Encapsulamento e Encapsulamento e ModularizaçãoModularização
![Page 2: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/2.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
• Encapsulamento• Modularização• Tipos Abstratos de Dados (TADs)• Objetos• Classes
ConteúdoConteúdo
![Page 3: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/3.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
• Programação em grande escala• A chave da modularidade é abstração
– Qual é o propósito de um módulo? (O quê ele faz?)– Como se chega no propósito?
• Abstração exige ocultamento (controle de visibilidade)– Interfaces mínimas para outros módulos
• Com o encapsulamento, o usuário de um módulo preocupa-se apenas com o quê ele faz, não como faz.
EncapsulamentoEncapsulamento
![Page 4: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/4.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
• Conceitos– Módulo: grupo de declarações + encapsulamento– TAD: tipo definido indiretamente por suas
características e operações exportadas– Objeto: variável oculta + operações exportadas– Classe: (descrição de) um tipo de objetos– Generics: declarações com tipos parametrizados
EncapsulamentoEncapsulamento
![Page 5: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/5.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
• Empacotar representação e operações em unidades lógicas que podem ser compiladas separadamente
• Flexibilidade: como os clientes não dependem da representação, ela pode ser modificada sem exigir mudanças nos clientes
• Confiabilidade: clientes não podem quebrar a integridade dos dados, seja intencionalmente ou acidentalmente
• Documentação reduzida: O cliente só precisa conhecer a parte pública
Vantagens do EncapsulamentoVantagens do Encapsulamento
![Page 6: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/6.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
• Módulo (pacote):– um grupo de componentes declaradas– um conjunto de vínculos encapsulados
• Exemplos– Pacotes em Ada e estruturas em ML agrupam qualquer
vinculável package P is structure P =
D struct end; D end
– Pacotes em Java agrupam apenas classes– Classes em Java, C++, Eiffel, ... agrupam (e encapsulam)
variáveis e métodos.
Módulos (pacotes)Módulos (pacotes)
![Page 7: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/7.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
• Ada e Modula-2 dividem o módulo em duas partes separadas: interface e corpo
package trig is function sin(x:Float)
return Float; function cos(x:Float)
return Float;end trig;
• Vantagens:– Compilação separada da interface e do corpo. Para quê?– O cliente/usuário do pacote só conhece a interface
package body trig is pi : constant Float := 3.1416; function sin(x:Float) return Float is ...; function cos(x:Float) return Float is ...;end;
Módulos com encapsulamentoMódulos com encapsulamento
![Page 8: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/8.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
• Módulos em ML– possui block declarations:
local D1
in D2 end – combinado com struct permite criar módulos com
encapsulamento
• Haskell: explicitando listas de exportação e importação module P export list_id import list_id from M is D– limitação na compilação separada (não há interfaces)
Outras alternativasOutras alternativas
![Page 9: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/9.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
• Java, C++, Object Pascal: mecanismos de encapsulamento usando modificadores de visibilidade. class C {
private int a; public void f( ) {...}...; protected int g( ) {...}
}
package P; package P; import Q; class B {...} public class A {...}
Outras alternativasOutras alternativas
![Page 10: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/10.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
• TAD: um tipo definido por um grupo de operações– representação dos dados é oculta
• Ex. Suponha que precisamos trabalhar com Racionaistype Rational = (Int, Int)
– Rational pode ser usado em contextos indesejados (onde se espera um ponto por exemplo)
– Podem ser construídos valores sem sentido, ex: (2,0)– Valores iguais podem ser considerados diferentes,
ex: (4,2) e (2,1)• Solução: esconder a representação ⇒ um TAD
– todas as vantagens do encapsulamento– resolvem-se os três problemas anteriores
Tipos Abstratos de DadosTipos Abstratos de Dados
![Page 11: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/11.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
package directory_type is type Directory is limited private; procedure insert (dir : in out Directory; newname: in Name; newnumber: in Number); procedure lookup (dir : in Directory; oldname: in Name; oldnumber: out Number found : out Boolean);private type DirNode; type Directory is access DirNode; type DirNode is record .... end record;end directory_type;
Um TAD em ADAUm TAD em ADA
![Page 12: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/12.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
package body directory_type is procedure insert (dir : in out Directory; newname: in Name; newnumber: in Number) is ...; -- aqui a implementação procedure lookup (dir : in Directory; oldname: in Name; oldnumber: out Number found : out Boolean) is ...; -- aqui a implementação end directory_type;
Implementação do TADImplementação do TAD
![Page 13: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/13.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
use directory_type; -- permite abreviar a notação pontohomedir : Directory;workdir : Directory;...insert(workdir, me, 6041);insert(homedir, me, 8715);lookup(workdir, me, mynumber, ok);
Usando o TADUsando o TAD
![Page 14: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/14.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
• Algumas linguagens permitem definir TADs– Com construções próprias, por exemplo ML e
Haskell 96– Usando módulos -- algumas linguagens permitem
outras não (Units do turbo pascal?).
TADs em outras linguagensTADs em outras linguagens
![Page 15: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/15.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
• Objeto: uma variável escondida com um grupo de operações visíveis que trabalham sobre esta variável
• Instâncias de um TAD (classe)• Todas as vantagens dos TADs• Introduz um novo paradigma• Geralmente pacotes/módulos suportam
objetos (Units de Pascal?)
ObjetosObjetos
![Page 16: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/16.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
package directory_object isprocedure insert (newname: in Name
newnumber: in Number);procedure lookup (oldname: in Name;
oldnumber: out Number found : out Boolean);
end directory_object;
Um Objeto em ADAUm Objeto em ADA
Nota: ao contrário das definições anteriores, as operações não recebem mais como parâmetro um objeto directory_object
![Page 17: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/17.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
package body directory_object is type DirNode; type DirPtr is access DirNode; type DirNode is record .... end record; -- uma árvore
root : DirPtr; - - objetoprocedure insert (newname: in Name
newnumber: in Number) is ...; -- adiciona na árvore cuja raiz é root
procedure lookup (oldname: in Name; oldnumber: out Number
found : out Boolean) is ...; -- busca na árvore cuja raiz é rootend directory_object;
Declarando um Objeto em AdaDeclarando um Objeto em Ada
![Page 18: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/18.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
directory_object.insert(me, 6041);directory_object.insert(myMother, 8715);...directory_object.lookup(me, mynumber, ok);
Usando um Objeto em AdaUsando um Objeto em Ada
![Page 19: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/19.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
• Classe: um "tipo" de objetos (uma forma de definir TADs)
• Em Ada: usando pacotes genéricos• Módulos de outras linguagens em geral não
suportam classes • Em Linguagens OO (Java, C++, Smalltalk) há
uma construção linguística específica para definir classes
Classes de ObjetosClasses de Objetos
![Page 20: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/20.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
generic package directory_class is -- idem interface de directory_objectend directory_class;package body directory_class is -- idem corpo de directory_objectend directory_class;
package homedir is new directory_class;package workdir is new directory_class;
workdir.insert(me,6041);homedir.insert(me, 8715);workdir.lookup(me,mynumber,ok);
Uma classe em ADAUma classe em ADA
![Page 21: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/21.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação
• Linguagens Baseadas em Objetos: facilmente pode-se definir objetos (Modula2)
• Baseado em Classes: baseado em Objetos e também pode-se definir classes (ADA)
• Orientado a Objetos: Baseado em Classes + herança + vinculação dinâmica (C++, Java)
object-based class-based object-oriented
+ classes + herança+ vinculação dinâmica
Baseadas ou Orientadas em/a Objetos?Baseadas ou Orientadas em/a Objetos?
![Page 22: Encapsulamento e Modularização - albertocn.sytes.netalbertocn.sytes.net/2011-1/plp/slides/Aula18-LingObjetos_Encapsu... · – Pacotes em Ada e estruturas em ML agrupam qualquer](https://reader030.vdocuments.com.br/reader030/viewer/2022020318/5c435e9f93f3c34c643bdd20/html5/thumbnails/22.jpg)
Prof. Alberto Costa [email protected] Linguagens de ProgramaçãoLinguagens de Programação 22222222
Sugestões de LeituraSugestões de LeituraSugestões de LeituraSugestões de Leitura• Concepts of Programming Languages
(Robert Sebesta)– Seções 11.1 a 11.4
• Programming Language Concepts and Paradigms (David Watt)– Seções 6.1, 6.2 e Capítulo 7
• Linguagens de Programação (Flávio Varejão)– Capítulo 6