• Save
Orientação a objetos na prática
Upcoming SlideShare
Loading in...5
×
 

Orientação a objetos na prática

on

  • 8,196 views

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.

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.

Statistics

Views

Total Views
8,196
Views on SlideShare
8,171
Embed Views
25

Actions

Likes
23
Downloads
0
Comments
1

2 Embeds 25

http://www.slideshare.net 18
http://palunodev01.ipuc.com.br 7

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Orientação a objetos na prática Orientação a objetos na prática Presentation Transcript

  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Exemplo Pessoa Identidade: ‘Mário’ Características: olhos pretos nasceu em 16/02/70 pesa 70kg mede 1,70m Comportamento: andar falar comer rir 15
  • Exemplo Telefone Identidade:: número 2576-0989 Características: azul 2.4 GHz tone Comportamento: tocar discar 16
  • Exemplo Ônibus Identidade: placa LXY 7684 Características: cor amarela 30 assentos a diesel Comportamento: frear andar correr buzinar acelerar 17
  • Objeto Representação Identidade Características (estado)‫‏‬ Comportamento Serviços, Interface ou protocolo Mário 18
  • 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
  • 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
  • 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
  • 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
  • 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
  • Classe – Notação Gráfica • Segundo a OMG: 24
  • 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
  • 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
  • Implementação em Java 27
  • 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
  • Exemplo classe Identidade: ‘Meu celular’ Características: marca: Nokia instância da número: 99193467 classe (objeto)‫‏‬ discagem: tom Comportamento: tocar discar 29
  • Implementação em Java 30
  • Classes Classe Instâncias (objetos)‫‏‬ 31
  • Implementação em Java 32
  • Implementação em Java 33
  • 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
  • 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
  • Implementação em Java 36
  • Serviços/Métodos Alguns métodos especiais: › Construtores – criam objetos de uma classe › Destrutores – destroem objetos de uma classe 37
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Herança O método m3(), agora disponível para objetos da classe ClasseB, é aquele implementado em ClasseB. 46
  • Herança Várias subclasses podem herdar da mesma superclasse (Herança Simples). 47
  • Herança Em Java, não é permitido herdar de mais de uma classe (Herança Múltipla). ERRADO!!!! 48
  • 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
  • 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
  • Herança Refatoração Superclasse (características comuns)‫‏‬ Subclasses (características específicas)‫‏‬ 51
  • Herança O mecanismo de herança pode ser melhor entendido através do seguinte exemplo: 52
  • 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
  • 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
  • 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
  • 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
  • Composição • Se um proprietário tiver mais de um carro, a informação ficará redundante. 57
  • Composição • Utilizando uma conexão de ocorrência, o modelo poderia ser melhorado da seguinte forma: 58
  • 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
  • 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
  • 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
  • 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
  • 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
  • Polimorfismo Solução Polimórfica ::Unit1 Janela close(...) maximize(...) var minimize(...) jan: Janela; jan: Janela; move(...) open(...) JLinux JW indows close(...) close(...) maximize(...) maximize(...) minimize(...) minimize(...) move(...) move(...) open(...) open(...) 64
  • 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
  • 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
  • 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
  • 68
  • 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
  • Diagrama de casos de uso 70
  • 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
  • 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
  • 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
  • Caso de Uso - estereótipos • Extends › relacionamento que especifica como e quando um determinado comportamento ocorrerá. › pode também determinar um comportamento opcional. 74
  • 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
  • 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
  • Diagrama de Classes 77
  • 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
  • Classe Abstrata • Representa uma estrutura que não será implementada, mas de importância visual para o problema; • Muito usada com herança; 79
  • 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
  • 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
  • Classe – associação • Declara que pode existir uma ligação entre as instâncias das classes. associação Classe associativa 82
  • Classe – associação bidirecional • Par de atributos inversamente vinculados. 83
  • 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
  • Classe – dependência • É um relacionamento conceitual (não físico). • Uma alteração na classe fornecedora pode impactar a classe dependente. 85
  • Classe – generalização • É um relacionamento sistemático entre classes. • É o processo de herança. 86
  • Classe – generalização GENERALIZAÇÃO • É um relacionamento sistemático entre classes. • É o processo de herança. ESPECIALIZAÇÃ O 87
  • Classe – agregação X composição • É uma associação com significado mais forte; • Relacionamento do tipo: “É parte de...”. 88
  • 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
  • Classe – pacotes 90
  • 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
  • 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
  • Diagrama de Comunicação 93
  • 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
  • Diagrama de Sequência 95
  • 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
  • Diagrama de Máquina de Estado 97
  • Diagrama de Atividades • Descreve processo de negócio e fluxo de trabalho; • Suportam comportamento paralo (diferença para fluxograma); • Semelhante Diagrama de Estados; 98
  • Diagrama de Atividades Mostra “quem” faz “o quê” 99
  • Ferramentas CASE para UML • Rational Rose (IBM)‫‏‏‬ • Enterprise Architect (Sparx Systems)‫‏‏‬ • ArgoUML (Tigris)‫‏‏‬ • Jude (Change Vision)‫‏‏‬ 100
  • Links Úteis • BlueJ – www.bluej.org • UML – www.uml.org • Jude – jude.change-vision.com 101
  • 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
  • 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
  • Perguntas 104
  • OBRIGADO ! 105
  • 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