SlideShare uma empresa Scribd logo
1 de 61
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

Mais conteúdo relacionado

Mais procurados

Curso de C# - Introdução
Curso de C# - IntroduçãoCurso de C# - Introdução
Curso de C# - IntroduçãoDaniel Araújo
 
Tutorial java script orientado à objeto e jquery
Tutorial java script orientado à objeto e jqueryTutorial java script orientado à objeto e jquery
Tutorial java script orientado à objeto e jqueryLuan Campos
 
C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)Renato Groff
 
Abordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NETAbordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NETGabriel Schade Cardoso
 
lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova Rogério Cardoso
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + PythonMateus Padua
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Bernardo Fontes
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaÁlvaro Farias Pinheiro
 
Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaRegis Magalhães
 
Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.comricobl
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
 

Mais procurados (20)

Curso de C# - Introdução
Curso de C# - IntroduçãoCurso de C# - Introdução
Curso de C# - Introdução
 
Tutorial java script orientado à objeto e jquery
Tutorial java script orientado à objeto e jqueryTutorial java script orientado à objeto e jquery
Tutorial java script orientado à objeto e jquery
 
Linguagem de programação C# 4 e 5
Linguagem de programação C# 4 e 5Linguagem de programação C# 4 e 5
Linguagem de programação C# 4 e 5
 
C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)
 
Abordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NETAbordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NET
 
Apostila de C# & Asp.Net
Apostila de C# & Asp.NetApostila de C# & Asp.Net
Apostila de C# & Asp.Net
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova
 
Java generics-basics
Java generics-basicsJava generics-basics
Java generics-basics
 
Educação e certificação na Plataforma .NET
Educação e certificação na Plataforma .NETEducação e certificação na Plataforma .NET
Educação e certificação na Plataforma .NET
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso Java
 
Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.com
 
Linguagem Java
Linguagem JavaLinguagem Java
Linguagem Java
 
Gisele
GiseleGisele
Gisele
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 
Java primeiros-passos
Java primeiros-passosJava primeiros-passos
Java primeiros-passos
 

Semelhante a Programação Orientada a Objetos parte 2

Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...Dextra Sistemas / Etec Itu
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Strutseduan
 
Criação de um Desktop GNU/Linux para uso em laboratórios de informática
Criação de um Desktop GNU/Linux para uso em laboratórios de informáticaCriação de um Desktop GNU/Linux para uso em laboratórios de informática
Criação de um Desktop GNU/Linux para uso em laboratórios de informáticaVerdanatech Soluções em TI
 
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-EndsSingle-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-EndsDaiana Cambruzzi Avila
 
Apostila - Linguagem de Programação I
Apostila - Linguagem de Programação IApostila - Linguagem de Programação I
Apostila - Linguagem de Programação ISidney Roberto
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015Rodrigo Marinho
 
Introdução_a_linguagem C _pare1_(1).pptx
Introdução_a_linguagem C _pare1_(1).pptxIntrodução_a_linguagem C _pare1_(1).pptx
Introdução_a_linguagem C _pare1_(1).pptxSamara Santos
 

Semelhante a Programação Orientada a Objetos parte 2 (20)

Java1
Java1Java1
Java1
 
Java11
Java11Java11
Java11
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
poster
posterposter
poster
 
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
 
Aula01-JavaScript
Aula01-JavaScriptAula01-JavaScript
Aula01-JavaScript
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Struts
 
Criação de um Desktop GNU/Linux para uso em laboratórios de informática
Criação de um Desktop GNU/Linux para uso em laboratórios de informáticaCriação de um Desktop GNU/Linux para uso em laboratórios de informática
Criação de um Desktop GNU/Linux para uso em laboratórios de informática
 
Apostila sobre o Visualg
Apostila sobre o VisualgApostila sobre o Visualg
Apostila sobre o Visualg
 
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-EndsSingle-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
 
Java apostilha
Java apostilhaJava apostilha
Java apostilha
 
Programação OO - Java
Programação OO - JavaProgramação OO - Java
Programação OO - Java
 
Apostila - Linguagem de Programação I
Apostila - Linguagem de Programação IApostila - Linguagem de Programação I
Apostila - Linguagem de Programação I
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015
 
Apostila Visualg
Apostila VisualgApostila Visualg
Apostila Visualg
 
Interfaces
InterfacesInterfaces
Interfaces
 
Interfaces
InterfacesInterfaces
Interfaces
 
Java swingcomponentes
Java swingcomponentesJava swingcomponentes
Java swingcomponentes
 
Introdução_a_linguagem C _pare1_(1).pptx
Introdução_a_linguagem C _pare1_(1).pptxIntrodução_a_linguagem C _pare1_(1).pptx
Introdução_a_linguagem C _pare1_(1).pptx
 

Mais de Elaine Cecília Gatto

A influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etariaA influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etariaElaine Cecília Gatto
 
Inteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à MedicinaInteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à MedicinaElaine Cecília Gatto
 
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...Elaine Cecília Gatto
 
Apresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPCApresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPCElaine Cecília Gatto
 
Como a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptxComo a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptxElaine Cecília Gatto
 
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...Elaine Cecília Gatto
 
Community Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCarCommunity Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCarElaine Cecília Gatto
 
Classificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de CorrelaçõesClassificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de CorrelaçõesElaine Cecília Gatto
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...Elaine Cecília Gatto
 
Community Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label ClassificationCommunity Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label ClassificationElaine Cecília Gatto
 
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdfMulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdfElaine Cecília Gatto
 
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...Elaine Cecília Gatto
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...Elaine Cecília Gatto
 
Pipeline desdobramento escalonamento
Pipeline desdobramento escalonamentoPipeline desdobramento escalonamento
Pipeline desdobramento escalonamentoElaine Cecília Gatto
 
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bitsResumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bitsElaine Cecília Gatto
 
Como descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoComo descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoElaine Cecília Gatto
 

Mais de Elaine Cecília Gatto (20)

A influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etariaA influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etaria
 
Inteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à MedicinaInteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à Medicina
 
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
 
Apresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPCApresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPC
 
entrevista r7.pdf
entrevista r7.pdfentrevista r7.pdf
entrevista r7.pdf
 
Como a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptxComo a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptx
 
Empoderamento Feminino
Empoderamento FemininoEmpoderamento Feminino
Empoderamento Feminino
 
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
 
Community Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCarCommunity Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCar
 
Classificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de CorrelaçõesClassificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de Correlações
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
 
Community Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label ClassificationCommunity Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label Classification
 
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdfMulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
 
Curtinhas de sábado.pdf
Curtinhas de sábado.pdfCurtinhas de sábado.pdf
Curtinhas de sábado.pdf
 
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
 
Pipeline desdobramento escalonamento
Pipeline desdobramento escalonamentoPipeline desdobramento escalonamento
Pipeline desdobramento escalonamento
 
Cheat sheet Mips 32 bits
Cheat sheet Mips 32 bitsCheat sheet Mips 32 bits
Cheat sheet Mips 32 bits
 
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bitsResumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
 
Como descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoComo descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcação
 

Último

19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdfmarlene54545
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...azulassessoria9
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxLuizHenriquedeAlmeid6
 
Artigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.pptArtigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.pptRogrioGonalves41
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmicolourivalcaburite
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticash5kpmr7w7
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxLuizHenriquedeAlmeid6
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º anoRachel Facundo
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...PatriciaCaetano18
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...marcelafinkler
 
Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxMarcosLemes28
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeitotatianehilda
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...marcelafinkler
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*Viviane Moreiras
 
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedAula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedJaquelineBertagliaCe
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfAutonoma
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Cabiamar
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfcomercial400681
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...azulassessoria9
 

Último (20)

19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
Artigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.pptArtigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.ppt
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
 
Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptx
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedAula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
 

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 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
  • 16. Interface • SINTAXE: public interface nome{ método1; método2; ... ... ... } 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