Introdução à Análise Orientada a Objetos Prof. Ariovaldo Dias de Oliveira
Apresentações Do Professor Dos Alunos, com suas respectivas experiências profissionais em Orientação a Objetos
Tópicos Paradigma de Orientação a Objetos (OO) Conceito dos principais elementos da OO UML: Conceitos e os principais diagramas voltados a Análise Orientada a Objetos (AOO)  Estudo das Classes, Diagrama de Classes e Objetos, seu uso nas Fases iniciais do Projeto para identificação do Domínio da Aplicação  (Classes de Negócio) A evolução das Classes no transcorrer do projeto (do  negócio até  a especificação do código e ser implementado para a classe) Conceito de reuso em OO Padrões de Software
Paradigmas de programação Paradigma procedural Leva o desenvolvedor a decompor o sistema em partes menores (funções), criando um emaranhado de inúmeras funções que chamam umas às outras Geralmente não há separação de conceitos e responsabilidades, causando dependências enormes no sistema, dificultando futuras manutenções no código do programa. Não existe muito reaproveitamento de código, ao contrário, muitas vezes se tem muito código duplicado
Paradigmas de programação Paradigma Orientação a Objetos  O paradigma da OO eleva a programação (POO) e o desenvolvimento (AOO) de sistemas para um novo patamar. A OO é um mecanismo moderno que ajuda a definir a estrutura de programas baseado nos conceitos do mundo real, sejam eles reais ou abstratos A OO permite criar programas componentizados, separando as partes do sistema por responsabilidades e fazendo com que essas partes se comuniquem entre si, por meio de mensagens
Comparação Procedural X OO Programa Classe Processos Propriedades Métodos Dados
Principais elementos da OO Classes Objetos Atributos Construtores Métodos Encapsulamento Herança Reescrita Sobrecarga Polimorfismo
Classes Uma  classe  é uma estrutura que abstrai um conjunto de objetos com características similares Exemplos Classe de Automóveis Classe de Funcionários de uma empresa Classe de Livros em uma biblioteca Classe de Livros em uma gráfica
Objetos Um  objeto  é um exemplar de uma classe Exemplos Civic  é um objeto Classe de Automóveis João  é um objeto da Classe de Funcionários de uma empresa Algoritmos em VB.Net  é um objeto da classe de Livros em uma biblioteca 97885604340770  é um objeto da Classe de Livros em uma gráfica
Atributos São os elementos que caracterizam um objeto Exemplos Cor  é um atributo para Carro Estado civil  é um atributo para Funcionário Quantidade  é um atributo para Livros Gramatura  é um atributo para Livros Os atributos podem ter valores: Prata  é um valor para Cor Casado  é um valor para Estado Civil 5  é um valor para Quantidade 120  é um valor para  Gramatura
Métodos São operações que visam: introduzir (setters) ou recuperar (getters) valores dos atributos  modificar valores dos atributos Exemplos Pintar  é um método que visa mudar o atributo Cor do objeto carro getEstadoCivil  é um método que recupera o valor do atributo Estado Civil Vender  é método que altera o atributo Quantidade
Exemplo de uma Classe Conta Bancária composta por (atributos): número nome do Cliente saldo limite O que fazemos em uma conta (métodos) sacar um valor x depositar um valor x imprimir o nome do titular da conta transferir x para a conta y
Em Java: class Conta { int número; String nome; double saldo; double limite; } class Programa { public static void main (String [ ] args) { Conta minhaConta = new Conta( ); } }
Ao criarmos uma conta, devemos introduzir valores nos atributos class Programa { public static void main (String [ ] args) { Conta minhaConta = new Conta( ); minhaConta.nome = "João" ; minhaConta.número = 123456; minhaConta.saldo = 1000; minhaConta.limite = 5000; System.out.println(" Saldo = "  + minhaConta.saldo); } }
Podemos sacar e depositar um determinado valor, e isso é feito definindo-se dois métodos class Conta { int número; String nome; double saldo; double limite; void saca (double valor) { saldo = saldo - valor; } void deposita (double valor) { saldo = saldo + valor; } }
O programa principal deve ser alterado para ativar os métodos recém criados class Programa { public static void main (String [ ] args) { Conta minhaConta = new Conta( ); minhaConta.nome = "João"; minhaConta.número = 123456; minhaConta.saldo = 1000; minhaConta.limite = 5000; minhaConta.deposita (400); minhaConta.saca(100); System.out.println("Saldo = " + minhaConta.saldo); } }
O método Saca deve verificar se o saque é possível, e  retornar  se a operação foi realizada com sucesso class Conta { int número; ... boolean saca (double valor) { if  (saldo + limite  -  valor > 0 ) { saldo = saldo - valor; return true; } else { return false; } } void deposita (double valor) { saldo = saldo + valor; } }
O programa principal deve testar se o saque foi possível class Programa { public static void main (String [ ] args) { Conta minhaConta = new Conta( ); minhaConta.nome = "João"; minhaConta.número = 123456; minhaConta.saldo = 1000; minhaConta.limite = 5000; minhaConta.deposita (400); boolean consegui = minhaConta.saca(10000); if (consegui) {   System.out.println("Saque realizado. Novo saldo = " + minhaConta.saldo); } else {   System.out.println("Saldo de " + minhaConta.saldo + " insuficiente"); } } }
+ público - visível em qualquer classe # protegido - qualquer descendente pode usar - privado - visível somente dentro da classe Representação da classe Conta em UML  Conta +número: int +nome:  String  +saldo:  double +limite:  double  +saca (valor: double): boolean +deposita(valor: double) Os sinais na frente dos nomes das variáveis ou dos nomes dos métodos significam
Acrescentar Método  transferePara  na classe Conta class Conta { int número; ... boolean  saca ...... ...... void deposita ... ... boolean  transferePara (Conta destino, double valor) { boolean retirou = saca(valor); if (retirou == false) { return false; } else { destino.deposita(valor); return true; } } }
No programa principal: class Programa { public static void main (String [ ] args) { Conta conta1 = new Conta( ); conta1.nome = "João"; conta1.número = 123456; conta1.saldo = 1000; conta1.limite = 5000; Conta conta2 = new Conta( ); conta2.nome = "Maria"; conta2.número  = 987654; conta2.saldo = 2000; conta2.limite = 4000; Segue...
boolean consegui = conta1.transferePara(conta2, 12000); if (consegui) { System.out.println("Saque realizado. Novo saldo conta1 = " + conta1.saldo); System.out.println("Novo saldo conta2 = " + conta2.saldo); } else { System.out.println("Saldo de " + conta1.saldo + " insuficiente"); } } }
Nova Representação da classe Conta em UML  Conta +número: int +nome:  String  +saldo:  double +limite:  double  +saca (valor: double): boolean +deposita (valor: double): +transferePara (destino: Conta, valor: double) : boolean
Nova Classe: Cliente class Cliente { String nome; String sobrenome; String endereço; String cpf; }
Alterações na classe Conta: class Conta { int número; double saldo; double limite; Cliente titular = new Cliente ()  ; boolean  saca ...... ...... void deposita ...... ...... boolean  transferePara ..... ...... }
Alterações no programa principal: class Programa { public static void main (String [ ] args) { Conta conta1 = new Conta( ); conta1.titular.nome  = "João "; ...... conta2.titular.nome = " Maria "; ...... System.out.println("Titular da conta1 = " + conta1.titular.nome); System.out.println("Titular da conta2 = " + conta2.titular.nome);  } }
Representação UML das classes Conta e Cliente Conta +número: int +saldo:  double +limite:  double +titular:  Cliente  +saca (valor: double): boolean +deposita(valor: double) +transferePara (destino: Conta,  valor: double) : boolean Cliente +nome:  String +sobrenome: String  +endereço:  String +cpf:  String
Um sistema Orientado a Objetos é um grande conjunto de classes que vão se comunicar, delegando responsabilidade para quem for mais apto a realizar determinada tarefa. A classe  Banco  usa a classe  Conta , que usa a classe  Cliente , que usa a classe  Endereço , etc. Dizemos que esses objetos colaboram, trocando mensagens entre si. Por isso acabamos tendo muitas classes em nossos sistemas, e elas costuma ter um tamanho relativamente curto.
Encapsulamento O encapsulamento protege o acesso direto (referência) aos atributos de uma instância fora da classe onde estes foram declarados. Esta proteção consiste em se usar modificadores de acesso mais restritivos sobre os atributos definidos na classe. Depois devem ser criados métodos para manipular de forma indireta os atributos da classe. (Wikipédia)
O encapsulamento é feito com o uso de modificadores de acesso na declaração dos atributos e/ou métodos. Os modificadores são: public  - Qualquer classe pode ter acesso ao atributo ou ao método private – Apenas os métodos da própria classe podem ter acesso ao atributo ou a outros métodos da classe protected – Apenas os métodos da própria classe ou das subclasses podem ter acesso ao atributo ou outros métodos da classe
Classe Conta com atributos encapsulados  class Conta { int número; private  double saldo; private  double limite; Cliente titular = new Cliente ()   ; ...... O(s) programa(s) que chama(m) a classe Conta não pode(m) mais referenciar diretamente os atributos  saldo  nem  limite . Isso agora só será possível via métodos. Daí a necessidade de se criar Getters e Setters
Geters e Seters na classe Conta .....  double getSaldo() { return saldo; } void setSaldo (double valor) { saldo = valor; } double getLimite() { return limite; } void setLimite(double valor) { limite = valor; }
No programa principal: class Programa { public static void main (String [ ] args) { Conta conta1 = new Conta( ); conta1.titular.nome = "João"; conta1.número = 123456; conta1.setSaldo(1000); conta1.setLimite(5000); System.out.println("Saldo = " +  conta1.getSaldo( ) ); System.out.println("Limite = " +  conta1.getLimite( ) ); } }
Nova Representação UML das classes Conta e Cliente Conta +número: int +saldo:  double -limite:  double -titular:  Cliente  +saca (valor: double): boolean +deposita(valor: double) +transferePara (destino: Conta,  valor: double) : boolean +setSaldo(valor: double) +getSaldo ( ): double +setLimite(valor: double) +getLimite( ): double Cliente +nome:  String +sobrenome: String  +endereço:  String +cpf:  String
Atividade 1 Esta atividade tem por objetivo modelar uma classe para  Funcionário . Este deve ter nome, departamento onde trabalha, salário, data de admissão, RG, e um valor booleano que indique se ele ainda é funcionário ou se não trabalha mais na empresa.  Você deve criar alguns métodos de acordo com as necessidades que julgar conveniente para o sistema. Além desses, crie um método  bonifica  que aumenta o salário de acordo com um parâmetro passado como argumento. Crie também um método  demite , que não recebe parâmetro algum, só modifica o valor booleano correspondente.  Faça a modelagem em um diagrama UML.  Codifique essa classe em Java Crie um programa Java(simples) somente com o objetivo de testar a classe Funcionário
Referências Orientação a objetos. Disponível em  <http : //www.softechnetwork.com.br/java/CursoOO.pdf >. Acesso em :11 mar. 2011. Java e Orientação a Objetos. Disponível em  <www. caelum.com.br>  Acesso em 15 fev. 2009. RUMBAUGH, James et al. Modelagem e Projetos baseados e Objetos. Rio de Janeiro: Campus, 1997.

Introdução à análise orientada a objetos parte 1

  • 1.
    Introdução à AnáliseOrientada a Objetos Prof. Ariovaldo Dias de Oliveira
  • 2.
    Apresentações Do ProfessorDos Alunos, com suas respectivas experiências profissionais em Orientação a Objetos
  • 3.
    Tópicos Paradigma deOrientação a Objetos (OO) Conceito dos principais elementos da OO UML: Conceitos e os principais diagramas voltados a Análise Orientada a Objetos (AOO) Estudo das Classes, Diagrama de Classes e Objetos, seu uso nas Fases iniciais do Projeto para identificação do Domínio da Aplicação (Classes de Negócio) A evolução das Classes no transcorrer do projeto (do negócio até a especificação do código e ser implementado para a classe) Conceito de reuso em OO Padrões de Software
  • 4.
    Paradigmas de programaçãoParadigma procedural Leva o desenvolvedor a decompor o sistema em partes menores (funções), criando um emaranhado de inúmeras funções que chamam umas às outras Geralmente não há separação de conceitos e responsabilidades, causando dependências enormes no sistema, dificultando futuras manutenções no código do programa. Não existe muito reaproveitamento de código, ao contrário, muitas vezes se tem muito código duplicado
  • 5.
    Paradigmas de programaçãoParadigma Orientação a Objetos O paradigma da OO eleva a programação (POO) e o desenvolvimento (AOO) de sistemas para um novo patamar. A OO é um mecanismo moderno que ajuda a definir a estrutura de programas baseado nos conceitos do mundo real, sejam eles reais ou abstratos A OO permite criar programas componentizados, separando as partes do sistema por responsabilidades e fazendo com que essas partes se comuniquem entre si, por meio de mensagens
  • 6.
    Comparação Procedural XOO Programa Classe Processos Propriedades Métodos Dados
  • 7.
    Principais elementos daOO Classes Objetos Atributos Construtores Métodos Encapsulamento Herança Reescrita Sobrecarga Polimorfismo
  • 8.
    Classes Uma classe é uma estrutura que abstrai um conjunto de objetos com características similares Exemplos Classe de Automóveis Classe de Funcionários de uma empresa Classe de Livros em uma biblioteca Classe de Livros em uma gráfica
  • 9.
    Objetos Um objeto é um exemplar de uma classe Exemplos Civic é um objeto Classe de Automóveis João é um objeto da Classe de Funcionários de uma empresa Algoritmos em VB.Net é um objeto da classe de Livros em uma biblioteca 97885604340770 é um objeto da Classe de Livros em uma gráfica
  • 10.
    Atributos São oselementos que caracterizam um objeto Exemplos Cor é um atributo para Carro Estado civil é um atributo para Funcionário Quantidade é um atributo para Livros Gramatura é um atributo para Livros Os atributos podem ter valores: Prata é um valor para Cor Casado é um valor para Estado Civil 5 é um valor para Quantidade 120 é um valor para Gramatura
  • 11.
    Métodos São operaçõesque visam: introduzir (setters) ou recuperar (getters) valores dos atributos modificar valores dos atributos Exemplos Pintar é um método que visa mudar o atributo Cor do objeto carro getEstadoCivil é um método que recupera o valor do atributo Estado Civil Vender é método que altera o atributo Quantidade
  • 12.
    Exemplo de umaClasse Conta Bancária composta por (atributos): número nome do Cliente saldo limite O que fazemos em uma conta (métodos) sacar um valor x depositar um valor x imprimir o nome do titular da conta transferir x para a conta y
  • 13.
    Em Java: classConta { int número; String nome; double saldo; double limite; } class Programa { public static void main (String [ ] args) { Conta minhaConta = new Conta( ); } }
  • 14.
    Ao criarmos umaconta, devemos introduzir valores nos atributos class Programa { public static void main (String [ ] args) { Conta minhaConta = new Conta( ); minhaConta.nome = &quot;João&quot; ; minhaConta.número = 123456; minhaConta.saldo = 1000; minhaConta.limite = 5000; System.out.println(&quot; Saldo = &quot; + minhaConta.saldo); } }
  • 15.
    Podemos sacar edepositar um determinado valor, e isso é feito definindo-se dois métodos class Conta { int número; String nome; double saldo; double limite; void saca (double valor) { saldo = saldo - valor; } void deposita (double valor) { saldo = saldo + valor; } }
  • 16.
    O programa principaldeve ser alterado para ativar os métodos recém criados class Programa { public static void main (String [ ] args) { Conta minhaConta = new Conta( ); minhaConta.nome = &quot;João&quot;; minhaConta.número = 123456; minhaConta.saldo = 1000; minhaConta.limite = 5000; minhaConta.deposita (400); minhaConta.saca(100); System.out.println(&quot;Saldo = &quot; + minhaConta.saldo); } }
  • 17.
    O método Sacadeve verificar se o saque é possível, e retornar se a operação foi realizada com sucesso class Conta { int número; ... boolean saca (double valor) { if (saldo + limite - valor > 0 ) { saldo = saldo - valor; return true; } else { return false; } } void deposita (double valor) { saldo = saldo + valor; } }
  • 18.
    O programa principaldeve testar se o saque foi possível class Programa { public static void main (String [ ] args) { Conta minhaConta = new Conta( ); minhaConta.nome = &quot;João&quot;; minhaConta.número = 123456; minhaConta.saldo = 1000; minhaConta.limite = 5000; minhaConta.deposita (400); boolean consegui = minhaConta.saca(10000); if (consegui) { System.out.println(&quot;Saque realizado. Novo saldo = &quot; + minhaConta.saldo); } else { System.out.println(&quot;Saldo de &quot; + minhaConta.saldo + &quot; insuficiente&quot;); } } }
  • 19.
    + público -visível em qualquer classe # protegido - qualquer descendente pode usar - privado - visível somente dentro da classe Representação da classe Conta em UML Conta +número: int +nome: String +saldo: double +limite: double +saca (valor: double): boolean +deposita(valor: double) Os sinais na frente dos nomes das variáveis ou dos nomes dos métodos significam
  • 20.
    Acrescentar Método transferePara na classe Conta class Conta { int número; ... boolean saca ...... ...... void deposita ... ... boolean transferePara (Conta destino, double valor) { boolean retirou = saca(valor); if (retirou == false) { return false; } else { destino.deposita(valor); return true; } } }
  • 21.
    No programa principal:class Programa { public static void main (String [ ] args) { Conta conta1 = new Conta( ); conta1.nome = &quot;João&quot;; conta1.número = 123456; conta1.saldo = 1000; conta1.limite = 5000; Conta conta2 = new Conta( ); conta2.nome = &quot;Maria&quot;; conta2.número = 987654; conta2.saldo = 2000; conta2.limite = 4000; Segue...
  • 22.
    boolean consegui =conta1.transferePara(conta2, 12000); if (consegui) { System.out.println(&quot;Saque realizado. Novo saldo conta1 = &quot; + conta1.saldo); System.out.println(&quot;Novo saldo conta2 = &quot; + conta2.saldo); } else { System.out.println(&quot;Saldo de &quot; + conta1.saldo + &quot; insuficiente&quot;); } } }
  • 23.
    Nova Representação daclasse Conta em UML Conta +número: int +nome: String +saldo: double +limite: double +saca (valor: double): boolean +deposita (valor: double): +transferePara (destino: Conta, valor: double) : boolean
  • 24.
    Nova Classe: Clienteclass Cliente { String nome; String sobrenome; String endereço; String cpf; }
  • 25.
    Alterações na classeConta: class Conta { int número; double saldo; double limite; Cliente titular = new Cliente () ; boolean saca ...... ...... void deposita ...... ...... boolean transferePara ..... ...... }
  • 26.
    Alterações no programaprincipal: class Programa { public static void main (String [ ] args) { Conta conta1 = new Conta( ); conta1.titular.nome = &quot;João &quot;; ...... conta2.titular.nome = &quot; Maria &quot;; ...... System.out.println(&quot;Titular da conta1 = &quot; + conta1.titular.nome); System.out.println(&quot;Titular da conta2 = &quot; + conta2.titular.nome); } }
  • 27.
    Representação UML dasclasses Conta e Cliente Conta +número: int +saldo: double +limite: double +titular: Cliente +saca (valor: double): boolean +deposita(valor: double) +transferePara (destino: Conta, valor: double) : boolean Cliente +nome: String +sobrenome: String +endereço: String +cpf: String
  • 28.
    Um sistema Orientadoa Objetos é um grande conjunto de classes que vão se comunicar, delegando responsabilidade para quem for mais apto a realizar determinada tarefa. A classe Banco usa a classe Conta , que usa a classe Cliente , que usa a classe Endereço , etc. Dizemos que esses objetos colaboram, trocando mensagens entre si. Por isso acabamos tendo muitas classes em nossos sistemas, e elas costuma ter um tamanho relativamente curto.
  • 29.
    Encapsulamento O encapsulamentoprotege o acesso direto (referência) aos atributos de uma instância fora da classe onde estes foram declarados. Esta proteção consiste em se usar modificadores de acesso mais restritivos sobre os atributos definidos na classe. Depois devem ser criados métodos para manipular de forma indireta os atributos da classe. (Wikipédia)
  • 30.
    O encapsulamento éfeito com o uso de modificadores de acesso na declaração dos atributos e/ou métodos. Os modificadores são: public - Qualquer classe pode ter acesso ao atributo ou ao método private – Apenas os métodos da própria classe podem ter acesso ao atributo ou a outros métodos da classe protected – Apenas os métodos da própria classe ou das subclasses podem ter acesso ao atributo ou outros métodos da classe
  • 31.
    Classe Conta comatributos encapsulados class Conta { int número; private double saldo; private double limite; Cliente titular = new Cliente () ; ...... O(s) programa(s) que chama(m) a classe Conta não pode(m) mais referenciar diretamente os atributos saldo nem limite . Isso agora só será possível via métodos. Daí a necessidade de se criar Getters e Setters
  • 32.
    Geters e Setersna classe Conta ..... double getSaldo() { return saldo; } void setSaldo (double valor) { saldo = valor; } double getLimite() { return limite; } void setLimite(double valor) { limite = valor; }
  • 33.
    No programa principal:class Programa { public static void main (String [ ] args) { Conta conta1 = new Conta( ); conta1.titular.nome = &quot;João&quot;; conta1.número = 123456; conta1.setSaldo(1000); conta1.setLimite(5000); System.out.println(&quot;Saldo = &quot; + conta1.getSaldo( ) ); System.out.println(&quot;Limite = &quot; + conta1.getLimite( ) ); } }
  • 34.
    Nova Representação UMLdas classes Conta e Cliente Conta +número: int +saldo: double -limite: double -titular: Cliente +saca (valor: double): boolean +deposita(valor: double) +transferePara (destino: Conta, valor: double) : boolean +setSaldo(valor: double) +getSaldo ( ): double +setLimite(valor: double) +getLimite( ): double Cliente +nome: String +sobrenome: String +endereço: String +cpf: String
  • 35.
    Atividade 1 Estaatividade tem por objetivo modelar uma classe para Funcionário . Este deve ter nome, departamento onde trabalha, salário, data de admissão, RG, e um valor booleano que indique se ele ainda é funcionário ou se não trabalha mais na empresa. Você deve criar alguns métodos de acordo com as necessidades que julgar conveniente para o sistema. Além desses, crie um método bonifica que aumenta o salário de acordo com um parâmetro passado como argumento. Crie também um método demite , que não recebe parâmetro algum, só modifica o valor booleano correspondente. Faça a modelagem em um diagrama UML. Codifique essa classe em Java Crie um programa Java(simples) somente com o objetivo de testar a classe Funcionário
  • 36.
    Referências Orientação aobjetos. Disponível em <http : //www.softechnetwork.com.br/java/CursoOO.pdf >. Acesso em :11 mar. 2011. Java e Orientação a Objetos. Disponível em <www. caelum.com.br> Acesso em 15 fev. 2009. RUMBAUGH, James et al. Modelagem e Projetos baseados e Objetos. Rio de Janeiro: Campus, 1997.