ORIENTAÇÃO A OBJETOS Mário Meireles Teixeira mario@deif.ufma.br O que é Orietação a Objetos Paradigma modero da egeharia de software Iflui a aálise, projeto (desig) e programação A aálise orietada a objetos Determia o que o sistema deve fazer: Quais os atores evolvidos? Quais as atividades a serem realizadas? Decompõe o sistema em objetos: Quais são? Que tarefas cada objeto terá que fazer? O desig orietado a objetos Defie como o sistema será implemetado Modela os relacioametos etre os objetos e atores (podese usar uma liguagem específica como UML) Utiliza e reutiliza abstrações como classes, objetos, métodos, frameworks, APIs, padrões de projeto 2 1
Visão OO (1) e Visão Procedural (2) 3 O que é um objeto? Um objeto é uma etidade (física, coceitual ou do domíio de algum problema) que tem: idetidade estado e comportameto Características de Smalltalk, resumidas por Alla Kay: Tudo (em um programa OO) são objetos Um programa é um cojuto de objetos eviado mesages us aos outros O espaço (a memória) ocupado por um objeto cosiste de outros objetos Todo objeto possui um tipo (que descreve seus dados) Objetos de um determiado tipo podem receber as mesmas mesages 4 2
Objetos Em uma liguagem OO pura Uma variável é um objeto Um programa é um objeto Um procedimeto é um objeto Um objeto é composto de objetos, portato Um programa (objeto) pode ter variáveis (objetos que represetam seu estado) e procedimetos (objetos que represetam seu comportameto) Aalogia: abstração de um telefoe celular É composto de outros objetos, etre eles bateria e botões A bateria é um objeto também, que possui pelo meos um outro objeto: carga, que represeta seu estado Os botões implemetam comportametos 5 Objetos Em uma liguagem orietada a objetos pura Um úmero, uma letra, uma palavra, uma valor booleao, uma data, um registro, um botão da iterface são objetos Em Java, objetos são armazeados a memória de heap e maipulados através de uma referêcia (variável), guardada a pilha Têm idetidade (a referêcia) Têm estado (seus atributos) Têm comportameto (seus métodos) Valores uidimesioais (tipos primitivos) ão são objetos em Java Números, booleaos, caracteres são armazeados a pilha Têm apeas idetidade (ome da variável) e estado (valor literal armazeado a variável); - diâmicos; + rápidos 6 3
Exemplo: Dois Objetos Círculo 7 O que é uma classe? Classes são uma especificação para objetos com propriedades semelhates (atributos), comportametos semelhates (métodos) e relacioametos comus com outros objetos Uma classe represeta um tipo de dados complexo Classes descrevem Tipos dos dados que compõem o objeto (o que podem armazear) Procedimetos que o objeto pode executar (o que podem fazer) 8 4
Classes Classes defiem lógica estática Relacioametos etre classes são estáticos, defiidos em tempo de programação e ão mudam durate a execução Relacioametos etre objetos são diâmicos e podem mudar. O fucioameto da aplicação reflete a lógica de relacioameto etre os objetos, e ão etre as classes Classes ão existem o cotexto de execução Uma classe represeta vários objetos que ocupam espaço a memória, mas ela ão existe esse domíio A classe tem papel a criação dos objetos, mas as mesages são trocadas etre os objetos A classe é a plata, o objeto é a casa costruída. Muitas casas podem ser feitas a partir da mesma plata, mas cada uma preserva sua própria idetidade 9 Defiição de classe em Java class Cota Atributos Strig umero; double saldo; void creditar (double valor) saldo = saldo + valor; void debitar (double valor) saldo = saldo - valor; Métodos 10 5
Exemplo: Programa que cria e maipula Cota class CriaCota /* Criado um objeto do tipo Cota */ public static void mai (Strig [] args) Cota cota1 = ew Cota (); cota1.umero = 21.342-7 ; cota1.saldo = 0; cota1.creditar (500.87); cota1.debitar (45.00); System.out.pritl(cota1.saldo); 11 Membros de uma classe: atributos e métodos Uma classe defie uma estrutura de dados ão-ordeada, podedo coter compoetes em qualquer ordem Os compoetes de uma classe são seus membros Uma classe pode coter três tipos de compoetes Membros estáticos ou de classe: ão fazem parte do tipo do objeto Membros de istâcia: defiem o tipo de um objeto Procedimetos de iicialização Membros estáticos ou de classe Podem ser usados através da classe mesmo quado ão há objetos Não se replicam quado ovos objetos são criados ( variáveis globais da classe) Membros de istâcia Cada objeto, quado criado, aloca espaço para eles Só podem ser usados através de objetos Procedimetos de iicialização (costrutores) Usados para iicializar objetos ou classes 12 6
Usado membros estáticos Classes podem declarar membros (campos e métodos) que sejam comus a todas as istâcias, ou seja, membros compartilhados por todos os objetos da classe Tais membros são comumete chamados de membros de classe (versus de objetos ) Em Java, declara-se um membro de classe usado o qualificador static. Daí, o ome membros estáticos usado em Java. class Cota static Strig omebaco = Itaú ; Strig umero; double saldo;... void creditar(double valor) saldo += valor; void debitar(double valor) saldo -= valor; 13 Costrutores São procedimetos executados a criação do objeto, uma úica vez Têm o mesmo ome da classe. São similares a métodos, mas ão têm tipo de retoro. Não fazem parte da defiição do tipo do objeto (iterface) class Cota Strig umero; double saldo; Cota(Strig ) umero = ; saldo = 0; void creditar(double valor) saldo += valor; void debitar(double valor) saldo -= valor; 14 7
Criado Objetos com Costrutores... Cota cota1; cota1 = ew Cota( 21.342-7 ); cota1.creditar(500.87); cota1.debitar(45.00); System.out.pritl(cota1.saldo);... 15 Termiologia Atributos de istâcia: cada objeto poderá armazear valores diferetes essas variáveis. Procedimeto de iicialização de objetos (Costrutor): código é executado após a criação de cada ovo objeto. Cada objeto terá um úmero diferete. Método de istâcia: só é possível chamá-lo se for através de um objeto. Atributos estáticos: ão é preciso criar objetos para usá-los. Todos os objetos os compartilham. Procedimeto de iicialização estático: código é executado uma úica vez, quado a classe é carregada. O arquiteto será um só para todas as casas: ou Zé ou Og. 16 8
Objetos possuem uma iterface... Através da iterface é possível utilizá-lo Não é preciso saber dos detalhes de sua implemetação O tipo (Classe) de um objeto determia sua iterface O tipo determia quais mesages lhe podem ser eviadas Ao iteragir com um objeto, levamos em cota a iterface (o serviço) e ão a implemetação. Chamamos a isso de Abstração. 17...e uma implemetação (oculta) Implemetação ão iteressa a quem usa o objeto Papel do usuário da classe: ão precisa saber como a classe foi escrita, apeas o ome dos métodos, seus parâmetros (quatidade, ordem e tipo) e valor de retoro assiatura do método usa apeas a iterface (pública) da classe Papel do desevolvedor da classe: defie ovos tipos de dados expõe, através de métodos, todas as fuções ecessárias ao usuário da classe, e oculta o resto da implemetação tem a liberdade de mudar a implemetação da classe, desde que isso ão comprometa sua iterface 18 9
Resumo Os compoetes de uma classe, em Java, podem pertecer a dois domíios, que determiam como os mesmos serão usados Domíio da classe: existem idepedetemete de existirem objetos ou ão métodos static, blocos static, atributos static e iterface dos costrutores de objetos Domíio do objeto: métodos e atributos ão declarados como static (defiem o tipo ou iterface que um objeto possui), e coteúdo dos costrutores Costrutores são usados apeas para costruir objetos Não são métodos (ão declaram tipo de retoro) Pote" etre dois domíios: são chamados uma vez ates do objeto existir (domíio da classe) e executados o domíio do objeto criado Separação de iterface e implemetação Usuários de classes vêem apeas a iterface. Implemetação é ecapsulada detro dos métodos, e pode variar sem afetar as classes que usam os objetos 19 Desevolvedo um exemplo Uma máquia de veda de bilhetes 10
Máquia de veda de bilhetes: visão extera Explorado o comportameto de uma máquia de veda de bilhetes: A máquia forece bilhetes de preço fixo Os clietes iserem diheiro a máquia e depois solicitam que um bilhete seja impresso A máquia matém um total geral do diheiro coletado durate sua operação 21 Estrutura de uma classe básica em Java public class TicketMachie Parte itera da classe omitida. O empacotador extero da TicketMachie public class NomeDaClasse Campos/Atributos Costrutores Métodos O coteúdo de uma classe 22 11
Atributos ou campos Atributos armazeam valores para um objeto Eles também são cohecidos como variáveis de istâcia Atributos defiem o estado de um objeto Public class TicketMachie private it price; private it balace; private it total; Costrutor e métodos omitidos Modificador de visibilidade Tipo Nome da variável private it price; 23 Métodos public class TicketMachie Atributos omitidos public TicketMachie(it ticketcost) public it getprice() retur price; public it getbalace() retur balace; public void isertmoey(it amout) public void pritticket() 24 12
Costrutores Costrutores iicializam um objeto Têm o mesmo ome de sua classe Iicializam os atributos Freqüetemete recebem valores de parâmetros exteros à classe public class TicketMachie public TicketMachie(it ticketcost) price = ticketcost; balace = 0; total = 0; 25 Métodos de acesso Métodos implemetam o comportameto dos objetos Métodos de acesso forecem iformações sobre um objeto A classe TicketMachie possui os seguites métodos: getprice, getbalace, isertmoey, pritticket Métodos têm uma estrutura que cosiste em um cabeçalho e um corpo O cabeçalho defie a assiatura do método: public it getprice() O corpo egloba as istruções do método 26 13
Métodos de acesso (getters) Modificador de visibilidade Tipo de retoro Nome do método public it getprice() retur price; Iício e fim do corpo do método (bloco) Lista de parâmetros (vazia) Istrução de retoro 27 Métodos modificadores (setters) Utilizados para modificar o estado de um objeto Geralmete cotêm istruções de atribuição Geralmete recebem parâmetros Geralmete seu tipo de retoro é void Modificador de visibilidade Tipo de retoro (void) Nome do método Parâmetro public void isertmoey(it amout) balace += amout; Istrução de atribuição Campo sedo alterado 28 14
Variáveis locais Atributos são um tipo de variável: armazeam valores por toda a vida de um objeto são acessíveis por meio da classe (seu escopo) uma cópia do atributo por objeto istaciado Os métodos também podem declarar variáveis locais: existem apeas equato o método está em execução são acessíveis somete detro do método 29 Variáveis locais Não se usa modificador de visibilidade public it refudbalace() it amouttorefud; amouttorefud = balace; balace = 0; retur amouttorefud; variável local 30 15
Resumo O corpo das classes pode coter atributos (campos), costrutores e métodos Atributos armazeam o estado de um objeto Costrutores iicializam objetos Métodos implemetam o comportameto dos objetos Atributos, parâmetros e variáveis locais são variáveis Atributos persistem pelo tempo de vida de um objeto Parâmetros são utilizados para receber valores em um costrutor ou método Variáveis locais são utilizadas para armazeameto temporário de curta duração e existem apeas durate a execução do método 31 Métodos estáticos Métodos estáticos (métodos de classe) Aplicam-se à classe como um todo Não é ecessário criar um objeto para utilizá-los São chamados especificado-se o ome da classe ode o método é declarado: NomeClasse.omeMétodo() Todos os métodos da classe Math são static: Ex: Math.sqrt(144.0) 32 16
Atributos estáticos Campos estáticos (variáveis de classe) A mesma cópia é compartilhada etre todas as istâcias da classe (objetos) Uma espécie de variável global da classe Costates Declaradas com a palavra-chave fial. Não pode ser alterada depois da iicialização Classe Math: Campos Math.E e Math.PI são fial static 33 A classe Math 34 17
Cooperação etre objetos Um relógio digital 1.0 Abstração e modularização Abstração é a habilidade de igorar detalhes sobre as partes para cocetrar a ateção o ível mais alto de um problema Modularização é o processo de dividir um todo em partes bem defiidas, que podem ser costruídas e examiadas separadamete e que iteragem de uma maeira prédetermiada 36 18
Modularização o exemplo do relógio Ou um mostrador de úmero de dois dígitos? Um mostrador de úmero de quatro dígitos? 37 Implemetação NumberDisplay public class NumberDisplay private it limit; private it value; Costrutor e métodos omitidos Uma classe de exibição de um dígito, com um limite superior e um valor atual 38 19
Implemetação ClockDisplay public class ClockDisplay private NumberDisplay hours; private NumberDisplay miutes; Costrutor e métodos omitidos Um mostrador de relógio completo que cotém, iteramete, dois mostradores de úmeros 39 Diagrama de objetos 40 20
Diagrama de classes 41 Tipos primitivos vs. Objetos SomeObject obj; STACK ew objeto HEAP it i; Uma referêcia para o objeto é armazeada a variável 32 STACK tipo primitivo Os tipos primitivos são armazeados a própria variável 42 21
Tipos primitivos vs. Objetos SomeObject a; SomeObject b; b = a; it a; 32 it b; 32 43 NumberDisplay (1) // Costrutor public NumberDisplay(it rolloverlimit) limit = rolloverlimit; value = 0; public void icremet() value = (value + 1) % limit; 44 22
NumberDisplay (2) public Strig getdisplayvalue() if(value < 10) retur "0" + value; else retur "" + value; 45 ClockDisplay: Objetos criado objetos public class ClockDisplay private NumberDisplay hours; private NumberDisplay miutes; private Strig displaystrig; public ClockDisplay() hours = ew NumberDisplay(24); miutes = ew NumberDisplay(60); updatedisplay(); 46 23
Diagrama do objeto ClockDisplay 47 Objetos criado objetos Na classe NumberDisplay: public NumberDisplay(it rolloverlimit); parâmetro formal Na classe ClockDisplay: hours = ew NumberDisplay(24); parâmetro real 48 24
ClockDisplay: Métodos exteros public void timetick() miutes.icremet(); if(miutes.getvalue() == 0) // retorou a zero hours.icremet(); updatedisplay(); 49 ClockDisplay: Método itero // Atualiza a strig itera que // represeta o mostrador private void updatedisplay() displaystrig = hours.getdisplayvalue() + ":" + miutes.getdisplayvalue(); 50 25
ClockDisplay: Múltiplos costrutores public ClockDisplay() hours = ew NumberDisplay(24); miutes = ew NumberDisplay(60); updatedisplay(); // Hora iicial 00:00 public ClockDisplay(it hour, it miute) hours = ew NumberDisplay(24); miutes = ew NumberDisplay(60); settime(hour, miute); É possível iicializar um objeto ClockDisplay de duas maeiras diferetes - sobrecarga de costrutor ou método 51 A palavra-chave this public class MailItem private Strig from; private Strig to; private Strig message; public MailItem(Strig from, Strig to, Strig message) this.from = from; this.to = to; this.message = message; A expressão this referecia o objeto atual, difereciado o atributo do parâmetro 52 26
Relacioameto etre Objetos Associação, Agregação e Composição Tipos de relacioametos Objetos ão são ilhas isoladas. Pelo cotrário, podem existir diferetes tipos de relacioametos etre os objetos ao logo do ciclo de vida do sistema Reuso de classe: forece meos flexibilidade Heraça pura (sobreposição): b é a Heraça com extesão: b é um tipo de a Uso e reuso de objetos: forece mais flexibilidade Associação: a é usado por b Agregação: a é parte de b Composição: a é parte essecial de b O grau de coesão etre os objetos foi colocado do mais fraco para o mais forte 54 27
Associação Represeta relacioametos mais fortes etre istâcias de classes (objetos) public class Empregado private Strig matricula; private it aosservico; private Strig sobreome; private Strig ome; private Edereco edereco;... public class Edereco... 55 Agregação A agregação é um relacioameto do tipo todo/parte: É usado para mostrar uma relação de iclusão lógica, ou seja, um todo formado por partes Embora as partes possam existir idepedetemete do todo, sua existêcia é basicamete para formar o todo Exemplo: um corretista precisa de pelo meos uma cota e um edereço. Sem uma cota ão se pode dizer que ele é corretista A agregação é frequetemete represetada como uma simples associação 56 28
Composição Uma composição é um tipo de agregação. A difereça é que a composição o objeto composto faz parte de somete um relacioameto (um todo), equato que a agregação isso ão é obrigatório Exemplo 1: um trem é formado por uma locomotiva e vagões. Uma locomotiva aida tem um farol Exemplo 2: um Quadrado é formado por dois potos e um Círculo tem um poto e um raio. Cada uma dessas formas geométricas aida tem um estilo 57 Composição X Agregação X Associação Um trem ão existe sem a locomotiva e os vagões. Por sua vez, os dois últimos até assumem uma ova idetidade ao formarem o trem Uma locomotiva possui um farol (mas ão vai deixar de ser uma locomotiva se ão o tiver) Um trem usa uma estrada de ferro (ela ão faz parte do trem, mas ele depede dela) 58 29
Composição X Agregação A relação de Poto com Circulo e Quadrado é uma composição, pois os mesmos ão podem ser compartilhados Equato que o mesmo objeto de Estilo pode ser compartilhado por Circulo e Poto (agregação) 59 Composição X Agregação Tradução de composição e agregação a liguagem Java public class Quadrado // p1 e p2 são composição - ew // estilo é agregação - atribuição private Poto p1, p2; private Estilo estilo; public Quadrado(it x1, it y1, it x2, it y2, Estilo e) p1 = ew Poto(x1, y1); p2 = ew Poto (x2, y2); estilo = e; 60 30
Depedêcia Composição Associação 61 Geeralização e Especialização Heraça e Polimorfismo 31
Heraça Uma maeira de expressar heraça é pelo termo É-UM Fusca é um Carro Gerete é um Fucioario Na liguagem Java, a palavra reservada exteds represeta este relacioameto É-UM: public class Fucioario... public class Gerete exteds Fucioario... 63 Heraça (reuso de iterface) Um carro é um veículo Fuscas e Porsches são carros (e também veículos) 64 32
Heraça (extesão e sobreposição) Extesão (é-um-tipo-de) Sobreposição (é-um - heraça pura) 65 Polimorfismo Uso de um objeto o lugar de outro: pode-se escrever código que ão depeda da existêcia prévia de tipos específicos mesmo ome do método, diferetes implemetações 66 33
Resumo de características OO Abstração de coceitos Classes: defiem um tipo, separado iterface de implemetação Objetos: istâcias utilizáveis de uma classe Heraça: "é um" Aproveitameto do código a formação de hierarquias de classes Fixada a compilação (iflexível) Associação "tem um" Represeta relacioametos etre objetos Pode ter comportameto e estrutura alterados durate execução Vários íveis de acoplameto: associação, composição, agregação Ecapsulameto Separação de iterface e implemetação que permite que usuários de objetos possam utilizá-los sem cohecer detalhes de seu código Polimorfismo Permite que um objeto seja usado o lugar de outro (mesma iterface, diferetes implemetações) 67 34