orientação a objetos programação orientada - deinf/ufmaacmo/grad/lp2/poo_especial_01.pdf · –...

8
1 Programa Programação ão Orientada Orientada a a Objetos Objetos Alexandre César Muniz 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 real w 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 dados w 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 encapsulamento w 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.” [Grady Booch] 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

Upload: lekhanh

Post on 01-Dec-2018

213 views

Category:

Documents


0 download

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