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

Orientação a Objetos na Prática

Entenda o contexto da modelagem de software e sistemas, descubra a


importância e as principais características da orientação a objetos.

Andre Luiz Monteiro da Costa


andre.monteiro@prof.infnet.edu.br
O paradigma da Orientação a Objetos

 Paradigma ==> forma de abordar um problema.

 Surgiu no fim dos anos 60.

 Hoje em dia, praticamente suplantou o paradigma


anterior, o paradigma estruturado...

2
O paradigma da Orientação a Objetos

 Alan Kay, um dos pais do paradigma da orientação a


objetos, formulou a chamada analogia biológica.

 “Como seria um sistema de software que funcionasse


como um ser vivo?

3
Analogia Biológica

 Cada “célula” interagiria com outras células através


do envio de mensagens para realizar um objetivo
comum.

 Adicionalmente, cada célula se comportaria como


uma unidade autônoma.

4
Analogia Biológica

 De uma forma mais geral, Kay pensou em como


construir um sistema de software a partir de agentes
autônomos que interagem entre si.

 Com isso, ele estabeleceu os princípios da orientação


a objetos.

5
Orientação a Objetos - Princípios

 Tudo é um objeto.

Objeto = super variável: armazena dados, mas se


pode fazer requisições a esse objeto, pedindo que ele
faça operações sobre si próprio.

Em teoria, qualquer elemento conceitual do problema


pode ser representado como um objeto em um
programa (Ex.: cachorros, livros, sócios,
empréstimos, etc) .

6
Orientação a Objetos - Princípios

 Um programa é uma coleção de objetos dizendo uns


aos outros o que fazer.

Para fazer uma requisição a um objeto você “manda


uma mensagem” para este objeto.
Mensagem = chamada de um procedimento ou função
pertencente a um objeto em particular.

7
Orientação a Objetos - Princípios

 Um objeto pode ser composto por vários outros


objetos

Um novo tipo de objeto pode ser criado a partir de


objetos existentes.

Dessa forma, complexidade pode ser adicionada a um


programa e escondida por trás da simplicidade de
uso dos objetos.

8
Orientação a Objetos - Princípios

 Todo objeto tem um tipo.

Objeto = instância de uma classe, onde classe é um


sinônimo de tipo.

A questão mais importante relativa a uma classe é


“que mensagens eu posso enviar para uma instância
dessa classe?”

9
Orientação a Objetos - Princípios

 Todos os objetos do mesmo tipo podem receber as


mesmas mensagens.
 Na figura abaixo, o objeto “Círculo”
aceita qualquer mensagem
endereçada a uma “Forma
Geométrica”.

Essa capacidade de “subtituição” de


um objeto por outro é um dos mais
poderosos conceitos em orientação a
objetos. (Herança)

10
Abstração

 Inclui os aspectos relevantes de alguma


coisa, ignorando os menos importantes.

11
Objeto

• Definição:
• Um conceito, com significado específico em um

contexto

• Propósito:
• Representar uma entidade do mundo real

• Objetos possuem:
• Identidade

• Características que determinam seu estado

• Comportamento específico definido por um

conjunto de ações
12
Exemplo

Beija-Flor

Identidade:: ‘o beija-flor que vem ao meu jardim’


Estado:
penas azuis
bico fino
vôo rápido

Comportamento:
voar
piar

13
Exemplo

 Pessoa

Identidade:: ‘Mário’
Estado::
olhos pretos
nasceu em 16/02/70
pesa 70kg
mede 1,70m
Comportamento::
andar
falar
comer
rir

14
Exemplo

Telefone

Identidade:: número 2576-0989


Estado::
azul
2.4 GHz
tone

Comportamento::
tocar
discar

15
Objeto

Representação

Identidade
Estado
(características)

Comportamento

Serviços,
Interface ou
protocolo
Mário

16
Objeto

 Implementação

› Interface Visível

› Parte encapsulada (escondida)

Estado do Objeto Interface da Classe


(valor dos atributos)

17
Encapsulamento

 A interface de um objeto é o que ele conhece e o que


ele sabe fazer, sem descrever como o objeto conhece
ou faz.

 A interface de um objeto define os serviços que ele


pode realizar (mensagens que ele recebe).

 Uma interface pode ter várias


formas de implementação.

18
Classe

 “fábrica de objetos”.

19
Classe

› “Fábrica de Objetos”.

 Objetos:

› São instâncias de alguma classe.

› De uma classe são idênticos em sua interface e


implementação.

› Diferem-se de outros por seu estado e sua


identidade.

20
Classe – Notação Gráfica

• Segundo a OMG:

21
Implementação em Java

22
Implementação em Java

23
Classes

Classe

Instâncias
(objetos)

24
Implementação em Java

25
Implementação em Java

26
Atributos

 Descrevem as características das instâncias de uma classe


 Seus valores definem o estado do objeto
 O estado de um objeto pode mudar ao longo de sua existência
 A identidade de um objeto, contudo, nunca muda

Funcionário_Helena

Nome=Helena Reis
Nasc=28/01/1965
Salário = 4.000

InformarSalário Funcionário_Mário
CalcularIdade
Nome=Mário Sá
Nasc=16/02/1970
Salário = 3.000

InformarSalário
CalcularIdade

27
Serviços/Operações

 Representam o comportamento das instâncias de uma classe


 Correspondem às ações das instâncias de uma classe

Funcionário_Helena
4000
Nome=Helena Reis
Nasc=28/01/1965
Salário = 4.000

InformarSalário Funcionário_Mário
CalcularIdade
Nome=Mário Sá
3000 Nasc=16/02/1970
Salário = 3.000
Informar
InformarSalário
Salário? CalcularIdade

28
Implementação em Java

29
Serviços/Métodos

 Alguns métodos especiais:

› Construtores – criam objetos de uma classe

› Destrutores – destroem objetos de uma classe

30
Passos para a criação de um objeto

 Declarar uma referência para o objeto (variável)

Funcionario funcionario;

 Criar uma instância do objeto

funcionario = new Funcionario();

O sistema operacional aloca espaço em memória para o novo


objeto e preenche os seus atributos com valores default (zero
para números, null para referências, false para booleanos,
string vazia para Strings.

31
Passos para a criação de um objeto

 Se houver um método construtor, este é invocado

O método construtor é usado para alterar os valores default dos


atributos, possibilitando que o objeto se torne disponível para a
aplicação já em um estado pré-definido

 Modificação explícita do estado do objeto


funcionario.salario = 4000; //se atributo é público
funcionario.gravaSalario(4000); // caso contrário

A referência para o objeto pode ser usada para alterar o estado


dos atributos do objeto.

32
Herança

 Derivar características de gerações precedentes.

 Termo é associado com uma das formas de


reutilização de software.

 Através da herança, novas classes podem ser


derivadas das classes existentes.

 A nova classe herda propriedades e métodos da


classe base.
 A nova classe também pode adicionar suas
próprias propriedades e métodos.

33
Herança

 Para que serve a herança?

Considere a criação da ClasseB.

Que métodos estão disponíveis para objetos da


ClasseB?

34
Herança

Suponha que a ClasseB herda da ClasseA

Que métodos estão agora disponíveis para objetos da


ClasseB ?

35
Herança

 O objeto da classeB tem agora disponíveis os


métodos da classe ClasseA, sem ter que reescrevê-
los na ClasseB.

 Um objeto da ClasseB também é um objeto da classe


ClasseA.

36
Herança

 Facilita a manutenção do código: Os métodos não


são replicados. Se for necessário alterar o código do
método m3(), basta alterá-lo na ClasseA.

 A ClasseB pode "recusar" parte da herança,


reimplementando os métodos herdados,
sobrescrevendo-os.

37
Herança

O método m3(), agora disponível para objetos da


ClasseB, é aquele implementado em ClasseB.

38
Herança

 Várias subclasses podem herdar da mesma


superclasse (Herança Simples).

39
Herança

 Em Java, não é permitido herdar de mais de uma


classe (Herança Múltipla).

ERRADO!!!!

40
Herança

 A hierarquia de herança pode ter vários níveis

 Que métodos estão agora disponíveis para uma


instância de ClasseC?
41
Herança

 Pode surgir a partir da refatoração de classes


existentes, de modo a eliminar a duplicação de
código

Grande quantidade de atributos e métodos duplicados...


42
Herança

 Refatoração

Superclasse
(características comuns)

Subclasses
(características específicas)

43
Composição

 A classe contém referências para objetos de outras


classes:
› Estas referências são também atributos da classe.

 Maneira alternativa de estender a funcionalidade de


uma classe, agregando funcionalidades de outras
classes.

 Herança x Composição
É UM x TEM UM

44
Composição

 O mecanismo de herança nem sempre é apropriado

 Estender funcionalidade através de herança pode não


ser "natural":

› Uma conta de investimento é uma conta bancária!

› Uma conta de investimento não é uma Pessoa!

45
Composição

• Se um proprietário tiver mais de um carro, a


informação ficará redundante.

46
Composição

• Utilizando uma conexão de ocorrência, o modelo


poderia ser melhorado da seguinte forma:

47
Polimorfismo

 "Programação Genérica".

 Trata objetos na mesma hierarquia de classes como


se todos fossem objetos da superclasse.

 Tornam o programa extensível:


› Facilidade para adicionar novas classes.

48
Polimorfismo

 Conceito Chave
Objetos das subclasses podem ser tratados como
objetos da superclasse
A classe B É UMA classe A
::Project2
→ Um objeto da classe B
A pode ser usado em qualquer
m1(...) lugar onde um objeto da
m2(...)
classe A é esperado.

m1(...)
m3(...)

B A

49
Polimorfismo

 Tabelas Virtuais

Classe A
::Project2
operação método invocado
m1() A.m1() A

m2() A.m2() m1(...)


m2(...)

B
Classe B
m1(...)
operação método invocado m3(...)

m1() B.m1()
m2() A.m2()
m3() B.m3()
50
Polimorfismo

 Chamadas polimórficas permitem simplificar a lógica


condicional dos programas

Imagine um sistema ::Unit1 JWindows JLinux

construído para close(...) close(...)


trabalhar tanto em maximize(...)
minimize(...)
maximize(...)
minimize(...)
Windows quanto em move(...) move(...)
open(...) open(...)
Linux

JWindows jWin;
JLinux jLin;

51
Polimorfismo
procedure TForm1.FormCreate(Sender: TObject);
begin
if SO='Windows' then
jWin := JWindows.Create
else
jLin := JLinux.Create;
end;
Observe a quantidade
procedure TForm1.WMSysCommand(var Message: TMessage); de lógica
begin
if (Message.wParam = SC_MINIMIZE) then
condicional!
if SO='Windows' then
jWin.minimize
else
jLin.minimize
else if (Message.wParam = SC_MAXIMIZE) then
if SO='Windows' then
jWin.maximize
else
jLin.maximize
else if (Message.wParam = SC_CLOSE) then
52
Polimorfismo

 Solução Polimórfica
::Unit1

Janela

close(...)
maximize(...)
var minimize(...)
jan: Janela; move(...)
open(...)

JLinux JWindows

close(...) close(...)
maximize(...) maximize(...)
minimize(...) minimize(...)
move(...) move(...)
open(...) open(...)

53
Polimorfismo
procedure TForm1.FormCreate(Sender: TObject);
begin
if SO='Windows' then
jan := JWindows.Create
else
jan := JLinux.Create;
end;

procedure TForm1.WMSysCommand(var Message: TMessage);


begin
if (Message.wParam = SC_MINIMIZE) then
jan.minimize
else if (Message.wParam = SC_MAXIMIZE) then Observe a
jan.maximize
ausência de
else if (Message.wParam = SC_CLOSE) then
jan.close lógica
else if (Message.wParam = SC_MOVE) then condicional
jan.move
else
inherited;
end;
54
Polimorfismo

 Observe ainda como seria fácil acrescentar uma


janela MOTIF para o Sun Solaris
::Unit1

Janela

close(...)
maximize(...)
minimize(...)
move(...)
open(...)

JLinux JSolaris JWindows

close(...) close(...) close(...)


maximize(...) maximize(...) maximize(...)
minimize(...) minimize(...) minimize(...)
move(...) move(...) move(...)
open(...) open(...) open(...)

55
Polimorfismo
procedure TForm1.FormCreate(Sender: TObject);
begin
if SO='Windows' then
jan := JWindows.Create Adicionou-se mais
else if SO = 'Linux' then
jan := JLinux.Create uma linha aqui...
else
jan := JSolaris.Create;
end;

procedure TForm1.WMSysCommand(var Message:


TMessage);
begin
if (Message.wParam = SC_MINIMIZE) then
jan.minimize
else if (Message.wParam = SC_MAXIMIZE) then
jan.maximize ... e nada mudou
else if (Message.wParam = SC_CLOSE) then
jan.close
aqui!
else if (Message.wParam = SC_MOVE) then
jan.move
else
inherited;
end;
56
57
Visão Geral da UML

58
Diagrama de Casos de Uso

Comportamento
59
Diagrama de Classes

Estrutura
60
Diagrama de Seqüência

Comportamento
61
Diagrama de Colaboração

Comportamento
62
Diagrama de Estados

Estrutura e Comportamento
63
Diagrama de Atividades

Comportamento
64
Diagrama de Componentes

Estrutura
65
Diagrama de Implantação

Estrutura
66
Diagrama de Máquina de Estado

67
Diagrama de Atividades

• Descreve processo de negócio e fluxo de trabalho;

• Suportam comportamento paralo (diferença para


fluxograma);

• Semelhante Diagrama de Estados;

68
Diagrama de Atividades

M o s t r a “q u e m ”
f a z “o q u ê ”

69
Links Úteis

• BlueJ – www.bluej.org
• UML – www.uml.org
• Jude – jude.change-vision.com

70
O Pioneirismo do Infnet
• O Infnet foi o pioneiro do ensino de Java no Rio de Janeiro,
ministrando curso desta tecnologia antes mesmo da Sun.

Formação Desenvolvedor Java


Código Nome do curso Horas

Projeto de Sistemas e Orientação a Objetos com UML


I550 40 h
Ensinar conceitos de orientação a objetos e sua utilização no processo de
desenvolvimento de software usando UML.

Java Programming
I552 48 h
Ensinar a programar em Java para alunos que já sabem programar em qualquer outra
linguagem.

Java Web Applications


I554 48 h
Ensinar questões avançadas do desenvolvimento de aplicações Web com a
linguagem de programação Java e os frameworks mais usados no mercado.

71
A Formação Completa do Infnet
Formação Desenvolvedor Java: Sistemas Distribuídos
Código Nome do curso Horas
Projeto de Sistemas e Orientação a Objetos com UML
I550 Ensinar conceitos de orientação a objetos e sua utilização no 40 h
processo de desenvolvimento de software usando UML.

Java Programming
I552 Ensinar a programar em Java para alunos que já sabem programar 48 h
em qualquer outra linguagem.

Java Web Applications


Ensinar questões avançadas do desenvolvimento de aplicações
I554 48 h
Web com a linguagem de programação Java e os frameworks mais
usados no mercado.

Java Enterprise Applications


I556 Ensinar conceitos avançados de programação em Java para 48 h
sistemas com alta demanda de acesso e segurança.

Java Security
I558 Ensinar conceitos avançados de segurança em Java para sistemas 24 h
desktop e J2EE.

Java Mobile
I560 Ensinar programação Java para dispositivos móveis, como 32 h
celulares e hand helds.

Java Workshop
I562 Colocar em prática o conhecimento avançado de desenvolvimento 32 h
de aplicações Java.

72
Perguntas

73
OBRIGADO !

74
Contatos

www.infnet.edu.br
cursos@infnet.edu.br
2122-8800

Esta palestra está disponível em:

http://www.infnet.edu.br/Home/Eventos/CiclodePalestraseMiniCursos/EventosemTI/tabid/257/Default.aspx

Ministrada por
André Luiz Monteiro da Costa

E-mail:
andre.monteiro@prof.infnet.edu.br

75