UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 11 – Parte I: Encapsulamento Prof.a Tânia Preto / Prof. Robinson Vida Encapsulamento – Características (i/iii) Consiste na divisão de um programa em várias partes menores, onde cada parte possui implementação e realiza seu trabalho de forma independentemente das outras partes; A independência é obtida através da ocultação de detalhes internos, ou seja, da implementação de cada parte, através de uma interface externa. Cada parte pode ser vista como uma caixa preta, onde apenas a sua função (propósito) e sua forma de comunicação é conhecida; A interface (assinatura) permite a comunicação de cada parte com outros objetos através do envio de mensagens; Esses outros objetos não necessitam de conhecer detalhes da implementação, por isso a comparação com a caixa preta; Encapsulamento – Características (ii/iii) A interface contém a descrição de todos os métodos e argumentos que compõe o objeto; Ex.: Caixa preta se comunicando com outras entidades através da interface, responsável por executar a troca de mensagens: Encapsulamento – Características (iii/iii) Exemplo de interface em Java: ◦ ◦ ◦ ◦ public void verErro( String message ) public int somaDois( int x, int y ) public float funcaoX( float a, float b, float c ) public boolean testaRaiz(float a, float b, float c ) Vantagens do encapsulamento: ◦ Independência: O objeto pode ser reutilizado em qualquer lugar pois eles não estão vinculados a algum programa particular; ◦ Transparência: As atualizações, correções e alterações não são conhecidas para as entidades que usam o objeto, apenas o seu efeito, desde que a interface não seja alterada; ◦ Não altera outros objetos e programas: Como o objeto tem implementação independente, sua única interação com o restante do programa é a interface, não causando efeitos colaterais inesperados ; Encapsulamento – Abstração Características do encapsulamento eficaz: ◦ Abstração; ◦ Ocultação da implementação; ◦ Divisão da responsabilidade; Abstração: ◦ Abstração é o processo de extrair as características essenciais de um objeto real; ◦ Consiste em apresentar uma solução mais simples para um problema difícil, não se preocupa com detalhes; ◦ Seu uso deve permitir um modelo conceitual (orientação a objetos) que seja utilizado em todas as fases de desenvolvimento de um sistema, desde a análise até a documentação. Encapsulamento – Abstração Abstração - continuação: ◦ O conjunto de características resultante da abstração forma um tipo de dados abstrato com informações sobre seu estado e comportamento; ◦ Concentra-se em definir o que é o objeto e o que ele faz antes de decidir como ele será implementado; ◦ TADs (tipo abstratos de dados): É uma abstração que consiste na definição de um conjunto de dados e um conjunto de operações sobre esses dados; ◦ Classes abstratas: São classes estruturais, servem de base para outras classes, não necessariamente são instanciadas; Podem ser vistas como um modelo comum, possuindo alguns métodos (comuns) implementados e outros apenas definidos; Encapsulamento – Características Abstração – Exemplo UML O mecanismo de herança estruturar a relação, onde a partir das classes abstratas, novas classes concretas são definidas; Ex.: As característica (atributos) e comportamentos (métodos) comum a todos os mamíferos estão abstraídos na classe abstrata Mamífero. Encapsulamento – Ocultação Ocultação da implementação: ◦ É necessário ocultar as implementações internas de seus objetos; ◦ Vantagens de ocultar a implementação: Proteger o objeto de seus usuários; Proteger os usuários do próprio objeto; ◦ Os TADs permitem a definição de novas classes, ocultando dados internos e o estado desses dados, através de uma interface bem definida; ◦ A definição correta de um tipo protege o objeto de forma que a qualquer entidade qie interaja com o tipo, o faça de maneira correta, consistente e segura; ◦ Um procedimento interessante é estabelecer que somente os métodos da classe podem alterar os dados dessa mesma classe; Encapsulamento – Ocultação Ocultação da implementação – Exemplo em Java: private double saldo=0; private String nome; // para alterar/consultar os atributos é necessário o uso de métodos: public void retiraValor(double Valor){ this.saldo = this.saldo - Valor; } public double getSaldo(){ return this.saldo; } public void setNome(String N){ this.nome = N; } public String getNome(){ return this.nome; } Encapsulamento – Divisão Responsab. Divisão de responsabilidades: ◦ A medida que um sistema cresce, a tarefa de identificar e dividir responsabilidades viabiliza o desempenho e a simplicidade do código; ◦ Dividir responsabilidades permite que sejam feitas alterações e adições de módulos de uma forma coesa e organizada; ◦ Um objeto deve executar apenas uma função – sua responsabilidade – e executá-la bem; ◦ A responsabilidade de uma classe representa o conjunto de ações que ela pode desempenhar e o conjunto de informações que ela pode ser solicitada a fornecer; ◦ O usuário do objeto não deve ter dúvidas quanto a sua utilização; ◦ Responsabilidades podem ser vistas como obrigações de um tipo ou de uma classe; Encapsulamento – Divisão Responsab. Divisão de responsabilidades (continuação): ◦ Obrigações de fazer algo: Fazer algo a si mesmo; Iniciar ações em outros objetos; Controlar ou coordenar atividades em outros objetos; ◦ Obrigações de conhecer algo: Conhecer dados encapsulados; Conhecer objetos relacionados; Conhecer coisas que ele pode calcular; ◦ Exemplos Uma Conta bancária tem a responsabilidade de registrar as transações (fazer algo); Uma Conta bancária tem a responsabilidade de saber sua data de criação (conhecer algo).