programação orientada por objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/poo 1 - classes e...

82
Nelson Freire (ISEP–DEI-PPROG 2017/18) 1/82 Programação Orientada por Objetos Abstração e Encapsulamento Classes e Objetos (Livro Big Java, Late Objects – Capítulo 8) Paradigmas da Programação PPROG

Upload: hanhi

Post on 01-Feb-2018

233 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 1/82

Programação Orientada por ObjetosAbstração e Encapsulamento

Classes e Objetos

(Livro Big Java, Late Objects – Capítulo 8)

Paradigmas da ProgramaçãoPPROG

Page 2: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 2/82

▪ Programação Orientada por Objetos (POO)

▪ Linguagem Java

PPROG Sumário Geral

Page 3: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 3/82

▪ Constituído por Objetos

▪ Objetos

▪ São estruturas computacionais autónomas

▪ Trabalham de forma cooperativa

▪ Cada um tem uma responsabilidade particular no programa

▪ Cada um presta serviços a outros objetos

▪ Solicitados através de mensagens

▪ Comunicam, entre si, através de mensagens

Objeto

mensagem

Objeto

ObjetoObjeto

Objeto

Objeto

Objeto

Programa Orientado por ObjetosProgramação OO

Page 4: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 4/82

▪ É uma abstração (representação)

▪ Entidade real ou Conceito ... que o programa processa

▪ Exemplos:

▪ Entidades reais:

▪ Pessoa, Automóvel, Cliente // existência física

▪ Conceitos:

▪ Entrevista, Consulta Médica

Objeto

mensagem

Objeto

ObjetoObjeto

Objeto

Objeto

Objeto

Programação OO Noção de Objeto 1/3

Page 5: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 5/82

▪ Constituição de um Objeto

▪ Um objeto encapsula (agrega), numa única estrutura computacional, ...

... os dados (atributos essenciais de uma abstração) e as operações que manipulam essesdados, ...

... de modo a ...

... permitir que os dados sejam acessíveis do exterior, apenas através de operaçõespróprias da entidade

... esconder do exterior da entidade as,

• estruturas de dados

• implementações das operações

Operações

Dados

Objeto

Noção de Objeto 2/3Programação OO

Page 6: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 6/82

Operações

Dados

▪ Exemplo de Objeto

▪ Objeto Automovel // Representação abstrata de Automóvel (modelo simplificado)// Representa apenas atributos essenciais do Automóvel para o programa

Matrícula

Marca

Cilindrada

Consultar Matrícula

Consultar Marca

Consultar Cilindrada

Modificar Matrícula

Modificar Marca

Modificar a Cilindrada

Noção de Objeto 3/3

Atributos Essenciais

do Automóvel

Atributos Essenciais

Responsabilidades daEntidade Real ou

Conceito no Programa

Definição de uma Abstração

Abstração de Automóvel

Programação OO

Page 7: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 7/82

▪ Dados acessíveis do exterior só através de operações do próprio objeto

▪ Permite controlar as modificações dos dados de modo a garantir aintegridade dos dados

▪ i.e., dados consistentes com a entidade real ou conceitorepresentado

▪ Exemplo do Objeto Automovel

▪ Garantir cilindrada >= 0

▪ Contribui para a obtenção de programas mais robustos

▪ Sem erros de execução

Operações

Dados

Objeto

▪ Estruturas de dados e implementações das operações escondidas do exterior (funciona como umacaixa-negra)

▪ Permite alterações deste código de objeto sem implicar modificações dos programas que usamos objetos

▪ Contribui para a longevidade dos programas

Programação OO Interesse do Encapsulamento de Dados e Operações 1/2

Page 8: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 8/82

Operações

Dados

Objeto

▪ Objeto é uma estrutura autónoma

▪ Independente do contexto de utilização, ou seja, dos programas

▪ Vantagens

▪ Facilmente reutilizáveis em qualquer programa

▪ Não precisam de qualquer adaptação

▪ Importante para redução do custo de produção dos programas modernos

▪ Programas caracterizados por dimensões grandes

▪ Facilitam a deteção de erros

▪ Pode ser testado de forma isolada

▪ Importante para criação de código robusto

▪ Capacidade de atualização sem afetar o código cliente

▪ Quer das estruturas de dados

▪ Quer das implementações das operações

Programação OO Interesse do Encapsulamento de Dados e Operações 2/2

Page 9: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 9/82

▪ Variáveis // para guardar os dados

▪ Privadas // para satisfazer princípio do encapsulamento

▪ Métodos // implementam as operações

▪ Públicos // operações acessíveis do exterior

▪ Privados // métodos auxiliares para executarem cálculos intermédios

▪ Definições

▪ Estrutura conjunto de todas as variáveis do objeto

▪ Estado conjunto de todos os dados (conteúdos das variáveis) do objeto

▪ Comportamento conjunto de todos os métodos do objeto

▪ Interface ou API conjunto dos métodos acessíveis do exterior

Variáveis Privadas

Métodos Públicos

Métodos Privados

Interface ou APIComportamento

Objeto

Estrutura

Implementação de um Objeto em JavaProgramação OO

Page 10: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 10/82

▪ Programa

▪ Geralmente

▪ Processa múltiplos objetos similares // da mesma espécie

▪ Objetos Similares têm

▪ Mesma Estrutura

▪ Mesmo Comportamento

▪ Exemplo

▪ Programa de gestão de automóveis

▪ Processa múltiplos objetos Automovel

▪ Estruturas iguais

▪ Comportamentos iguais

▪ Dados (Estados) diferentes

▪ Dados específicos de cada objeto

UD-20-44

FORD

1200

Consultar Matrícula

Consultar Marca

Consultar Cilindrada

Modificar Matrícula

Modificar Marca

Modificar Cilindrada

Automóvel X

Comportamento

Estrutura

Objetos Similares 1/2Programação OO

Page 11: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 11/82

▪ Exemplo

▪ Programa de gestão de automóveis

▪ Processa múltiplos objetos Automovel▪ Estruturas iguais ▪ Comportamentos iguais▪ Dados (Estados) diferentes

Automovel X Automovel Y

Comportamento

Estrutura

Objetos Similares 2/2

UD-20-44

FORD

1200

Consultar Matrícula

Consultar Marca

Consultar Cilindrada

Modificar Matrícula

Modificar Marca

Modificar Cilindrada

50-20-UA

TOYOTA

1400

Consultar Matrícula

Consultar Marca

Consultar Cilindrada

Modificar Matrícula

Modificar Marca

Modificar Cilindrada

Programação OO

Page 12: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 12/82

▪ Para criar múltiplos objetos similares

▪ É preciso uma estrutura computacional que guarde a Estrutura (variáveis) e o Comportamento (métodos) desses objetos, para servirem de molde na sua construção

▪ Essa estrutura é chamada Classe

▪ Tipos de Estruturas Computacionais

▪ Classe

▪ Tem capacidade para criar objetos similares

▪ Chamados instâncias de classe

▪ Pode funcionar como fábrica de instâncias

▪ Objeto

▪ Instância de uma classe

▪ Criado por uma classe

Classe

Automovel

Instância de

Automovel X

Instância de

Automovel Y

Instância de

Automovel Z

Noção de Classe e InstânciaProgramação OO

Page 13: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 13/82

▪ Tipos de Membros // Todos opcionais

▪ Membros de Instância // Para criar instâncias de classes

▪ Variáveis de instância // Definem a Estrutura para guardar o Estado das instâncias (dados)

▪ Métodos de instância // Definem o Comportamento das instâncias (operações)

▪ Membros de Classe // Para guardar os dados e as operações próprias da classe

▪ Variáveis de classe // Definem a Estrutura para guardar dados da classe (dados globais)

▪ Métodos de classe // Definem o Comportamento da classe (operações)

▪ Especiais▪ Construtores // Criam instâncias, reproduzindo as variáveis e mét. de instância

Estrutura Geral de uma Classe

Classe

Molde de

Instâncias X

Classe X

Variáveis de Classe

Variáveis de Instância

Métodos de Instância

Métodos de Classe

Construtores

Instância

Especial Membros

Programação OO

Page 14: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 14/82

▪ Essencialmente

▪ Podemos considerar dois tipos de classes

▪ Classes Instanciáveis // Fábricas de instâncias (Ex: String)

▪ Classes Não-Instanciáveis // Prestadoras de serviços (Ex: classe Math)

// não disponibilizam para o exterior nenhum construtor

Categorias de Classes 1/3Programação OO

Page 15: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 15/82

▪ Classes Não-Instanciáveis

▪ Classes não geradoras de instâncias

▪ Com construtor privado

▪ Classe abstrata // abordaremos noutra aula

▪ Apenas prestam serviços

▪ Designadas Prestadoras de Serviços

▪ Estrutura Geral

▪ Exemplo

▪ Class Math

▪ Só presta serviços de matemática

▪ Exemplos

▪ Funções tradicionais: abs(), sin(), sqrt(), etc.

▪ Constantes tradicionais: PI, e

Categorias de Classes 2/3

Métodos de Classe

Variáveis de Classe

Construtor Privado

Programação OO

Page 16: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 16/82

▪ Classes Instanciáveis▪ Geradoras de instâncias

▪ Designadas Fábricas de Instâncias

▪ Estruturas possíveis▪ Sem variáveis e métodos de classe

▪ Fábrica pura

▪ Com variáveis e/ou métodos de classe▪ Variáveis de classe

▪ Acessíveis a qualquer método da classe▪ Métodos de instância e de classe

▪ Partilhadas por todas as instâncias da classe▪ Interesse

▪ Guardar dados globais das instâncias ▪ Exemplos

▪ Factor de conversão comum a todas as instâncias

• Guardar dados da classe• Ex: nº de instâncias criadas

▪ Exemplo▪ Classe String // método format() é método de classe

Variáveis de Instância

Métodos de Instância

Construtores

Molde de Instâncias

Categorias de Classes 3/3

Variáveis de Classe

Variáveis de Instância

Métodos de Classe

Métodos de Instância

Construtores

Programação OO

Page 17: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 17/82

▪ Consiste num conjunto de classes

▪ Classe Principal (Main)

▪ Tem capacidade para iniciar e controlar a execução do programa ... através do método main()

Existentes(Reutilização)

Programa OO

Classe Principal

(Main)

Próprias

Classe n+1

Classe n+2

Classe 1

Classe 2

Classe n

Estrutura Geral de um Programa FontePrograma OO

Page 18: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 18/82

▪ Exemplo

Classe Principal

Método main()

M. Instância

V. Instância

M. Instância

V. Instância

M. Instância

V. Instância

M. Classe

V. Classe

M. Instância

V. InstânciaM. Classe

V. Classe

V. Instância

M. Instância

Construtores

V. Instância

M. Instância

Construtores

M. Instância

V. Instância

Classe A

Instância de A

Classe B

Instância de A

Instância de B

Instância de B Classe C

Instância de A

Molde de Instâncias A

Molde de Instâncias B

mensagem

Legenda:V - variáveisM – métodos

Funcionamento (com Classe Principal)Programação OO

Page 19: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 19/82

▪ Um Tipo de Dados

▪ Define

▪ Um conjunto de dados

+▪ Um conjunto de operações sobre esses dados

▪ Exemplo

▪ Tipo booleano (bool)

▪ Conjunto de dados: { true, false } // únicos dados de variável tipo bool

▪ Conjunto de operações: { AND, OR, NOT } // únicas operações sobre esses dados

Operações

Dados

Classe é Tipo de Dados 1/3Programação OO

Page 20: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 20/82

▪ Classe

▪ Define

▪ Um conjunto de instâncias+

▪ Um conjunto de métodos que podem ser aplicados a essas instâncias

▪ Instâncias

▪ São dados dos programas

▪ Logo

▪ Classe considerada tipo de dados ... definido pelo utilizador

▪ Pode definir o tipo de uma variável

▪ Sintaxe: Classe nomeVariável;

▪ Exemplo: Cliente cliente; // variável cliente para guardar instâncias da classe Cliente

Operações(Métodos)

Dados(Instâncias)

Classe é Tipo de Dados 2/3Programação OO

Page 21: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 21/82

▪ Classe é Tipo Referência (não-primitivo)

▪ Variável de Tipo Referência

▪ Guarda referência para instância (objeto) // localização de memória

▪ Exemplo

▪ Classe Pessoa

▪ Pessoa p = new Pessoa("Nico"); // usado na declaração do tipo de uma variável

RAM

...

referência

...

p

...

Nico

Instância Heap

Stack

atributo N

Classe é Tipo de Dados 3/3Programação OO

Page 22: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 22/82

▪ Paradigmas da Programação

▪ Programação Orientada por Objetos (POO)

▪ Programação Java

PPROG Sumário Geral

Page 23: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 23/82

▪ Package▪ Noção▪ Exemplos JAVA▪ Declaração▪ Importação de Classes

▪ Mecanismo de Controlo de Acesso (Visibilidade)▪ Classes▪ Membros da Classe

▪ Classe▪ Declaração▪ Organização dos Membros

▪ Tipos de Dados▪ Categorias

▪ Primitivos▪ Referência

▪ Variáveis de Instância e de Classe▪ Interesse▪ Declaração

▪ Métodos de Instância e de Classe ▪ Interesse▪ Declaração▪ Sobrecarga (Overloading)▪ Invocação

▪ Mecanismo de Mensagens▪ Tipos de Mensagens

▪ Com e Sem Retorno▪ Sequência de Mensagens

▪ Referência this

▪ Métodos de Instância

▪ Categorias

▪ Consulta (Gets)

▪ Modificadores (Sets)▪ Condicionados▪ Validação de Dados

▪ Complementares▪ toString()

▪ Auxiliares

▪ Construtores▪ Declaração▪ Sobrecarregados▪ Invocação this()▪ Construção de Instâncias

▪ Classe Principal de um Programa▪ Estrutura Básica

▪ Operador Condicional (Ternário)

SumárioPOO em Java

Page 24: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 24/82

▪ Interesse

▪ Permitir organizar classes e interfaces Java ... para facilitar a pesquisa

▪ Interesse Análogo

▪ Pastas de ficheiros num sistema operativo

▪ Package

▪ Serve para guardar▪ Classes // ficheiros ▪ Interfaces Java // ficheiros▪ Packages

▪ Concretamente▪ É pasta de ficheiros do sistema operativo

▪ Exemplo

▪ java.lang

▪ Package Java ... fornecida no JDK e JRE

▪ Disponibiliza

▪ Classes essenciais à execução de programas Java

▪ Exemplos ▪ ClassLoader // Carregar classes do programa▪ System // Ex: System.in.println(...)▪ String, Math

Classes da package java.lang

Packages Noção de Package

Page 25: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 25/82

▪ Fornecidas▪ JDK▪ JRE

▪ Nível Superior

▪ Classes Organizadas

▪ Por funcionalidade

▪ Nomes

▪ Sugerem funcionalidades das suas classes

▪ Exemplos

Package Disponibiliza

java.io Classes relacionadas com operações de entrada/saída (input/output)

java.util Classes que implementam estruturas e tipos de dados de grande utilidade geral

Exemplos do JAVA 1/2Packages

Page 26: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 26/82

▪ Localização

▪ Ficheiro rt.jar

▪ Microsoft Windows

Packages fornecidas pelo JDK(pastas de ficheiros na pasta de instalação do JDK)

Exemplos do JAVA 2/2Packages

Page 27: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 27/82

▪ Exemplo: Projeto Automovel

▪ Classe Automovel

▪ Declarada pertencente à package automovel

▪ Localização▪ Indicada na janela Files▪ Pasta: Automovel\src \automovel // pasta Automovel = pasta do projeto

Declaração da package da classe

Declaração de Package 1/2Packages

Page 28: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 28/82

▪ Exemplo: Projeto Automovel

▪ Classe Automovel

▪ Package não declarada guardada na package por omissão (<default package>)

▪ Localização ▪ Indicada na janela Files▪ Pasta: Automovel\src // pasta Automovel = pasta do projeto

Package da classe não declarada

Declaração de Package 2/2Packages

Page 29: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 29/82

▪ Interesse

▪ Usar classes guardadas noutras packages // diferentes da package da classe a programar

▪ Declaração de Importação

▪ Tipos de Importação

▪ Individual

▪ Geral

Importação de Classes 1/3Packages

Page 30: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 30/82

▪ Declaração de Importação

▪ Importação Individual

Importação individual das

classes Calendare Scanner

Importação de Classes 2/3Packages

Page 31: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 31/82

▪ Declaração de Importação

▪ Importação Geral

Importação geral das classes da

package java.util

Importação de Classes 3/3Packages

Page 32: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 32/82

▪ Package▪ Noção▪ Exemplos JAVA▪ Declaração▪ Importação de Classes

▪ Mecanismo de Controlo de Acesso (Visibilidade)▪ Classes▪ Membros da Classe

▪ Classe▪ Declaração▪ Organização dos Membros

▪ Tipos de Dados▪ Categorias

▪ Primitivos▪ Referência

▪ Variáveis de Instância e de Classe▪ Interesse▪ Declaração

▪ Métodos de Instância e de Classe ▪ Interesse▪ Declaração▪ Sobrecarga (Overloading)▪ Invocação

▪ Mecanismo de Mensagens▪ Tipos de Mensagens

▪ Com e Sem Retorno▪ Sequência de Mensagens

▪ Referência this

▪ Métodos de Instância

▪ Categorias

▪ Consulta (Gets)

▪ Modificadores (Sets)▪ Condicionados▪ Validação de Dados

▪ Complementares▪ toString()

▪ Auxiliares

▪ Construtores▪ Declaração▪ Sobrecarregados▪ Invocação this()▪ Construção de Instâncias

▪ Classe Principal de um Programa▪ Estrutura Básica

▪ Operador Condicional (Ternário)

SumárioPOO em Java

Page 33: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 33/82

▪ Interesse

▪ Especificar quem tem acesso (visibilidade) às entidades definidas:

▪ Classes

▪ Membros das classes

▪ Variáveis

▪ Métodos

▪ Construtores

▪ Tipos de acesso a uma entidade

Mecanismo de Controlo de Acesso

Tipos de Acesso Declaração (Modificador de Acesso)

Privado private

Package (nenhum)

Protegido protected

Público public

1/2

+

-

Acessibilidade

Visibilidade

Page 34: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 34/82

▪ Tipos de acesso a membros de uma classe (variáveis, métodos e construtores)

▪ Tipos de acesso a uma classe

Tipos de Acesso Classe acessível a

Privado

Protegido

Package Classes dentro da sua package

Público Qualquer classe

São classes especiais (chamadas classes internas); serão abordadas mais tarde

Tipos de Acesso Membro acessível à

Privado Própria classe

Package Própria classe e classes dentro da sua package

Protegido Própria classe, classes dentro da sua package e qualquer subclasse

Público Qualquer classe

Mecanismo de Controlo de Acesso 2/2Visibilidade

Page 35: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 35/82

▪ Package▪ Noção▪ Exemplos JAVA▪ Declaração▪ Importação de Classes

▪ Mecanismo de Controlo de Acesso (Visibilidade)▪ Classes▪ Membros da Classe

▪ Classe▪ Declaração▪ Organização dos Membros

▪ Tipos de Dados▪ Categorias

▪ Primitivos▪ Referência

▪ Variáveis de Instância e de Classe▪ Interesse▪ Declaração

▪ Métodos de Instância e de Classe ▪ Interesse▪ Declaração▪ Sobrecarga (Overloading)▪ Invocação

▪ Mecanismo de Mensagens▪ Tipos de Mensagens

▪ Com e Sem Retorno▪ Sequência de Mensagens

▪ Referência this

▪ Métodos de Instância

▪ Categorias

▪ Consulta (Gets)

▪ Modificadores (Sets)▪ Condicionados▪ Validação de Dados

▪ Complementares▪ toString()

▪ Auxiliares

▪ Construtores▪ Declaração▪ Sobrecarregados▪ Invocação this()▪ Construção de Instâncias

▪ Classe Principal de um Programa▪ Estrutura Básica

▪ Operador Condicional (Ternário)

SumárioPOO em Java

Page 36: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 36/82

▪ Sintaxe

▪ [...] opcional

▪ modificador de acesso private, public, protected ou sem modificador = package

▪ final classe não pode ser herdada

considerada classe completa (não há especializações)

▪ NomeClasse letra inicial maiúscula

▪ extends aplica-se a classe que estende outra classe (herança)

▪ implements aplica-se a classe que implementa um ou mais interfaces

▪ Exemplo

Declaração de uma ClasseClasse

[modificador de acesso] [final] class NomeClasse [extends SuperClasse] [implements Interfaces] {

//membros da classe

}

public class Automovel{ // Nome da classe iniciado com letra maiúscula

...

}

Page 37: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 37/82

Organização dos Membros de uma ClasseClasse

[modificador de acesso] [final] class NomeClasse [extends SuperClasse] [implements Interfaces] {

// variáveis de instância

// constantes de classe

// variáveis de classe

// membros públicos

// construtores

// métodos de instância

// métodos de consulta (gets)

// métodos de modificação (sets)

// métodos complementares e auxiliares

// métodos de classe

// organização

// outros membros privados

// métodos de instância

// métodos de classe}

Page 38: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 38/82

▪ Package▪ Noção▪ Exemplos JAVA▪ Declaração▪ Importação de Classes

▪ Mecanismo de Controlo de Acesso (Visibilidade)▪ Classes▪ Membros da Classe

▪ Classe▪ Declaração▪ Organização dos Membros

▪ Tipos de Dados▪ Categorias

▪ Primitivos▪ Referência

▪ Variáveis de Instância e de Classe▪ Interesse▪ Declaração

▪ Métodos de Instância e de Classe ▪ Interesse▪ Declaração▪ Sobrecarga (Overloading)▪ Invocação

▪ Mecanismo de Mensagens▪ Tipos de Mensagens

▪ Com e Sem Retorno▪ Sequência de Mensagens

▪ Referência this

▪ Métodos de Instância

▪ Categorias

▪ Consulta (Gets)

▪ Modificadores (Sets)▪ Condicionados▪ Validação de Dados

▪ Complementares▪ toString()

▪ Auxiliares

▪ Construtores▪ Declaração▪ Sobrecarregados▪ Invocação this()▪ Construção de Instâncias

▪ Classe Principal de um Programa▪ Estrutura Básica

▪ Operador Condicional (Ternário)

SumárioPOO em Java

Page 39: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 39/82

▪ Categorias

▪ Primitivos

▪ Referência

▪ Tipos Primitivos

▪ Tipos Simples

▪ Variável de tipo primitivo guarda

▪ Um valor simples

▪ Referência

▪ Tipos Complexos

▪ Classes

▪ Variável de tipo referência guarda

▪ Localização de memória de

instânciaatributo 2

RAM

...

...

referência de instância

...

nomeVariável

...

atributo 1

Instância Heap

Stack

atributo 3

atributo N

ClassificaçãoTipos de Dados

Page 40: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 40/82

▪ Tipos Primitivos

▪ Inteiros: byte 1 byte (-128, 127)short 2 bytes (-32 768, 32 767)int 4 bytes (-2 147 483 648, 2 147 483 647)long 8 bytes (-9x1018, 9x1018)

▪ Reais: float 4 bytes (-/+ 3.4 x 1038)

double 8 bytes (-/+ 1.7 x 10308 )

▪ Outros: char boolean

▪ Notas

▪ Nomes

▪ Letras minúsculas

▪ Gamas de Valores

▪ Não dependem da máquina

▪ Ao contrário do C/C++

▪ Interesse

▪ Proporcionar portabilidade do código entre diferentes plataformas ou sistemas operativos

Tipos PrimitivosTipos de Dados

Page 41: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 41/82

▪ Tipos Referência // alguns exemplos

▪ Texto: String // Memória Principal

▪ Ficheiro Texto // Memória Secundária

▪ Ler: Scanner

▪ Escrever: Formatter

▪ Números

▪ Inteiro: Integer, Long

▪ Real: Double, Float

▪ Notas

▪ Nomes (de classes)

▪ Letra inicial maiúscula

Tipos ReferênciaTipos de Dados

Page 42: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 42/82

▪ Package▪ Noção▪ Exemplos JAVA▪ Declaração▪ Importação de Classes

▪ Mecanismo de Controlo de Acesso (Visibilidade)▪ Classes▪ Membros da Classe

▪ Classe▪ Declaração▪ Organização dos Membros

▪ Tipos de Dados▪ Categorias

▪ Primitivos▪ Referência

▪ Variáveis de Instância e de Classe▪ Interesse▪ Declaração

▪ Métodos de Instância e de Classe ▪ Interesse▪ Declaração▪ Sobrecarga (Overloading)▪ Invocação

▪ Mecanismo de Mensagens▪ Tipos de Mensagens

▪ Com e Sem Retorno▪ Sequência de Mensagens

▪ Referência this

▪ Métodos de Instância

▪ Categorias

▪ Consulta (Gets)

▪ Modificadores (Sets)▪ Condicionados▪ Validação de Dados

▪ Complementares▪ toString()

▪ Auxiliares

▪ Construtores▪ Declaração▪ Sobrecarregados▪ Invocação this()▪ Construção de Instâncias

▪ Classe Principal de um Programa▪ Estrutura Básica

▪ Operador Condicional (Ternário)

SumárioPOO em Java

Page 43: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 43/82

▪ Interesse

▪ Definem a Estrutura para guardar o Estado (dados) das instâncias

▪ Dados específicos de cada instância

▪ Acessíveis a

▪ Construtores // para inicialização

▪ Métodos de Instância // para consulta, modificação

▪ Inacessíveis a

▪ Métodos de Classe

Variáveis de InstânciaVariáveis

Classe

Molde de

Instâncias X

Classe X

Variáveis de Classe

Variáveis de Instância

Construtores

Métodos de Instância

Métodos de Classe

Instância

Especial Membros

Page 44: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 44/82

▪ Interesse

▪ Definem a Estrutura para guardar os dados da classe

▪ Dados globais da classe

▪ Comuns a todas as instâncias // Ex: taxa de juro das contas bancárias

▪ Partilhados por todas as instâncias da classe

▪ Acessíveis a

▪ Métodos de Classe e de Instância

▪ Construtores

Variáveis de ClasseVariáveis

Classe

Molde de

Instâncias X

Classe X

Variáveis de Classe

Variáveis de Instância

Construtores

Métodos de Instância

Métodos de Classe

Instância

Especial Membros

Page 45: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 45/82

▪ Sintaxe

▪ [...] opcional

▪ modificador de acesso public, private, protected ; sem modificador = package

▪ final só pode ser feita uma atribuição; torna variável numa constante

▪ static variável de classe; sem static => variável de instância

▪ tipo primitivo ou referência

▪ nomeVariável nomes simples (não-compostos) devem ter apenas letras minúsculas

▪ =valor_inicial para atribuir o valor inicial

▪ Exemplo

public class Cliente {

// variáveis de instância

private String nome;

private String morada;

private int numero;

private int nif;

private int nbi;

// variáveis de classe

private static int quantidadeClientes = 0;

private static int proximoCliente = 0;

}

Declaração de Variáveis de Instância e ClasseVariáveis

• Declarações fora de métodos

• Private para garantir o princípio do encapsulamento

• Variáveis de instância devem ser inicializadas pelos construtores da classe

[modificador de acesso] [final] [static] tipo nomeVariável [=valor_inicial];

Page 46: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 46/82

▪ Package▪ Noção▪ Exemplos JAVA▪ Declaração▪ Importação de Classes

▪ Mecanismo de Controlo de Acesso (Visibilidade)▪ Classes▪ Membros da Classe

▪ Classe▪ Declaração▪ Organização dos Membros

▪ Tipos de Dados▪ Categorias

▪ Primitivos▪ Referência

▪ Variáveis de Instância e de Classe▪ Interesse▪ Declaração

▪ Métodos de Instância e de Classe ▪ Interesse▪ Declaração▪ Sobrecarga (Overloading)▪ Invocação

▪ Mecanismo de Mensagens▪ Tipos de Mensagens

▪ Com e Sem Retorno▪ Sequência de Mensagens

▪ Referência this

▪ Métodos de Instância

▪ Categorias

▪ Consulta (Gets)

▪ Modificadores (Sets)▪ Condicionados▪ Validação de Dados

▪ Complementares▪ toString()

▪ Auxiliares

▪ Construtores▪ Declaração▪ Sobrecarregados▪ Invocação this()▪ Construção de Instâncias

▪ Classe Principal de um Programa▪ Estrutura Básica

▪ Operador Condicional (Ternário)

SumárioPOO em Java

Page 47: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 47/82

▪ Interesse

▪ Definem o Comportamento das instâncias // operações sobre os dados

▪ Têm acesso a

▪ Variáveis de Instância e Classe

▪ Métodos de Instância e de Classe

▪ Construtores

Métodos de InstânciaMétodos

Classe

Molde de

Instâncias X

Classe X

Variáveis de Classe

Variáveis de Instância

Construtores

Métodos de Instância

Métodos de Classe

Instância

Especial Membros

Page 48: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 48/82

▪ Interesse

▪ Definem o Comportamento da classe // operações sobre dados globais da classe

▪ Têm acesso a

▪ Variáveis de Classe

▪ Construtores

Métodos de ClasseMétodos

Classe

Molde de

Instâncias X

Classe X

Variáveis de Classe

Variáveis de Instância

Construtores

Métodos de Instância

Métodos de Classe

Instância

Especial Membros

Page 49: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 49/82

▪ Sintaxe

▪ [...] opcional

▪ modificador de acesso public, private, protected ; sem modificador = package

▪ final método não pode ser reescrito nas subclasses

(será abordado noutra aula sobre Herança)

▪ static método de classe

sem static o método é de instância

▪ tipo de retorno primitivo ou referência

▪ nomeMétodo letra inicial deve ser minúscula

▪ Sintaxe da lista de parâmetros tipo1 nome1, tipo2 nome2, ..., tipoN nomeN

Cabeçalhodo método

[modificador de acesso] [final] [static] [tipo de retorno] nomeMétodo (lista de parâmetros) {

//corpo do método

}

Declaração de Métodos de Instância e de Classe 1/3Métodos

Page 50: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 50/82

▪ Exemplos

public class Cliente {

...

// métodos de instância

public String getNome(){

return nome;

}

public void setMorada(String moradaCliente){

morada = moradaCliente;

}

// método de classe

public static int getQuantidadeClientes(){

return quantidadeClientes;

}

...

}

Declaração de Métodos de Instância e de Classe 2/3Métodos

Page 51: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 51/82

▪ Variáveis Locais

▪ Declaração

▪ Em qualquer local do corpo do método

▪ Mais perto da sua utilização

▪ Exemplo

Declaração de Métodos de Instância e de Classe 3/3

public class Matematica {

...

// método de classe

public static long fatorial(int n){

long r=1; // variável local r

for(int i=n; i>0; i--){ // variável local i

r = r * i;

}

return r;

}

...

}

Métodos

Page 52: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 52/82

▪ Assinatura de um método

▪ nome(lista de tipos de parâmetros)

▪ Exemplo

public static int m(int x, String s){ ... }

▪ Assinatura

m(int,String)

▪ Mecanismo de sobrecarga de métodos (de instância e de classe)

▪ Permite a uma classe declarar múltiplos métodos com o mesmo nome, desde que as suasassinaturas sejam diferentes:

▪ Em número de parâmetros

ou

▪ Nos tipos de parâmetros homólogos

▪ Exemplos de assinaturas de métodos m sobrecarregados

m()

m(int)

m(float, String)

m(String, int)

m(int, String, int)

Métodos Sobrecarga de Métodos (Overloading)

Page 53: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 53/82

▪ Tipos de Invocação de Métodos

▪ Mesma classe

▪ Classes diferentes

▪ Invocação de Métodos da Mesma Classe

▪ Acesso direto

▪ Invocação

▪ nome_método(lista_argumentos)

▪ Exemplo

▪ Método m2 da classe Exemplo

▪ Invoca o método m1 da mesma classe

▪ m1(10)

▪ Invocação de Métodos de Outras Classes

▪ Método de Instância

▪ Aplica-se a instância da respetiva classe

▪ Exemplo

▪ Método m2 da classe Exemplo

▪ Invoca o método m3 da classe Outra

▪ o.m3(10) // o é instância de Outra

▪ Método de Classe

▪ Aplica-se à respetiva classe

▪ Exemplo

▪ Outra.m4()

Métodos Invocação de Métodos (Envio de Mensagens)

public class Exemplo {

...

// métodos de instância

public String m1(int x){ ... }

public void m2(String s){

String s = m1(10);

int i = m4();

int r = Outra.m(2);

Outra o = new Outra();

int y = o.m3(10);

int z = Outra.m4();

...

}

// método de classe

public static int m4(){ ... }

}

public class Outra {

...

// método de instância

public int m3(int n){ ... }

// método de classe

public static int m4(){ ... }

...

}

Page 54: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 54/82

▪ Package▪ Noção▪ Exemplos JAVA▪ Declaração▪ Importação de Classes

▪ Mecanismo de Controlo de Acesso (Visibilidade)▪ Classes▪ Membros da Classe

▪ Classe▪ Declaração▪ Organização dos Membros

▪ Tipos de Dados▪ Categorias

▪ Primitivos▪ Referência

▪ Variáveis de Instância e de Classe▪ Interesse▪ Declaração

▪ Métodos de Instância e de Classe ▪ Interesse▪ Declaração▪ Sobrecarga (Overloading)▪ Invocação

▪ Mecanismo de Mensagens▪ Tipos de Mensagens

▪ Com e Sem Retorno▪ Sequência de Mensagens

▪ Referência this

▪ Métodos de Instância

▪ Categorias

▪ Consulta (Gets)

▪ Modificadores (Sets)▪ Condicionados▪ Validação de Dados

▪ Complementares▪ toString()

▪ Auxiliares

▪ Construtores▪ Declaração▪ Sobrecarregados▪ Invocação this()▪ Construção de Instâncias

▪ Classe Principal de um Programa▪ Estrutura Básica

▪ Operador Condicional (Ternário)

SumárioPOO em Java

Page 55: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 55/82

▪ Objetivo

▪ Suportar comunicação de mensagens entre objetos durante execução de programa, pedindo ainvocação de métodos (prestação de serviços)

▪ Funcionamento do mecanismo

▪ Objeto-emissor envia uma mensagem a um objeto-recetor

▪ O objeto-recetor, após a recepção da mensagem:

▪ caso seja possível: executa o método associado à mensagem

▪ caso não seja possível: gerado um erro de execução

▪ Método executado

▪ Método cuja assinatura é igual à mensagem(arg1, arg2, ..., argN)

▪ Exemplo:▪ Mensagem: obj1.getNome();

▪ Método executado: getNome() do objeto obj1

Método Método Público

mensagem(parâmetros)

objeto-emissor objeto-recetor

objeto-recetor.mensagem(parâmetros)

Operador ponto (.)

Mecanismo de Mensagens 1/3Mensagens

Page 56: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 56/82

▪ Sintaxe da Mensagem

▪ Sem retorno // resultado da execução do método correspondente

▪ objeto-recetor.mensagem();

▪ Envia mensagem sem argumentos ao objeto-recetor

▪ Exemplo: obj1.incrementaContador();

▪ objeto-recetor.mensagem(arg1, arg2, ..., argN);

▪ Envia mensagem com argumentos ao objeto-recetor

▪ Exemplo: obj2.setNome("Sofia");

▪ Com retorno

▪ resultado = objeto-recetor.mensagem();

▪ Envia mensagem sem argumentos ao objeto-recetor

▪ Exemplo: String nome = obj3.getNome();

▪ resultado = objeto-recetor.mensagem(arg1, arg2, ..., argN);

▪ Envia mensagem com argumentos ao objeto-recetor

▪ Exemplo: boolean res = obj3.equalsIgnoreCase("silva");

Mecanismo de Mensagens 2/3Mensagens

Page 57: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 57/82

▪ Java Permite Sequência de Mensagens

▪ Exemplo

▪ obj.m1().m2()

▪ Objeto-recetor é interpretado no sentido

▪ ( obj.m1() ) . m2()

▪ A mensagem m2() é enviada ao objeto resultante do envio da mensagem m1() a obj

Mecanismo de Mensagens 3/3Mensagens

Page 58: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 58/82

▪ Package▪ Noção▪ Exemplos JAVA▪ Declaração▪ Importação de Classes

▪ Mecanismo de Controlo de Acesso (Visibilidade)▪ Classes▪ Membros da Classe

▪ Classe▪ Declaração▪ Organização dos Membros

▪ Tipos de Dados▪ Categorias

▪ Primitivos▪ Referência

▪ Variáveis de Instância e de Classe▪ Interesse▪ Declaração

▪ Métodos de Instância e de Classe ▪ Interesse▪ Declaração▪ Sobrecarga (Overloading)▪ Invocação

▪ Mecanismo de Mensagens▪ Tipos de Mensagens

▪ Com e Sem Retorno▪ Sequência de Mensagens

▪ Referência this

▪ Métodos de Instância

▪ Categorias

▪ Consulta (Gets)

▪ Modificadores (Sets)▪ Condicionados▪ Validação de Dados

▪ Complementares▪ toString()

▪ Auxiliares

▪ Construtores▪ Declaração▪ Sobrecarregados▪ Invocação this()▪ Construção de Instâncias

▪ Classe Principal de um Programa▪ Estrutura Básica

▪ Operador Condicional (Ternário)

SumárioPOO em Java

Page 59: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 59/82

▪ Referência especial da instância atual

▪ Referência da instância recetora da mensagem a

solicitar execução de serviço

▪ Exemplo - this.nome (ver figura)

▪ this é referência da instância que executa

o método setNome(...)

▪ Apenas pode ser usada dentro de

▪ Métodos de instância // pertencem a instâncias

▪ Construtores // têm acesso a membros

de instância

▪ Permite indicar só membros de instância

▪ Variáveis de instância

▪ Sintaxe: this.nomeVariável

▪ Exemplo: this.nome

▪ Métodos de instância

▪ Sintaxe: this.nomeMétodo(lista de argumentos)

▪ Exemplo: this.getNome()

▪ Não pode ser usada em métodos de classe

Referência this 1/2this

public class Cliente {

// variável de instância

private String nome;

...

// método de instância

public void setNome(String nome){

this.nome = nome;

}

public String getNome(){

return nome;

}

...

}

Referência this (Exemplo)

Page 60: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 60/82

▪ Usada principalmente para

▪ Resolver conflitos entre identificadores de variáveis de instância e de parâmetros de entrada (ou variáveis locais) com o mesmo nome

▪ Exemplo

▪ Notas:▪ Há distinção clara entre a variável de instância e o parâmetro de entrada

▪ Após a receção da mensagem obj.setMorada("Rua de ..."), a instância objexecuta o método setMorada(...), considerando this = obj

▪ this.morada lê-se: "morada desta instância"

▪ Distinguir a invocação de métodos de instância próprios e externos à classe (herdados)

Referência this 2/2this

public class Cliente {

// variável de instância

private String morada;

...

// método de instância

public void setMorada(String morada){ this.morada =

morada;}

...

}

Conflito criado pelanecessidade de tornaro código mais legível

public class Exemplo {

private void m1(){ ... }

public void m2(){ this.m1(); }

}

Considerada boa prática de programação

Page 61: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 61/82

▪ Package▪ Noção▪ Exemplos JAVA▪ Declaração▪ Importação de Classes

▪ Mecanismo de Controlo de Acesso (Visibilidade)▪ Classes▪ Membros da Classe

▪ Classe▪ Declaração▪ Organização dos Membros

▪ Tipos de Dados▪ Categorias

▪ Primitivos▪ Referência

▪ Variáveis de Instância e de Classe▪ Interesse▪ Declaração

▪ Métodos de Instância e de Classe ▪ Interesse▪ Declaração▪ Sobrecarga (Overloading)▪ Invocação

▪ Mecanismo de Mensagens▪ Tipos de Mensagens

▪ Com e Sem Retorno▪ Sequência de Mensagens

▪ Referência this

▪ Métodos de Instância

▪ Categorias

▪ Consulta (Gets)

▪ Modificadores (Sets)▪ Condicionados▪ Validação de Dados

▪ Complementares▪ toString()

▪ Auxiliares

▪ Construtores▪ Declaração▪ Sobrecarregados▪ Invocação this()▪ Construção de Instâncias

▪ Classe Principal de um Programa▪ Estrutura Básica

▪ Operador Condicional (Ternário)

SumárioPOO em Java

Page 62: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 62/82

▪ Características Genéricas

▪ Responsáveis pelo comportamento das instâncias após pedidos de serviço (receção de mensagens)

▪ Públicos

▪ Ao contrário das variáveis de instância

▪ Privadas

▪ Garantir o princípio do encapsulamento dos dados

▪ Acesso exterior aos dados das instâncias feito através de métodos próprios da instância

▪ Fazem parte da API de uma classe

Características dos Métodos de InstânciaMétodos de Instância

Page 63: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 63/82

▪ Categorias

▪ Consulta ou Interrogadores (Gets)

▪ Permitirem a consulta exterior dos dados das instâncias

▪ Públicos

▪ Modificadores (Sets)

▪ Permitem a modificação exterior dos dados das instâncias

▪ Públicos

▪ Complementares

▪ Completam as responsabilidades dos métodos anteriores

▪ Exemplo

▪ toString()

▪ Públicos

▪ Auxiliares

▪ Auxiliam a implementação de outros métodos mais complexos, realizando cálculos intermédios, etc.

▪ Privados

Responsáveis pelo acessoexterior aos dados dasinstâncias de classes.

Para garantir o princípiodo encapsulamento

Categorias de Métodos de Instância

Operações

Dados

Métodos de Instância

Page 64: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 64/82

▪ Métodos de Consulta ou Interrogadores (Gets)

▪ Nomes começados por get

▪ Retornam os dados das instâncias

▪ Sintaxe: public tipo_retornado getNomeVariávelDeInstância() { ...}

▪ Exemplo: public String getNome() { return nome; }

▪ Opcionais

• Nem sempre se deve definir um método get para cada variável de instância

• Não faz sentido definir um método get para um dado útil apenas para a instância

Gets

Dados

Métodos de Consulta Métodos de Instância

Page 65: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 65/82

▪ Métodos Modificadores (Sets)

▪ Nomes começados por set

▪ Controlam modificações exteriores dos dados das instâncias

▪ Sintaxe: public void setNomeVariávelDeInstância( tipo parâmetro ){ ... }

▪ Exemplo : public void setMorada(String morada){ ... }

▪ Opcionais

▪ Nem sempre, se deve definir um set para cada variável de instância

▪ Por exemplo

▪ Não faz sentido definir um método set para um dado constante

Métodos Modificadores 1/3

Sets

Dados

Métodos de Instância

Page 66: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 66/82

▪ Métodos Modificadores (Set) Condicionados

▪ Métodos cujas Execuções

▪ Sujeitas a determinadas condições

▪ Podem não ter sucesso

▪ Exemplo

▪ Método setIdade da classe Pessoa

▪ Idade ≥ 0

Métodos Modificadores 2/3Métodos de

Instância

Page 67: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 67/82

▪ Métodos Modificadores (Set) Condicionados

▪ Em caso de insucesso▪ Objeto-emissor da mensagem deve ser notificado

▪ Solução mais desejável▪ Lançar uma exceção // abordaremos noutra aula

▪ Soluções indesejáveis

▪ Usar instruções de input/output para enviar mensagem para ecrã▪ Viola princípio da separação das camadas //engenharia da programação

▪ Computacional (Negócio)▪ Interface do Utilizador

▪ Misturando as duas camadas ▪ Modificações feitas numa podem obrigar a alterações da outra

▪ Retorno de valor booleano▪ Viola definição de método set // tipo de retorno é void

Interface do Utilizador

Computacional (Negócio)

Dados

Arquitectura Básica

de um Programa

Métodos de Modificadores 3/3Métodos de

Instância

Page 68: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 68/82

▪ Método de instância complementar

▪ Típico de uma classe

▪ Funcionalidade

▪ Retorna uma representação textual legível da instância sobre a qual é aplicado

▪ Baseado na representação textual de cada uma das variáveis de instância

▪ Interesse

▪ Apresentar a instância no ecrã

▪ Gravar a instância num ficheiro de texto

▪ Exemplo

▪ Concatenação de Strings▪ Operador de concatenação (+) é ineficiente // melhor: String.format() e StringBuilder

Métodos toString() 1/2Métodos de

Instância

public class Pessoa{

// variáveis de instância

private String nome;

private int idade;

...

// método de instância

public String toString(){

return String.format("%s tem %d anos.", nome, idade);

}

}

Page 69: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 69/82

▪ Concatenação de strings Java

▪ Exemplo nome + " tem " + idade + "anos. "

▪ É pouco eficiente ▪ Porque as strings são imutáveis (constantes)

▪ Cada concatenação de 2 strings▪ Cria uma 3ª string

▪ Strings grandes ▪ Requerem um grande trabalho de alocação de memória

▪ Pode provocar grandes perdas de desempenho

▪ Classe StringBuilder▪ Torna a concatenação de strings mais eficiente▪ Exemplo

▪ Método format da classe String▪ Usa esta classe StringBuilder

RAM

nome

tem

nome tem

Concatenação nome + " tem "

Métodos toString() 2/2Métodos de

Instância

public String toString() {

StringBuilder s = new StringBuilder(nome);

s.append(" tem ");

s.append(idade);

s.append(" anos.");

return s.toString();

}

Page 70: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 70/82

▪ Package▪ Noção▪ Exemplos JAVA▪ Declaração▪ Importação de Classes

▪ Mecanismo de Controlo de Acesso (Visibilidade)▪ Classes▪ Membros da Classe

▪ Classe▪ Declaração▪ Organização dos Membros

▪ Tipos de Dados▪ Categorias

▪ Primitivos▪ Referência

▪ Variáveis de Instância e de Classe▪ Interesse▪ Declaração

▪ Métodos de Instância e de Classe ▪ Interesse▪ Declaração▪ Sobrecarga (Overloading)▪ Invocação

▪ Mecanismo de Mensagens▪ Tipos de Mensagens

▪ Com e Sem Retorno▪ Sequência de Mensagens

▪ Referência this

▪ Métodos de Instância

▪ Categorias

▪ Consulta (Gets)

▪ Modificadores (Sets)▪ Condicionados▪ Validação de Dados

▪ Complementares▪ toString()

▪ Auxiliares

▪ Construtores▪ Declaração▪ Sobrecarregados▪ Invocação this()▪ Construção de Instâncias

▪ Classe Principal de um Programa▪ Estrutura Básica

▪ Operador Condicional (Ternário)

SumárioPOO em Java

Page 71: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 71/82

▪ Noção

▪ Membro especial de uma classe

▪ Permite

▪ Criar instâncias de classes // reproduzindo as variáveis e métodos de instância

▪ Inicializar o estado das instâncias // variáveis de instância

Noção de Construtor 1/8Construtores

Classe

Molde de

Instâncias X

Classe X

Variáveis de Classe

Variáveis de Instância

Construtores

Métodos de Instância

Métodos de Classe

Instância

Especial Membros

Page 72: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 72/82

▪ Sintaxe

▪ Modificador de acesso opcional

public (em geral)

▪ Permite criar instâncias de classes

▪ Garante classe instanciável

▪ Faz parte da API de uma classe instanciável

private

▪ Não permite criar instâncias

▪ Ex: classe Math

▪ nomeClasse obrigatorio = nome da respetiva classe

▪ parâmetros para receberem dados iniciais das instâncias criadas

▪ Nota

▪ Não faz sentido declarar o tipo de retorno de um construtor

▪ Construtor só serve para

▪ Criar instâncias

▪ Inicializar os seus estados

▪ Nunca devolverá um resultado da sua execução

Declaração de Construtor 2/8Construtores

[modificador de acesso] nomeClasse(lista de parâmetros){ ... }

Page 73: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 73/82

▪ Exemplo

Declaração de Construtor 3/8Construtores

public class Pessoa{

// variáveis de instância

private String nome;

private int idade;

// construtor

public Pessoa(String nome,int idade){

this.nome = nome;

this.idade = idade;

}

...

}

Page 74: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 74/82

▪ Estado tem de ser consistente

▪ Com a entidade real/conceito representado pelas instâncias

▪ Exemplo das instâncias da classe Pessoa

▪ idade >= 0

▪ Construtor quando não recebe um dado inicial?

▪ Inicializa dado com valor por omissão

▪ Variáveis de instância do tipo Referência (classe)

▪ Inicializadas com instâncias do tipo da variável

▪ Em geral, estas instâncias são criadas pelos respetivos construtores sem parâmetros

▪ Senão, são inicializadas a null Estado inconsistente

▪ Variáveis de instâncias do tipo String

▪ Inicializadas com uma string ; p.ex: "sem nome"

▪ Senão, são inicializadas a null

Inicialização do Estado das Instâncias 4/8Construtores

public class Exemplo {

private Data data; // variável de instância do tipo Data (referência)

// construtores

public Exemplo(){ data = new Data(); } // atribuída data válida;

// validada pela classe data

}

Page 75: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 75/82

▪ Mecanismo de Sobrecarga (Overloading)

▪ Permite declarar múltiplos construtores com assinaturas diferentes

▪ Listas de parâmetros diferentes

▪ Em número de parâmetros

▪ E/ou tipo de parâmetros

▪ Exemplo

Construtores Sobrecarregados 5/8Construtores

public class Pessoa{

// variáveis de instância

private String nome;

private int idade;

// construtores

public Pessoa(String nome,int idade){ // construtor completothis.nome = nome;

this.idade = idade;

}

public Pessoa(String nome){

this(nome,0); // idade inicializada por omissão}

public Pessoa(Pessoa p){ // construtor de cópia (ou clone) this(p.getNome(),p.getIdade());

}

...

}

Page 76: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 76/82

▪ Interesse

▪ Inicializar os estados das instâncias de diferentes maneiras

▪ Tipos de Construtores

▪ Sem parâmetros // não permite ao código cliente da classe inicializar o Estado da instância

// criado automaticamente, se a classe não declarar qualquer construtor

▪ Com parâmetros // Estado das instâncias é inicializado com os parâmetros de entrada,

// definidos pelo código cliente

Construtores Sobrecarregados 6/8Construtores

Page 77: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 77/82

▪ Sintaxe

▪ Exemplos

Construção de Instâncias 7/8Construtores

public class TestePessoa {

public static void main(String[] args){

Pessoa p1 = new Pessoa(); // criada instância de Pessoa// Estado da instância inicializado com dados por omissão// referência da instância guardada em p1 do tipo Pessoa

Pessoa p2 = new Pessoa( "Nico", 24 ); // cria instância de Pessoa// Estado inicializado com dados passados por parâmetro// referência dessa instância é guardada em p

Pessoa p3; // declara uma variável p3 do tipo Pessoa// variável inicializada a null

p3 = new Pessoa( "Rita", 12 ); // criada instância de Pessoa// Estado inicializado com dados passados por parâmetro // referência dessa instância é guardada em p3

}

}

new nomeConstrutor(lista_parâmetros) // operador new retorna referência de instância

Page 78: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 78/82

▪ Sintaxe

▪ Invoca▪ Um construtor dentro de outro construtor, da mesma classe▪ Com o mesmo número de parâmetros e o mesmo tipo de parâmetros homólogos

▪ Apenas pode ser usada em construtores▪ Tem de ser a 1ª instrução, obrigatoriamente

▪ Interesse▪ Simplifica a programação de construtores

▪ Exemplo

Invocação this() 8/8Construtores

this(lista de parâmetros);

public class Pessoa{

// variáveis de instância

private String nome;

private int idade;

// construtores

public Pessoa(String nome,int idade){

this.nome = nome;

this.idade = idade;

}

public Pessoa(String nome){ this(nome,0); }

public Pessoa(Pessoa p){ this(p.getNome(),p.getIdade()); }

}

Page 79: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 79/82

▪ Package▪ Noção▪ Exemplos JAVA▪ Declaração▪ Importação de Classes

▪ Mecanismo de Controlo de Acesso (Visibilidade)▪ Classes▪ Membros da Classe

▪ Classe▪ Declaração▪ Organização dos Membros

▪ Tipos de Dados▪ Categorias

▪ Primitivos▪ Referência

▪ Variáveis de Instância e de Classe▪ Interesse▪ Declaração

▪ Métodos de Instância e de Classe ▪ Interesse▪ Declaração▪ Sobrecarga (Overloading)▪ Invocação

▪ Mecanismo de Mensagens▪ Tipos de Mensagens

▪ Com e Sem Retorno▪ Sequência de Mensagens

▪ Referência this

▪ Métodos de Instância

▪ Categorias

▪ Consulta (Gets)

▪ Modificadores (Sets)▪ Condicionados▪ Validação de Dados

▪ Complementares▪ toString()

▪ Auxiliares

▪ Construtores▪ Declaração▪ Sobrecarregados▪ Invocação this()▪ Construção de Instâncias

▪ Classe Principal de um Programa▪ Estrutura Básica

▪ Operador Condicional (Ternário)

SumárioPOO em Java

Page 80: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 80/82

▪ Classe que contém o método principal do programa

▪ Declaração

▪ Primeiro método do programa executado pelo interpretador de JAVA

▪ Pode ser usada para testar novas classes (exemplo: Pessoa):

parâmetro args é obrigatório

Classe Principal de um Programa (Main Class)Programa

public class TestePessoa {

public static void main(String[] args){Pessoa p; // declara uma variável p do tipo Pessoa

p = new Pessoa( "Rita", 12 ); // cria uma instância de Pessoa e inicializa o seu Estado// referência dessa instância é guardada em p

System.out.println( "Nome" + p.getNome() ); // apresenta o nome da instância p// envia mensagem getNome() à instância p

System.out.println( "Idade:" + p.getIdade() ); // apresenta a idade da instância p// envia mensagem getIdade() à instância p

p.setIdade( 11 ); // altera a idade da instância p para 11

System.out.println( p.toString() ); // apresenta a instância p

System.out.println( p ); // equivalente à instrução anterior}

}

public static void main(String[] args){

// corpo do método

}

Page 81: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 81/82

▪ Package▪ Noção▪ Exemplos JAVA▪ Declaração▪ Importação de Classes

▪ Mecanismo de Controlo de Acesso (Visibilidade)▪ Classes▪ Membros da Classe

▪ Classe▪ Declaração▪ Organização dos Membros

▪ Tipos de Dados▪ Categorias

▪ Primitivos▪ Referência

▪ Variáveis de Instância e de Classe▪ Interesse▪ Declaração

▪ Métodos de Instância e de Classe ▪ Interesse▪ Declaração▪ Sobrecarga (Overloading)▪ Invocação

▪ Mecanismo de Mensagens▪ Tipos de Mensagens

▪ Com e Sem Retorno▪ Sequência de Mensagens

▪ Referência this

▪ Métodos de Instância

▪ Categorias

▪ Consulta (Gets)

▪ Modificadores (Sets)▪ Condicionados▪ Validação de Dados

▪ Complementares▪ toString()

▪ Auxiliares

▪ Construtores▪ Declaração▪ Sobrecarregados▪ Invocação this()▪ Construção de Instâncias

▪ Classe Principal de um Programa▪ Estrutura Básica

▪ Operador Condicional (Ternário)

SumárioPOO em Java

Page 82: Programação Orientada por Objetos - dei.isep.ipp.ptdei.isep.ipp.pt/~nfreire/POO 1 - Classes e Objectos.pdf · Programação Orientada por Objetos (POO) Linguagem Java ... Objeto

Nelson Freire (ISEP–DEI-PPROG 2017/18) 82/82

▪ Sintaxe

▪ Semântica

Se condição = verdadeiro então retorna valor_1

senão retorna valor_2

▪ Exemplo

Operador Condicional (Ternário)Operador

condição ? valor_1 : valor_2 // tem 3 operandos

public class Circulo {

// variável de instância

private float raio;

...

// método de instância

public void setRaio( float raio ){

this.raio = raio > 0 ? raio : 1 ;

}...

}