18
Classes e objetos Tudo no mundo real pode ser representado por meio do conceito de " objeto": uma planta, uma mesa, uma pessoa, um sentimento, uma nota. Da mesma forma, Java também permite modelar e abstrair cada entidade da aplicação em um objeto; Cada objeto existente pode ser enquadrado em uma categoria mais genérica, que representa um conjunto de elementos com características comuns. Assim, um tubarão é um objeto que pertence à família dos peixes, pois ele apresenta algumas características comuns a todos os peixes. Um aluno é um objeto de um grupo mais genérico conhecido como "pessoas", já que um aluno apresenta alguns elementos comuns a todas as pessoas; Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli 1

Classes e objetos 1 - hdam.pro.br · IFSC/POO + JAVA - prof. Herval Daminelli 1. Classes e objetos ... "ocultação de dados" ou encapsulamento ou abstração. Modificadores de visibilidade

Embed Size (px)

Citation preview

Classes e objetos

• Tudo no mundo real pode ser representado por meio do

conceito de "objeto": uma planta, uma mesa, uma pessoa,

um sentimento, uma nota. Da mesma forma, Java também

permite modelar e abstrair cada entidade da aplicação em

um objeto;

• Cada objeto existente pode ser enquadrado em uma

categoria mais genérica, que representa um conjunto de

elementos com características comuns. Assim, um tubarão é

um objeto que pertence à família dos peixes, pois ele

apresenta algumas características comuns a todos os peixes.

Um aluno é um objeto de um grupo mais genérico conhecido

como "pessoas", já que um aluno apresenta alguns elementos

comuns a todas as pessoas;

• Esta categoria mais geral, à qual cada objeto pertence,

denominamos de classe;IFSC/POO + JAVA - prof. Herval Daminelli

1

Classes e objetos

• Todo objeto, em Java, é uma instância da classe;

• Todo objeto cria uma relação do tipo "é-um(a)" com sua classe.

Assim, um tubarão é um peixe e um aluno é uma pessoa;

• Objetos herdam métodos (funções) e atributos (características) de

suas classes;

• Uma classe pode utilizar métodos e atributos de objetos que

pertencem a outra classe (talvez, até mesmo, criada por outra

pessoa). Esta classe é chamada de classe cliente ou classe usuária;

• Diferentemente do mundo real, em Java, é possível termos uma

classe sem a necessidade de criarmos um objeto (instanciarmos) a

partir desta classe;

• Um objeto pode enviar mensagens (interface) para outros objetos

requisitando alguma tarefa ou serviço;

• Em Java, uma classe é apenas uma descrição abstrata daquilo que um

objeto poderá vir a ser.IFSC/POO + JAVA - prof. Herval Daminelli

2

Mais sobre objetos

• Em Java, por definição, objeto é tudo aquilo que representa

uma entidade do mundo real e pode ser identificado

distintamente de qualquer outra coisa. Todo objeto tem

identidade, estado e comportamento específicos;

• O estado do objeto (também conhecido como propriedades ou

atributos) é representado por variáveis (campos de dados) que

armazenam valores;

• O comportamento de um objeto (também denominado de

ações ou métodos) são as tarefas ou serviços ou atividades ou

ações que um objeto pode desempenhar;

• Objetos do mesmo tipo compõem uma classe;

• Todo objeto é criado por um método especial de uma classe

chamado de construtor.

IFSC/POO + JAVA - prof. Herval Daminelli

3

Criando uma classe

Ao criar uma classe, você precisa definir...

O nome da classe

Os métodos e atributos da classe (dentro do corpo)

Um especificador de acesso opcional – public, private, etc...

A palavra-chave class

O corpo da classe, entre um par de chaves { }

IFSC/POO + JAVA - prof. Herval Daminelli

4

• Então, poderíamos criar um classe "Empregado" com um dado

chamado cargo e dois métodos: "definirCargo() e obterCargo() – veja

gráfico no próximo eslaide;

• Atributos em uma classe também são chamados de campos de dados;

• Em Java, uma classe que contém o método main() e, portanto, pode

ser executada, é chamada de classe principal. Toda classe é um tipo

de dado composto;

• Classes são também chamadas de tipos abstratos de dados ou tipos

de dados definidos pelo programador.

Métodos get e set

• Em Java, para cada campo de dado que você cria em uma

classe, há a necessidade de se ter dois métodos públicos que

permitirão que outras classes acessem este campo de dado (ler

– get) ou modifiquem este dado (escrever – set). Não é

obrigatório, mas convenciona-se iniciar o nome do método que

define o dado com a palavra set e o nome que obtém o dado

com a palavra get;

• Assim, na nossa classe de exemplo "Empregado", poderíamos

renomear os dois métodos para getCargo() e setCargo();

• A classe criada na página anterior pode ser compilada

normalmente em Java, mas a aplicação não poderá ser

executada. Isto porque esta aplicação não contém nenhum

método main(). Classes criadas desta forma têm o objetivo de

serem usadas como um tipo de dado para instanciarem objetos

dentro de outras classes.IFSC/POO + JAVA - prof. Herval Daminelli

5

Criando classes – exemplo 1

IFSC/POO + JAVA - prof. Herval Daminelli

6

• modificador public – classes públicas podem ser usadas por QUALQUER

objeto na aplicação. São a base para outras classes mais específicas

(herança);

• modificador private – impede que qualquer classe externa modifique o

campo de dados cargo. Este atributo só pode ser modificado pelos

métodos da própria classe Empregado. Esta técnica é conhecida como

"ocultação de dados" ou encapsulamento ou abstração.

Modificadores de visibilidade

Tipo Aplica-se a Significado

public• Classes• Métodos• Campos de dados

Podem ser acessados de qualquer outra classe, na mesma aplicação ou em ou em outra aplicação

default

• Classes• Métodos• Campos de dados

Podem ser acessados por qualquer classe que pertença ao mesmo pacote. Java atribui automaticamente o modificador default quando você não especifica nenhum

private

• Classes (somente para classes internas)• Métodos• Campos de dados

Elementos privado só podem ser acessados de dentro de sua própria classe

IFSC/POO + JAVA - prof. Herval Daminelli

7

Os modificadores de visibilidade determinam como uma classe

ou seus membros podem ser acessados de fora da classe.

Criando classes – exemplo 2

IFSC/POO + JAVA - prof. Herval Daminelli

8

• O código na próxima página cria duas classes. A classe TesteCirculo,

pública, que contém o método main – e é a classe principal, de onde

parte toda a execução da aplicação; e a classe Circulo, dentro da

classe principal, criada para instanciar métodos e atributos de um

objeto circulo.

• Quando você cria duas ou mais classes em um mesmo arquivo,

somente UMA delas pode ser pública. Uma classe pode ser privada

somente se ela estiver DENTRO de outra classe. Recomenda-se,

sempre, termos uma única classe por arquivo.

• Campos de dados e métodos de uma classe definidos como private só

podem ser acessados de dentro da própria classe;

• A classe pública principal deve ter o MESMO NOME do arquivo salvo;

• Então, em nosso exemplo a seguir, o arquivo deverá ser salvo como

TesteCirculo.java e cada classe também gerará arquivos individuais

.class;

• Em nosso exemplo, teremos, após a compilação, TesteCirculo.class e

Circulo.class.

Criando classes – exemplo 2

IFSC/POO + JAVA - prof. Herval Daminelli

9

Compilador JavaCompilado por

Gera

Gera

TesteCirculo.class

Circulo.class

• Nota: quando uma classe (a classe cliente) faz uso de outra

classe (externa) que não está na mesma pasta, deve-se

utilizar a diretiva import no topo do arquivo que contém a

classe cliente e que utiliza a classe externa.

Declarando objetos e usando seus métodos

• Suponha a criação da classe TV representada pelo modelo UML

abaixo e implementação de objetos utilizando seus atributos e

métodos.

IFSC/POO + JAVA - prof. Herval Daminelli

10

TV

canal: intvolume: intligada: boolean

+TV(): void+desligar(): void+ligar(): void+mudarCanal(novoCanal: int): void+mudarVolume(novoVolume: int): void

+aumentarCanal(): void+diminuirCanal(): void+aumentarVolume(): void+diminuirVolume(): void

• O sinal +

representa

métodos de acesso

público;

• O método TV() é

especial e é o

método usado para

instanciar (criar) o

objeto, chamado

de construtor.

Uma classe pode

ter mais de um

construtor.

Modelando uma classe com UML

Implementação da classe principal TesteTV 11

IFSC/POO + JAVA - prof. Herval Daminelli

Implementação da classe TV 12

IFSC/POO + JAVA - prof. Herval Daminelli

continuação

Declarando objetos e usando seus métodos

• Criar um objeto em Java é um processo de duas etapas:

• Primeiro, você declara um tipo para o objeto, seguido de um nome;

• Depois, você reserva memória do computador para criar o objeto.

Empregado algumEmpregado = new Empregado();

TV tv1 = new TV();

• Note que o nome do método construtor é sempre igual ao nome da classe onde está definido o construtor;

• Depois que um objeto é instanciado, ele pode acessar outros métodos e atributos da classe através da notação do ponto.

algumEmpregado.pedirRecisao(); ou algumEmpregado.salario = 5000,00.

IFSC/POO + JAVA - prof. Herval Daminelli

13

Tipo de referência Método construtorVariável de referência (objeto)

variável de instância

Construtores

• Quando você cria uma classe, tal como Peixe, e instancia um

objeto com uma declaração igual a Peixe tubarao = new Peixe();, você, de fato, está chamando o construtor da

classe Peixe. Se você não criou o construtor diretamente em

sua classe, o compilador Java fornece um construtor-padrão,

sem nenhum argumento, criado automaticamente sempre que

você constrói uma classe, e inicializa campos de dados do

objeto com os valores em destaque:

IFSC/POO + JAVA - prof. Herval Daminelli

14

• numéricos = 0;

• caracteres = Unicode '\u0000';

• booleanos = false;

• outros objetos = null.

• Qualquer construtor deve ter o MESMO nome de sua classe;

• Um construtor NUNCA deve ter um tipo de retorno. Uma classe pode ter mais de um construtor;

• Geralmente, construtores são métodos públicos.

Construtores

• Um método construtor de uma classe pode realizar qualquer tarefa, mas, geralmente, ele inicializa os campos de dados do objeto (seus atributos);

• Lembre-se de que se você não definir um método construtor, o próprio Java fornece um construtor-padrão quando você cria o objeto. Esse você criar seu construtor na classe, mas sem nenhum argumento, ele também é chamado de construtor-padrão;

• Construtores são métodos que nunca tem um tipo de valor de retorno, nem mesmo void;

• Construtores são invocados por meio do operador new;

• Construtores podem ser sobrecarregados, isto, podemos ter construtores com o mesmo nome, mas com diferentes assinaturas;

• Quando, em uma classe, você define um construtor que não recebe nenhum argumento (isto é, Circulo();), ele é denominado de construtor sem argumentos;

IFSC/POO + JAVA - prof. Herval Daminelli

15

Exemplo de classe com construtores

IFSC/POO + JAVA - prof. Herval Daminelli

16

Campo de dado da classe

Dois métodos construtores da classe

Dois métodos simples da classe

Exemplo de um diagrama de classes em UML

Circulo Significado das convenções

-raio: doublecor: string

1. Todo campo de dado ou método

sem sinal tem visibilidade padrão;

2. Todo campo ou método com o sinal

de + é público;

3. Todo campo ou método com o sinal

de – é privado;

4. Todo campo ou método

sublinhado é estático (só pode

ser usado por uma classe e não por

um objeto);

5. Todo campo de dado deve

especificar seu tipo;

6. Todo método deve especificar seu

tipo de retorno e o nome e o tipo de

cada parâmetro dentro dos

parênteses.

+Circle()+CalcularPerimetro(): double-AtribuirRaio(novoRaio: double): voidTrocarCor(novaCor: string): void

IFSC/POO + JAVA - prof. Herval Daminelli

17

Pacotes e importação

• Classes podem ser agrupadas em pacotes. Um pacote ou

biblioteca de classes é apenas uma pasta criada para

proporcionar um agrupamento conveniente e organizado de

classes. Podemos criar nossos próprios pacotes e armazenarmos

neles as classes que construímos em nossa aplicação;

• A própria linguagem Java já traz muitas classes pré-escritas e

prontas para serem utilizadas, organizadas em pacotes. Um

pacote que contém uma coleção muito útil de classes e que já

é automaticamente carregado pela JVM é java.lang;

• Outros pacotes precisam ser importados para podermos usar

suas classes – por exemplo, javax.swing (caixas de diálogo);

• Para importar uma classe, você pode usar as declarações:

• A primeira importa TODAS as classes dentro da biblioteca. A

segunda importa somente a classe mencionada.IFSC/POO + JAVA - prof. Herval Daminelli

18

import nome_do_pacote.*; ou import nome_do_pacote.nome_da_classe;