PROGRAMAÇÃO
ORIENTADA A OBJETOS –
Parte 2
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
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
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
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
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
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
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
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
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
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
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 )
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
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
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
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
Interface
• SINTAXE:
public interface nome{
método1;
método2;
...
...
...
}
03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto
DesenvolvimentodeSoftwarepareaWeb2016
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Programação Orientada a Objetos parte 2

  • 1.
    PROGRAMAÇÃO ORIENTADA A OBJETOS– Parte 2 03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto DesenvolvimentodeSoftwarepareaWeb2016
  • 2.
    Encapsulamento • Permite dividiro 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 • É acaracterí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 osserviç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 oque 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 comoum 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ãoos 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 classLog { 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 classLog { 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 classLog { 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 classLog { 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: definiro 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 interfaceapenas 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
  • 16.
    Interface • SINTAXE: public interfacenome{ método1; método2; ... ... ... } 03/06/2016Prof.ªM.ªEng.ªElaineCecíliaGatto DesenvolvimentodeSoftwarepareaWeb2016
  • 17.
    Interface • Declarar asinterfaces 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étododa 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: Implementandouma 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: Implementandouma 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: Implementandouma 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: Referenciasde 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: Referenciasde 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: Referenciasde 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áriasInterfaces • 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çade 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 QUEENCAPSULAR • 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 QUEENCAPSULAR • 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 QUEENCAPSULAR • 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 QUEENCAPSULAR • 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 • Regraspara 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 • Cuidadosem 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 • Ocultarimplementaçõ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 SEUOBJETO 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 SEUOBJETO 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 SEUOBJETO 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 SEUOBJETO 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 SEUOBJETO 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 SEUOBJETO 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 SEUOBJETO 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 SEUOBJETO 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 SEUOBJETO 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 OSCLIENTES 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 OSCLIENTES 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 OSCLIENTES 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 OSCLIENTES 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ívelescrever 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 maisresponsabilidade 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 quedeve 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çãofornece 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 oproblema 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