2. Encapsulamento
• Permite dividir o programa em partes
menores e independentes
• Cada parte realiza seu trabalho
independentemente das outras partes
• Oculta detalhes internos através de uma
interface externa
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
3. Encapsulamento
• É a característica da OO de ocultar partes
independentes da implementação
• Permite que o programador construa
partes ocultas da implementação do
software, que atinjam uma funcionalidade
e ocultam os detalhes de implementação
do mundo exterior
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
4. Encapsulamento
• Encapsulamento é como uma caixa preta
• Sabe-se o que a caixa preta faz, mas não
se sabe como ela é por dentro
• As mensagens são enviadas para a caixa
preta
• Não há preocupação com o que acontece
dentro dela, desde que ela funcione, tudo
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
5. Interface
• Lista os serviços fornecidos por um
componente
• É um contrato com o mundo exterior, que
define exatamente o que uma entidade
externa pode fazer com o objeto
• É o painel de controle do objeto
• Lista todos os métodos e argumentos que
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
6. Interface
• Diz o que o programador pode fazer com
o componente
• Não informa como o componente fará seu
trabalho
• Oculta a implementação
• Alterações na Interface necessitarão de
mudanças no código que exerce essa
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
7. Implementação
• Define como um componente realmente
fornece um serviço
• Define os detalhes internos do
componente
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
8. Interface Pública
• São os comportamentos disponíveis, em
uma classe, para o mundo exterior.
• EXEMPLO (próximo slide)
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
9. Interface Pública
public class Log {
public void debug ( String message ){
System.out.print(“DEBUG”, message);
}
public void info ( String message ){
System.out.print(“INFO”, message);
}
public void warning ( String message ){
System.out.print(“INFO”, message);
}
}
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
10. Interface Pública
public class Log {
public void debug ( String message ){
System.out.print(“DEBUG”, message);
}
public void info ( String message ){
System.out.print(“INFO”, message);
}
public void warning ( String message ){
System.out.print(“INFO”, message);
}
}
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
COMPORTAMENTOS
OU MÉTODOS
11. Interface Pública
public class Log {
public void debug ( String message ){
System.out.print(“DEBUG”, message);
}
public void info ( String message ){
System.out.print(“INFO”, message);
}
public void warning ( String message ){
System.out.print(“INFO”, message);
}
}
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
INTERFACES PÚBLICAS
public void debug ( String message )
public void info ( String message )
public void warning ( String message )
12. Interface Pública
public class Log {
public void debug ( String message ){
System.out.print(“DEBUG”, message);
}
public void info ( String message ){
System.out.print(“INFO”, message);
}
public void warning ( String message ){
System.out.print(“INFO”, message);
}
}
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
IMPLEMENTAÇÃO
13. Interface e Implementação
• Implementação: define como algo é feito
• Interface:
– Oculta o como
– Define um contrato com o mundo exterior
• EXEMPLO: a interface pública, ou o
comportamento, ou ainda o MÉTODO, public void
debug (String message) é uma maneira de dizer ao
mundo exterior que, se o programador passar uma
String, ela reportará uma mensagem de depuração!
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
14. Interface
• Utilidade: definir o que uma classe deve
fazer mas não como ela o fará;
• Definição: um conjunto de métodos que
será implementado por uma classe;
• Uma interface não fornece implementação
dos métodos que define
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
15. Interface
• Uma interface apenas especifica o que
deve ser feito, mas não como;
• Uma interface é uma estrutura que
descreve a funcionalidade sem especificar
uma implementação;
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
17. Interface
• Declarar as interfaces preferencialmente
como public para que um número ainda
maior de classes possa implementá-la
• Métodos da classe interface: possuem
apenas a assinatura e o tipo de retorno
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
18. Interface
• Nenhum método da interface deve ser
implementado;
• Cada classe que implementa a interface
deve fazer a sua própria implementação
dos métodos;
• Os métodos da interface são públicos
implicitamente
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
19. Exemplo 1: Implementando uma
Interface
• Sintaxe:
class nome_da_classe implements
interface{ }
• Ou ainda
class nome_da_classe extends superclasse
implements interface{ }
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
20. Exemplo 2: Implementando uma
Interface
• É permitido que uma classe que
implemente uma interface, defina seus
próprios membros e métodos;
• Ela não fica limitada a fornecer apenas
esses métodos, mas é obrigada a
implementá-los também
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
21. Exemplo 3: Implementando uma
Interfacce
• Uma ou mais classes diferentes podem
implementar a mesma interface
• Essas classes podem ser usadas da
mesma maneira, inclusive
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
22. Exemplo 4: Referencias de
Interface
• Uma declaração de interface também cria
um novo tipo de referência;
• Quando uma classe implementa uma
interface, está adicionando o tipo da
interface ao seu tipo;
• Uma instância de uma classe que
implementa uma interface também é uma
instância desse tipo de interface
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
23. Exemplo 4: Referencias de
Interface
• Uma variável de referencia de um tipo de interface
pode ser criada;
• Variável de referencia de interface:
– Pode referenciar qualquer objeto que implemente a
interface;
– Pode referenciar qualquer instância de seu tipo;
– Não pode ser usada para acessar nenhuma outra
variável ou método fornecido por uma classe
implementadora
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
24. Exemplo 4: Referencias de
Interface
• Funcionalidades relacionadas podem ser
acessadas por intermédio de uma interface
comum
• A implementação pode mudar sem afetar o
código que usa a interface
• Códigos adaptáveis facilmente
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
25. Exemplo 5: Implementando
Várias Interfaces
• Uma classe pode implementar mais de uma
interface
• A classe deve implementar todos os métodos de
todas as interfaces
• Esse recurso permite que a classe forneça
várias funcionalidades bem definidas sem ter
que usar herança de classes
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
26. Exemplo 6: Constantes
• Interfaces podem fazer uso de CONSTANTES e
não de variáveis de instâncias (atributos da classe)
• Para isso usa-se public, static e final e todas elas
devem ser inicializadas;
• USO: um programa grande usa várias classes
separadas, é preciso então haver uma maneira
conveniente de disponibilizar essas constantes para
cada classe
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
27. Exemplo 6: Constantes
• Para definir um conjunto de constantes
compartilhadas, é necessário criar uma interface
apenas com as constantes, sem os métodos;
• As classes que precisarem de acesso às
constantes deverão apenas implementar esta
interface
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
28. Exemplo 7: Herança de
Interface
• Uma interface pode herdar outra com o uso da
palavra-chave extends.
• Quando uma classe implementa uma interface
que herda outra interface, deve fornecer
implementações de todos os métodos definidos
dentro da cadeia de herança das interfaces.
• Toda e qualquer classe que implemente uma
interface deve implementar todos os métodos
definidos por ela, inclusive os herdados de
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
29. Exemplo 8: Interfaces
Aninhadas
• Uma interface pode ser declarada membro de
outra interface ou de uma classe.
• Uma interface aninhada em uma classe pode
usar qualquer modificador de acesso e é
implicitamente pública;
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
30. A. POR QUE ENCAPSULAR
• Encapsulamento transforma OBJETOS
em COMPONENTES PLUGÁVEIS
• Para um objeto usar esse componente
plugável, ele só precisa saber como usar
a interface publica do componente
• Isso significa independência
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
31. A. POR QUE ENCAPSULAR
• VANTAGENS:
– Reutilização do objeto em qualquer parte do
programa
– Objetos encapsulados não estão vinculados a
nenhuma parte do programa em particular
– Para usar o objeto encapsulado basta exercer
sua interface
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
32. A. POR QUE ENCAPSULAR
• VANTAGENS:
– As alterações em seu objeto se tornam
transparentes
– Permite que o programador atualize seu
componente, faça uma implementação mais
eficiente, corrija erros, etc.
– Os clientes do objeto serão automaticamente
beneficiados das alterações
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
33. A. POR QUE ENCAPSULAR
• Principais características do encapsulamento
1. Abstração
2. Ocultação da implementação
3. Divisão de responsabilidade
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
34. 1. ABSTRAÇÃO
• É o processo de simplificar um problema
difícil
• Simplifica-se o problema incluindo apenas as
partes que realmente afetam o contexto
• Portanto, trata-se apenas dos detalhes
pertinentes àquela situação em particular
• A abstração pode tornar um componente
encapsulado mais reutilizável, pois ele está
personalizado para um domínio de
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
35. 1. ABSTRAÇÃO
• Vantagens:
– Permite que o programador resolva um
problema facilmente
– Ajuda a obter reutilização
– Permite que o programador resolve um
problema uma vez e depois use essa solução
por todo o domínio desse problema
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
36. 1. ABSTRAÇÃO
• Exemplos:
– Uma fila de banco
– Produção de lanches fast food
• Os exemplos são específicos, mas é possível
encontrar uma descrição genérica para eles,
isto é, abstrair o contexto
• Nos dois exemplos, uma FIFO é utilizada para
organizar a fila do banco e também a produção,
portanto, a FIFO é a abstração
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
37. 1. ABSTRAÇÃO
• Regras para se obter abstração
– Tratar do caso GERAL e não do específico
– Quando confrontar diversos problemas
diferentes, procure o problema comum a todos
– Procurar ver um conceito e não um caso
específico
– A abstração pode não aparecer tão facilmente
quanto você espera.
• Regras geral
– Abstrair algo que você tiver implementado três
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
38. 1. ABSTRAÇÃO
• Cuidados em relação à Abstração
– Trate a abstração como um bônus e não como
objetivo final
– Existem ocasiões em que a abstração não é
apropriada
– Talvez você tenha de resolver um problema
várias vezes para conseguir identificar que ali
cabe uma abstração
– Resolva o que precisa ser resolvido, não invista
muito tempo tentando abstrair algo que não
consegue ou que, de fato, não é necessário.
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
39. 2. OCULTANDO
IMPLEMENTAÇÃO
• Ocultar implementações internas de seus
objetos
• Vantagens:
I. Protege o objeto de seus clientes
II. Protege os clientes de seu objeto do próprio
objeto
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
40. I. PROTEGENDO SEU OBJETO
COM ABSTRACT DATA TYPE
• Abstract Data Type
• Possuem duas características: abstração e tipo
• É um conjunto de dados e um conjunto de operações
sobre esses dados
• Permitem definir novos tipos na linguagem, que são
seguros de usar, ocultando dados internos e o estado,
atrás de uma interface bem definida
• São ferramentas de encapsulamento
• Uma vez definido o novo tipo, o programador o usa
como qualquer outro tipo definido na linguagem
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
41. I. PROTEGENDO SEU OBJETO
COM ABSTRACT DATA TYPE
• Um objeto de primeira classe é aquele
que pode ser usado exatamente da
mesma maneira que um tipo inteiro
• Um objeto de segunda classe é um tipo de
objeto que você pode definir, mas não
necessariamente usar, como faria um tipo
interno.
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
42. I. PROTEGENDO SEU OBJETO
COM ABSTRACT DATA TYPE
• EXEMPLO: TIPOS DE DADOS
• Quando você soma dois números inteiros,
você não pensa a respeito da adição de
bits individuais, você pensa na adição dos
dois números, não se preocupa em como
o computador faz isso.
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
43. I. PROTEGENDO SEU OBJETO
COM ABSTRACT DATA TYPE
• EXEMPLO DE ABSTRAÇÃO: Construir um
programa para somar dois números inteiros
– O programador não pensa na soma de bits
individuais
– A linguagem apresenta um inteiro como um
número
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
44. I. PROTEGENDO SEU OBJETO
COM ABSTRACT DATA TYPE
• EXEMPLOS DE ABSTRAÇÃO: A criação de um
novo objeto de uma classe
– O programador não pensa nos atributos como
uma entidade separada do objeto
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
45. I. PROTEGENDO SEU OBJETO
COM ABSTRACT DATA TYPE
• PORTANTO:
• Tipos de dados permitem representar estruturas
complexas em um nível mais simples e
conceitual
• Tipos de dados “protegem” o programador dos
detalhes desnecessários
• Tipos de dados permitem aos programadores
trabalhar no nível do problema
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
46. I. PROTEGENDO SEU OBJETO
COM ABSTRACT DATA TYPE
• Ao projetar um TAD, perguntar-se: o que faz
esse TAD?
• Exemplo: FIFO
– O que uma FIFO faz?
• Coloca e remove elementos na fila
• Consulta o estado da fila
• Visualiza o elemento
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
47. I. PROTEGENDO SEU OBJETO
COM ABSTRACT DATA TYPE
• Ao projetar um TAD, perguntar-se: o que faz
esse TAD?
• Exemplo: FIFO
– Interface para FIFO
public interface FIFO {
public void inserir ();
public void remover ();
public boolean vazia();
public void visualizar();
}
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
• Não diz nada a respeito de
como a fila contém seus
dados internos
• Novo tipo de dados: FIFO
• Interface FIFO extremamente
genérica. Não é uma FIFO de
hamburgers, nem de inteiros.
48. I. PROTEGENDO SEU OBJETO
COM ABSTRACT DATA TYPE
• PORTANTO:
• Quando o programador declara uma variável do
tipo INT, o significado é simples: o programador
declarou um único inteiro.
• MAS, quando o programador declara FIFO, esta
é muito mais EXPRESSIVA. Mais coisas estão
ocorrendo dentro de FIFO do que dentro de INT.
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
49. II. PROTEGENDO OS CLIENTES
DE SEUS OBJETOS
• CÓDIGO FRACAMENTE ACOPLADO:
– É independente da implementação de outros
componentes
– Mais flexível: facilita reutilização e aprimoramento
• CÓDIGO FORTEMENTE ACOPLADO:
– É fortemente vinculado à implementação de outros
componentes
– Anula o objetivo do encapsulamento que é criar
objetos independentes e reutilizáveis
– Elimina a liberdade do programador de alterar a
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
50. II. PROTEGENDO OS CLIENTES
DE SEUS OBJETOS
• OCULTAÇÃO DE IMPLEMENTAÇÃO:
– impede que os clientes de seus objetos se
tornem fortemente acoplados
– dessa maneira protege seus objetos e os
clientes dos seus objetos.
• IMPORTANTE:
– Caso seja necessário realizar alterações na sua
INTERFACE, o código que é dependente desta
Interface necessitará ser atualizado também!
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
51. II. PROTEGENDO OS CLIENTES
DE SEUS OBJETOS
• CÓDIGO DEPENDENTE:
– Depende da existência de um determinado
tipo.
– É inevitável
– Graus de dependência:
• Dependência aceitável
• Superdependência
• Interfaces bem definidas diminuem a
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
52. II. PROTEGENDO OS CLIENTES
DE SEUS OBJETOS
• Problemas na Ocultação da Implementação:
– Um programador A usa uma Interface que foi
desenvolvida por um programador B
– O programador A precisa de mais informações
sobre como a Interface funciona, para
desenvolver seu componente adequadamente
– DOCUMENTAR como sua a Interface funciona
é IMPORTANTE para quem for utiliza-la!
– Um comportamento declarado na Interface não
pode ser alterado, mas pode ser INFORMADO!
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
53. 3. Divisão da
Responsabilidade
• Cada objeto deve executar uma função
(responsabilidade) e executá-la bem
• Todas as funções devem trabalhar no
sentido de uma responsabilidade comum
• Os objetos devem ter um ou um pequeno
número de responsabilidades
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
54. 3. Divisão da
Responsabilidade
• Um objeto deve saber como fazer seu
trabalho
• Quando dois objetos começam a fazer a
mesma tarefa, o programador se dá conta
de que não foi feita a divisão correta da
responsabilidade. Consequência: código
procedural
• Cuidado com a Redundância!
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
55. 3. Divisão da
Responsabilidade
• Muitas responsabilidades em um objeto
resulta em:
– Implementação difícil e confusa
– Muitos comportamentos
– Centraliza muito conhecimento
– Pode tornar-se procedural
– Pode tornar-se um programa completo
– Pode tornar-se “desencapsulado”
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
56. 3. Divisão da
Responsabilidade
• Encapsulamento efetivo: abstração + ocultação +
responsabilidade
• Sem abstração o código pode não ser reutilizável
• Sem ocultação o código pode tornar-se fortemente
acoplado
• Sem responsabilidade o código fica centrado nos
dados, procedural, fortemente acoplado,
descentralizado, tornando a programação procedural
em um ambiente orientado a objetos
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
57. CONCLUSÕES
• É impossível escrever uma classe que satisfaça
todos os usuários e cada situação.
• Não coloque em uma classe mais do que o
necessário para resolver o problema
• Ao escrever uma classe, tente não trabalhar de
forma abstrata demais
• Algum elemento na sua abstração pode não
funcionar em todos os casos
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
58. CONCLUSÕES
• Quanto mais responsabilidade um objeto assume,
mais complexo, mais complexo ele será e mais
difícil será mantê-lo
• Adicionar uma classe em seu sistema é o mesmo
que criar um novo tipo
• A abstração aparece com a experiência
• TAD não tem herança ou polimorfismo, diferente
das classes que os tem
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
59. CONCLUSÕES
• O que deve estar na Interface pública?
– Apenas o que você pretende que outros usem
• Sempre ocultar as variáveis internas (exceto
constantes) e deixa-las acessíveis apenas para a
própria classe
• A abstração permite que o programador pense e
programe no geral
• Cada componente pode ser validado
individualmente (testes unitários)
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
60. CONCLUSÕES
• A abstração fornece código flexível e utilizável em
mais de uma situação
• Código encapsulado é fácil de dar manutenção
• Alterações podem ser feitas sem danificar código
dependente
• O código que usar o componente será atualizado
automaticamente
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
61. CONCLUSÕES
• Dividindo o problema em partes, vários
desenvolvedores podem trabalhar no
desenvolvimento do software, cada um com uma
parte
• Componente criado e validado, está pronto para
reutilização.
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016