Orientação a Objetos (3)
-
Upload
fabio-nogueira-de-lucena -
Category
Technology
-
view
556 -
download
22
Transcript of Orientação a Objetos (3)
(S3) Desenvolvimento de Software
Copyright 2009Fbio Nogueira de [email protected] de ObjetosConceitosPrincpiosModelagem3
O universo orientado a objetos.
Raio-X de software orientado a objetos
Cenrio de troca de mensagens entre vrios objetos
Classe do objeto objNColeo de objetos trocando mensagens entre eles
Detalhes
de cdigo Orientado a Objetos
Orientado a Objetos (OO)
Abstrao
Classes
Identidade de objeto
Encapsulamento
Herana
Polimorfismo
Persistncia
Caractersticasgeralmentepresentes
OO (classes)
public class Cliente {
private String nome; // Nome do cliente
public Cliente() { nome = new String("Nome no fornecido"); }public Cliente(String sn) { nome = sn; }
public void perfil() { System.out.println(nome); }}
String s1 = new String(Euclides da Cunha");Cliente c1 = new Cliente(s1);Cliente c2 = new Cliente();
c1.perfil();c2.perfil();
Cliente
Mensagens enviadas aos objetos c1 e c2Molde atravs do qual
objetos so criados
OO (identidade de objeto)
Instncias distintasMesmo estadoSuponha que telefone no possua um identificador nico
OO (identidade de objeto)
Todo objeto possui uma referncia (handle)
Um nico handle acompanha a vida do objeto
Dois objetos distintos no possuem a mesma referncia
String s1; // Referncia para objeto StringString s2; // Referncia denominada de s2
s1 = new String("Programa"); // Cria instncia de Strings2 = new
String("Identidade"); // s2 referencia um objeto String
s1 = s2; // Acesso ao objeto referenciado por s1 perdido
Identidade
Memria RAMMemria RAM
OO (encapsulamento)
Unio de operaes e atributos em objeto
Um objeto acessvel apenas atravs da interface fornecida pelo encapsulamento
Um telefone possui vrias funes
(realiza chamadas, toca, ...)
Possui estado (p. ex.: ligado ou no)
Permite o acesso s operaes e
estado atravs de interface bem definida
Exemplo
Encapsulamento
Composio:
Cloridrato de Ranitidina (base), Celulose microcristalina,
Fosfato de clcio dibsico, glicolato de amido sdico,Dixido de silcio
coloidal, Polietilenoglicol 6000 micronizado, Estearato de magnsio,
Talco, Polmero do cido acrlico, Dixido de titnio, Polietilenoglicol
6000
A composio pblica
Ocultamento de informao (censura)
No se sabe quem, o que faz, o que veste, ...(protege ou oculta)
OO (ocultar informao)
Permite esconder como um objeto realiza os servios que oferece publicamente
Quem no sabe usar?Quem sabe como funciona?
Bibliografia Abstraction, Encapsulation, and Information Hiding, Berard, E. V et al.
Interface
Evite quebrar o encapsulamento!Access modifiers
(Java):
Default (package)
protected
private
public
public class Pessoa {
private String nome;private int anoNascimento;
public Pessoa(String n, int an) {nome = n;anoNascimento = an;}
public String toString() {return nome + " (" + anoNascimento + ")" ;}}class TestaPessoa {public static void main(String[] args) {Pessoa p = new Pessoa("Joao", 1975);System.out.println(p.toString());}}
Encapsulamento e ocultamento
Interface pblica
Information hiding
Envio de mensagem
Cdigo oculto!
Estado
Comportamento
Comportamento
Implementao
InterfaceImplementao
Visvel, pblica, acessvelInvisvel, privada, inacessvel
ClienteFronteira
(encapsulamento)
Herana (uma interpretao)
Herana (classes base e derivada)
Uma nova classe criada com base em uma classe existente.
A classe que herda chamada de derivada, a outra de base.
class Derivada extends Base {}
Subclasse, descendente, ...
Superclasse, ascendente, ...
A classe Derivada
herda da classe Base.
INTERPRETAO
Class Derivada
Inherits Base
End Class
Visual Basic .NET
Interpretao de herana
Classe Derivada herda os atributos e comportamento de Base
Classe Derivada pode estender e/ou refinar a classe Base
Atributos e comportamento so herdados.
Novos atributos podem ser acrescentados.
Novos comportamentos podem ser acrescentados.
Comportamentos podem ser sobrepostos
No se esquea!
Instncia da classe Derivada comporta-se
como instncia da classe Base
Comportamentos so herdados
Instncia da subclasse comporta-se como instncia da classe base
public class SubclasseDeObject extends Object {public static void main(String[] args) {SubclasseDeObject subObject = new SubclasseDeObject();Class c = subObject.getClass();int i = subObject.hashCode();String s = subObject.toString();System.out.println(c.getName() + " " + i + " " + s);}}
Atributos so herdados e/ou criados
A subclasse possui o atributo da classe base e acrescenta outro
A subclasse adiciona um comportamento no presente na classe Base
Public Class BasePublic nome As String = BaseEnd Class
Public Class Derivada
Inherits Base
Private valor As Integer = 2
Public Sub mostraNome()Console.WriteLine(nome)End SubEnd ClassVisual Basic .NET
Objeto de subclasse (comportamento)
Instncia de subclasse deve se comportar tambm como uma instncia da superclasse.
package heranca;
public class SuperClasse {public void fazAlgumaCoisa() {System.out.println("fazendo algo...");}}
package heranca;
public class SubClasse extends SuperClasse {
public static void fazAlgo(SuperClasse refSuperClasse) {refSuperClasse.fazAlgumaCoisa();}
public static void main(String[] args) {SubClasse refSubClasse =
new SubClasse();fazAlgo(refSubClasse);
refSubClasse.fazAlgumaCoisa();}}
Herana
Meio de Transporte:
capacidade
velocidade padro
custo por metro
Herana (UML)
class Barco extends MeioDeTransporte {}class Locomotiva extends MeioDeTransporte {}class TracaoAnimal extends MeioDeTransporte {}class Caminhao extends MeioDeTransporte {}class Aviao extends MeioDeTransporte {}
OO (herana)
Pessoa generalizao de Pessoa fsica e de Pessoa jurdica
Pessoa fsica uma especializao de Pessoa
Pessoa jurdica uma especializao de Pessoa
Especializao
Generalizao
Herana
Subclasses
(derivada)Superclasse
(base)Toda pessoa fsica ejurdica possui nomee endereo
Acrescenta
Herana (oficina mecnica)
Servio
Hora
Data
Mecnica
Lanternagem
Eltrica
Coleo de peas
suspeitas e
aquelas consertadas.Partes que
recebero retoque.Componentes
suspeitos e
aqueles
consertados.
Heranas adequadas e inadequadas
Polgono herda de ponto
Quadrado herda de retngulo
Pessoa herda de animal
Computador herda de mquina
Classe herda de aluno
Voz herda de som
Telefone herda de Comunicao
Infncia herda de FaseDaVida
Maguila herda de Lutador
?
Outro elemento OO muito til!
Separe o que est bom e jogue fora o resto.
Calculo os crditos e dbitos destes documentos (Notas fiscais, promissrias, recibos, ...)
Quais os compromissos noturnos que tenho?
Toque de recolher afeta pessoas, negcios, ...
Imposto de renda se aplica a PFs, PJs, PFs aposentadas, ...
O que est subjacente?
OO (polimorfismo)
Assume muitas formas
Mecanismo no qual uma operao possui implementaes distintas em classes distintas
Exibe listade peasExibe imagem do
carro com marcas
Servio
Marca
Ano
Modelo
Perfil()
Mecnica
Lanternagem
Eltrica
Exibe circuitos
com marcasComo implementar?
Mostra descrio do servio.
OO (polimorfismo)
public class teste {
public static void main (String[] args)
{Mecanica m = new Mecanica();Lanternagem l = new
Lanternagem();Eletrica e = new Eletrica();
Servico s[] = new Servico[3];s[0] = m;s[1] = l;s[2] = e;
for (int i = 0; i < s.length; i++) s[i].perfil();}}
Servio
Marca
Ano
Modelo
Perfil()
Mecnica
Lanternagem
Eltrica
Polimorfismo
A mesma mensagem enviada para uma variedade de objetos tervrias formas de resultados isto polimorfismo. [Java How to Program]
OO (persistncia)
Um objeto retm seu estado
public class teste {public static void main (String[] args) {Persistencia p = new Persistencia(); // Cria objetop.atribuiValor(-45); // Altera valor atravs da interface
// O valor ir persistir tanto quanto queiramosSystem.out.println(p.obtemValor()); // Imprime valor}}public class Persistencia {public int valor; // Varivel que retm um valor inteiro
public Persistencia() { valor = 0; } // Construtor
// Apenas valores >=0 so permitidos public void atribuiValor (int nv) { valor = (nv < 0) ? 0 : nv; }
public int obtemValor() { return valor; }}
Persistencia
t > 0
Interface
Tipo abstrato que identifica servios que uma classe deve implementar
class FazAlgo implements Runnable {public void run() { System.out.println(Fazendo algo...);}
public class Programa {public static void main(String[] args) {new Thread(new FazAlgo()).start();Runnable r = new FazAlgo();r.run();}}
public interface Runnable {public void run();}
Tecnologia de Objetos
Como empregar?
Usar OO exige mtodo
Apropriado s necessidades
Mtodos OO no so mais fceis
Alguns mtodos OO:
RUP
Coad & Yourdon
OMT
Fusion
Objectory
OEP, Octopus, OOA/RD,
OOBE, OOSE, OOSD,
OOSC, OOram, OOHDM, ...
Nem sempre a escolha fcil
Bibliografia Object-Oriented Analysis and Design: A Comparative Review, Brinkkemper, S.
Como identificar objetos?
Abstrao
relgio, lanterna, calculadora, ...
Oferece servios
marca o tempo, ilumina, realiza clculos, ...
culos OO
Ainda no vendido!!!!
preciso treinar a viso!
Exige pensar diferente!
Para a orientao a objetos ser utilizada ser necessrio eliminar o fato de que a maioria dos praticantes no pensam em termos de objetos.
What it Takes to Make OO Work
Kozaczyinski, W. et al. IEEE Software, jan/1993, pp 20-23. preciso
ver o mundo recheado de objetosAdquira o seu culos OO!
Viso convencional
void plantar()
void colher()
void adubar()
int nTrabalhadores()
Time dataColheita()
...
nfase em processos
Viso orientada a objetos
nfase em entidades
O que voc v? (I)
O que voc v? (II)
Especulao simples
(evento desagradvel)Divagao didtica
(vento conduz p at os olhosdeste desafortunado)
O que voc v? (III)
Pessoas mortas?
Classes, UML e Desenvolvimento Orientado a Objetos
Noes
Classe (detalhes segundo a UML)
Atributos
(dados)
Operaes
(comportamento)
Nome da classeTipo do atributoValor inicial
Restrio
Mapeamento entre UML e Java
public class Historico
{
private String NomeAluno;
private String Programa;
private int[] Nota;
private int ano;
public void SetAno(int a) {
ano = (a>=0) ? a : 0;
}
public void Imprime() {...}
public void Valida() {...}
}
Atividade de implementaoProjetoImplementao
?
Para implementar preciso
Dominar programao e algoritmos
A estrutura do software
Para organizar um software preciso
Dominar os princpios de projeto de software
Conhecer o que dever ser oferecido ao cliente
Para conhecer o que o cliente deseja
preciso muita habilidade!
Envolver-se no negcio em questo
Processo de Software
Anlise
Projeto
Implementao
Anlise, Projeto e Implementao OO
public class Lampada {private boolean ligada; public Lampada() {
ligada = false; }public void liga() { ligada = true; }public void
desliga() { ligada = false; }public boolean estaLigada() {
return ligada;
}
public static void main (String[] args){Lampada l = new
Lampada();l.liga();
System.out.println(estaLigada()
? "Ligada"
: "Desligada");}}
Lampada
Anlise
(classificao)Implementao
Projeto
Resumo
Principais recursos da UML
Diagrama de classe e diagrama de seqncia
Como tudo, OO tem vantagens e dificuldades
Pensar no mundo orientado a objeto exige treino
Caractersticas de OO
Identidade de objeto, encapsulamento, herana, ...
Noo de desenvolvimento OO