Baixe o app para aproveitar ainda mais
Prévia do material em texto
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 22 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... 33 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? O paradigma da Orientação a Objetos 44 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. 55 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. Analogia Biológica 66 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) . 77 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. Orientação a Objetos - Princípios 88 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. Orientação a Objetos - Princípios 99 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?” Orientação a Objetos - Princípios 1010 Todos os objetos do mesmo tipo podem receber as mesmas mensagens. Orientação a Objetos - Princípios 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) 1111 Abstração Inclui os aspectos relevantes de alguma coisa, ignorando os menos importantes. 1212 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 1313 Exemplo Beija-Flor Identidade:: ‘o beija-flor que vem ao meu jardim’ Estado: penas azuis bico fino vôo rápido Comportamento: voar piar 1414 Pessoa Identidade:: ‘Mário’ Estado:: olhos pretos nasceu em 16/02/70 pesa 70kg mede 1,70m Comportamento:: andar falar comer rir Exemplo 1515 Telefone Identidade:: número 2576-0989 Estado:: azul 2.4 GHz tone Comportamento:: tocar discar Exemplo 1616 Representação Mário Estado (características) Comportamento Identidade Serviços, Interface ou protocolo Objeto 1717 Implementação › Interface Visível › Parte encapsulada (escondida) Estado do Objeto (valor dos atributos) Interface da Classe Objeto 1818 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. 1919 Classe “fábrica de objetos”. 2020 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. 2121 • Segundo a OMG: Classe – Notação Gráfica 2222 Implementação em Java 2323 Implementação em Java 2424 Classes Classe Instâncias (objetos) 2525 Implementação em Java 2626 Implementação em Java 2727 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 CalcularIdade Funcionário_Mário Nome=Mário Sá Nasc=16/02/1970 Salário = 3.000 InformarSalário CalcularIdade 2828 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 Nome=Helena Reis Nasc=28/01/1965 Salário = 4.000 InformarSalário CalcularIdade Funcionário_Mário Nome=Mário Sá Nasc=16/02/1970 Salário = 3.000 InformarSalário CalcularIdade 4000 3000 Informar Salário? 2929 Implementação em Java 3030 Serviços/Métodos Alguns métodos especiais: › Construtores – criam objetos de uma classe › Destrutores – destroem objetos de uma classe 3131 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. 3232 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. Passos para a criação de um objeto 3333 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. 3434 Para que serve a herança? Considere a criação da ClasseB. Que métodos estão disponíveis para objetos da ClasseB? Herança 3535 Suponha que a ClasseB herda da ClasseA Que métodos estão agora disponíveis para objetos da ClasseB ? Herança 3636 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. Herança 3737 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. 3838 O método m3(), agora disponível para objetos da ClasseB, é aquele implementado em ClasseB. Herança 3939 Várias subclasses podem herdar da mesma superclasse (Herança Simples). Herança 4040 Em Java, não é permitido herdar de mais de uma classe (Herança Múltipla). ERRADO!!!! Herança 4141 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? 4242 Pode surgir a partir da refatoração de classes existentes, de modoa eliminar a duplicação de código Grande quantidade de atributos e métodos duplicados... Herança 4343 Refatoração Superclasse (características comuns) Subclasses (características específicas) Herança 4444 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 4545 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! Composição 4646 • Se um proprietário tiver mais de um carro, a informação ficará redundante. Composição 4747 • Utilizando uma conexão de ocorrência, o modelo poderia ser melhorado da seguinte forma: Composição 4848 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. 4949 Polimorfismo Conceito Chave Objetos das subclasses podem ser tratados como objetos da superclasse ::Project2 A m1(...) m2(...) B m1(...) m3(...) A classe B É UMA classe A → Um objeto da classe B pode ser usado em qualquer lugar onde um objeto da classe A é esperado. B A 5050 Tabelas Virtuais A.m2()m2() A.m1()m1() método invocadooperação Classe A ::Project2 A m1(...) m2(...) B m1(...) m3(...) B.m3()m3() A.m2()m2() B.m1()m1() método invocadooperação Classe B Polimorfismo 5151 Chamadas polimórficas permitem simplificar a lógica condicional dos programas Imagine um sistema construído para trabalhar tanto em Windows quanto em Linux ::Unit1 JWindows close(...) maximize(...) minimize(...) move(...) open(...) JLinux close(...) maximize(...) minimize(...) move(...) open(...) JWindows jWin; JLinux jLin; Polimorfismo 5252 procedure TForm1.FormCreate(Sender: TObject); begin if SO='Windows' then jWin := JWindows.Create else jLin := JLinux.Create; end; procedure TForm1.WMSysCommand(var Message: TMessage); begin if (Message.wParam = SC_MINIMIZE) then 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 Observe a quantidade de lógica condicional! Polimorfismo 5353 Solução Polimórfica ::Unit1 JWindows close(...) maximize(...) minimize(...) move(...) open(...) Janela close(...) maximize(...) minimize(...) move(...) open(...) JLinux close(...) maximize(...) minimize(...) move(...) open(...) var jan: Janela; Polimorfismo 5454 Observe a ausência de lógica condicional 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 jan.maximize else if (Message.wParam = SC_CLOSE) then jan.close else if (Message.wParam = SC_MOVE) then jan.move else inherited; end; Polimorfismo 5555 Observe ainda como seria fácil acrescentar uma janela MOTIF para o Sun Solaris ::Unit1 Janela close(...) maximize(...) minimize(...) move(...) open(...) JWindows close(...) maximize(...) minimize(...) move(...) open(...) JLinux close(...) maximize(...) minimize(...) move(...) open(...) JSolaris close(...) maximize(...) minimize(...) move(...) open(...) Polimorfismo 5656 procedure TForm1.FormCreate(Sender: TObject); begin if SO='Windows' then jan := JWindows.Create else if SO = 'Linux' then jan := JLinux.Create 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 else if (Message.wParam = SC_CLOSE) then jan.close else if (Message.wParam = SC_MOVE) then jan.move else inherited; end; ... e nada mudou aqui! Adicionou-se mais uma linha aqui... Polimorfismo 5757 5858 Visão Geral da UML 5959 Diagrama de Casos de Uso ComportamentoComportamento 6060 Diagrama de Classes EstruturaEstrutura 6161 Diagrama de Seqüência ComportamentoComportamento 6262 Diagrama de Colaboração ComportamentoComportamento 6363 Diagrama de Estados Estrutura e ComportamentoEstrutura e Comportamento 6464 Diagrama de Atividades ComportamentoComportamento 6565 Diagrama de Componentes EstruturaEstrutura 6666 Diagrama de Implantação EstruturaEstrutura 6767 Diagrama de Máquina de Estado 6868 • Descreve processo de negócio e fluxo de trabalho; • Suportam comportamento paralo (diferença para fluxograma); • Semelhante Diagrama de Estados; Diagrama de Atividades 6969 M o s t r a “q u e m ” f a z “o q u ê ” Diagrama de Atividades 7070 • BlueJ – www.bluej.org • UML – www.uml.org • Jude – jude.change-vision.com Links Úteis 7171 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. 48 h Java Web Applications 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. I554 48 h Java Programming Ensinar a programar em Java para alunos que já sabem programar em qualquer outra linguagem. I552 40 h Projeto de Sistemas e Orientação a Objetos com UML Ensinar conceitos de orientação a objetos e sua utilização no processo de desenvolvimento de software usando UML. I550 HorasNome do cursoCódigo Formação Desenvolvedor Java 7272 A Formação Completa do Infnet 32 h Java Workshop Colocar em prática o conhecimento avançado de desenvolvimento de aplicações Java. I562 32 h Java Mobile Ensinar programação Java para dispositivos móveis, como celulares e hand helds. I560 24 h Java Security Ensinar conceitos avançados de segurança em Java para sistemas desktop e J2EE. I558 48 h Java Enterprise Applications Ensinar conceitos avançados de programação em Java para sistemas com alta demanda de acesso e segurança. I556 48 h Java Web Applications 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. I554 48 h Java Programming Ensinar a programar em Java para alunos que já sabem programar em qualquer outra linguagem. I552 40 h Projeto de Sistemas e Orientação a Objetos com UML Ensinar conceitos de orientação a objetos e sua utilização no processo de desenvolvimento de software usando UML. I550 HorasNome do cursoCódigo Formação Desenvolvedor Java: Sistemas Distribuídos 7373 Perguntas 7474 OBRIGADO ! 7575 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 Contatos Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37 Slide 38 Slide 39 Slide 40 Slide 41 Slide 42 Slide 43 Slide 44 Slide 45 Slide 46 Slide 47 Slide48 Slide 49 Slide 50 Slide 51 Slide 52 Slide 53 Slide 54 Slide 55 Slide 56 Slide 57 Slide 58 Slide 59 Slide 60 Slide 61 Slide 62 Slide 63 Slide 64 Slide 65 Slide 66 Slide 67 Slide 68 Slide 69 Slide 70 Slide 71 Slide 72 Slide 73 Slide 74 Slide 75
Compartilhar