Entenda o contexto da modelagem de software e sistemas, descubra a importância e as principais características da orientação a objetos, incluindo discussão de um case.
1. 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
2. Palestrante
• Desenvolvedor JAVA.
• Ex-docente do Senac - curso de desenvolvedor JAVA.
• Ex-docente das Faculdades São José e Moacyr Bastos.
• Ex-Analista de Sistemas da IplanRio.
• Analista de Sistemas da FAPES/BNDES.
• Docente da Academia do Concurso Público – gestão TI.
• Docente da SOFEP.
• Docente do Instituto INFNET.
2
3. O paradigma da Orientação a Objetos
Um paradigma é uma forma de abordar um problema.
O paradigma da orientação a objetos surgiu no fim
dos anos 60.
Hoje em dia, praticamente suplantou o paradigma
anterior, o paradigma estruturado...
3
4. 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?
4
5. 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.
5
6. 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.
6
7. Orientação a Objetos - Princípios
Tudo é um objeto.
Pense em um objeto como uma super variável: ele
armazena dados, mas você também pode fazer
requisições a esse objeto, pedindo que ele faça
operações sobre si próprio. Em teoria, você pode
representar qualquer elemento conceitual no
problema que você está tentando resolver (cachorros,
livros, sócios, empréstimos, etc.) como um objeto no
seu programa.
7
8. 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. Mais
concretamente, você pode pensar em uma mensagem
como sendo uma chamada de um procedimento ou
função pertencente a um objeto em particular.
8
9. Orientação a Objetos - Princípios
Um objeto pode ser composto por vários outros
objetos
Em outras palavras: você pode criar um novo tipo de
objeto empacotando objetos existentes. Dessa forma,
você pode adicionar complexidade a um programa e
escondê-la por trás da simplicidade de uso dos
objetos.
9
10. Orientação a Objetos - Princípios
Todo objeto tem um tipo.
Usando as palavras certas, cada objeto é uma
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?”
10
11. Orientação a Objetos - Princípios
Todos os objetos de um dado tipo podem receber as
mesmas mensagens.
Além disso, uma vez que, por exemplo, um objeto do
tipo “círculo” é também um objeto do tipo “forma
geométrica”, 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.
11
12. Objeto
• Definição:
• Um conceito, uma abstração 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
13. Abstração
Uma abstração é qualquer modelo que inclui
os aspectos relevantes de alguma coisa, ao
mesmo tempo em que ignora os menos
importantes.
13
14. Exemplo
Beija-Flor
Identidade: ‘o beija-flor que vem ao meu jardim’
Características:
penas azuis
bico fino
vôo rápido
Comportamento:
voar
piar
14
19. Objeto
Implementação
› Interface Visível
Conjunto de operações
› Parte encapsulada (escondida)
Estado do Objeto - Atributos
Implementação de suas operações - Métodos
Estado do
Objeto (valor Serviços,
de seus Operações
atributos) ou Interface
da Classe
19
20. Encapsulamento
Na terminologia da orientação a objetos, diz-se que
um objeto possui uma interface.
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 e conseqüentemente as mensagens que
ele recebe.
20
21. Encapsulamento
Uma interface pode ter várias
formas de implementação.
Mas, pelo Princípio do
Encapsulamento, a
implementação de um
serviço no objeto servidor
não importa para o objeto
cliente. (O cliente confia em
interfaces e não em
implementações)
21
22. Classe
Definição:
› Abstrações utilizadas para representar um
conjunto de objetos com características e
comportamento idênticos
Uma classe pode ser vista como uma “fábrica de
objetos”
22
23. Classe
Tecnicamente falando, objetos são “instâncias” de
uma classe em tempo de execução
› Todos os objetos são instâncias de alguma classe
› Todos os objetos de uma classe são idênticos no
que diz respeito a sua interface e implementação
› O que difere um objeto de outro é seu estado e sua
identidade
23
25. Exemplo
classe
Identidade::o beija-flor que vem ao meu jardim
Características: instância da
cor das penas: azuis classe (objeto)
formato do bico: fino
velocidade de vôo: rápida
Comportamento:
voar
piar
25
26. Exemplo
classe
Identidade:: meu pombo correio
Características:
cor das penas: cinza instância da
formato do bico: curto classe (objeto)
velocidade de vôo: média
Comportamento:
voar
piar
26
28. Exemplo
classe
Identidade: ‘Telefone da minha casa’
Características:
marca: Siemens instância da
número: 2576-0989 classe (objeto)
discagem: pulso
Comportamento:
tocar
discar
28
29. Exemplo
classe
Identidade: ‘Meu celular’
Características:
marca: Nokia instância da
número: 99193467 classe (objeto)
discagem: tom
Comportamento:
tocar
discar
29
34. 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
34
35. 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
35
37. Serviços/Métodos
Alguns métodos especiais:
› Construtores – criam objetos de uma classe
› Destrutores – destroem objetos de uma classe
37
38. Passos para a criação de um objeto
Declarar uma referência para o objeto
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, nil para referências, false para booleanos, string
vazia para Strings.
38
39. 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.
39
40. O método construtor (FAQ)
É obrigatória a inclusão de um método construtor na
classe?
› Não. Um construtor default é herdado de TObject.
Este construtor aloca espaço para o novo objeto
em memória e cria um objeto com os atributos e
referências todas preenchidas com zeros.
• Quando então devo escrever um método construtor?
› Quando houver atributos privados que não
possam mais ser alterados uma vez que o objeto
tenha sido instanciado
› Quando o objeto for um objeto complexo, cuja
arquitetura interna (atributos e referências) não é
conhecida pelo programador.
40
41. Herança
O que é herança?
Herdar é derivar características de gerações
precedentes.
No mundo da Programação Orientada a Objetos, o
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.
41
42. Herança
Para que serve a herança?
Considere a criação de uma classe ClasseB.
Que métodos estão disponíveis através de uma
referência para a ClasseB (isto é, um objeto)?
42
43. Herança
Suponha agora que a classe ClasseB herda de
ClasseA
Que métodos estão agora disponíveis para uma
referência da ClasseB (um objeto) ?
43
44. Herança
Poderoso mecanismo para o reaproveitamento de
código.
O objeto da classe classeB tem agora disponíveis os
métodos da classe ClasseA sem ser necessário
reescrevê-los na classe ClasseB.
Um objeto da classe ClasseB também é um objeto da
classe ClasseA.
44
45. 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 classe ClasseA.
A classe ClasseB pode "recusar" parte da herança,
reimplementando os métodos herdados,
sobrescrevendo-os.
45
46. Herança
O método m3(), agora disponível para objetos da
classe ClasseB, é aquele implementado em ClasseB.
46
47. Herança
Várias subclasses podem herdar da mesma
superclasse (Herança Simples).
47
48. Herança
Em Java, não é permitido herdar de mais de uma
classe (Herança Múltipla).
ERRADO!!!!
48
49. 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?
49
50. Herança
A Herança também 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...
50
52. Herança
O mecanismo de herança pode ser melhor entendido
através do seguinte exemplo:
52
53. Herança
A classe ContaBancaria tem 4 atributos:
› nome: armazena o nome do cliente
› cpf: armazena o número do CPF do cliente
› numeroConta: armazena o número da conta do
cliente
› saldo: armazena o saldo da conta
Os métodos depositar e sacar são usados para fazer um depósito
ou retirada da conta bancária.
A classe ContaBancária, sozinha, não é suficiente para realizar
todas as transações bancárias. Existem geralmente dois tipos de
contas: a conta corrente e a conta de investimentos.
53
54. Herança
Vamos derivar duas subclasses que herdam da
superclasse ContaCorrente
As subclasses ContaInvestimento e ContaCorrente herdam as
propriedades e métodos da classe ContaBancaria
54
55. Composição
A classe contém referências para objetos de outras
classes:
› Estas referências são também atributos da classe.
Uma maneira alternativa de estender a funcionalidade
de uma classe agregando funcionalidades de outras
classes.
Herança x Composição
É UM x TEM UM
55
56. 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!
56
57. Composição
• Se um proprietário tiver mais de um carro, a
informação ficará redundante.
57
58. Composição
• Utilizando uma conexão de ocorrência, o modelo
poderia ser melhorado da seguinte forma:
58
59. 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.
Nesta seção: invocaremos os métodos das
subclasses usando referências para a superclasse
59
60. Polimorfismo
Conceito Chave
Objetos das subclasses podem ser tratados como
objetos da superclasse
A classe B É UMA classe A
→ Um objeto da classe B
::Project2
A pode ser usado em qualquer
m1(...) lugar onde um objeto da
m2(...)
classe A é esperado.
B
m1(...)
m3(...)
B A
60
61. 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()
61
62. Polimorfismo
Chamadas polimórficas permitem simplificar a lógica
condicional dos programas
Imagine um sistema ::Unit1 JW indows JLinux
construído para close(...) close(...)
maximize(...) maximize(...)
trabalhar tanto em minimize(...) minimize(...)
Windows quanto em move(...) move(...)
open(...) open(...)
Linux
jWin;
JWindows jWin;
jLin;
JLinux jLin;
62
63. Polimorfismo
TObject);
procedure TForm1.FormCreate(Sender: TObject);
begin
if SO='Windows' then
jWin := JWindows.Create
else
jLin := JLinux.Create;
JLinux.Create;
end;
Observe a quantidade
TMessage);
procedure TForm1.WMSysCommand(var Message: TMessage); de lógica
begin
(Message.wParam
if (Message.wParam = SC_MINIMIZE) then
condicional!
if SO='Windows' then
jWin.minimize
else
jLin.minimize
(Message.wParam
else if (Message.wParam = SC_MAXIMIZE) then
if SO='Windows' then
jWin.maximize
else
jLin.maximize
(Message.wParam
else if (Message.wParam = SC_CLOSE) then
63
65. Polimorfismo
TObject);
procedure TForm1.FormCreate(Sender: TObject);
begin
if SO='Windows' then
jan := JWindows.Create
else
jan := JLinux.Create;
JLinux.Create;
end;
TMessage);
procedure TForm1.WMSysCommand(var Message: TMessage);
begin
(Message.wParam
if (Message.wParam = SC_MINIMIZE) then
jan.minimize
else if (Message.wParam = SC_MAXIMIZE) then
(Message.wParam Observe a
jan.maximize
ausência de
else if (Message.wParam = SC_CLOSE) then
(Message.wParam
jan.close lógica
(Message.wParam
else if (Message.wParam = SC_MOVE) then condicional
jan.move
else
inherited;
end;
65
66. Polimorfismo
Observe ainda como seria fácil acrescentar uma
janela MOTIF para o Sun Solaris
::Unit1
Janela
close(...)
maximize(...)
minimize(...)
move(...)
open(...)
JLinux JSolaris JW indows
close(...) close(...) close(...)
maximize(...) maximize(...) maximize(...)
minimize(...) minimize(...) minimize(...)
move(...) move(...) move(...)
open(...) open(...) open(...)
66
67. Polimorfismo
TObject);
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
JSolaris.Create;
jan := JSolaris.Create;
end;
TMessage);
procedure TForm1.WMSysCommand(var Message: TMessage);
begin
(Message.wParam
if (Message.wParam = SC_MINIMIZE) then
jan.minimize
(Message.wParam
else if (Message.wParam = SC_MAXIMIZE) then
jan.maximize
(Message.wParam
else if (Message.wParam = SC_CLOSE) then ... e nada mudou
jan.close
(Message.wParam
else if (Message.wParam = SC_MOVE) then
aqui!
jan.move
else
inherited;
end;
67
69. Diagrama de casos de uso
• Formado por: Atores, Casos de Uso e
relacionamentos:
› Que atores realizam os casos de uso;
› Quais casos de uso incluem (usam) outros casos
de uso;
› Quais casos de uso trazem funcionalidades
(estendem) de outros casos de uso;
69
71. Ator
• Papel que o usuário desempenha com relação ao
sistema.
<<actor>>
Aluno
• Principal o caso de uso tenta satisfazer ao
seu objetivo no sistema;
• Secundário qualquer outro que participa
no caso de uso;
71
72. Caso de Uso
• Técnica para captação de requisitos de
um sistema.
› Funcional funcionalidades do sistema;
› Não-funcional características de
qualidade relacionadas às funcionalidades;
72
73. Caso de Uso
• Descrevem interações típicas entre
usuários de um sistema, através de
cenários:
› Típico ( ou principal ) comportamento
esperado;
› Alternativo desvios no comportamento.
73
74. Caso de Uso - estereótipos
• Extends
› relacionamento que especifica como e quando
um determinado comportamento ocorrerá.
› pode também determinar um comportamento
opcional.
74
75. Caso de Uso - estereótipos
• Include
› define que o caso de uso contém um
comportamento de outro caso de uso.
› comportamento obrigatório.
75
76. Caso de Uso - descrição
• Cada caso de uso tem uma descrição o
qual descreve a funcionalidade que será
construída no sistema proposto.
76
78. Diagrama de Classes
• Descreve os tipos de objetos presentes no sistema e
os vários relacionamentos estáticos existentes entre
eles.
• Também mostra atributos e operações das classes.
› Atributos valores dos campos;
› Operações ações que uma classe sabe
realizar;
78
79. Classe Abstrata
• Representa uma
estrutura que não
será implementada,
mas de importância
visual para o
problema;
• Muito usada com
herança;
79
80. Classe Abstrata
Não pode ser instanciada diretamente,
apenas por instâncias de subclasses;
Normalmente tem uma ou mais operações
abstratas (sem implementação);
NOTAÇÃO
NOTAÇÃO:
Nome da classe em itálico
itá
Rotulado com {abstract}
Rotulado com <<abstract>>
80
81. Classe - Visibilidade
operaç
Qualquer atributo ou operação pode ser
rotulado.
rotulado.
abreviaç
A UML fornece quatro abreviações para
visibilidade:
visibilidade:
+ público
- privado
~ (default)
pacote (default)
# protegido
81
82. Classe – associação
• Declara que pode existir uma
ligação entre as instâncias das
classes.
associação
Classe associativa
82
83. Classe – associação bidirecional
• Par de atributos inversamente
vinculados.
83
84. Classe – multiplicidade
• Indica quantos objetos podem
preencher o atributo;
• Mais comuns são:
› 1 (obrigatório);
› 0..1 (opcional);
› * (múltiplos – 0 ou mais)
84
85. Classe – dependência
• É um relacionamento
conceitual (não físico).
• Uma alteração na classe
fornecedora pode
impactar a classe
dependente.
85
86. Classe – generalização
• É um
relacionamento
sistemático
entre classes.
• É o processo de
herança.
86
87. Classe – generalização
GENERALIZAÇÃO
• É um
relacionamento
sistemático
entre classes.
• É o processo de
herança.
ESPECIALIZAÇÃ
O 87
88. Classe – agregação X composição
• É uma
associação com
significado
mais forte;
• Relacionamento
do tipo: “É
parte de...”.
88
89. Classe – pacotes
Agrupam classes em estrutura hierárquica;
Fornecem visão das dependências entre os
principais elementos de um sistema;
Uma classe é membro de um único pacote;
Pacotes contém subpacotes e classes;
Toda classe deve ter um nome exclusivo
dentro do pacote a que pertence;
89
91. Diagramas de Interação
• Tornam as chamadas entre participantes cristalinas;
• Fornecem visão excepcional a respeito de quais
participantes estão realizando quais
comportamentos;
91
92. Diagrama de Comunicação
• Enfatiza os vínculos de dados entre os vários
participantes na interação;
• Permite livre posicionamento dos PARTICIPANTES,
com numeração decimal aninhada;
• Diagrama de Colaboração (UML 1.x)
92
94. Diagrama de Sequência
• Indica clareza na interação dos participantes;
• Usado para observar o comportamento de vários
objetos dentro do mesmo caso de uso;
• Objeto = participante
94
96. Diagrama de Máquina de Estado
• Utilizados para especificar o comportamento da
instância de um único objeto;
• Possui estado inicial e final,
estados e transições ;
96
98. Diagrama de Atividades
• Descreve processo de negócio e fluxo de trabalho;
• Suportam comportamento paralo (diferença para
fluxograma);
• Semelhante Diagrama de Estados;
98
102. A Formação do Infnet
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.
102
103. A Formação 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 processo 40 h
de desenvolvimento de software usando UML.
Java Programming
I552 Ensinar a programar em Java para alunos que já sabem programar em 48 h
qualquer outra linguagem.
Java Web Applications
Ensinar questões avançadas do desenvolvimento de aplicações Web
I554 48 h
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 sistemas 48 h
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 celulares e 32 h
hand helds.
Java Workshop
I562 Colocar em prática o conhecimento avançado de desenvolvimento de 32 h
aplicações Java.
103
106. 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
106