Download - Orientação a objetos Programação Orientada - DEINF/UFMAacmo/grad/lp2/POO_Especial_01.pdf · – Encapsulamento é o processo de ocultar todos ... – O nome do arquivo Java deve

Transcript
Page 1: Orientação a objetos Programação Orientada - DEINF/UFMAacmo/grad/lp2/POO_Especial_01.pdf · – Encapsulamento é o processo de ocultar todos ... – O nome do arquivo Java deve

1

ProgramaProgramaççãoão OrientadaOrientadaa a ObjetosObjetos

Alexandre CésarMuniz de Oliveira

2

Orientação a objetos

w Linguagens orientadas a procedimentos e linguagens orientadas a objetos– Unidade de programação: funções e classes– Objetos: dados + funções

w Apresenta um nível de abstração mais próximo ao mundo realw Encapsula dados (atributos) e métodos

(comportamentos) em objetos

3

Orientação a objetos

w Em uma L00 pura– Uma variável é um objeto– Um programa é um objeto– Um procedimento é um objeto– Um objeto é composto de objetos

w Exemplo do telefone celular– É composto de outros objetos, entre eles bateria e

botões– A bateria é um objeto também, que possui pelo menos

um outro objeto: carga, que representa seu estado– Os botões implementam comportamentos

4

Orientação a objetos

w Abstração é mais facilmente aplicada através de classes de objetos– Definição de novos tipos de dados de forma mais

completa – Inclui um repertório de funções que representam

operações realizáveis com os objetos daquele tipo

w Classes contêm dados bem como um conjunto de métodos que manipulam os dadosw Uma instância de um tipo básico é chamada

variável; w Uma instância de um tipo definido pelo usuário

(como uma classe) é chamada objeto

5

Abstração e encapsulamentow Abstração:

– Denota as características essenciais de um objeto que o distinguem de outros tipos de objetos e assim provê uma fronteira conceitual firmemente definida, de acordo com a perspectiva do observador.” [GradyBooch]

– Foca o lado externo de um objeto. – Destaca o comportamento (ou serviços) nativo do

objeto. – O comportamento essencial dos objetos é

caracterizado por meio das operações que ele é capaz de realizar sobre ele mesmo ou sobre outros objetos

– A abstração de um objeto deve preceder à sua implementação.

6

Abstração e encapsulamento

Page 2: Orientação a objetos Programação Orientada - DEINF/UFMAacmo/grad/lp2/POO_Especial_01.pdf · – Encapsulamento é o processo de ocultar todos ... – O nome do arquivo Java deve

2

7

Abstração e encapsulamento

w Encapsulamento:– “Nenhuma parte de um sistema complexo

deve depender dos detalhes internos de outras partes” [Booch]

– Encapsulamento é o processo de ocultar todos os detalhes de um objeto que não contribuem para suas características essenciais.

– Abstração e encapsulamento são conceitos complementares:

• Abstração foca o lado externo do objeto. • O Encapsulamento impede os clientes de verem

seu lado interno (onde o comportamento da abstração é implementado). 8

Classes e Objetos

w Classes:– Definem lógica estática– Relacionamentos entre classes são definidos

na programação e não mudam durante a execução

– Classes não existem no contexto da execução– Uma classe representa vários objetos que

ocupam espaço na memória, mas ela não existe nesse domínio

– A classe tem papel na criação dos objetos, mas não existe quando os objetos trocam mensagens entre si.

9

Classes e Objetos

wObjetos:– São conceitos que têm estado (atributos),

comportamento (métodos) e identidade (referência)

– Relacionamentos entre objetos são dinâmicos e podem mudar.

– O funcionamento da aplicação reflete a lógica de relacionamento entre os objetos, e não entre as classes.

10

Classes e Objetos

Vaca

Mú Mimosa Pintada

11

Classes e Objetos

Atributos:CorPesoSexoetc...

Métodos:MugirPastarAndaretc...

12

Classes e Objetos

Page 3: Orientação a objetos Programação Orientada - DEINF/UFMAacmo/grad/lp2/POO_Especial_01.pdf · – Encapsulamento é o processo de ocultar todos ... – O nome do arquivo Java deve

3

13

Classes e Objetos

14

Classes e Objetos

w Uma classe pode ser usada para– conter a rotina de execução principal de uma aplicação

iniciada pelo sistema operacional (método main)– conter funções globais (métodos estáticos)– conter constantes e variáveis globais (campos de

dados estáticos)– especificar e criar objetos (contém construtores,

métodos e atributos de dados)

w Visibilidade (escopo) da classe:• public – indica que o conteúdo p úblico da classe pode ser

usado livremente por outras classes do pacote ou de outro pacote

• private – só é permitido seu uso para aninhar classes, fazendo com que uma classe seja interna a outra

15

Classes e Objetos

w Um único arquivo pode conter diversas classes, porém apenas uma delas pode ser definida como pública– O nome do arquivo Java deve ter o mesmo nome da

classe pública

w Obs: A Sun recomenda que nomes de classes sejam iniciados com uma letra maiúscula, para diferenciar nomes de objetos

16

Métodos e atributos

w [mod] tipo nome ([tipo arg]) [throws exc]{– [mod]: zero ou mais modificadores separados

por espaços– Tipo: tipo de dados retornado pelo método– Identificador: nome do método– [arg]: zero ou mais argumentos, com tipo

declarado, separados por vírgula– [throws exceção]: declaração de exceções

17

Métodos e atributos

w Controlando acesso aos atributos e métodos– O acesso a atributos e métodos é controlado

através de modificadores public, private e protected (posteriormente)

– Membros public permitem o acesso ao membro a partir de outras classes

– Membros private não permite à classes clientes ter acesso ao membro; somente a própria classe que contêm este membro pode acessá- lo.

– Restringir o acesso a membros através da cláusula private é chamado encapsulamento

18

Métodos e atributos

Page 4: Orientação a objetos Programação Orientada - DEINF/UFMAacmo/grad/lp2/POO_Especial_01.pdf · – Encapsulamento é o processo de ocultar todos ... – O nome do arquivo Java deve

4

19

Métodos e atributos

w Cada objeto tem valores específicos para seus membrosw O qualificador static em um atributo

permite que o valor dele seja único para todas as instâncias de uma classew Funciona como se o membro fosse global

para todos os objetos criados

20

Métodos e atributos

21

Métodos e atributosw Atributos/métodos estáticos são também

chamados de atributos/métodos de classe; class Pendulum {

... static float gravAccel = 9.80; ...

class Pendulum { ... static final float EARTH_G = 9.80; ...

Pendulum.gravAccel = 8.76;

22

Métodos e atributos

wMétodos estáticos, da mesma forma, podem ser acessados diretamente através da classe;w Um método estático pode ser acessado

somente por outro membro estático da classewMétodos estáticos não podem acessar

diretamente variáveis de instância ou métodos de instância– A qual instância está se referindo?

23

Métodos e atributosw Exemplos

– Math.sqrt(), – System.out.println ()

w class Bird { ... static String [] getBirdTypes( ) { String [] types; // Create list...

return types; } ...

}String [] names = Bird.getBirdTypes( );

24

Métodos e atributos

Page 5: Orientação a objetos Programação Orientada - DEINF/UFMAacmo/grad/lp2/POO_Especial_01.pdf · – Encapsulamento é o processo de ocultar todos ... – O nome do arquivo Java deve

5

25

Exercícios

26

Exercícios

2. Crie, e compile as seguintes classes– Uma Pessoa tem um nome (String)– Uma Porta tem um estado aberto, que pode ser true

ou false, e pode ser aberta ou fechada– Uma Construcao tem uma finalidade– Uma Casa é uma Construcao com finalidade

residencial que tem um proprietário Pessoa, um número e um conjunto (vetor) de Portas

3. Crie as seguintes classes– Um Ponto tem coordenadas x e y inteiras– Um Circulo tem um Ponto e um raio inteiro– Um Pixel é um tipo de Ponto que possui uma cor

27

Referência this e super

w This:– Pode ser necessário que um objeto precise em

algum momento referenciar a si mesmo– Fica implícito caso seja acessado um método

ou um atributo da própria classe– Porém, para evitar o acesso errôneo a um

parâmetro, por exemplo, e facilitar a leitura do código, é indicado o uso do identificador this

– Não pode ser utilizado em métodos static– Utilizado também para invocar um

determinado construtor de classe

28

Referência this e super

w Superé usada para referenciar:– os valores originais de variáveis ou – as implementações originais de métodos sobrepostos

29

Sobrecarga de métodos

w Sobrecarga é um tipo de polimorfismow Um operador pode assumir mais de uma

forma, dependendo do número e tipos de seus operandos (assinatura)

30

Sobrecarga de métodos

public class Sobrecarga {public static void main (String args[]) {

System.out.println (“área de um quadrado... ” + area(3));System.out.println (“área de um retângulo... ” + area(3,2));System.out.println (“área de um cubo... ” + area(3,2,5));

}public static double area (int x) {

return x * x;}public static double area (int x, int y) {

return x * y;}public static double area (int x, int y, int z) {

return x * y * z;}}

Page 6: Orientação a objetos Programação Orientada - DEINF/UFMAacmo/grad/lp2/POO_Especial_01.pdf · – Encapsulamento é o processo de ocultar todos ... – O nome do arquivo Java deve

6

31

Construtores

w Quando um objeto é instanciado, seus atributos podem ser inicializados por um método construtor;w Construtor é um método com o mesmo nome da

classe e sem tipo de retorno definidow São chamados apenas uma vez: na instanciação

do objetow Nem sempre aparecem explícitos em uma classe: podem

ser omitidos (o sistema oferece uma implementação default)– Objeto obj = new Objeto(); – Objeto obj = new Objeto (35, “Nome”);

32

Construtores

w Pode haver vários em uma mesma classe, recebendo diferentes parâmetrosw São identificados pelo número e tipo

de argumentos (assinatura)wConstrutor padrão não recebe

argumentoswConstrutor cópia recebe os atributos

de outro objeto da mesma classe

33

Construtores

w Atributos e inicialização estáticos:

34

Construtores

35

Construtores

36

Construtores

w super() e this():– Todo construtor chama algum construtor de

sua superclasse– Por default, chama-se o construtor sem

argumentos, através do comando superO(implícito)

– Pode-se chamar outro construtor, identificando-o através dos seus argumentos (número e tipo) na instrução superO

– superO, se presente, deve sempre ser a primeira instrução do construtor (substitui o superO implícito)

Page 7: Orientação a objetos Programação Orientada - DEINF/UFMAacmo/grad/lp2/POO_Especial_01.pdf · – Encapsulamento é o processo de ocultar todos ... – O nome do arquivo Java deve

7

37

Construtores

– Se a classe tiver um construtor explícito, com argumentos, subclasses precisam chamá-lo diretamente

– Não existe mais construtor default na classe

38

Exercícios4. Escreva uma classe Ponto

– contém x e y que podem ser definidos em construtor– métodos getX() e getY() que retornam x e y– métodos setX(int) e setY(int) que mudam x e y

5. Escreva uma classe Circulo, que contenha– raio inteiro e origem Ponto– construtor que define origem e raio – método que retorna a área– método que retorna a circunferência– use java.Iang.Math.PI (Math.PI)

6. Crie um segundo construtor para Circulo que aceite um raio do tipo int e coordenadas x e y

39

Exercícios

40

Exercícios

41

Destrutoresw Construtores alocam recursos durante a inicialização dos

objetosw Para efetuar a liberação destes recursos podem ser

utilizados destrutores de classew Destrutores são invocados quando um objeto é removido

da memória– Problema: em Java não é possível saber quando isto ocorrerá, por

conta da coleta de lixo (garbage collection)w Um destrutor deve ser implementado através do método:

– void finalize ();w A coleta de lixo pode ser “forçada” através da chamada

ao método System.gc()

42

Pacotes

wDefine grupos de classesw Permite a existência de classes com o

mesmo nome, pois seus pacotes as diferenciamw Pacotes determinam uma estrutura de

diretórios nos quais as classes devem estar inseridas

Page 8: Orientação a objetos Programação Orientada - DEINF/UFMAacmo/grad/lp2/POO_Especial_01.pdf · – Encapsulamento é o processo de ocultar todos ... – O nome do arquivo Java deve

8

43

Pacotes

w Criando um pacote:– Definir pelo menos uma classe como pública

(senão ela somente poderá ser usada por classes pertencentes ao mesmo pacote)

– Adicionar o comando package <nome-do-pacote> no início da classe

– Compilar a classe, inserindo-a em sua correta estrutura de diretórios. Exemplo:

• Em um pacote chamado teste, os bytecodes devem estar dentro de um diretório chamado teste

• Programas que utilizam a classe devem importar seu pacote. Ex: import teste.*; 44

Pacotes

45

Exercícios7. Desenvolva três classes:

– Uma classe pneu que tenha características como a marca, tipo de pneu, etc.

– Uma classe motor que tenha características de velocidade em RPM, fabricante, status do motor (ligado / desligado) e funcionalidades para ligar e desligar o motor, verificar velocidade do motor, etc.

– Uma classe carro que tenha 1 motor e quatro pneus e que sejam definidas características para o carro (como o ano, modelo, fabricante, etc.) e funcionalidades (acelerar, mudar a marcha, freiar, etc.)

8. Escrever um TAD (Tipo Abstrato de Dados) de uma pilha genérica