Orientação a Objetos (3)

download Orientação a Objetos (3)

If you can't read please download the document

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