Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java POO

2,078 views

Published on

Published in: Technology

Java POO

  1. 1. Curso de Java OO – Orientação a Objetos Classe, Objeto, Instanciação Encapsulamento, Herança, Construtores, Associação de Classes Abstração Ministrado por: Mário Sergio email: mariosergio30@gmail.com https://www.linkedin.com/profile/view?id=111098029
  2. 2. Orientação a Objetos 2 Em um sistema orientado a objetos, os dados e todas as operações (funções), que manipulam esses dados, são agrupados em uma única estrutura: os objetos. O molde da estrutura de um objeto são as classes.
  3. 3. Classe – Um molde para um objeto 3 Os atributos privados, juntamente com os métodos get e set garantem o encapsulamento
  4. 4. Do paradigma Procedural para OO 4 A solução é criar outras classes ! public class ProgramaEscola { static String nomeAluno; static int idade; static String nomeFuncionario; static String usuarioFuncionario; static String senhaFuncionario; static Double resultadoCalculo; static void realizaMatricula() { nomeAluno = JoptionPane.showInputDialog("Novo Aluno: "); ... } static void loginSistema() { lusuarioFuncionario = JoptionPane.showInputDialog("Usuario:"); senhaFuncionario = JoptionPane.showInputDialog("Senha:"); ... } static void imprime(String mensagem) { System.out.println("Aviso: " + mensagem); } static double soma(double n1, double n2) { return n1 + n2; } static double divide(double n1, double n2) { return n1 / n2; } static double multiplica(double n1, double n2) { return n1 * n2; } …............... Como resolver esta bagunça ?
  5. 5. Regras/Benefícios das Classes em OO 5 -Dividir o programa em partes menores -Criar classes com caracteristicas (atributos) e comportamentos (métodos) semelhantes (uma Abstração do mundo real) -Delegar responsabilidades (Encapsulamento) -Possibilita o Reuso de código (Herança) -Torna a programação mais flexível (Polimorfismo) -Melhora a legibilidade e a Documentação do software
  6. 6. Criando Classes 6 public class Aluno { private String nome private int idade; //métodos } public class Funcionario { private String nome; private int idade; private String usuario; private String senha; private String departamento; //métodos } public public class Calculadora { private double resultadoCalculo; //métodos } Em princípio, poderiamos dividir as classes do nosso exemplo da seguinte maneira para resolver a bagunça:
  7. 7. Criando uma Classe Genérica 7 public class Pessoa { private String nome private int idade; //métodos } Mas, observe que as classes Aluno e Funcionário possuem caracteristicas comuns (nome e idade), isso nos permite criar de uma Classe Genérica que poderiamos chamar de Pessoa. Depois disso, podemos fazer REUSO de código da classe Genérica Pessoa a partir do conceito de Herança. Ou seja, podemos criar duas classes Especializadas (filhas: Aluno, Funcionário) que herdam as caracteristicas e métodos da classe Genérica (Mãe), e terão também suas caracteristicas próprias. Isso garante o REUSO de código da Classe Genérica Pessoa.
  8. 8. Criando uma Classe Genérica 8 Código Java e Diagrama UML da classe Classe Genérica (SuperClasse) Pessoa. A palavra this, serve para referenciar um atributo do objeto e não uma variável local. Nesse exemplo, o atributo private int idade recebe o valor do parâmetro idade passado ao método setIdade(int idade)
  9. 9. Herança  Superclasse (Genérica): é classe pai que fornece atributos e comportamento para outras classes;  Subclasse (Especializado): referem-se a especializações de determinada classe projetando uma nova versão do modelo original. public class Pessoa { private int id; private String nome, endereco; private int idade; //métodos } public class Funcionario extends Pessoa { private String usuario; private String senha; private String departamento; //métodos da classe Paciente } ”extends” é a palavra reservada que indica que uma classe (subclasse) está herdando as características de outra classe (superclasse) Pessoa Paciente Médico Funcionário Aluno 9 private é o modificador de visibilidade, que garante que os atributos somente seja acessado dentro da propria classe
  10. 10. Herança – Relacionamento É UM 10 Diagrama UML unified modeling language Notação de Diagramas para modelar Projetos de Software A Herança é um Relacionamento É UM Então: Homem É UM Animal Cão É UM Animal Gato É UM Animal Seta para cima, indica o relacionamento de Herança É UM
  11. 11. Herança – Relacionamento É UM 11
  12. 12. Herança – Diagrama de Classes UML 12
  13. 13. Herança – Pessoa e suas classes Especializadas 13 Construtores Veremos nas pags: 25/27
  14. 14. Qualificadores em JAVA 14 Na frente da declaração de Classes, Atributos e Métodos, podem aparecer palavras chaves que são seus qualificadores (também chadamas de diretivas) Modificadores de Acesso/Visibilidade ou Diretivas de Encapsulamento (são mutuamente exclusivos, somente Um deles deve aparecer) Qualificadores Gerais Esse qualificadores podem ser Classificados em: Obs: ainda há outros, mas esses são os mais importantes
  15. 15. Os qualificadores e sua sintaxe 15 Nem todos os qualificadores são aplicáveis em qualquer lugar: Declaração de Classes Declaração de Atributos e Variáveis Declaração de Métodos Declaração de Classes ver pags: 32/33
  16. 16. Qualificadores: Modificador de Acesso 16 Esses modificadores de acesso podem aparecer na frente da declaração de Classes, Atributos ou Métodos
  17. 17. Qualificadores: Modificador de Acesso (tabela) 17 Diretivas de Encapsulamento ou Modificadores de de Acesso/Visibilidade
  18. 18. Encapsulamento de Atributos 18 Os atributos de uma classe devem ser definidos com a diretiva private E os métodos get e set devem ser declarados. Mas, apenas para os atributos que precisam ser acessados fora da sua classe.
  19. 19. Encapsulamento de Atributos 19
  20. 20. O operador new 20 Para usarmos uma classe precisamos declarar uma variável ou atributo utilizando a classe como tipo. Declaração: 3 atributos (objetos) das classes Pessoa, Aluno e Funcionario. private Pessoa pessoa1; private Aluno pessoa2; private Funcionario fulano; Instanciação: Mas, diferentemente dos tipos primitivos, para instanciar/inicializar uma variável/atributo cujo tipo é uma classe, é preciso utilizar a palavra reservada new pessoa1 = new Pessoa(); pessoa2 = new Aluno(); fulano = new Funcionario(); A partir desse momento cada objeto (indivíduo) passa a ter um espaço individual na memoria para armazenanar seus dados. pessoa1.setNome("Elvis Presley"); pessoa1.setIdade(29);
  21. 21. O operador new 21 O operador new é um criador (instanciador) de objetos de uma classe. Declaração e Instanciação tudo na mesma linha: private Pessoa pessoa1 = new Pessoa();
  22. 22. Mais exemplos de instanciação de objetos 22 Declaração da classe Veiculo:
  23. 23. Mais exemplos de instanciação de objetos 23 Instanciando um veículo (lembrando que uma classe é um molde (fôrma) que pode fabricar vários objetos (indivíduos)
  24. 24. Mais exemplos de instanciação de objetos 24 Instanciando um veículo em java.
  25. 25. Construtores 25 Instanciamos um objeto com new new, na verdade estamos chamando o construtor do objeto. pessoa1 = new Pessoa(); Instanciando um objeto com construtor SEM parâmetros Construtor padrão (nem precisa declarar) public Pessoa() { } pessoa1 = new Pessoa("Fausto Silva", 55); Instanciando um objeto com construtor COM parâmetros public Pessoa(String nome, int idade) { this.nome = nome; this.idade = idade; } Declaração de um novo construtor COM parâmetros Assim, o objeto pessoa1 já é criado com um nome e uma idade sem que haja a necessidade da chamada posterior aos métodos setNome e setIDade
  26. 26. Construtores 26 Agora suponha que precisamos de uma classe especializada que herda a classe Pessoa, para representar os milionários: milionario1 = new Milionario("Eike Batista", 1283254895.52); Novo construtor da classe Milionario public class Milionario extends Pessoa { private Double fortuna; public Milionario(String nome, int idade, Double fortuna) { super(nome,idade); this.fortuna = fortuna; } ... Chama o construtor da SuperClasse Pessoa Instanciando um objeto do tipo Milionario Referência ao atributo declarado na própria classe
  27. 27. Construtores 27
  28. 28. Associação de Classes – Relacionamento TEM UM 28 A Associação é um Relacionamento TEM UM (ou TEM VÁRIOS) Então: Pedido TEM UM Cliente Pedido TEM VÁRIOS Itens Item TEM UM Livro
  29. 29. Associação de Classes – Relacionamento TEM UM 29
  30. 30. Associação de Classes – Relacionamento TEM UM 30 Como escrever os relacionamentos em java: Pedido TEM UM Atributo do tipo Cliente private Cliente cliente; Pedido TEM VÁRIOS Atributos do tipo ItemPedido List<ItemPedido> itens = new ArrayList<>(); Item TEM UM Livro private Livro livro;
  31. 31. - Com base no exercício provão desenvolvido durante as aulas: 1-Crie classes para Pessoa, Aluno, Funcionário, parecido com o Diagrama de Classe da pag 13 (mas, utilize o modificador private nos atributos, ao invés de protected) (coloque essas classes em um pacote chamado modelo). 2-Importe a classe calculadora ao seu projeto no pacote modelo. 3-Altere seu programa principal de maneira que ele instancie e utilize os métodos das classes modelo, de maneira a reutilizar os métodos dessas classe. 4-Crie um construtor com parametros para a classe Funcionário, que deve adicionar os atributos: Cargo, usuario, senha. No seu programa principal instancie pelo menos 4 Funcionários. 5-Para utilizar o seu sistema o usuário precisará fazer login, você somente deverá permitir digitação das notas das alunos aos funcionário credenciados para isso (cargo: secretária). Exercício 31
  32. 32. Tornado uma Classe Abstrata 32 Ora, será que no dominio do nosso problema queremos que um objeto seja apenas uma “pessoa qualquer” ? Na verdade não ! Queremos que toda pessoa no nosso sistema seja do tipo de uma das classes especializadas de Pessoa, e não um “pessoa qualquer”. Para isso precisamos informar que a classe Pessoa é abstrata, para isso utilizamos o qualificador bstract. public abstract class Pessoa Assim, não será mais possível instanciar um objeto do tipo Pessoa com o operador new . Ou seja, a classe Pessoa agora só serve para ser herdada por um aclasse especializada. Pessoa pessoa1 = new Pessoa(); public class Aluno extends Pessoa OK
  33. 33. Uma classe que não pode ter filhos: Classe Final 33 Uma classe final é o inverso da classe abstrata, ela não pode ser herdada por outra classe (ou seja, não é uma superclasse), podendo apenas ser instanciada com new. Assim, se não quisermos que a classe especializada Aluno seja utilizada para criar Alunos mais especializados, como por exemplo: AlunoFundamental, AlunoSuperior... Então precisamos informar que ela é uma classe final, para isso utilizamos o qualificador final. public final class Aluno Assim, não será possível herdar a classe Aluno, ou seja é a versão final da classe, não poderá mais ser alterada. Aluno aluno1 = new Aluno(); OK public class AlunoSuperior extends Aluno
  34. 34. Exemplo: Diagrama de Classes UML Vídeo Locadora 34
  35. 35. Exemplo: Diagrama de Classes UML Um hospital completo 35
  36. 36. Exemplo: Diagrama de Classes UML Um hospital simplificado Classe ControlePaciente 36
  37. 37. public class Paciente extends Pessoa { //Atributos private String documento; //Construtor public Paciente(int pCodigo, String pNome, String pEndereco, int pIdade, String pDocumento) { setId(pCodigo); setNome(pNome); setEndereco(pEndereco); setIdade(pIdade); documento = pDocumento; } //Métodos de atribuição public void setDocumento(String pDocumento) { documento = pDocumento; } //Métodos de recuperação public String getDocumento() { return documento; } } Exemplo – Modelagem UML Hospital Classe Paciente Construtor da classe Paciente com cinco argumentos Métodos de atribuição de informação set...() Métodos de recuperação de informação get...() Encapsulamento: Todos os atributos da classe Paciente são definidos como privados “private” e somente podem ser acessados através de métodos públicos “public”. 37
  38. 38. public class Paciente extends Pessoa { //Atributos private String documento; //Construtor public Paciente(int pCodigo, String pNome, String pEndereco, int pIdade, String pDocumento) { setId(pCodigo); setNome(pNome); setEndereco(pEndereco); setIdade(pIdade); documento = pDocumento; } //Métodos de atribuição public void setDocumento(String pDocumento) { documento = pDocumento; } //Métodos de recuperação public String getDocumento() { return documento; } } Exemplo – Modelagem UML Hospital Classe Paciente Construtor da classe Paciente com cinco argumentos Métodos de atribuição de informação set...() Métodos de recuperação de informação get...() Encapsulamento: Todos os atributos da classe Paciente são definidos como privados “private” e somente podem ser acessados através de métodos públicos “public”. 38
  39. 39. public class ControlePaciente { private List<Paciente> listaPaciente = new ArrayList<>(); public void inserePaciente(int pId, String pNome, String pEndereco, int pIdade, String pDocumento) { Paciente paciente = new Paciente(pId, pNome, pEndereco, pIdade, pDocumento); listaPaciente.add(paciente); } //Método utilizado para imprimir a lista de TODOS Pacientes public String imprimePacientes() { String result = ""; for (int intIdx = 0; intIdx < listaPaciente.size(); intIdx++) { result += "Código: " + listaPaciente.get(intIdx).getId()+ " Nome: " + listaPaciente.get(intIdx).getNome()+ " Idade: " + listaPaciente.get(intIdx).getIdade() + " Documento: " + listaPaciente.get(intIdx).getDocumento() +"n"; } return result; } .... Exemplo – Modelagem UML Hospital Classe ControlePaciente Cria o objeto paciente (instância da classe Paciente) utilizando o construtor que recebe parâmetros 39
  40. 40. ... //Método utilizado para imprimir UM DETERMINADO Paciente public String imprimePaciente(int pId) { for " Nome: " +intIdx = 0; intIdx < listaPaciente.size(); intIdx++) { if (listaPaciente.get(intIdx).getId() == pId) { return "Código: " + listaPaciente.get(intIdx).getId()+ " Nome: " + listaPaciente.get(intIdx).getNome()+ " Idade: " + listaPaciente.get(intIdx).getIdade()+ " Documento: " + listaPaciente.get(intIdx).getDocumento()+"n"; } } } } Classe ControlePaciente Exemplo – Modelagem UML Hospital 40
  41. 41. ... //Método utilizado para imprimir UM DETERMINADO Paciente public String imprimePaciente(int pId) { for " Nome: " +intIdx = 0; intIdx < listaPaciente.size(); intIdx++) { if (listaPaciente.get(intIdx).getId() == pId) { return "Código: " + listaPaciente.get(intIdx).getId()+ " Nome: " + listaPaciente.get(intIdx).getNome()+ " Idade: " + listaPaciente.get(intIdx).getIdade()+ " Documento: " + listaPaciente.get(intIdx).getDocumento()+"n"; } } } } Classe ControlePaciente Exemplo – Classe ControlePaciente 41
  42. 42. import javax.swing.*; public class ProgramaHospital { private ControlePaciente ctrPac = new ControlePaciente(); public void capturaDados() { ctrPac.inserePaciente(1, "José da Silva", "Endereço 1", 55, "298982828"); ctrPac.inserePaciente(2, "Fulano de Tal", "Endereço 2", 18, "099889828"); ctrPac.inserePaciente(3, "Alexandre Silveira", "Endereço 3", 35, "327489938"); } public void imprimePacientes() { System.out.println(ctrPac.imprimePacientes()); } public void imprimePaciente(int pId) { System.out.println(ctrPac.imprimePaciente(pId)); } public static void main (String par[]) { LimiteCadPaciente limPac = new LimiteCadPaciente(); limPac.capturaDados(); limPac.imprimePacientes(); System.out.println("-------------------"); limPac.imprimePaciente(2); } } Classe Principal do Programa: ProgramaHospital Chama os métodos da classe ControlePaciente através do objeto ctrPac Cria o objeto ctrPac (instância da classe ControlePaciente) Exemplo – Modelagem UML Hospital 42
  43. 43. import javax.swing.*; public class ProgramaHospital { public static void main (String par[]) { int escolha = 0; //Variável utilizada para recuperar as informações da interface //do usuário int id = 0; String nome = "", endereco = "", documento = ""; int idade = 0; //Instancia o Controlador ControlePaciente ctrPac = new ControlePaciente(); do { do { escolha = Integer.parseInt( JOptionPane.showInputDialog("Escolha uma opção do menu:n"+ "[1] Adiciona Pacientesn"+ "[2] Altera Pacientesn"+ "[3] Finaliza")); } while ((escolha < 1) || (escolha > 3)); if (escolha == 3) System.exit(0); .... Cria o objeto ctrPac (instância da classe ControlePaciente) Exemplo – Classe LimiteCadPaciente Exemplo – Classe ProgramaHospital 43 Classe Principal do Programa: ProgramaHospital
  44. 44. .... switch (escolha) { case 1: //Requisita o Código id = Integer.parseInt( JOptionPane.showInputDialog ("Informe o código")); //Requisita o Nome nome = JOptionPane.showInputDialog ("Informe o nome"); //Requisita o Endereco endereco = JOptionPane.showInputDialog ("Informe o endereço"); //Requisita a Idade idade = Integer.parseInt( JOptionPane.showInputDialog ("Informe a idade")); //Requisita o Documento documento = JOptionPane.showInputDialog ("Informe o documento"); //Adiciona o objeto para a lista de pacientes ctrPac.inserePaciente(id, nome, endereco, idade, documento); break; case 2: JOptionPane.showMessageDialog(null, ctrPac.imprimePacientes(), "Relação de Pacientes", JOptionPane.INFORMATION_MESSAGE); } } while (true); } } Chama os métodos da classe ControlePaciente através do objeto ctrPac Exercício I – Limite (Classe LimiteCadPacienteI)Exemplo – Classe ProgramaHospital 44 Classe Principal do Programa: ProgramaHospital
  45. 45. Referências Programação de computadores em Java Rui Rossi dos Santos Java 8: Programação de Computadores - Guia Prático de Introdução, Orientação e Desenvolvimento - José Augusto N. G. Manzano Slides do Prof. Roberto Pacheco INE – CTC – UFSC Slides do Prof. Rui Silva Escola Naútica D. Henrique
  46. 46. Sugestão de Material http://www.dialetodigital.com/blog/conteudos-programacao/

×