PADRONIZAÇÃO 10. INTERFACES PADRONIZAÇÃO CONTRATOS

Documentos relacionados
Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

Definição. Em POO, a abstração é o processo de esconder os detalhes de implementação de uma aplicação.

Programação I Curso: Sistemas de Informação. Prof.: José Ronaldo Leles Júnior .:

Classes e Objetos. Sintaxe de classe em Java

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

p Pacotes, a grosso modo, são apenas pastas ou diretórios do sistema operacional onde ficam armazenados os arquivos fonte de Java.

Classe Abstrata e Interface

p Imagine que um Sistema de Controle do Banco pode ser acessado, além dos Gerentes, pelos Diretores do Banco

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

Visibilidade 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

Daniel Wildt

Pacotes Organizando suas classes e bibliotecas

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Java - Herança e Interface

Programação Orientada a Objetos

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

Conceitos de Programação Orientada a Objetos

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

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

Orientação a Objetos Interfaces

Programação Avançada C++ Slide 12 Nielsen Castelo Damasceno

UNIFEI Disciplina Professor

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

Introdução à Programação. Encapsulamento e Herança

Linguagem de Programação II Implementação

Linguagem de Programação Introdução a Orientação a Objetos

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

Linguagem de Programação III

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

O problema da herança múltipla e o uso de Interfaces. Herança múltipla. Interfaces. Definindo Interfaces 30/11/2016

Interfaces e Classes Abstratas

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

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

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

Herança Tiago Eugenio de Melo

Televisao tamanho tela emitirsom. conectarperifericos

POO e C++: Herança e Polimorfismo

Instituto de Informática Estrutura de Dados II

Orientação a objetos. Objetos ou Instâncias I

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

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

Curso de PHP. - Início 22 de agosto - Término 20 de outubro. -Aulas: segunda e quinta-feira -Horário:18h às 20h. -Carga horária do curso: 40h

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

[Desenvolvimento OO com Java] Organizando suas classes

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

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

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

Classes, Métodos e Propriedades

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

Computação II Orientação a Objetos

Encapsulamento e Modularização

Encapsulamento e Modularização

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

C com introdução a OO

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

Programação Orientada a Objetos II

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

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

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

p Imagine que um Sistema de Controle do Banco pode ser acessado, além dos Gerentes, pelos Diretores do Banco

Linguagens de Domínio Específico

Namespaces, Classes e Métodos.

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Linguagens de Programação Aula 12

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

PROGRAMAÇÃO ORIENTADA A OBJETOS II -TÉCNICAS DE OO. Prof. Angelo Augusto Frozza, M.Sc.

Java - Sobrecarga/Composição

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

Classes e Objetos INTRODUÇÃO À ORIENTAÇÃO A OBJETOS COM JAVA - MÓDULO II. Classes. Objetos. Um modelo para a criação de objetos

Computação II Orientação a Objetos

Linguagem de Programação IV Introdução

AULA 02. OBJETIVO: Características da Linguagem Orientada a Objetos.

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

Computação II Orientação a Objetos

Programação Orientada a Objetos JAVA - NETBEANS

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Programação Estruturada Orientada a Objetos

Programação Orientada a Objetos em Java

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

Técnicas de Orientação à Objeto. Introdução Modelagem de objeto, classe, atributos e métodos em linguagem Java Desenvolvimento Guiado por Testes

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Modificadores de Acesso JAVA

POO29004 Programação Orientada a Objetos

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks

9 Classes Abstractas e Interfaces

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

Programação Orientada a Objetos

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

Programação com Objectos 1º Teste Tipo 1º Semestre (90 minutos)

Programação Orientada a Objetos

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Lição 11 Herança, polimorfismo e interfaces

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

Tipos Abstratos de Dados

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS - ORIENTAÇÃO A OBJETOS

Transcrição:

PADRONIZAÇÃO 10. INTERFACES No dia-a-dia lidamos com diversos aparelhos elétricos Diversas empresas fabricam aparelhos elétricos com plugues E se cada empresa decidisse por conta própria o formato dos plugues ou tomadas que fabricará? Essa falta de padrão pode gerar problemas de segurança aos usuários, aumentando o risco de uma pessoa levar um choque elétrico O governo estabelece padrões para plugues e tomadas, facilitando a utilização para os consumidores e aumentando a segurança Padronizar pode trazer grandes benefícios, inclusive no desenvolvimento de aplicações PROGRAMAÇÃO ORIENTADA A OBJETOS 240 PROGRAMAÇÃO ORIENTADA A OBJETOS 241 PADRONIZAÇÃO CONTRATOS Podemos dizer que os objetos se encaixam através dos métodos públicos assim como um plugue se encaixa em uma tomada através dos pinos Para os objetos de uma aplicação conversarem entre si mais facilmente é importante padronizar o conjunto de métodos oferecidos por eles Assim como os plugues encaixam nas tomadas mais facilmente graças aos padrões definidos pelo governo Um padrão é definido através de especificações ou contratos Em orientação a objetos, um contrato é chamado de interface Um interface é composta basicamente por métodos abstratos PROGRAMAÇÃO ORIENTADA A OBJETOS 242 PROGRAMAÇÃO ORIENTADA A OBJETOS 243

EXEMPLO EXEMPLO No sistema do banco, podemos definir uma interface (contrato) para padronizar as assinaturas dos métodos oferecidos pelos objetos que representam as contas do banco Os métodos de uma interface não possuem corpo (implementação) pois serão implementados nas classes vinculadas a essa interface Todos os métodos de uma interface devem ser públicos e abstratos Os modificadores public e abstract são opcionais As classes que definem os diversos tipos de contas que existem no banco devem implementar (assinar) a interface Conta As classes concretas que implementam uma interface são obrigadas a possuir uma implementação para cada método declarado na interface Caso contrário, ocorrerá um erro de compilação A primeira vantagem de utilizar uma interface é a padronização das assinaturas dos métodos oferecidos por um determinado conjunto de classes A segunda vantagem é garantir que determinadas classes implementem certos métodos PROGRAMAÇÃO ORIENTADA A OBJETOS 244 PROGRAMAÇÃO ORIENTADA A OBJETOS 245 EXEMPLO EXEMPLO PROGRAMAÇÃO ORIENTADA A OBJETOS 246 PROGRAMAÇÃO ORIENTADA A OBJETOS 247

POLIMORFISMO POLIMORFISMO Se uma classe implementa uma interface, podemos aplicar a ideia do polimorfismo assim como quando aplicamos herança Dessa forma, outra vantagem da utilização de interfaces é o ganho do polimorfismo Como exemplo, suponha que a classe ContaCorrente implemente a interface Conta Podemos guardar a referência de um objeto do tipo ContaCorrente em uma variável do tipo Conta Além disso, podemos passar uma variável do tipo ContaCorrente para um método que o parâmetro seja do tipo Conta O método geraextrato() pode ser utilizado para objetos criados a partir de classes que implementam direta ou indiretamente a interface Conta PROGRAMAÇÃO ORIENTADA A OBJETOS 248 PROGRAMAÇÃO ORIENTADA A OBJETOS 249 INTERFACE E HERANÇA INTERFACE E HERANÇA Priorizar a utilização de interfaces permite que alterações pontuais em determinados trechos do código fonte sejam feitas mais facilmente pois diminui as ocorrências de efeitos colaterais indesejados no resto da aplicação Por outro lado, priorizar a utilização de herança pode diminuir a quantidade de código escrito no início do desenvolvimento de um projeto Em Java, como não há herança múltipla, muitas vezes, interfaces são apresentadas como uma alternativa para obter um grau maior de polimorfismo Por exemplo, suponha duas árvores de herança independentes PROGRAMAÇÃO ORIENTADA A OBJETOS 250 PROGRAMAÇÃO ORIENTADA A OBJETOS 251

INTERFACE E HERANÇA INTERFACE E HERANÇA Suponha que os gerentes e as empresas possam acessar o sistema do banco com um nome de usuário e uma senha Seria interessante utilizar um único método para implementar a autenticação desses dois tipos de objetos Mas, qual seria o tipo de parâmetro deste método? Lembrando que ele deve aceitar gerentes e empresas De acordo com as árvores de herança, não há polimorfismo entre objetos da classe Gerente e da classe Empresa Para obter polimorfismo entre os objetos dessas duas classes somente com herança, deveríamos colocá-las na mesma árvore de herança Mas, isso não faz sentido pois uma empresa não é um funcionário e o gerente não é cliente Neste caso, a solução é utilizar interfaces para obter o polimorfismo desejado PROGRAMAÇÃO ORIENTADA A OBJETOS 252 PROGRAMAÇÃO ORIENTADA A OBJETOS 253 INTERFACE E HERANÇA INTERFACE E HERANÇA Agora, conseguimos definir o que o método autentica() deve receber como parâmetro para trabalhar tanto com gerentes quanto com empresas Ele deve receber um parâmetro do tipo Usuario PROGRAMAÇÃO ORIENTADA A OBJETOS 254 PROGRAMAÇÃO ORIENTADA A OBJETOS 255

1. Crie um pacote no seu projeto do NetBeans chamado interfaces. 2. Defina uma interface para padronizar as assinaturas dos métodos das contas do banco. 3. Agora, crie algumas classes para modelar tipos diferentes de conta. PROGRAMAÇÃO ORIENTADA A OBJETOS 256 PROGRAMAÇÃO ORIENTADA A OBJETOS 257 4. Faça um teste simples com as classes criadas anteriormente. PROGRAMAÇÃO ORIENTADA A OBJETOS 258 PROGRAMAÇÃO ORIENTADA A OBJETOS 259

5. Altere a assinatura do método deposita() na classe ContaCorrente. Você pode acrescentar um r no nome do método. O que acontece? Obs: desfaça a alteração depois deste exercício. 6. Crie um gerador de extratos com um método que pode trabalhar com todos os tipos de conta. 7. Teste o gerador de extrato. PROGRAMAÇÃO ORIENTADA A OBJETOS 260 PROGRAMAÇÃO ORIENTADA A OBJETOS 261 ORGANIZAÇÃO 11. PACOTES O código fonte de uma aplicação é definido em diversos arquivos Conforme a quantidade de arquivos cresce surge a necessidade de algum tipo de organização para poder encontrar os arquivos rapidamente quando for necessário modificá-los A ideia para organizar logicamente os arquivos de uma aplicação é bem simples e as pessoas que utilizam computadores já devem estar familiarizadas Os arquivos são separados em pastas ou diretórios PROGRAMAÇÃO ORIENTADA A OBJETOS 262 PROGRAMAÇÃO ORIENTADA A OBJETOS 263

O COMANDO PACKAGE O COMANDO PACKAGE Na terminologia do Java, as pastas nas quais são organizadas as classes e interfaces de uma aplicação são chamadas de pacotes Para colocar uma classe ou interface em um pacote, devemos realizar dois passos 1. Utilizar o comando package na primeira linha de código do arquivo contendo a classe ou interface que desejamos colocar em um determinado pacote 2. O segundo passo é salvar o arquivo dentro de uma pasta com mesmo nome do pacote definido no código fonte A declaração das classes ou interfaces deve aparecer após a declaração de pacote caso contrário ocorrerá um erro de compilação PROGRAMAÇÃO ORIENTADA A OBJETOS 264 PROGRAMAÇÃO ORIENTADA A OBJETOS 265 SUB-PACOTES Podemos criar pacotes dentro de pacotes. No código fonte os subpacotes são definidos com o operador. UNQUALIFIED NAME VS FULLY QUALIFIED NAME Com a utilização de pacotes é apropriado definir o que é o nome simples (unqualified name) e o nome completo (fully qualified name) de uma classe ou interface O nome simples é o identificador declarado a direita do comando class ou interface O nome completo é formado pela concatenação dos nomes dos pacotes com o nome simples através do caractere. Além disso, devemos criar uma estrutura de pastas que reflita os subpacotes definidos no código fonte O nome simples da classe acima é: Conta e o nome completo é: sistema.contas.conta PROGRAMAÇÃO ORIENTADA A OBJETOS 266 PROGRAMAÇÃO ORIENTADA A OBJETOS 267

CLASSES OU INTERFACES PÚBLICAS CLASSES OU INTERFACES PÚBLICAS Duas classes de um mesmo pacote podem conversar entre si através do nome simples de cada uma delas O mesmo vale para interfaces Por outro lado, duas classes de pacotes diferentes precisam utilizar o nome completo de cada uma delas para conversar entre si Além disso, a classe que será utilizada por classes de outro pacote deve ser pública O mesmo vale para interfaces PROGRAMAÇÃO ORIENTADA A OBJETOS 268 PROGRAMAÇÃO ORIENTADA A OBJETOS 269 IMPORT CONFLITO DE NOMES Para facilitar a escrita do código fonte, podemos utilizar o comando import para não ter que repetir o nome completo de uma classe ou interface várias vezes dentro do mesmo arquivo Podemos importar várias classes ou interfaces no mesmo arquivo As declarações de importe devem aparecer após a declaração de pacote e antes das declarações de classes ou interfaces Certos cuidados com os nomes dos pacotes são necessários para evitar conflito entre as classes e interfaces das nossas aplicações e as classes e interfaces das bibliotecas Com o intuito de resolver esse problema, há uma convenção para a definição dos nomes dos pacotes Essa convenção é análoga aos domínios da internet PROGRAMAÇÃO ORIENTADA A OBJETOS 270 PROGRAMAÇÃO ORIENTADA A OBJETOS 271

NÍVEIS DE VISIBILIDADE NÍVEIS DE VISIBILIDADE No Java, há quatro níveis de visibilidade: privado, padrão, protegido e público Podemos definir os níveis privado, protegido e público com os modificadores private, protected e public respectivamente Quando nenhum modificador de visibilidade é utilizado o nível padrão é aplicado Privado O nível privado é aplicado com o modificador private O que pode ser privado? Atributos, construtores, métodos, classes aninhadas ou interfaces aninhadas Os itens em nível de visibilidade privado só podem ser acessados por código escrito na mesma classe na qual eles foram declarados PROGRAMAÇÃO ORIENTADA A OBJETOS 272 PROGRAMAÇÃO ORIENTADA A OBJETOS 273 NÍVEIS DE VISIBILIDADE NÍVEIS DE VISIBILIDADE Padrão O nível padrão é aplicado quando nenhum modificador é utilizado O que pode ser padrão? Atributos, construtores, métodos, classes de todos os tipos e interfaces de todos os tipos Os itens em nível de visibilidade padrão só podem ser acessados por código escrito em classes do mesmo pacote da classe na qual eles foram declarados Protegido O nível protegido é aplicado com o modificador protected O que pode ser protegido? Atributos, construtores, métodos, classes aninhadas ou interfaces aninhadas Os itens em nível de visibilidade protegido só podem ser acessados por código escrito em classes do mesmo pacote da classe na qual eles foram declarados ou por classes derivadas PROGRAMAÇÃO ORIENTADA A OBJETOS 274 PROGRAMAÇÃO ORIENTADA A OBJETOS 275

NÍVEIS DE VISIBILIDADE Público O nível público é aplicado quando o modificador public é utilizado O que pode ser público? Atributos, construtores, métodos, classes de todos os tipos e interfaces de todos os tipos Os itens em nível de visibilidade público podem ser acessados de qualquer lugar do código da aplicação 1. Crie um pacote no seu projeto do NetBeans chamado pacotes 2. Crie um sub-pacote chamado sistema e outro chamado testes 3. Faça uma classe para modelar as contas no sub-pacote pacotes.sistema PROGRAMAÇÃO ORIENTADA A OBJETOS 276 PROGRAMAÇÃO ORIENTADA A OBJETOS 277 4. Faça uma classe de teste no pacote pacotes.testes 5. Retire o modificador public da classe Conta e observe o erro de compilação na classe Teste Importante: faça a classe Conta ser pública novamente PROGRAMAÇÃO ORIENTADA A OBJETOS 278