Вы находитесь на странице: 1из 31

Classes e Objetos

Mrio Antonio Meireles Teixeira


mario@deinf.ufma.br

O que Orientao a Objetos


Paradigma moderno da engenharia de software Influi na anlise, projeto (design) e programao A anlise orientada a objetos Determina o que o sistema deve fazer: Quais os atores envolvidos? Quais as atividades a serem realizadas? Decompe o sistema em objetos: Quais so? Que tarefas cada objeto ter que fazer? O design orientado a objetos Define como o sistema ser implementado Modela os relacionamentos entre os objetos e atores (podese usar uma linguagem especfica como UML) Utiliza e reutiliza abstraes como classes, objetos, mtodos, frameworks, APIs, padres de projeto
2

Anlise OO (1) e Anlise Procedural (2)

O que um objeto?
Um objeto uma entidade (fsica, conceitual ou do domnio de algum problema) que tem: identidade estado e comportamento Caractersticas de Smalltalk, resumidas por Allan Kay: Tudo (em um programa OO) so objetos Um programa um conjunto de objetos enviando mensagens uns aos outros O espao (na memria) ocupado por um objeto consiste de outros objetos Todo objeto possui um tipo (que descreve seus dados) Objetos de um determinado tipo podem receber as mesmas mensagens
4

Objetos
Em uma linguagem OO pura Uma varivel um objeto Um programa um objeto Um procedimento um objeto Um objeto composto de objetos, portanto Um programa (objeto) pode ter variveis (objetos que representam seu estado) e procedimentos (objetos que representam seu comportamento) Analogia: abstrao de um telefone celular composto de outros objetos, entre eles bateria e botes A bateria um objeto tambm, que possui pelo menos um outro objeto: carga, que representa seu estado Os botes implementam comportamentos
5

Objetos
Em uma linguagem orientada a objetos pura Um nmero, uma letra, uma palavra, uma valor booleano, uma data, um registro, um boto da interface so objetos Em Java, objetos so armazenados na memria de heap e manipulados atravs de uma referncia (varivel), guardada na pilha Tm identidade (a referncia) Tm estado (seus atributos) Tm comportamento (seus mtodos) Valores unidimensionais (tipos primitivos) no so objetos em Java Nmeros, booleanos, caracteres so armazenados na pilha Tm apenas identidade (nome da varivel) e estado (valor literal armazenado na varivel); - dinmicos; + rpidos
6

Exemplo: Dois Objetos Crculo

O que uma classe?


Classes so uma especificao para objetos com propriedades semelhantes (atributos), comportamentos semelhantes (mtodos) e relacionamentos comuns com outros objetos Uma classe representa um tipo de dados complexo Classes descrevem
Tipos dos dados que compem o objeto (o que podem armazenar) Procedimentos que o objeto pode executar (o que podem fazer)

Classes
Classes definem lgica esttica Relacionamentos entre classes so estticos, definidos em tempo de programao e no mudam durante a execuo Relacionamentos entre objetos so dinmicos e podem mudar. O funcionamento da aplicao reflete a lgica de relacionamento entre os objetos, e no entre as classes Classes no existem no contexto de execuo Uma classe representa vrios objetos que ocupam espao na memria, mas ela no existe nesse domnio A classe tem papel na criao dos objetos, mas as mensagens so trocadas entre os objetos A classe a planta, o objeto a casa construda. Muitas casas podem ser feitas a partir da mesma planta, mas cada uma preserva sua prpria identidade
9

Definio de classe em Java


class Conta { String numero; double saldo; void creditar (double valor) { saldo = saldo + valor; } void debitar (double valor) { saldo = saldo - valor; } }
Mtodos Atributos

10

Exemplo: Programa que cria e manipula Conta


class CriaConta { */ /* Criando um objeto do tipo Conta Conta conta1 = new Conta (); conta1.numero = 21.342-7; conta1.saldo = 0; conta1.creditar (500.87); conta1.debitar (45.00); System.out.println(conta1.saldo); } }
11

public static void main (String [] args) {

Membros de uma classe: atributos e mtodos


Uma classe define uma estrutura de dados no-ordenada, podendo conter componentes em qualquer ordem Os componentes de uma classe so seus membros Uma classe pode conter trs tipos de componentes
Membros estticos ou de classe: no fazem parte do tipo do objeto Membros de instncia: definem o tipo de um objeto Procedimentos de inicializao

Membros estticos ou de classe


Podem ser usados atravs da classe mesmo quando no h objetos No se replicam quando novos objetos so criados (variveis globais da classe)

Membros de instncia
Cada objeto, quando criado, aloca espao para eles S podem ser usados atravs de objetos

Procedimentos de inicializao (construtores)


Usados para inicializar objetos ou classes
12

Exemplo
Atributos de instncia: cada objeto poder armazenar valores diferentes nessas variveis. Procedimento de inicializao de objetos (Construtor): cdigo executado aps a criao de cada novo objeto. Cada objeto ter um nmero diferente. Mtodo de instncia: s possvel cham-lo se for atravs de um objeto. Atributos estticos: no preciso criar objetos para us-los. Todos os objetos os compartilham. Procedimento de inicializao esttico: cdigo executado uma nica vez, quando a classe carregada. O arquiteto ser um s para todas as casas: ou Z ou Og.
13

Construtores
So procedimentos executados na criao do objeto, uma nica vez Tm o mesmo nome da classe. So similares a mtodos, mas no tm tipo de retorno. No fazem parte da definio do tipo do objeto (interface)
class Conta { String numero; double saldo; Conta(String n) { numero = n; saldo = 0; } void creditar(double valor) {saldo += valor; } void debitar(double valor) {saldo -= valor; } }
14

Criando Objetos com Construtores


. . . Conta conta1; conta1 = new Conta(21.342-7); conta1.creditar(500.87); conta1.debitar(45.00); System.out.println(conta1.saldo); . . .

15

Usando membros estticos


Classes podem declarar membros (campos e mtodos) que sejam comuns a todas as instncias, ou seja, membros compartilhados por todos os objetos da classe Tais membros so comumente chamados de membros de classe (versus de objetos) Em Java, declara-se um membro de classe usando o qualificador static. Da, o nome membros estticos usado em Java.
class Conta { static String nomeBanco = Ita; String numero; double saldo; ... void creditar(double valor) {saldo += valor; } void debitar(double valor) {saldo -= valor; } }

16

Objetos possuem uma interface...


Atravs da interface possvel utiliz-lo No preciso saber dos detalhes de sua implementao O tipo (Classe) de um objeto determina sua interface O tipo determina quais mensagens lhe podem ser enviadas

Ao interagir com um objeto, levamos em conta a interface (o servio) e no a implementao. Chamamos a isso de Abstrao.
17

...e uma implementao (oculta)


Implementao no interessa a quem usa o objeto Papel do usurio da classe:
no precisa saber como a classe foi escrita, apenas o nome dos mtodos, seus parmetros (quantidade, ordem e tipo) e valor de retorno assinatura do mtodo usa apenas a interface (pblica) da classe

Papel do desenvolvedor da classe:


define novos tipos de dados expe, atravs de mtodos, todas as funes necessrias ao usurio da classe, e oculta o resto da implementao tem a liberdade de mudar a implementao da classe, desde que isso no comprometa sua interface 18

Resumo
Os componentes de uma classe, em Java, podem pertencer a dois domnios, que determinam como os mesmos sero usados
Domnio da classe: existem independentemente de existirem objetos ou no mtodos static, blocos static, atributos static e interface dos construtores de objetos Domnio do objeto: mtodos e atributos no declarados como static (definem o tipo ou interface que um objeto possui), e contedo dos construtores Construtores so usados apenas para construir objetos No so mtodos (no declaram tipo de retorno) Ponte" entre dois domnios: so chamados uma vez antes do objeto existir (domnio da classe) e executados no domnio do objeto criado

Separao de interface e implementao


Usurios de classes vem apenas a interface. Implementao encapsulada dentro dos mtodos, e pode variar sem afetar as classes que usam os objetos 19

Desenvolvendo um exemplo

Uma mquina de venda de bilhetes

Mquinas de venda de bilhetes: um olhar externo


Explorando o comportamento de uma mquina de venda de bilhetes:
A mquina fornece bilhetes de preo fixo Os clientes inserem dinheiro na mquina e depois solicitam que um bilhete seja impresso A mquina mantm um total geral do dinheiro coletado durante sua operao

21

Estrutura de uma classe bsica em Java


public class TicketMachine { Parte interna da classe omitida. }

O empacotador externo da TicketMachine

public class NomeDaClasse { Campos/Atributos Construtores Mtodos }

O contedo de uma classe

22

Atributos ou campos
Atributos armazenam valores para um objeto Eles tambm so conhecidos como variveis de instncia Atributos definem o estado de um objeto
Public class TicketMachine { private int price; private int balance; private int total; Construtor e mtodos omitidos }

Modificador de visibilidade

Tipo

Nome da varivel

private int price;

23

Mtodos
public class TicketMachine { Atributos omitidos public TicketMachine(int ticketCost){ } public int getPrice(){ return price; } public int getBalance(){ return balance; } public void insertMoney(int amount) { } public void printTicket(){ } }
24

Construtores
Construtores inicializam um objeto Tm o mesmo nome de sua classe Inicializam os atributos Freqentemente recebem valores de parmetros externos classe
public class TicketMachine { public TicketMachine(int ticketCost) { price = ticketCost; balance = 0; total = 0; } }

25

Mtodos de acesso
Mtodos implementam o comportamento dos objetos Mtodos de acesso fornecem informaes sobre um objeto A classe TicketMachine possui os seguintes mtodos:
getPrice, getBalance, insertMoney, printTicket

Mtodos tm uma estrutura que consiste em um cabealho e um corpo O cabealho define a assinatura do mtodo: public int getPrice() O corpo engloba as instrues do mtodo
26

Mtodos de acesso
Modificador de visibilidade Tipo de retorno

Nome do mtodo Lista de parmetros public int getPrice() (vazia) {

return price; }

Instruo de retorno

Incio e fim do corpo do mtodo (bloco)

27

Mtodos modificadores
Utilizados para modificar o estado de um objeto
Geralmente contm instrues de atribuio Geralmente recebem parmetros Geralmente seu tipo de retorno void
Modificador de visibilidade Tipo de retorno (void) Nome do mtodo Parmetro

public void insertMoney(int amount) { balance += amount; Instruo de atribuio }


Campo sendo alterado
28

Variveis locais
Atributos so um tipo de varivel:
armazenam valores por toda a vida de um objeto so acessveis por meio da classe (seu escopo) uma cpia do atributo por objeto instanciado

Os mtodos tambm podem declarar variveis locais:


existem apenas enquanto o mtodo est em execuo so acessveis somente dentro do mtodo

29

Variveis locais
varivel local

No se usa modificador de visibilidade

public int refundBalance() { int amountToRefund;

amountToRefund = balance; balance = 0; return amountToRefund; }

30

Resumindo
O corpo das classes pode conter atributos (campos), construtores e mtodos Campos armazenam o estado de um objeto Construtores inicializam objetos Mtodos implementam o comportamento dos objetos Campos, parmetros e variveis locais so variveis Campos persistem pelo tempo de vida de um objeto Parmetros so utilizados para receber valores em um construtor ou mtodo Variveis locais so utilizadas para armazenamento temporrio de curta durao
31

Mtodos estticos
Mtodos estticos (mtodos de classe)
Aplicam-se classe como um todo No necessrio criar um objeto para utiliz-los So chamados especificando-se o nome da classe onde o mtodo declarado:
NomeClasse.nomeMtodo()

Todos os mtodos da classe Math so static: Ex: Math.sqrt(144.0)


32

Atributos estticos
Campos estticos (variveis de classe)
A mesma cpia compartilhada entre todas as instncias da classe (objetos) Uma espcie de varivel global da classe

Constantes
Declaradas com a palavra-chave final. No pode ser alterada depois da inicializao Classe Math:
Campos Math.E e Math.PI so final static
33

A classe Math

34

Cooperao entre objetos

Um relgio digital

1.0

Abstrao e modularizao
Abstrao a habilidade de ignorar detalhes sobre as partes para concentrar a ateno no nvel mais alto de um problema Modularizao o processo de dividir um todo em partes bem definidas, que podem ser construdas e examinadas separadamente e que interagem de uma maneira prdeterminada
36

Modularizao no exemplo do relgio

Um mostrador de nmero de quatro dgitos? Ou um mostrador de nmero de dois dgitos?


37

Implementao NumberDisplay
public class NumberDisplay { private int limit; private int value;
Construtor e mtodos omitidos

} Uma classe de exibio de um dgito, com um limite superior e um valor atual

38

Implementao ClockDisplay
public class ClockDisplay { private NumberDisplay hours; private NumberDisplay minutes;
Construtor e mtodos omitidos

Um mostrador de relgio completo que contm, internamente, dois mostradores de nmeros


39

Diagrama de objetos

40

Diagrama de classes

41

Tipos primitivos vs. Objetos


SomeObject obj;
new

objeto

STACK HEAP
Uma referncia para o objeto armazenada na varivel int i;

32

STACK

tipo primitivo
42

Os tipos primitivos so armazenados na prpria varivel

Tipos primitivos vs. Objetos


SomeObject a; SomeObject b;

b = a;
int a; int b;

32

32
43

NumberDisplay (1)
// Construtor public NumberDisplay(int rollOverLimit) { limit = rollOverLimit; value = 0; }

public void increment() { value = (value + 1) % limit; }


44

NumberDisplay (2)
public String getDisplayValue() { if(value < 10) return "0" + value; else return "" + value; }

45

ClockDisplay: Objetos criando objetos


public class ClockDisplay { private NumberDisplay hours; private NumberDisplay minutes; private String displayString; public ClockDisplay() { hours = new NumberDisplay(24); minutes = new NumberDisplay(60); updateDisplay(); } }
46

Diagrama do objeto ClockDisplay

47

Objetos criando objetos


Na classe NumberDisplay:
public NumberDisplay(int rollOverLimit);

parmetro formal Na classe ClockDisplay:


hours = new NumberDisplay(24);

parmetro real
48

ClockDisplay: Mtodos externos


public void timeTick() { minutes.increment(); if(minutes.getValue() == 0) { // retornou a zero hours.increment(); } updateDisplay(); }

49

ClockDisplay: Mtodo interno


// Atualiza a string interna que // representa o mostrador private void updateDisplay() { displayString = hours.getDisplayValue() + ":" + minutes.getDisplayValue(); }

50

ClockDisplay: Mltiplos construtores


public ClockDisplay() { hours = new NumberDisplay(24); minutes = new NumberDisplay(60); updateDisplay(); // Hora inicial 00:00 } public ClockDisplay(int hour, int minute) { hours = new NumberDisplay(24); minutes = new NumberDisplay(60); setTime(hour, minute); }

possvel inicializar um objeto ClockDisplay de duas maneiras diferentes - sobrecarga de construtor ou mtodo
51

A palavra-chave this
public class MailItem { private String from; private String to; private String message; public MailItem(String from, String to, String message) { this.from = from; this.to = to; this.message = message; } }

A expresso this referencia o objeto atual, diferenciando o atributo do parmetro

52

Relacionamento entre Objetos

Associao, Agregao e Composio

Tipos de relacionamentos
Objetos no so ilhas isoladas. Pelo contrrio, podem existir diferentes tipos de relacionamentos entre os objetos ao longo do ciclo de vida do sistema Reuso de classe: fornece menos flexibilidade Herana pura (sobreposio): b a Herana com extenso: b um tipo de a Uso e reuso de objetos: fornece mais flexibilidade Associao: a usado por b O grau de coeso Agregao: a parte de b entre os objetos foi colocado do mais Composio: a parte essencial de b
fraco para o mais forte
54

Associao
Representa relacionamentos mais fortes entre instncias de classes (objetos)
public class Empregado { private String matricula; private int anosServico; private String sobrenome; private String nome; private Endereco endereco; . . . } public class Endereco { . . . }
55

Agregao
A agregao um relacionamento do tipo todo/parte:
usado para mostrar uma relao de incluso lgica, ou seja, um todo formado por partes Embora as partes possam existir independentemente do todo, sua existncia basicamente para formar o todo Exemplo: um correntista precisa de pelo menos uma conta e um endereo. Sem uma conta no se pode dizer que ele correntista A agregao frequentemente representada como uma simples associao
56

Composio
Uma composio um tipo de agregao. A diferena que na composio o objeto composto faz parte de somente um relacionamento (um todo), enquanto que na agregao isso no obrigatrio Exemplo 1: um trem formado por uma locomotiva e vages. Uma locomotiva ainda tem um farol Exemplo 2: um Quadrado formado por dois pontos e um Crculo tem um ponto e um raio. Cada uma dessas formas geomtricas ainda tem um estilo

57

Composio X Agregao X Associao

Um trem no existe sem a locomotiva e os vages. Por sua vez, os dois ltimos at assumem uma nova identidade ao formarem o trem Uma locomotiva possui um farol (mas no vai deixar de ser uma locomotiva se no o tiver) Um trem usa uma estrada de ferro (ela no faz parte do trem, mas ele depende dela)
58

Composio X Agregao

A relao de Ponto com Circulo e Quadrado uma composio, pois os mesmos no podem ser compartilhados Enquanto que o mesmo objeto de Estilo pode ser compartilhado por Circulo e Ponto (agregao)
59

Composio X Agregao
Traduo de composio e agregao na linguagem Java

public class Quadrado { // p1 e p2 so composio - new // estilo agregao - atribuio private Ponto p1, p2; private Estilo estilo; public Quadrado(int x1, int y1, int x2, int y2, Estilo e){ p1 = new Ponto(x1, y1); p2 = new Ponto (x2, y2); estilo = e; } }
60

Dependncia

Composio Associao

61

Вам также может понравиться