Programação Orientada a Objetos. Encapsulamento

Documentos relacionados
Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Encapsulamento. Alberto Costa Neto DComp - UFS

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

E N C A P S U L A M E N T O P R O F. M E. H É L I O E S P E R I D I Ã O

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Orientação a Objetos Parte I. Introdução a POO (Programação Orientada a Objetos)

Modelo do Mundo Real. Abstração. Interpretação

Visibilidade e Encapsulamento

Java para Desktop. Programação Orientada à Objetos 2 JSE

Conceitos de Programação Orientada a Objetos

Introdução à UML. Prof. Jesus José de Oliveira Neto

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programação Orientada a Objetos. Prof. MsC Sílvio Bacalá Júnior

Introdução à orientação a objetos. João Tito Almeida Vianna 18/05/2013

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP

Classe Abstrata e Interface

Classes e Objetos. Sintaxe de classe em Java

Programação Orientada a Objetos

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Linguagens de Programação Aula 12

Programação Orientada a Objetos. Polimorfismo

Sabemos que a classe é responsável por definir a estrutura e o comportamento de seus objetos. Portanto, os objetos são instâncias das classes.

Levantamento, Análise e Gestão Requisitos. Aula 03

Programação Orientada a Objetos Relacionamentos entre classes

Programação Java (nível intermediário) 4. Polimorfismo

27) Em relação aos Projetos de Sistemas de Software, assinale a sequência correta de desenvolvimento de um sistema:

Linguagem de Programação I Apresentação da Disciplina

Programação para Games II. Professor Ariel da Silva Dias Orientação a Objetos

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Polimorfismo. O que é polimorfismo?

O PARADIGMA ORIENTADO POR OBJETOS

Relacionamentos entre objetos

Padrões de Projeto. Padrões de Projeto. Além dos 23 Padrões GoF. Os 23 Padrões de Projeto. Documentação de um Padrão. Classificação dos Padrões

Introdução ao Java. Prof. Herbert Rausch Fernandes

Daniel Wildt

Programação Orientada a Objeto

POO Fundamentos Parte III. Professor Vicente Paulo de Camargo

UNIVERSIDADE PAULISTA - UNIP ICET INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGIA

MODELAGEM COM A UML (UNIFIED MODELING LANGUAGE)

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

Engenharia de Software. Aula 10 Representação dos Conceitos de Orientação a Objetos. Prof. Me. Rogério Ferreira

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Interfaces e Classes Abstratas

Aula 4 Encapsulamento e Relacionamento Cleverton Hentz

Rafael B. Pereira (

Linguagem de Programação. Diagrama de classes

Diagrama de Classes. Régis Patrick Silva Simão. Régis Simão Diagrama de Classes 1/42

Classes, Métodos e Propriedades

Laboratório de programação II

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Linguagem de programação Programação Orientada a objetos

LEIC-A / MEIC-A 2007/2008 (1º

Programação em Linguagem C++

Linguagem de Programação III

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Introdução a Programação Orientada a Objetos

Herança e Polimorfismo

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

1 Introdução e Conceitos básicos

Programação Orientada a Objetos

Tecnólogo em Análise e Desenvolvimento de Sistemas

Introdução à orientação a objetos

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

COMPORTAMENTOS - Observações

Programação Orientada a Objetos

Programação Orientada a Objetos

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Paradigmas de Linguagens de Programação. Tipos de Dados Abstratos

A modelagem é tida como a parte central de todas as atividades para a construção de um bom sistema, com ela podemos:

extendsé usado para indicar herança em JAVA

Diagramas de Classes. ESII Profª. Andressa Falcade URI Santiago

Linguagem de Programação IV Introdução

Transcrição:

Programação Orientada a Objetos Encapsulamento Cristiano Lehrer, M.Sc.

Introdução (1/2) Os três pilares da programação orientada a objetos são: Encapsulamento Herança Polimorfismo Encapsulamento é a característica da orientação a objetos de ocultar partes independentes da implementação. O encapsulamento permite que se construa partes ocultas da implementação do software, que atinjam uma funcionalidade e ocultam os detalhes de implementação do mundo exterior.

Introdução (2/2) O verdadeiro encapsulamento é imposto em nível de linguagem, através de construções internas da linguagem. Qualquer outra forma de encapsulamento é simplesmente um acordo de cavalheiros, que é facilmente malogrado. Os programadores o contornarão porque podem fazer isso!

Interface (1/3) Uma interface lista os serviços fornecidos por um componente. A interface é um contrato com o mundo exterior, que define exatamente o que uma entidade externa pode fazer com o objeto. Uma interface é o painel de controle do objeto. A implementação define como um componente realmente fornece um serviço. A implementação define os detalhes internos do componente.

Interface (2/3) public class Log { public void info(string message) { print("info", message); } public void warning(string message) { print("warning", message); } public void error(string message) { print("error", message); } public void fatal(string message) { print("fatal", message); System.exit(0); } } private void print(string severity, String message) { System.out.println(severity + " : " + message); }

Interface (3/3) Observações: Uma interface é importante, pois ela diz o que se pode fazer com o componente. O mais interessante é que uma interface não informa como o componente fará seu trabalho. Em vez disso, a interface oculta a implementação do mundo exterior. Isso libera o componente para alterações na sua implementação a qualquer momento. As mudanças na implementação não mudam o código que usa a classe, desde que a interface permaneça inalterada. As alterações na interface necessitarão de mudanças no código que exerce essa interface.

Visibilidade Público Garante o acesso a todos os objetos. public void add(int a, int b) Protegido Garante o acesso à instancia, ou seja, para aquele objeto, e para todas as subclasses. protected void add(int a, int b) Privado Garante o acesso apenas para a instância, ou seja, para aquele objeto. private void add(int a, int b)

Ocultação da Implementação (1/4) O código fracamente acoplado é independente da implementação de outros componentes. O código fortemente acoplado é fortemente vinculado à implementação de outros componentes. Código dependente é dependente da existência de determinado tipo. O código dependente é inevitável. Entretanto, existem graus para a dependência aceitável e para a super-dependência.

Ocultação da Implementação (2/4) O encapsulamento e a ocultação da implementação não são mágica. Se for preciso alterar uma interface, será preciso atualizar o código que é dependente da interface antiga. Ocultando os detalhes e escrevendo software para uma interface, se cria software que é fracamente acoplado. O software fortemente acoplado anula o objetivo do encapsulamento: Criar objetos independentes e reutilizáveis.

Ocultação da Implementação (3/4) A ocultação da implementação tem seus inconvenientes: Existem ocasiões em que se precisa saber um pouco mais do que a interface pode informar. Ao definir uma interface, é importante não apenas fornecer uma interface, mas também documentar detalhes específicos sobre a implementação. Entretanto, assim como em qualquer outra parte da interface pública, uma vez que se declara um comportamento, não pode alterá-lo.

Ocultação da Implementação (4/4) Como se obtém uma ocultação de implementação eficaz e código fracamente acoplado? Só permita acesso as informações através de uma interface baseada em método. Tal interface garante que não se exponha informações sobre a implementação. Não forneça acesso involuntário a estruturas de dados internas, retornando ponteiros ou referências acidentalmente. Após alguém obter uma referência, a pessoa pode fazer tudo com ela. Nunca faça suposições sobre os outros tipos utilizados. A não ser que um comportamento apareça na interface ou na documentação, não conte com ele. Cuidado enquanto escrever dois tipos intimamente relacionados. Não programe acidentalmente em suposições e dependências.

Divisão de Responsabilidade (1/2) Cada objeto deve executar uma função, sua responsabilidade, e executá-la bem. A ocultação da implementação e a responsabilidade andam lado a lado. Sem ocultação da implementação, a responsabilidade pode faltar em um projeto. É de responsabilidade do objeto saber como fazer seu trabalho. Se deixar a implementação aberta para o mundo exterior, um usuário poderá começar a atuar diretamente na implementação, duplicando assim a responsabilidade.

Divisão de Responsabilidade (2/2) Quando dois objetos começam a fazer a mesma tarefa, sabe-se que não tem uma divisão de responsabilidade correta. Quando se observa a existência de lógica redundante, precisará refazer o código. Refazer o trabalho é uma parte esperada do ciclo de desenvolvimento orientado a objetos. À medida que os projetos amadurecem, encontra-se muitas oportunidades de melhorias.

Variáveis/Métodos de Classe Variáveis de classe são variáveis que pertencem à classe e não a uma instância específica. As variáveis de classe são compartilhadas entre todas as instâncias da classe. Métodos de classe são métodos que pertencem à classe e não a uma instância específica. A operação executada pelo método não é dependente do estado de qualquer instância.