Objetos (I)
• Objetos s˜ao entidades que encapsulam informa¸c˜ao
de estado ou dados, e um conjunto de opera¸c˜oes associadas que manipulam esses dados
• O estado de um objeto ´e completamente escondido
e protegido de outros objetos, e a ´unica maneira de examin´a-lo ´e atrav´es da invoca¸c˜ao de uma opera¸c˜ao declarada na interface p´ublica do objeto
• Objetos tˆem uma identidade ´unica. Identidade ´e a
propriedade de um objeto que o disting¨ue de outros objetos
Objetos (III)
Métodos Dados I n t e r f a c e• Em resumo, um objeto tem um estado, um
comporta-mento (“behaviour”) bem definido, e uma identidade que ´e ´unica
Opera¸c˜
oes vs. M´
etodos
Método Método Método Operação Operação Operação Operação Método Valores Atributos dosClasses (I)
• Uma classe ´e a descri¸c˜ao de um molde (“skeleton”)
que especifica os atributos (ou propriedades) e o com-portamento para um conjunto de objetos similares
• Todo objeto ´e instˆancia de uma classe
• Atributos e opera¸c˜oes s˜ao partes da defini¸c˜ao de uma
classe
• Atributos s˜ao propriedades nomeadas de um objeto
que armazenam o estado abstrato de cada objeto
• Opera¸c˜oes caracterizam o comportamento de um
ob-jeto, e s˜ao o ´unico meio para acessar, manipular e modificar os atributos de um objeto
Classes (III)
• Um objeto comunica-se com outro atrav´es de
mensa-gens que identificam opera¸c˜oes a serem realizadas no segundo objeto
• Um objeto responde a uma mensagem mudando
possi-velmente os valores de seus atributos e/ou retornando um resultado
• A interface de uma classe compreende o conjunto de
opera¸c˜oes que podem ser chamadas por outros objetos
• A vis˜ao externa de um objeto n˜ao ´e nada mais do que
Classes (IV)
• M´etodos s˜ao implementa¸c˜oes de opera¸c˜oes que um
cliente pode chamar num determinado objeto
• Opera¸c˜ao ´e diferente de m´etodo. Opera¸c˜ao ´e
Dicas e Recomenda¸c˜
oes (I)
• De acordo com o conceito de TAD, uma classe deve
definir um conjunto de atributos com visibilidade pri-vada (nunca p´ublica)
• A interface p´ublica da classe ´e formada pelo conjunto
de opera¸c˜oes com visibilidade p´ublica. A classe pode conter opera¸c˜oes com visibilidade privada.
Dicas e Recomenda¸c˜
oes (II)
Uma classe ´e considerada bem estruturada quando:
1. Proporciona uma abstra¸c˜ao bem definida de um ele-mento oriundo do vocabul´ario do dom´ınio do problema ou da solu¸c˜ao.
2. ´E formada por um conjunto pequeno e bem definido de responsabilidades que devem ser cumpridas pela classe.
3. Proporciona uma separa¸c˜ao clara entre a especifica¸c˜ao da abstra¸c˜ao e a sua implementa¸c˜ao.
4. ´E simples e f´acil de entender, e ao mesmo tempo tem capacidade de extens˜ao e adapta¸c˜ao.
Exemplo de Classe em UML
Documento −autor :String
−dataDeChegada :int
<< create >> + Documento ():Documento + criarDocumento (s:String ,i:int ):void + imprimir ():void + editar ():void Nome da Classe ATRIBUTOS: Visibilidade privada (−) OPERAÇÕES: Visibilidade pública (+)
Cria¸c˜
ao de Objetos do tipo Documento(II)
objeto do tipo Documento
Variável Tipo de Objeto
d1 para um objetodo tipo Documento referência Tipo de Variável
Classifica¸c˜
ao/Instancia¸c˜
ao (I)
OBS.: No contexto de um sistema de controle de bibliotecas
objeto classe
joao:Usuario
Instanciação
(os objetos depen− dem da classe) Classificação maria:Usuario objeto << instance_of >>. << instance_of >> . Usuario −nome :String −codigo :String
+ verificarCodigo (cod :String ):boolean
• Um objeto ´e instˆancia de apenas uma classe
Agrega¸c˜
ao/Decomposi¸c˜
ao (I)
Usuario −nome :String
−codigo :String
+ verificarCodigo (cod :String ):boolean
Publicacao −numeroTombo :String −nome :String + reservar ():void Biblioteca −identificador :String −endereco :String + listarPublicacoes ():void + listarUsuarios ():void Agregação Decomposição
• Agrega¸c˜ao ´e um relacionamento estrutural entre o todo e suas partes.
• Ela implementa o conceito de decomposi¸c˜ao hier´arquica: ´e-parte-de
• ´E um mecanismo que permite a montagem do todo a partir de suas partes
Associa¸c˜
ao (I)
Reserva −codigo :String −dataInicio :Date −dataFim :Date + cancelar ():void + efetuar ():void * efetua 1 Usuario −nome :String −codigo :String+ verificarCodigo (cod :String ):boolean
• Uma associa¸c˜ao ´e um relacionamento estrutural que descreve um conjunto de “links”;
• Agrega¸c˜ao ´e um tipo especial de associa¸c˜ao;
• Um usu´ario pode efetuar v´arias reservas e uma reserva ´e feita por apenas um usu´ario.
Heran¸
ca Simples
• Heran¸ca (ou “subclassing”) ´e um mecanismo para
de-rivar novas classes a partir de classes existentes atrav´es de um processo de refinamento
• Uma classe derivada herda a representa¸c˜ao de dados
e opera¸c˜oes de sua classe base, mas pode:
1. Adicionar novas opera¸c˜oes e estender a representa¸c˜ao de dados
2. Redefinir a implementa¸c˜ao de opera¸c˜oes existentes
• Uma superclasse (ou classe base) proporciona a
fun-cionalidade que ´e comum a todas as subclasses (ou classes derivadas), enquanto que uma subclasse pro-porciona a funcionalidade adicional que especializa o seu comportamento.
Generaliza¸c˜
ao/Especializa¸c˜
ao (I)
Usuario −nome :String
−codigo :String
+ verificarCodigo (cod :String ):boolean Classe base Classe derivada Generalização Classe derivada Aluno −anoEscolar :int + suspender ():void Especialização Professor −tempoServico :int + aposentar ():void
• Implementa o conceito de heran¸ca de tipos: ´e-um-tipo-de
• Permite que todas as instˆancias de uma categoria espec´ıfica sejam tamb´em consideradas instˆancias de uma categoria mais abrangente
Exemplo de Heran¸ca
Documento −autor :String −dataDeChegada :Date + imprimir ():void + editar ():void<< create >> + Documento ():Documento
Carta −transporte :String
+ anexar ():void
<< create >> + Carta ():Carta
Telegrama −hora :Time
+ registrar ():void + pagar ():void
<< create >> + Telegrama ():Telegrama
Instancia¸c˜
ao de um Objeto
c1:Carta −autor = "Joana" :String
−dataDeChegada = 05/10/2006 :Date
−transporte = "Aéreo" :String
+ imprimir ():void + editar ():void + anexar ():void + Carta ():Carta Documento Carta << instance_of >>. Estado do objeto "c1" Interface pública do objeto "c1"
Defini¸c˜
ao de Tipos
• Cria¸c˜ao de um objeto do tipo Documento:Documento c1 = new Documento();
Documento
Carta
<< instance_of >> .
d1:Documento −autor = Marcos :String
−dataDeChegada= 25/01/2006 :Date + Documento ():Documento
+ imprimir ():void + editar ():void
Exemplo de Heran¸ca
ContaBancaria
#saldo :double
<< create >> + ContaBancaria (sal:double ):ContaBancaria + devolverSaldo ():double
+ creditar (valor :double ):void + debitar (valor :double ):void
ContaDePoup −indice :double
<< create >> + ContaDePoup (sal:double ,ind :double ):ContaDePoup + render ():void
Os Modificadores de Visibilidade (I)
• P´ublica: qualquer categoria de cliente pode acessar,manipular e invocar diretamente atributos e m´etodos declarados como “public”
• Privada: qualquer categoria cliente n˜ao pode acessar,
manipular e invocar diretamente atributos e m´etodos declarados como “private”. Somente a pr´opria classe que os declara tem acesso direto
Os Modificadores de Visibilidade (II)
• Vis´ıvel pela subclasse (protegida): se um atributoou m´etodo ´e protegido, somente os clientes por he-ran¸ca tˆem acesso a ele. Os clientes por instancia¸c˜ao continuam a enxergar somente os atributos e m´etodos com visibilidade p´ublica
• Vis´ıvel no m´odulo (visibilidade de pacote): se um
atributo ou m´etodo possui visibilidade de pacote, so-mente os clientes que pertencerem ao mesmo m´odulo (pacote) podem acess´a-lo diretamente. Os clientes externos continuam a enxergar somente os atributos e m´etodos com visibilidade p´ublica
Nota¸c˜
ao UML para Visibilidade
• O modificador de visibilidade ´e representado antes do
atributo ou opera¸c˜ao. Existem quatro modificadores: ‘+’→ p´ublica ‘-’→ privada ‘#’→ protegida ‘∼’→ vis´ıvel no pacote Classe −atributo1:TipoAtrib1 #atributo2:TipoAtrib2 ~atributo3:TipoAtrib3 +operacao1():TipoResposta #operacao2():TipoResposta −operacao3():TipoResposta ~operacao4():TipoResposta atributo privado atributo protegido operação pública operação privada operação protegida
atributo com visibilidade de pacote
operação com
Vi
sibilidade Protegida (III)
• A classe ContaDePoup est´a alterando um atributo
pri-vado definido pela classe base
• Isso somente ´e poss´ıvel porque a visibilidade do
atri-buto saldo ´e estabelecida como protegida na classe ContaBancaria
• O que acontece se alterarmos a visibilidade protegida
Clientes por Heran¸ca X Clientes por
Instancia¸c˜
ao
Heran¸ca introduz dois tipos de clientes de uma classe:
• Clientes por Instancia¸c˜ao: os usu´arios criam
instˆancias da classe e manipulam-as atrav´es de sua interface p´ublica. Esses clientes s˜ao objetos
• Clientes por Heran¸ca: os usu´arios s˜ao as pr´oprias
subclasses que herdam os m´etodos e atributos da classe base. Esses clientes s˜ao classes
Instancia¸c˜
ao de um Objeto
c1:Carta −autor = "Joana" :String
−dataDeChegada = 05/10/2006 :Date
−transporte = "Aéreo" :String
+ imprimir ():void + editar ():void + anexar ():void + Carta ():Carta Documento Carta << instance_of >>. Estado do objeto "c1" Interface pública do objeto "c1"