Baixe o app para aproveitar ainda mais
Prévia do material em texto
AAPPOOSSTTIILLAA DDEE OORRIIEENNTTAAÇÇÃÃOO AA OOBBJJEETTOOSS CCOOMM JJAAVVAA PROFª. GILENE DO ESP. STO. BORGES GOMES MESTRA EM CIÊNCIA DA COMPUTAÇÃO gilene@gomeshp.com http://www.gomeshp.com APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 2 nome do objeto : nome da classe atributo 1 = valor atributo 2 = valor 1. Introdução a Orientação a Objetos “Uma abordagem típica usada no desenvolvimento de programas complexos consiste em decompor os programas em diversos módulos e dividir cada módulo em diversas funções. Cada função é responsável por parte da solução do problema. Esta abordagem de desenvolvimento se baseia na decomposição funcional. Embora a decomposição funcional tenha sido amplamente utilizada nos últimos anos, apresenta algumas deficiências, tais como o fraco acoplamento entre dados e funções. A orientação a objetos é uma tecnologia de desenvolvimento composta por metodologias e linguagens usadas na análise, no projeto e na implementação de programas. Apesar de existir a décadas, só recentemente a orientação a objetos adquiriu popularidade. Em parte esta popularidade decorre do uso crescente de interfaces gráficas e da arquitetura distribuída dos programas atuais, características que são adequadamente suportadas pela orientação a objetos. Os programas desenvolvidos usando-se a orientação a objetos são compostos por módulos cujos dados e funções são fortemente acoplados. Estes módulos são denominados “objetos” e, em cada um deles, temos dados e funções. As funções são denominadas “métodos” e contêm o código responsável pelos serviços providos pelos objetos. Os dados, por sua vez, só podem ser acessados através do código presente nos métodos do objeto. Por isso, costuma-se dizer que os dados são encapsulados“. Fernando Albuquerque. Os principais conceitos de orientação a objetos são: objetos, classes, atributos, métodos, mensagens, abstração e encapsulamento, descritos a seguir: 1.1. Objetos Um objeto representa um ‘elemento’ que pode ser identificado de maneira única. Em nível apropriado de abstração1, praticamente tudo pode ser considerado como objeto. Assim, elementos específicos como pessoas, organizações, máquinas ou eventos podem ser considerados objetos. Um objeto tem estado, comportamento e identidade; a estrutura e comportamento de objetos similares são definidos em suas classes comuns. Um objeto é a instância de uma classe. Os objetos que são instâncias de uma mesma classe armazenam os mesmos tipos de informações e apresentam o mesmo comportamento. A seguir são apresentadas três notações para representar um objeto: 1 Exame seletivo de determinados aspectos de um problema. nome do objeto nome do objeto : nome da classe APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 3 1.2. Classes As classes são tipos de objetos que descrevem as informações armazenadas e os serviços (métodos) providos por um objeto. Em outras palavras, são padrões a partir dos quais os objetos são criados. Uma classe é um conjunto de objetos que compartilham uma estrutura comum (atributos) e um procedimento comum (operações). Duas notações para representar uma classe são apresentadas a seguir: As classes são organizadas em níveis hierárquicos compartilhando estruturas e comportamentos comuns e são associadas a outras classes. As classes definem os valores de atributos relativos a cada instância de objetos e os métodos que cada objeto executa ou a que se submete. 1.3. Atributos Os atributos são as características do objeto. Cada atributo tem um valor para cada instância do objeto. Este valor deve ser um valor de dado puro, não um objeto. Para cada atributo, deve ser definido um nome e o tipo de dado. Opcionalmente, pode ser definido um valor default. Os atributos são representados no segundo terço da notação gráfica de classe. Na notação gráfica de objetos, estes devem ser representados com os respectivos valores de atributos. Indivíduo + cod_indiv: long + sexo: M ou F + data_nasc: data 1.4. Métodos Operações ou métodos são as funções ou transformações que podem ser aplicados em ou por um objeto numa classe. Todos os objetos numa classe compartilham os mesmos métodos. Cada método tem um objeto alvo como um argumento implícito. Um método pode ter argumentos em adição ao seu objeto alvo, os quais parametrizam o método. O método é parte da classe e não parte do objeto. O método pode não ser parte da classe; mas ser uma herança2 de uma superclasse na hierarquia de classes. Exemplo de classes com alguns de seus atributos e métodos. 2 Descreve o relacionamento entre classes definidas a partir de outras classes. nome da classe atributos (opcional) métodos (opcional) nome da classe APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 4 TocaFitas Avião - marca : char[30] - modelo : char[40] - ano : char[4] - proprietário : char[50] - situação : char[1] - marca : char[30] - modelo : char[40] - ano : char[4] - situação : char[1] + ligar() + gravar() + tocar() + parar() + desligar() + decolar() + aterrizar() + planar() + ligarMotor() + acelerar() + frear() Polígono - vértice : int - corBorda : char[40] - corInterior : char[40] + desenhar() + apagar() + mover() 1.5. Classes x Objetos Para criar um objeto é necessário criar uma classe e instanciar um objeto a partir da classe criada. Com um molde são gerados vários objetos parecidos, onde todos os objetos possuem os mesmos atributos e os mesmos métodos (implementação dos métodos é a mesma para todos os objetos). Entretanto, os valores dos atributos podem ser modificados por cada objeto. Quando uma instância da classe é gerada, um objeto é criado e o sistema aloca memória para seus atributos. A seguir é apresentada uma classe e duas de suas instâncias: Classe: Empregado atributos: nome endereço salário métodos: atualizar(nome, end, salário) buscarDados() Objeto: Empregado A atributos: nome = João endereço = R. Maria 12 salário = R$ 300,00 métodos: atualizar(nome, end, salário) buscarDados() Objeto: Empregado B atributos: nome = Ana endereço = R. D. José 30 salário = R$ 400,00 métodos: atualizar(nome, end, salário) buscarDados() APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 5 1.6. Visibilidade de atributos e métodos A visibilidade define como será o acesso ao atributo ou ao método, e pode ser de três tipos: pública, protegida ou privada. + visibilidade pública: significa que todos têm acesso podendo o atributo e/ou método ser utilizado por métodos declarados dentro de outras classes. É parte da interface de uma classe e é visível por qualquer porção do ambientede sua referência; # visibilidade protegida: significa que o atributo e/ou método é acessado através de métodos dentro da mesma classe e por métodos de classes ao longo do pacote no qual a classe é definida; - visibilidade privada: declaração que é parte da interface de uma classe, mas não é visível a quaisquer outras classes – o atributo e/ou método pode apenas ser acessado por métodos declarados dentro da mesma classe. Cliente + cod_cliente: long # sit_cliente: long - lim_credito: long + obter_limite( ) : float # bloquear_cliente( ) - cancelar_cliente( ) 1.7. Mensagens Os objetos se comunicam entre si através da mensagem. A mensagem especifica que um determinado método de um objeto necessita utilizar um ou mais métodos de outro objeto. Podem ser passados objetos como parâmetro, e, opcionalmente, algum resultado ou valor pode ser retornado. As mensagens especificam que os métodos devem ser executados, não como estes métodos devem ser executados. Quando um objeto A quer que o objeto B faça uma ação, o objeto A envia uma mensagem ao objeto B: “A pede para B fazer Ação” = “A pede para B executar Método 1” MENSAGEM Objeto B Objeto A APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 6 1.8. Abstração Abstração é o exame seletivo de determinados aspectos de um problema. O objetivo da abstração é isolar os aspectos que sejam importantes para algum propósito e suprimir os que não o forem. A abstração deve sempre visar a um propósito, porque este determina o que é e o que não é importante. Abstração é o processo de extrair as características essenciais de um objeto real. A abstração é necessária para se ter um modelo fiel da realidade sobre o qual se possa operar. O conjunto de características resultante da abstração forma um tipo de dados abstrato com informações sobre seu estado e comportamento. A abstração nem sempre produz os mesmos resultados, depende do contexto onde é utilizada, ou seja, a abstração de um objeto por uma pessoa pode ser diferente na visão de outra. Por exemplo, para um mecânico, um carro é caracterizado pela marca, modelo, potência, cilindradas, etc. Já um usuário comum pode caracterizá-lo pela cor, marca, modelo, consumo e preço. E finalmente, para o Departamento de Trânsito, um carro pode ser totalmente caracterizado pela placa, proprietário, marca, modelo, cor e número de chassi. Veja a ilustração abaixo. Ponto de vista do mecânico do usuário do Dep. trânsito Carro Carro Carro - marca : char[40] - modelo : char[40] - potencia : int - cilindradas : int - marca : char[40] - modelo : char[40] - cor : char[20] - consumo : float - preco : float - placa : char[7] - marca : char[40] - modelo : char[40] - cor : char[20] - dono : char[50] - chassi : char[20] - placa : char[7] Vamos supor que você vai escrever um aplicativo para uma transportadora que trabalha exclusivamente para uma livraria e cobra por livro, apesar do custo ser baseado no peso. É possível ter uma boa noção do peso de um livro sabendo o número de páginas, o formato e o tipo de capa (dura ou mole). Portanto, você poderá criar um objeto Livro que tenha essas três características. Já se você também for escrever um aplicativo semelhante para a livraria, não poderá aproveitar o mesmo objeto Livro que você criou, pois a abstração é diferente. Para a livraria, interessam características como autor, título, assunto, editora, preço, etc. que não interessam à transportadora. Um outro exemplo é sobre o corpo humano, veja a figura a seguir; para cada abstração, o foco para observação é diferente. APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 7 1.9. Encapsulamento O encapsulamento é justamente o empacotamento dos atributos e dos métodos numa mesma classe. Isto protege os dados contra corrupção, pois somente os métodos da classe poderão alterar as estruturas de dados desta classe em questão, ilustradas pela figura. Por exemplo, existe um número determinado de coisas que se pode fazer com um toca-fitas. Pode-se avançar, voltar, gravar, tocar, parar, interromper e ejetar a fita. Dentro do toca-fitas, porém, há várias outras funções sendo realizadas como: acionar o motor, desligá-lo, acionar o cabeçote de gravação, liberar o cabeçote, e outras operações mais complexas. Essas funções são escondidas dentro do mecanismo do toca-fitas e não é possível acessá-las diretamente. Quando o botão play é apertado, o motor é ligado e o cabeçote de reprodução acionado, não sendo necessário saber como isso é feito para usar o toca-fitas. Uma das principais vantagens do encapsulamento é esconder a complexidade do código. Outra, é proteger os dados. Permitindo o acesso a eles apenas através de métodos evita que seus dados sejam corrompidos por aplicações externas. No exemplo do toca-fitas, quando é utilizado o método gravar, sabe-se que o aparelho irá gravar informações na fita em um formato padrão que poderá ser lido por outros aparelhos similares. Se não existisse o método gravar e fosse necessário acessar direto à fita, cada pessoa poderia estabelecer uma maneira diferente de gravar informações (usando laser, ímãs, etc.). Gravar uma fita passaria a ser uma tarefa complicada, pois o usuário teria que conhecer toda a complexidade do aparelho. Depois, se perderia a compatibilidade, pois não haveria uma forma de proteger os dados para que fossem sempre gravados em um formato padrão. O encapsulamento, então, funciona tanto para proteger os dados, como para simplificar o uso de um objeto. Há vários exemplos na programação. Os aplicativos conhecidos que rodam no Windows têm uma grande semelhança porque usam os mesmos objetos. Cada objeto tem um número limitado de funções (métodos) que podem ser invocados sobre ele. Se você decide usar, em alguma parte do seu programa, dois botões: OK e Cancela, você não precisa entender como ele foi escrito, nem saber quais as suas variáveis internas. Basta saber como construí-lo, mudar o texto que contém e depois incluí-lo em seu programa. Não há como corromper a estrutura interna do botão. 1.10. Porque usar objetos? As vantagens de se usar objetos como blocos para a construção de aplicações são muitas. Pode- se citar: ? Simplicidade: os objetos escondem a complexidade do código. Pode-se criar uma complexa aplicação gráfica usando botões, janelas, barras de rolamento, etc., sem conhecer a complexidade do código utilizado para criá-los. ? Reutilização de código: um objeto, depois de criado, pode ser reutilizado por outras aplicações, ter suas funções estendidas e serem usados como blocos fundamentais em sistemas mais complexos. ? Integridade dos dados: devido ao uso do encapsulamento. APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 8 1.11. Introdução a Orientação a Objetos com Java 1.11.1. 1º Exemplo: 1. public class JavaOO_0101 { 2. private float base; 3. private float alt; 4. public void iniciar(float b, float a) { 5. base = b; 6. alt = a; 7. } 8. public void mostrarArea() { 9. System.out.println("\nArea = " + base * alt); 10. } 11. publicstatic void main (String args[]) { 12. JavaOO_0101 x = new JavaOO_0101(); 13. x.iniciar(10, 2); 14. x.mostrarArea(); 15. JavaOO_0101 y = new JavaOO_0101(); 16. y.iniciar(5, 3); 17. y.mostrarArea(); 18. } 19. } A seguir será descrito a explicação geral do programa, o que cada linha executa: 1. Declarada a classe com nome JavaOO_0101 com qualificador public, que significa que a classe é pública; acessível por qualquer outra classe. 2. Criado o atributo base do tipo real e privado. 3. Criado o atributo alt do tipo real e privado. 4. Criado o método iniciar que recebe dois parâmetros reais; o método é público. 5. O atributo base recebe o valor do parâmetro b, enviado pelo método main( ). 6. O atributo alt recebe o valor do parâmetro a, enviado pelo método main( ). 8. Criado o método público mostrarArea. 9. Apresentação do cálculo da área do retângulo, com referência aos valores dos atributos do objeto. 11. O método main torna a classe executável e por ele é iniciada a execução do programa. 12. Criada uma instância da classe JavaOO_0101 com nome x, através da palavra reservada new. 13. Execução do método iniciar para o objeto x, passando 10 e 2 como parâmetros. 14. Execução do método mostrarArea para o objeto x. 15. Criada uma instância da classe JavaOO_0101 com nome y, através da palavra reservada new. 16. Execução do método iniciar para o objeto y, passando 5 e 3 como parâmetros. 17. Execução do método mostrarArea para o objeto y. APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 9 1.11.2. 2º Exemplo: 1. import javax.swing.JOptionPane; 2. public class JavaOO_0102 { 3. private float altura; 4. private float largura; 5. public void lerDados() { 6. altura = Float.parseFloat( 7. JOptionPane.showInputDialog("Digite a altura: ")); 8. largura = Float.parseFloat( 9. JOptionPane.showInputDialog("Digite a largura: ")); 10. } 11. public void calcularPerimetro() { 12. float perim = 2 * (altura + largura); 13. JOptionPane.showMessageDialog(null, 14. "Perímetro = " + perim); 15. } 16. public static void main (String args[]) { 17. JavaOO_0102 ret1 = new JavaOO_0102(); 18. JavaOO_0102 ret2 = new JavaOO_0102(); 19. ret1.lerDados(); 20. ret1.calcularPerimetro(); 21. ret2.lerDados(); 22. ret2.calcularPerimetro(); 23. System.exit(0); 24. } 25. } A seguir será descrito a explicação geral do programa, o que cada linha executa: 1. Inclui no programa a definição da classe JOptionPane, para possibilitar o uso de seus métodos; 2. Declarada a classe com nome JavaOO_0102 com qualificador public, que significa que a classe é pública; acessível por qualquer outra classe; 3. Criado o atributo altura do tipo real e privado; 4. Criado o atributo largura do tipo real e privado; 5. Criado o método lerDados para que o usuário digite os valores dos atributos; 6. O atributo altura recebe o valor transformado em float, que foi digitado; 7. O método showInputDialog permite a entrada de dados como caracteres; 8. O atributo largura recebe o valor transformado em float, que foi digitado; 11. Criado o método público calcularPerimetro; 12. A variável local perim recebe o cálculo do perímetro; 13. Apresentação do cálculo do perímetro através do método showMessageDialog; 16. O método main torna a classe executável e por ele é iniciada a execução do programa; 17. Criada uma instância da classe JavaOO_0102 com nome ret1; 19. Execução do método lerDados para o objeto ret1; 20. Execução do método calcularPerimetro para o objeto ret1. APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 10 1.12. Exercícios 01 1. Qual é a principal diferença entre o desenvolvimento de sistemas utilizando a decomposição funcional e o desenvolvimento de sistemas utilizando objetos? 2. Quais são os principais conceitos da Orientação a Objetos? 3. Quais são as vantagens da Orientação a Objetos? 4. Defina classe e objeto? O que são atributos e métodos? 5. Em OO o que especifica uma mensagem? 6. Quais são as possíveis formas de definir o acesso de um atributo ou método? Quais são as diferenças? 7. Quais as vantagens do encapsulamento? 8. Qual é o objetivo da abstração? 9. Defina as classes, com seus atributos e métodos, para os objetos abaixo: a) um gato b) Gol, carro de uma pessoa c) "Conceitos de Orientação a Objetos", livro a venda em uma livraria d) Maria, professora em uma universidade e) "Engenharia de software", livro em uma biblioteca f) Corsa, carro a venda em uma concessionária g) João, funcionário de uma universidade h) uma janela do Windows 10. Crie duas abstrações para cada um dos objetos a seguir: a) Carro: uma para a concessionária e outra para o departamento de trânsito; b) Pessoa: uma para o patrão e outra para a agência de viagens; c) Boi: uma para o dono e outra para o frigorífico; d) Cachorro: uma para o biólogo e outra para o proprietário. 11. Quanto aos conceitos de orientação a objetos, marque V ou F. a.( ) Um método privado pode ser acessado diretamente por qualquer objeto de outra classe. b.( ) A definição de uma classe reserva espaço de memória para conter todos os seus atributos. c.( ) Um método público pode ser acessado por qualquer método público de sua classe. d.( ) Um método privado pode ser acessado diretamente por qualquer objeto da classe correspondente. e.( ) Os atributos de uma classe devem ser do tipo private; para estar de acordo com a OO pura. f.( ) Um método público pode ser acessado por qualquer método público de outra classe. APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 11 12. Implementar em Java uma classe paralelepípedo que possui três atributos: altura, largura e comprimento e três métodos para: a) solicitar as medidas do paralelepípedo; b) calcular e mostrar o volume (Volume = altura * largura * comprimento); c) calcular e mostrar a área (Área = 2 * (altura * largura + altura * comprimento + largura * comprimento)); O programa deve criar dois paralelepípedos, ler seus valores e mostrar suas áreas e seus volumes. 13. Usando Java, criar uma classe ContaBancaria que possui quatro atributos: numero, agencia, cliente e saldo e quatro métodos para: a) entrada de todos os dados da conta; b) apresentar os dados da conta; c) realizar saque do valor informado, se houver saldo; caso contrário, mostrar mensagem de saldo insuficiente; d) realizar depósito do valor informado. O programa deve criar um objeto e chamar todos os métodos. Escolha a ordem de execução e a quantidade de vezes que cada método será executado. 14. Criar em Java uma classe Funcionário e implementar os métodos apresentados ao lado. O programa deve criar um objeto da classe declarada e executar os seus métodos. Escolha a ordem e a freqüência de execução dos métodos. Paralelepipedo - altura : float - largura : float - comprimento : float + solicitarMedidas() + mostrarVolume() + mostrarArea() ContaBancaria - numero : char[10] - agencia : char[10] - cliente : char[50] - saldo: float + entrarDados() + mostrarDados() + sacar() + depositar() Funcionario - cpf : char[11] - nome : char[50] - horasTrab : float - valorHora : float + entrarDados() + mostrarDados() + calcularSalario() + alterarHoras() + alterarValor() APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 12 2. Método Construtor e Polimorfismo 2.1. Métodos Construtores Os métodos construtores são criados para garantir que os objetos serão inicializados de forma correta. Pode haver, numa mesma classe, vários métodos construtores, entretanto, é necessário que cada um tenha uma quantidade diferente de parâmetros ou que os tipos de parâmetros sejam diferentes. O construtor tem o mesmo nome da classe; e é sempre executado quando o objeto é criado. Um método construtor default é o método sem parâmetros. O método construtor não retorna valor e não pode ser chamado diretamente. Observe os exemplos a seguir: 1. public class Livro0 { 2. private String titulo; 3. private int pag; 4. private float preco; 5. public void mostrarDados() { 6. System.out.println("Título = " + titulo + "\nPáginas = " + 7. pag + "\nPreço = " + preco); 8. } 9. public static void main(String args[]) { 10. Livro0 liv = new Livro0(); 11. liv.mostrarDados(); 12. System.exit(0); 13. } 14. } 1. public class Livro0 { 2. private String titulo; 3. private int pag; 4. private float preco; 5. public Livro() { 6. titulo = "OO com Java"; 7. pag = 459; 8. preco = (float)312.56; 9. } 10. public void mostrarDados() { 11. System.out.println("Título = " + titulo + "\nPáginas = " + 12. pag + "\nPreço = " + preco); 13. } 14. public static void main(String args[]) { 15. Livro0 liv = new Livro0(); 16. liv.mostrarDados(); 17. System.exit(0); 18. } 19. } APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 13 Nota-se que a diferença entre eles é que no primeiro exemplo não foi definido um método construtor; assim, o construtor executado é o default, onde os atributos são inicializados com zero para tipos de dados numéricos e vazio para caracteres. A saída de dados do primeiro exemplo é: Título = Páginas = 0 Preço = 0.0 No segundo exemplo, o método construtor foi definido e será executado quando for instanciada a classe (na linha 15). Ou seja, os atributos serão inicializados com os valores definidos no método construtor. A saída de dados do segundo exemplo é: Título = OO com Java Páginas = 459 Preço = 312.56 2.2. Polimorfismo Polimorfismo é a capacidade de um objeto enviar uma mensagem genérica para muitos outros objetos; ou seja, um mesmo nome de método é usado em diferentes classes ou usado na mesma classe com quantidade de parâmetros diferentes ou tipos de parâmetros diferentes. Quando o método polimórfico estiver na mesma classe, o objeto saberá qual método executar pela quantidade de parâmetros passados na chamada, porque é necessário especificar os parâmetros a serem utilizados. Logicamente, métodos polimórficos possuem implementações diferentes. Ao criar o objeto, o método construtor a ser executado dependerá da quantidade de parâmetros passados na criação. Observando o exemplo abaixo, nota-se que na linha 15, a criação do objeto ret1 será feita a chamada ao método construtor Retangulo da linha 7 porque foram passados dois parâmetros. E na chamada na linha 16, a criação do objeto ret2 será feita a chamada ao método construtor Retangulo da linha 3 porque não foram passados parâmetros. 1. public class Retangulo { 2. private float base, alt; 3. public Retangulo() { 4. base = 5; alt = 20; 5. } 6. public Retangulo(float b, float a) { 7. base = b; alt = a; 8. } 9. public void mostrarArea() { 10. System.out.println("\nÁrea = " + base * alt); 11. } 12. public static void main(String args[]) { 13. Retangulo ret1 = new Retangulo(10,2); 14. Retangulo ret2 = new Retangulo(); 15. ret1.mostrarArea(); 16. ret2.mostrarArea(); 17. System.exit(0); 18. } 19. } APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 14 Observando o exemplo abaixo, nota-se que na linha 22 há uma chamada ao método imprimirCheque e será executado o método polimórfico da linha 14 porque não foi passado parâmetros. E na chamada da linha 24 será executado o método polimórfico da linha 17 porque foi passado o número 10 como parâmetro. 1. public class Conta { 2. private String nConta, nAgencia; 3. private float saldo; 4. private int numCheque; 5. public Conta() { 6. nConta = "1034-5"; 7. nAgencia = "234-X"; 8. saldo = 100000; 9. numCheque = 85534; 10. } 11. public void mostrarCheque() { 12. System.out.println("\nNº Cheque: " + numCheque); 13. } 14. public void imprimirCheque() { 15. numCheque = numCheque + 20; 16. } 17. public void imprimirCheque( int qtd ) { 18. numCheque = numCheque + qtd; 19. } 20. public static void main(String args[]) { 21. Conta cta = new Conta(); 22. cta.imprimirCheque(); 23. cta.mostrarCheque(); 24. cta.imprimirCheque(10); 25. cta.mostrarCheque(); 26. System.exit(0); 27. } 28. } Havendo métodos polimórficos em classes diferentes; o objeto saberá qual método executar, porque ele executará o método de sua classe. Observando o exemplo a seguir, nota-se que existe dois métodos polimórficos mostrarArea(), um na classe Reta e outro na classe Para. Na linha 36 a chamada ao método executará os comandos da linha 10, porque o objeto é da classe Reta. Na linha 37 a chamada ao método executará os comandos da linha 25, porque o objeto é da classe Para. APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 15 1. import javax.swing.JOptionPane; 2. class Reta { 3. private float base, altura; 4. public Reta() { 5. base = Float.parseFloat( 6. JOptionPane.showInputDialog("Base: ")); 7. altura = Float.parseFloat( 8. JOptionPane.showInputDialog("Altura: ")); 9. } 10. public void mostrarArea() { 11. JOptionPane.showMessageDialog(null, 12. "Área do Retângulo = " + (base * altura)); 13. } 14. } 15. class Para { 16. private float altura, largura, compr; 17. public Para() { 18. altura = Float.parseFloat( 19. JOptionPane.showInputDialog("Altura: ")); 20. largura = Float.parseFloat( 21. JOptionPane.showInputDialog("Largura: ")); 22. compr = Float.parseFloat( 23. JOptionPane.showInputDialog("Comprimento: ")); 24. } 25. public void mostrarArea() { 26. float area = 2 * (altura * largura + 27. altura * compr + largura * compr); 28. JOptionPane.showMessageDialog(null, 29. "Área do Paralelepipedo = " + area); 30. } 31. } 32. public class Poli01 { 33. public static void main (String args[]) { 34. Reta reta1 = new Reta(); 35. Para para1 = new Para(); 36. reta1.mostrarArea(); 37. para1.mostrarArea(); 38. System.exit(0); 39. } 40. } APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 16 2.3. Exercícios 01 ? O que será apresentado pelo programa abaixo: class CA { public CA() { System.out.println("ASTRA"); } public void MA1() { System.out.println("CORSA"); } public void MA2() { System.out.println("VECTRA"); } } class CB { public CB() { System.out.println("POLO"); } public void MB1() { System.out.println("GOL"); } public void MA2() { System.out.println("GOLF"); } } public class JavaOO_0201 { public static void main(String args[]) { CA a = new CA(); CB b = new CB(); a.MA1(); a.MA2(); b.MB1(); b.MA2(); } } ? O que será apresentado pelo programa abaixo: class COR { public COR() { System.out.println("PRETO"); } public COR(int x) { System.out.println("ROSA"); } public void COLORIR() { System.out.println("BRANCO");} } class CORES { public CORES() { System.out.println("AMARELO"); } public void COLORIR() { System.out.println("AZUL"); } } public class JavaOO_0202 { public static void main(String args[]) { CORES a = new CORES(); COR b = new COR(1); a.COLORIR(); COR c = new COR(); c.COLORIR(); b.COLORIR(); } } APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 17 ? Dadas as seguintes classes, o que será apresentado pelo programa abaixo: class Uni { public Uni() { System.out.println("ZERO"); } public Uni(int x) { System.out.println("UM"); } public void write() { System.out.println("DOIS"); } public void read() { System.out.println("TRES"); } } class Dez { public Dez(int y) { System.out.println("ONZE"); } public Dez(String z) { System.out.println("DOZE"); } public void write() {System.out.println("DEZESSETE");} public void read() { System.out.println("DUZENTOS"); } } public class JavaOO_0203 { public static void main(String args[]) { Uni uni1 = new Uni(); Uni uni2 = new Uni(1); Dez dez2 = new Dez(10); Dez dez3 = new Dez("10"); uni1.write(); dez2.read(); uni2.read(); dez3.write(); } } ? Com base nas classes Uni e Dez do exercício anterior, o que será apresentado pelo programa abaixo: public class JavaOO_0204 { public static void main(String args[]) { Dez dez1 = new Dez(10); Uni uni1 = new Uni(); Uni uni2 = new Uni(1); Dez dez2 = new Dez("10"); dez2.write(); uni2.read(); uni1.write(); dez1.read(); } } APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 18 ? Dadas as seguintes classes, o que será apresentado pelo programa abaixo: class Circulo { protected int raio; public Circulo(int r) { raio = r; } public Circulo() { raio = 0; mostrar(); } public void circular(int v1, int v2) { raio = v1 + v2; mostrar(); } public void mostrar() { System.out.println("Círculo = " + raio); } } class Esfera { protected int raio; public Esfera(int r) { raio = r * 4; mostrar(); } public void circular(int v1) { raio = v1 * 5; mostrar(); } public void desenhar() { System.out.println("desenhando"); } public void mostrar() { System.out.println("Esfera = " + raio); } } public class JavaOO_0205 { public static void main(String args[]) { Circulo circulo1 = new Circulo(); circulo1.circular(10,20); Esfera esfera2 = new Esfera(83); esfera2.circular(3); Circulo circulo2 = new Circulo(9); circulo2.circular(3,5); esfera2.desenhar(); esfera2.circular(7); circulo2.circular(4,6); } } APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 19 ? Com base nas classes Circulo e Esfera do exercício anterior, o que será apresentado pelo programa abaixo : public class JavaOO_0206 { public static void main(String args[]) { Esfera esfera1 = new Esfera(8); esfera1.circular(5); Circulo circulo1 = new Circulo(); circulo1.circular(4,8); Circulo circulo2 = new Circulo(10); circulo2.circular(15,7); esfera1.circular(7); circulo1.circular(2,9); esfera1.desenhar(); } } APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 20 ++ EExxSSttaattiicc((iinntt nn)) ++ mmoossttrraarr(()) ++ qquuaannttiiffiiccaarr(()) -- nnuumm :: iinntt -- qqttdd :: iinntt EExxSSttaattiicc 3. Atributos e Métodos static Um atributo ou método do tipo static é utilizado para economizar memória quando uma cópia dos dados é suficiente para armazenar o dado, não sendo necessário que cada objeto possua uma cópia. Sugere-se invocar os métodos do tipo static utilizando o nome da classe; porque isso enfatiza que esse método é da classe, ou seja, static. Desta forma, atributos e métodos static podem ser utilizados mesmo se nenhum objeto da classe tiver sido ainda instanciado. Todo atributo static é automaticamente inicializado, com seus valores padrões: zero para numéricos, vazio para caracteres. Ao lado é apresentada uma classe segundo a notação da UML. Os atributos e métodos static estão sublinhados. A partir do exemplo a seguir, o atributo static (linha 3) é um atributo de classe e não do objeto, ou seja, é um único atributo visível e acessível por qualquer objeto da classe. O método static (linha 11) pode acessar somente atributos static. Pode-se acessar o método static através de seus objetos (linha 19); ou pela sua classe (linhas 21 e 26); mas, mesmo que a classe não possua objetos, é possível acessá-lo através da classe (linha 15). 1. public class ExStatic { 2. private int num; 3. private static int qtd; 4. public ExStatic(int n) { 5. num = n; 6. qtd++; 7. } 8. public void mostrar() { 9. System.out.println(qtd + " - " + num); 10. } 11. public static void quantificar() { 12. System.out.println("Tem " + qtd + " objetos."); 13. } 14. public static void main(String args[]) { 15. ExStatic.quantificar(); 16. ExStatic es1 = new ExStatic(10); 17. es1.mostrar(); 18. ExStatic es2 = new ExStatic(7); 19. es2.quantificar(); 20. ExStatic es3 = new ExStatic(99); 21. ExStatic.quantificar(); 22. ExStatic es4 = new ExStatic(3); 23. es4.mostrar(); 24. ExStatic es5 = new ExStatic(6); 25. es5.mostrar(); 26. ExStatic.quantificar(); 27. } 28. } APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 21 3.1. Exercícios 01 1. Quais são os valores apresentados na tela, pela execução do seguinte programa? public class Pessoa { private String nome, fone; private staticint qtd; public Pessoa(String nm, String fn) { nome = nm; fone = fn; qtd++; } public void mostrar() { System.out.println(nome + " - " + fone); } public static void existente() { System.out.println("Existem " + qtd + "pessoas."); } public static void main(String args[]) { Pessoa.existente(); Pessoa P1 = new Pessoa( "Ana", "321.3210" ); Pessoa P2 = new Pessoa( "João", "345.3405" ); Pessoa.existente(); P2.mostrar(); Pessoa P3 = new Pessoa( "Maria", " " ); Pessoa P4 = new Pessoa( "Carla", "62 341.3939" ); P3.mostrar(); P4.existente(); Pessoa P5 = new Pessoa( "José", "11 334.5678" ); P1.mostrar(); P2.existente(); Pessoa P6 = new Pessoa( "Cíntia", "21 2334.5678" ); Pessoa P7 = new Pessoa( "Paulo", "35 345.9876" ); P7.existente(); Pessoa P8 = new Pessoa( "Augusto", "33 9986.2217" ); P8.mostrar(); Pessoa.existente(); } } APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 22 4. Relacionamentos As classes costumam possuir relacionamentos entre si, com o intuito de compartilhar informações e colaborarem umas com as outras para permitir a execução dos diversos processos executados pelo sistema. As associações descrevem os vínculos existentes entre as classes; são representadas por retas ligando as classes envolvidas; podem também possuir títulos para determinar o tipo de vínculo estabelecido entre as classes; e contém outra informação conhecida como multiplicidade. A multiplicidade procura determinar qual das classes envolvidas em uma associação fornece informações para as outras, além de permitir especificar o nível de dependências de uma classe para com as outras envolvidas na associação. A tabela abaixo demonstra alguns dos diversos valores de multiplicidade que podem ser utilizados em uma associação: Multiplicidade Significado 0...1 No mínimo zero (nenhum) e no máximo um. Indica que os objetos das classes associadas não precisam obrigatoriamente estar relacionados, mas se houver relacionamento indica que apenas uma instância da classe se relaciona com as instâncias da outra classe. 1...1 Um e somente um. Indica que apenas um objeto da classe se relaciona com os objetos da outra classe. 0...* No mínimo nenhum e no máximo muitos. Indica que pode ou não haver instâncias da classe participando do relacionamento. * Muitos. Indica que muitos objetos da classe estão envolvidos no relacionamento. 1...* No mínimo 1 e no máximo muitos. Indica que há pelo menos um objeto envolvido no relacionamento, podendo haver muitos envolvidos. 3...5 No mínimo 3 e no máximo 5. Indica que existem pelo menos 3 instâncias envolvidas no relacionamento e que podem ser 4 ou 5 as instâncias envolvidas, mas não mais do que isso. A seguir são descritos alguns tipos de associação: binária, agregação e herança. 4.1. Associação Binária A associação binária é o vínculo entre duas classes. Este tipo de associação constitui-se na mais comum encontrada nos diagramas de classe. APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 23 Um objeto da classe Pessoa pode relacionar-se com várias instâncias da classe Imóvel, conforme demonstra a multiplicidade *, enquanto que, se existir um objeto da classe Imóvel, ele terá que se relacionar obrigatoriamente com no mínimo um objeto da classe Pessoa ou vários, demonstrado pela multiplicidade 1..*. Um objeto da classe Sócio pode relacionar-se ou não com instâncias da classe Dependentes, conforme demonstra a multiplicidade 0..*, enquanto que, se existir um objeto da classe Dependente, ele terá que se relacionar obrigatoriamente com um objeto da classe Sócio, pois, como não foi definida a multiplicidade na extremidade da classe Sócio, isto significa que a multiplicidade é 1..1. 4.2. Agregação Outro tipo de associação é a agregação ou todo-parte, onde uma classe representa o todo e uma ou mais classes representam as partes deste todo. Um agregado (o todo) possui partes, que, por sua vez, podem ter partes. A notação da agregação é representada pela interligação das classes e um símbolo de losango próximo a classe que ilustra o todo, além da especificação da multiplicidade. O exemplo abaixo especifica que um acervo é composto por um ou mais livros; e cada livro é composto por uma ou mais páginas. 1...* 1...* O exemplo a seguir mostra que um pedido é composto por um ou mais itens de pedido. Página Livro Acervo 1...* Compra Pessoa - nome : char[30] - ender : char[50] - fone : char[15] - nasc : date + trabalhar() + receber() + pagar() Imóvel - local : char[30] - descri : char[50] - tipo : char[10] - valor : float + alugar() + comprar() + vender() Possui 0...* Sócio - nome : char[30] - ender : char[50] - fone : char[15] - nasc : date + registrar() + consultar() Dependente - nome : char[30] - nasc : date APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 24 4.3. Herança Herança ou generalização e especialização é um tipo de associação entre classes, onde os atributos e métodos definidos na superclasse (a classe mais genericamente definida) são compartilhados pela classe mais especializada, a subclasse. Na subclasse é possível ser feita a definição de mais atributos e métodos e, também, a redefinição dos métodos que foram herdados pela superclasse. É o aproveitamento e extensão das características de uma classe existente. A notação utilizada para herança é a interligação das classes envolvidas e um triângulo próximo a superclasse. 4.3.1. Herança Simples Na herança simples, a subclasse herda os atributos e métodos de uma única superclasse. No exemplo acima, um Formato fechado pode ser uma Elipse ou um Polígono. Tanto a classe Polígono quanto a classe Elipse herdam os atributos da classe Formato fechado. A classe Elipse possui ainda o atributo raio e a classe Polígono possui o atributo qtdLados. Portanto, a classe Elipse possui os atributos corPreench, linhaEspes e raio; e a classe Polígono possui os atributos corPreench, linhaEspes e qtdLados. Existem muitos exemplos na natureza. No reino animal, os mamíferos herdam a característica de terem uma espinha dorsal por serem uma subclasse dos vertebrados. Acrescentam várias outras, como ter sangue quente, amamentar, etc. Os roedores herdam todas as características dos vertebrados e mamíferos e acrescentam outras, e assim por diante. Formato fechado - corPreench : char[20] - linhaEspes : float Elipse - raio : float Polígono - qtdLados : int possui 1...* Pedido - numero : long - cliente : char[50] - fone : char[15] - data : date + registrar() + obterTotal() Itens - pedido : long - numero : int - codprod : long - valor : float + consultar() APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 25 Em programação, a herança ocorre quando uma classe obtém a implementação (atributos e métodos) de outra classe para desenvolver uma especialização. A herança permite a formação de uma hierarquia de classes, onde cada nível é uma especialização do nível anterior, que é mais genérico. É comum desenvolver estruturas genéricas para depois ir acrescentando detalhes em POO (Programação Orientada a Objetos). Isto simplifica o código e permite uma organização maior de um projeto. Também favorece a reutilização de código. Se for necessário implementar um botão cor-de- rosa e já se tem uma classe que define as características de um botão cinza, pode-se fazer com que nossa implementação seja uma subclasse de BotãoCinza, e depois estender suas características. Desta forma, concentra-se apenas no necessário (a cor do botão) e evita-se ter que definir tudo a partir do zero. 4.3.2. Herança Múltipla Pela herança múltipla a subclasse, também chamada de classe de junção, herda os atributos e métodos de duas ou mais superclasses. No exemplo a seguir, a subclasse Lobisomem herda atributos e métodos das superclasses Lobo e Homem. Lobo Homem Lobisomem Mamífero - sangue : char + amamentar() Vertebrado - espinha : float + calcificar() Roedor + roer() APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 26 4.3.3. Classe Abstrata x Concreta Uma classe abstrata é uma classe que não possui instâncias diretas, mas cujas descendentes, sim. Uma classe concreta é uma classe instanciável; isto é, pode ter instâncias diretas. Uma classe direta pode ter subclasses abstratas (mas estas, por sua vez, devem possuir descendentes concretos). 4.4. Exercícios 01 1. Explique a diferença entre herança e agregação. Dê exemplos. 2. O que é agregação? Dê um exemplo. 3. Diferencie uma superclasse de uma subclasse. 4. Uma subclasse pode ser também uma superclasse? Por quê? 5. Qual é a diferença entre herança simples e herança múltipla? Dê exemplo. 6. Qual é a diferença entre classe abstrata e classe concreta? 4.5. Exercícios 02 Para cada um dos grupos de classes a seguir; faça e nomeie as associações existentes entre as classes; determine alguns atributos e métodos. a) Homem Filho Mulher b) Empresa Funcionário Habilidade c) Livro Cliente Autor Editora d) Motorista Carro Doc_carro Cart_motorista e) Quadrado Triângulo Aresta Vértice f) País Cidade Estado g) Professor Departamento Disciplina Aluno h) Arquivo Diretório Campo Registro APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 27 4.6. Exercícios 03 Identifique os atributos e métodos das classes abaixo e as associações de herança entre elas: Mamífero Carro Homem Memória de Computador Ônibus Avião Menu Vertical Menu Caminhão RAM Transporte Menu Horizontal HD Leão CD-ROM CD-RW 4.7. Exercícios 04 Identifique as associações existentes entre as classes abaixo: Periférico de Reta Vídeo Computador Entrada Roda Processador Periférico de Polígono Saída Carro Motor Ponto Teclado Memória Periféricos Porta Mouse RAM Transporte ROM APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 28 5. Herança em Java 5.1. Herança simples - Exemplo de um programa completo Fazer um programa para definir as classes abaixo, observando a implementação da herança (reaproveitamento de atributos e métodos). Criar um objeto para cada classe e executar todos os métodos de cada objeto. • Os métodos construtores – lêem todos os atributos da classe. • abastecer( ) – solicita a quantidade de combustível e soma ao atributo qtCombust e mostra a quantidade atual de combustível. • mostrarDados( ) – mostra todos os atributos da classe. RESOLUÇÃO: • Criar uma relação de herança entre Caminhão e Veiculo, como apresentado a seguir. Assim, a subclasse Caminhão aproveita alguns atributos e métodos da superclasse. • Note que para que a classe caminhão tenha acesso aos atributos, eles devem ser declarados como protected. • Há a redefinição do método mostrarDados( ), pois as implementações serão diferentes para cada classe. Veiculo - marca : char[30] - qtCombust : float - qtRodas : int + Veiculo() + abastecer() + mostrarDados() Caminhao - marca : char[30] - qtCombust : float - qtRodas : int - limite_carga : float + Caminhao() + abastecer() + mostrarDados() Veiculo # marca : char[30] # qtCombust : float # qtRodas : int + Veiculo() + abastecer() + mostrarDados() Caminhao - limite_carga : float + Caminhao() + mostrarDados() APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 29 import javax.swing.JOptionPane; class Veiculo { protected String marca; protected float qtCombust; protected int qtRodas; public Veiculo(){ // Método construtor da superclasse marca = JOptionPane.showInputDialog("Marca:"); qtCombust = Float.parseFloat( JOptionPane.showInputDialog("Combustível:")); qtRodas = Integer.parseInt( JOptionPane.showInputDialog("Nº Rodas:")); } public void abastecer() { float qtd; qtd = Float.parseFloat( JOptionPane.showInputDialog("Qtdd. Abastatecer = " + marca)); qtCombust = qtCombust + qtd; JOptionPane.showMessageDialog(null, "Combustível " + marca + " = " + qtCombust); } public void mostrarDados() { JOptionPane.showMessageDialog(null, "Marca = " + marca + "\nCombustível = " + qtCombust + "\nRodas = " + qtRodas); } } class Caminhao extends Veiculo { private float limiteCarga; public Caminhao(){ // Método construtor da subclasse // será executado o método construtor da superclasse limiteCarga = Float.parseFloat( JOptionPane.showInputDialog("Limite:")); } public void mostrarDados() { // redefinição do método da superclasse JOptionPane.showMessageDialog(null, "Marca = " + marca + "\nCombustível = " + qtCombust + "\nRodas = " + qtRodas + "\nLimite de Carga = " + limiteCarga); } } public class JavaOO_0501 { publicstatic void main (String args[]) { Veiculo Vei = new Veiculo(); Caminhao Cam = new Caminhao(); Vei.abastecer(); Cam.abastecer(); Vei.mostrarDados(); Cam.mostrarDados(); System.exit(0); } } APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 30 5.2. Exercícios teóricos 01 Com base no programa anterior indique: a) Um método construtor: b) Um objeto: c) Uma variável local: d) Um método: e) Uma subclasse: f) Uma classe: g) Dois atributos: h) Um método polimórfico: i) Uma superclasse: 5.3. Exercícios teóricos 02 1. Dadas as classes abaixo, responda o que se pede. a) Quais são os atributos da classe Pessoa? b) Quais são os métodos da classe PJuridica? c) Quais são os atributos da classe PFisica? d) Quais são os métodos da classe Pessoa? e) Quais são os atributos da classe PJuridica? f) Quais são os métodos da classe PFisica? Pessoa # nome : char[30] # ende : char[50] # fone : char[15] + alterarNome() PFisica # CPF : char[11] # celular:char[15] + verifarCPF() PJuridica # CNPJ : char[14] # fantasia:char[20] + verificarCNPJ() APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 31 CONTA # nAge : char[20] # nCta : char[10] # nome : char[40] # saldo : float + sacar() + depositar() POUPANCA - taxa : float + calcularRend() CORRENTE - limite : float - juros : float + calcularJuros() + emitirCheque() CCXX # atr1 : float - atr2 : int - met1() CCYY - atr3 : float + atr4 : int # met2() + met3() CCWW - atr5 : float - met4() 2. Dadas as classes abaixo, responda o que se pede. a) Atributos da classe CONTA? b) Métodos da classe POUPANCA? c) Atributos da classe CORRENTE? d) Métodos da classe CONTA? e) Atributos da classe POUPANCA? f) Métodos da classe CORRENTE? 3. Dadas as classes abaixo, responda o que se pede. a) Atributos da classe CX? b) Atributos da classe CW? c) Métodos da classe CY? d) Métodos da classe CX? e) Atributos da classe CY? f) Métodos da classe CW? APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 32 5.4. Exercícios teóricos 03 Com base nas classes abaixo, criar um ou mais relacionamentos de herança entre elas. a) b) c) d) A # atrA : int # atrB : float + mtd1() + mtd2() B # atrA : int - atrC : int + mtd2() + mtd3() C # atrA : int - atrD : float + mtd2() - mtd4() A # atrA : int # mtd1() # mtd2() B # atrC : int # atrD : int + mtd3() C # atrA : int # atrB : int # atrC : int # atrD : int # mtd1() # mtd2() + mtd3() A # atr10 : int + mtdA() C # atr20 : int - atr50 : int + mtdC() D # atr30 : int + mtdD() B # atr10 : int # atr20 : int # atr30 : int # atr40 : int + mtdA() + mtdB() + mtdC() + mtdD() A # atr1 : float + mtdA() D # atr2 : float + mtdD() + mtdD1() C # atr1 : float # atr2 : float - atr3 : int + mtdA() + mtdC() + mtdD() + mtdD1() B # atr2 : float # atr4 : float # atr5 : int + mtdB() + mtdD() + mtdD1() APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 33 Poupanca - rendimento : float + Poupanca() + mostrarDados() + calcularRend() Corrente - nrCheque : int + Corrente() + mostrarDados() + emitirCheque() Conta # agencia : char[15] # conta : char[10] # saldo : float + Conta() + depositar() + sacar() e) f) 5.5. Exercício prático 01 Para cada um dos itens do exercício anterior, criar um programa em Java; não sendo necessário a implementação dos métodos. Lembre-se que em Java não há implementação de herança múltipla. 5.6. Exercício prático 02 Fazer um programa para definir as classes abaixo, observando a implementação da herança (reaproveitamento de atributos e métodos). Criar um objeto para cada classe, exceto para a classe CONTA que é abstrata, e executar todos os métodos de cada objeto. Abaixo segue a descrição de cada método: • Conta( ) – ler todos os atributos da classe Conta. • Corrente( ) – ler todos os atributos da classe Corrente. • Poupanca( ) – ler todos os atributos da classe Poupanca. • depositar( ) – ler um valor e somar ao saldo. • sacar( ) – ler um valor e subtrair do saldo, se possível. • mostrarDados( ) – mostrar todos os atributos da respectiva classe. • emitirCheque( ) – ler a quantidade de cheque a ser impresso e somar a quantidade ao nrCheque. • calcularRend( ) – usar a fórmula: saldo = saldo + saldo * rendimento / 100. A # atrX : int + mtdA() C # atrX : int # atrY : int + mtdA() # mtdC() B # atrX : int # atrY : int # atrZ : int + mtdA() + mtdB() # mtdC() X # atrA : float + mtd1() Y # atrA : float - atrB : int + mtd1() - mtd3() Z # atrA : float # atrC : float + mtd1() + mtd4() W # atrA : float # atrC : float # atrD : int + mtd1() + mtd4() # mtd5() APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 34 5.7. Exercício prático 03 O que será apresentado na tela pela execução de cada um dos programas apresentados a seguir? 1º) class CA { public CA() { System.out.println("ASTRA"); } public void MA1() { System.out.println("CORSA"); } public void MA2() { System.out.println("VECTRA"); } } class CB extends CA { public CB() { System.out.println("POLO"); } public void MB1() { System.out.println("GOL"); } public void MB2() { MA2(); System.out.println("GOLF"); } } public class JavaOO_0502 { public static void main (String args[]) { CA a = new CA(); CB b = new CB(); a.MA1(); b.MA2(); b.MB2(); System.exit(0); } } 2º) class COR { public COR() { System.out.println("PRETO"); } public void COLORIR() { System.out.println("BRANCO"); } } class CORES extends COR { public CORES() { System.out.println("AMARELO"); } public void COLORIR() { System.out.println("AZUL"); } } public class JavaOO_0503 { public static void main (String args[]) { CORES a = new CORES(); a.COLORIR(); COR b = new COR(); b.COLORIR(); System.exit(0);} } APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA __________________________________________________________________ Profa. Gilene Borges Gomes ___ ____ www.gomeshp.com _________________________________________________________ 35 3º) class UNI { public UNI() { System.out.println("UM"); } public void WRITE() { System.out.println("DOIS"); } public void READ() { System.out.println("TRES"); } } class DEZ extends UNI { public DEZ() { System.out.println("DEZ"); } public void WRITE() { System.out.println("DEZESSETE"); } } class CENT extends DEZ { public CENT() { System.out.println("CEM"); } public void READ() { System.out.println("DUZENTOS"); } } public class JavaOO_0504 { public static void main (String args[]) { UNI X = new UNI(); DEZ Y = new DEZ(); Y.READ(); X.WRITE(); CENT Z = new CENT(); Z.READ(); Y.WRITE(); X.READ(); Z.WRITE(); System.exit(0); } }
Compartilhar