Projetando Classes e Relacionamento (Herança) em Modelo de Classes

Documentos relacionados
Projetando Classes e Relacionamento (Herança) em Modelo de Classes

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Linguagem de Programação II Implementação

Linguagem de Programação. Diagrama de classes

Objetivo: Aplicar a técnica de encapsulamento no sistema de gestão acadêmica

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

Análise de Programação

PROGRAMAÇÃO ORIENTADA A OBJETOS JAVA

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Herança e Propriedades

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

1 Introdução e Conceitos básicos

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Programação Orientada a Objetos

Notas de Aula 04: Herança e polimorfismo.

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Classes e Objetos em Java. Algoritmos e Programação I. Classes. Classes. Modificadores de Acesso. Classes. Revisão

Programação Orientada a Objetos

POO29004 Programação Orientada a Objetos

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Classe Abstrata e Interface

Linguagem de Programação II Importando Classes/Pacotes

COMPORTAMENTOS - Observações

Linguagem de Programação II Implementação

Classes e Objetos INTRODUÇÃO À ORIENTAÇÃO A OBJETOS COM JAVA - MÓDULO II. Classes. Objetos. Um modelo para a criação de objetos

Fundamentos Básicos da linguagem Java (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

Linguagem de Programação IV Introdução

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Polimorfismo. PARTE II: Java e OO. Polimorfismo. Polimorfismo. Polimorfismo. Polimorfismo

POO Fundamentos Parte III. Professor Vicente Paulo de Camargo

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente):

4 Conceito de Herança

Dados armazenados em um objeto podem ser tanto primitivos, tais como inteiros ou caracteres, ou referências para outros objetos.

Interfaces POO. Prof. Marcio Delamaro

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Palavras Reservadas da Linguagem Java

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

AULA 16 HERANÇA. Disciplina: Programação Orientada a Objetos Professora: Alba Lopes

Programação Java (nível intermediário) 4. Polimorfismo

Linguagem Java - Introdução

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

PADRÕES DE PROJETO DE SOFTWARE

Universidade Estadual de Santa Cruz

Classe Produto e Calculo de Produto

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Rafael B. Pereira (

Programação Orientada a Objetos

Classe Funcionario tem Endereco

Encapsulamento de Dados

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

DIRETORIA ACADÊMICA DE GESTÃO E TECNOLOGIA DA INFORMAÇÃO DIATINF TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TADS

Paradigmas da Programação PPROG. Tipos Enumerados. Nelson Freire (ISEP DEI-PPROG 2013/14) 1/20

public class Funcionario implements Comparable<Funcionario>{

Aula 4 Estruturas de Controle

Roteiro. Introdução. Uma Introdução à Programação Orientada a Objetos e JAVA usando NetBeans. Objetos. Princípios da Orientação a Objetos

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Linguagem de Programação II Herança

Programação Estruturada e Orientada a Objetos

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Lista de exercícios 2

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga

Programação Orientada a Objetos Flávio de Oliveira Silva 144

Visibilidade e Encapsulamento

Transcrição:

Projetando Classes e Relacionamento (Herança) em Modelo de Classes A UML (Unifed Modeling Language) consiste de um número de elementos gráficos combinados para formar diagramas. Pelo fato de ser uma linguagem, a UML tem regras para a combinação desses elementos. O propósito dos diagramas é apresentar múltiplas visões de um sistema, o conjunto dessas múltiplas visões é chamado de modelo. É importante deixar claro que um modelo UML diz o que um sistema tem que fazer, mas não como implementa-lo. Diagrama de Classes Um diagrama de classes descreve os tipos de objetos no sistema e o relacionamento entre eles, mostrando os métodos e atributos de cada classe. Classe Uma classe pode ser representada por uma caixa contendo apenas o nome da classe. Veja abaixo: ClienteBanco Através do diagrama acima podemos gerar o seguinte código Java. class ClienteBanco{ Atributo A representação de atributos de uma classe em UML é feita diferente da que foi definida em Java: Declara-se primeiramente o nome do atributo e depois o tipo, separando-os pelo símbolo : (dois pontos). 1

Veja abaixo: ClienteBanco + nome: String ~ CPF: String # idade: int - saldoconta: double Através do diagrama acima podemos gerar o seguinte código Java. class ClienteBanco{ public String nome; String CPF; protected int idade; private double saldoconta; A tabela abaixo ilustra a representação UML dos modificadores de acesso de visibilidade. Representação UML Código Java + public - private # protected ~ default OBS: Modificador default (friendly ou package): Quando não colocamos nenhum modificador de acesso sinalizamos implicitamente o modificador default. Os elementos demarcados por este modificador podem ser acessados por métodos ou construtores de classes definidas no mesmo pacote. Método A representação de métodos de uma classe em UML é feita de forma diferente da que foi definida em Java: Declara-se primeiramente o nome do método, e depois o tipo do valor de retorno do método. A declaração dos parâmetros do método deve ser feita semelhantemente àquela definida para os atributos: Primeiramente declara-se o nome, em seguida o tipo e ambos separados pelo símbolo : (dois pontos). 2

Veja abaixo: ClienteBanco + nome: String ~ CPF: String # idade: int - saldoconta: double ~ ClienteBanco (nome: String, CPF: String) + getsaldoconta () :double + setsaldoconta(saldoconta: double) :void # setidade (idade: int) :void OBS: A representação UML dos modificadores de acesso de visibilidade vale tanto para atributos como para métodos. Através do diagrama acima podemos gerar o seguinte código Java. class ClienteBanco{ public String nome; String CPF; protected int idade; private double saldoconta; ClienteBanco(String nome, String CPF){ this.cpf = CPF; public double getsaldoconta(){ return saldoconta; public void setsaldoconta(double saldoconta){ this.saldoconta = saldoconta; protected void setidade (int idade){ this.idade = idade; Representação de Herança em UML A herança é representada na UML com uma seta contínua indicando que uma classe estende outra. No exemplo a seguir é representado que as classes Cliente e Funcionário estendem a classe Pessoa, herdando todos os seus métodos e atributos. 3

Pessoa Cliente Funcionário Através do diagrama acima podemos gerar os seguintes códigos Java. Pessoa.java class Pessoa{ Cliente.java class Cliente extends Pessoa{ Funcionário.java class Funcionario extends Pessoa{ Representação do modificador static em UML Atributos e métodos estáticos são representados, em UML, utilizando palavras sublinhadas. Veja o exemplo abaixo: - nome: String # sexo: int + MASCULINO: int = 1 + FEMININO: int = 2 Pessoa ~ Pessoa(nome: String, sexo: int) + getnome(): String + setnome(nome: String): void + getsexo(): int + setsexo(sexo: int): void + main(args: String[]): void 4

Através do diagrama UML da página anterior podemos gerar o seguinte código Java. class Pessoa{ private String nome; protected int sexo; public static int MASCULINO = 1; public static int FEMININO = 2; Pessoa (String nome, int sexo){ this.sexo = sexo; public String getnome(){ return nome; public void setnome(string nome){ public int getsexo(){ return sexo; public void setsexo(int sexo){ this.sexo = sexo; public static void main (String args[]){ 5

Exercícios Sobre Modelagem de Classes 1) A partir do diagrama de classe UML abaixo, implemente a classe Java correspondente. Para os métodos setdurabilidade e setcomprimento, siga as regras abaixo: SetDurabilidade: Faça a atribuição apenas se o valor informado for maior que 0 (zero) e menor que 180. SetComprimento: Faça a atribuição apenas se o valor informado for maior que 0(zero) e menor que 25. + nome: String # comprimento: int - durabilidade: int Peça ~ Peca() + getcomprimento (): int + setcomprimento (comprimento: int): void + getdurabilidade (): int + setdurabilidade (durabilidade: int): void + getnome (): String + setnome (nome: String): void R: public class Peca { public String nome; protected int comprimento; private int durabilidade; Peca(){ public int getcomprimento() { return comprimento; public void setcomprimento(int comprimento) { if (comprimento > 0 && comprimento < 25) this.comprimento = comprimento; public int getdurabilidade() { return durabilidade; public void setdurabilidade(int durabilidade) { if (durabilidade > 0 && durabilidade < 180) this.durabilidade = durabilidade; public String getnome() { 6

return nome; public void setnome(string nome) { 2) A partir da classe Java abaixo, gere o diagrama de classe UML correspondente. public class Pessoa { private String nome; protected String rg; private String cpf; byte idade; String endereco; String foneresidencial; String fonecomercial; String celular; protected String nomepai; protected String nomemae; private String nomeconjuge; private boolean casado; private char sexo; public static char MASCULINO = 'M'; public static char FEMININO = 'F'; public Pessoa (String nome, String cpf, String rg, byte idade){ this.cpf = cpf; this.rg = rg; this.idade = idade; public boolean iscasado() { return casado; public void setcasado(boolean casado) { this.casado = casado; public String getcelular() { return celular; public void setcelular(string celular) { this.celular = celular; public String getcpf() { return cpf; 7

public void setcpf(string cpf) { this.cpf = cpf; public String getendereco() { return endereco; public void setendereco(string endereco) { this.endereco = endereco; public String getfonecomercial() { return fonecomercial; public void setfonecomercial(string fonecomercial) { this.fonecomercial = fonecomercial; public String getfoneresidencial() { return foneresidencial; public void setfoneresidencial(string foneresidencial) { this.foneresidencial = foneresidencial; public byte getidade() { return idade; public void setidade(byte idade) { this.idade = idade; public String getnome() { return nome; public void setnome(string nome) { public String getnomeconjuge() { return nomeconjuge; public void setnomeconjuge(string nomeconjuge) { this.nomeconjuge = nomeconjuge; public String getnomemae() { return nomemae; public void setnomemae(string nomemae) { this.nomemae = nomemae; public String getnomepai() { 8

return nomepai; public void setnomepai(string nomepai) { this.nomepai = nomepai; public String getrg() { return rg; public void setrg(string rg) { this.rg = rg; public char getsexo() { return sexo; public void setsexo(char sexo) { if (sexo == MASCULINO) this.sexo = MASCULINO; else if (sexo == FEMININO) this.sexo = FEMININO; public boolean ismaiordeidade(){ if (idade >= 18) return true; else return false; R: Pessoa - nome: String # rg: String - cpf: String ~ idade: byte ~ endereco: String ~ foneresidencial: String ~ fonecomercial: String ~ celular: String # nomepai: String # nomemae: String - nomeconjuge: String - casado: boolean - sexo: char + MASCULINO: char = 'M' + FEMININO: char = 'F' 9

+ Pessoa (nome: String, cpf: String, rg: String, idade: byte) + iscasado (): boolean + setcasado (casado: boolean): void + getcelular (): String + setcelular (celular: String): void + getcpf (): String + setcpf (cpf: String): void + getendereco (): String + setendereco (endereco: String): void + getfonecomercial (): String + setfonecomercial (fonecomercial: String): void + getfoneresidencial (): String + setfoneresidencial (foneresidencial: String): void + getidade (): byte + setidade (idade: byte): void + getnome (): String + setnome (nome: String): void + getnomeconjuge (): String + setnomeconjuge (nomeconjuge: String): void + getnomemae (): String + setnomemae(nomemae: String): void + getnomepai (): String + setnomepai (nomepai: String): void + getrg (): String + setrg (rg: String): void + getsexo (): char + setsexo (sexo: char): void + ismaioridade (): boolean 3) Implemente as classes Java referentes ao diagrama de classes UML abaixo. Durante a implementação, siga as regras abaixo para cada classe: Trapézio: Todos os métodos setters devem verificar se o valor do parâmetro é positivo e em caso afirmativo deve-se fazer a atribuição. O método calculararea deve calcular a área do trapézio e armazenar este valor no atributo área da superclasse. Fórmula para cálculo da área do trapézio: ( basemaior + basemenor) * altura A = 2 Triângulo: Todos os métodos setters devem verificar se o valor do parâmetro é positivo e em caso afirmativo deve-se fazer a atribuição. O método calculararea deve calcular a área do triângulo e armazenar este valor no atributo área da superclasse. Fórmula para calcular a área do triângulo: base * altura A = 2 10

Triângulo Eqüilátero: O método calculararea deve imprimir a seguinte mensagem: "Calculando a área de um triângulo equilátero" e em seguida chamar o método calculararea da super classe. Por último imprima a seguinte mensagem: "A área do triângulo eqüilátero é:" e informe o valor calculado para a área. Triângulo Retângulo: O método calculararea deve imprimir a seguinte mensagem: "Calculando a área de um triângulo retângulo", e em seguida chame o método calculararea da super classe. Por último imprima a seguinte mensagem: "A área do triangulo retângulo é:" e informe o valor calculado para a área. # área: double + calculararea(): void FiguraGeometrica - basemaior: double - basemenor: double - altura: double Trapezio + Trapezio (basemaior: double, basemenor: double, altura: double) + getbasemaior(): double + setbasemaior(basemaior: double): void + getbasemenor(): double + setbasemenor(basemenor: double): void + getaltura(): double + setaltura(altura: double) :void + calculararea(): void - base: double - altura: double Triangulo + Triangulo (base: double, altura: double) + getbase(): double + setbase(base: double): void + getaltura(): double + setaltura(altura: double) :void + calculararea(): void TrianguloEquilatero + TrianguloEquilatero (base: double, altura: double) + calculararea(): void TrianguloRetangulo + TrianguloRetangulo (base: double, altura: double) + calculararea(): void 11

R: public class FiguraGeometrica { protected double area; public void calculararea(){ public class Trapezio extends FiguraGeometrica { private double basemaior; private double basemenor; private double altura; public Trapezio (double basemaior, double basemenor, double altura){ this.basemaior = basemaior; this.basemenor = basemenor; this.altura = altura; public double getaltura() { return altura; public void setaltura(double altura) { if (altura > 0) this.altura = altura; public double getbasemaior() { return basemaior; public void setbasemaior(double basemaior) { if (basemaior > 0) this.basemaior = basemaior; public double getbasemenor() { return basemenor; public void setbasemenor(double basemenor) { if (basemenor > 0) this.basemenor = basemenor; public void calculararea(){ double areatrapezio; areatrapezio = ((basemaior + basemenor)*altura) / 2; super.area = areatrapezio; 12

public class Triangulo extends FiguraGeometrica { private double base; private double altura; public Triangulo (double altura, double base){ this.altura = altura; this.base = base; public double getaltura() { return altura; public void setaltura(double altura) { if (altura > 0) this.altura = altura; public double getbase() { return base; public void setbase(double base) { if (base > 0) this.base = base; public void calculararea(){ double areatriangulo; areatriangulo = (base*altura)/2; super.area = areatriangulo; public class TrianguloEquilatero extends Triangulo { public TrianguloEquilatero(double base, double altura){ super(base, altura); public void calculararea(){ System.out.println("Calculando a area de um triangulo equilatero"); super.calculararea(); System.out.println("A area do triangulo equilatero é: " + super.area); 13

public class TrianguloRetangulo extends Triangulo { public TrianguloRetangulo(double base, double altura){ super(base, altura); public void calculararea(){ System.out.println("Calculando a area de um triangulo retangulo"); super.calculararea(); System.out.println("A area do triangulo retangulo é: " + super.area); A classe abaixo foi criada apenas para testar, logo não faz parte de exercício. Esta classe é interessante para mostrar aos alunos durante a aula. public class Teste { public static void main(string[] args) { TrianguloEquilatero te = new TrianguloEquilatero(10,12); TrianguloRetangulo tr = new TrianguloRetangulo(25,16); te.calculararea(); tr.calculararea(); 4) A partir das classes Java abaixo, gere o diagrama de classe UML correspondente. public class No1 { private String nome; protected int num1; public String getnome() { return nome; public void setnome(string nome) { public int getnum1() { return num1; public void setnum1(int num1) { this.num1 = num1; 14

public class No2 extends No1 { public String nome; protected int num2; public String getnome() { return nome; public void setnome(string nome) { public int getnum2() { return num2; public void setnum2(int num2) { this.num2 = num2; public class No3 extends No1 { String nome; private int num3; public String getnome() { return nome; public void setnome(string nome) { public int getnum3() { return num3; public void setnum3(int num3) { this.num3 = num3; public class No4 extends No2 { private String nome; private int num4; public String getnome() { return nome; public void setnome(string nome) { public int getnum4() { return num4; public void setnum4(int num4) { this.num4 = num4; 15

public class No5 extends No2 { protected String nome; protected int num5; public String getnome() { return nome; public void setnome(string nome) { public int getnum5() { return num5; public void setnum5(int num5) { this.num5 = num5; public class No6 extends No2 { public String nome; public int num6; public String getnome() { return nome; public void setnome(string nome) { public int getnum6() { return num6; public void setnum6(int num6) { this.num6 = num6; public class No7 extends No3 { private String nome; private int num7; public String getnome() { return nome; public void setnome(string nome) { public int getnum7() { return num7; public void setnum7(int num7) { this.num7 = num7; 16

R: - nome: String # num1: int No1 + getnome(): String + setnome(nome: String): void +getnum1(): int +setnum1(num1: int): void + nome: String # num2: int No2 ~ nome: String - num3: int No3 + getnome(): String + setnome(nome: String): void +getnum2(): int +setnum2(num2: int): void + getnome(): String + setnome(nome: String): void +getnum3(): int +setnum3(num3: int): void - nome: String - num4: int No4 + getnome(): String + setnome(nome: String): void +getnum4(): int +setnum4(num4: int): void # nome: String # num5: int No5 + getnome(): String + setnome(nome: String): void +getnum5(): int +setnum5(num5: int): void + nome: String + num6: int No6 - nome: String - num7: int No7 + getnome(): String + setnome(nome: String): void +getnum6(): int +setnum6(num6: int): void + getnome(): String + setnome(nome: String): void +getnum7(): int +setnum7(num7: int): void 17

5) Dado o diagrama UML abaixo, implemente a classe Java correspondente. Durante a implementação da classe Java, siga as regras abaixo: i. O atributo qtdfolhas deve ser preenchido apenas se o valor informado for maior que zero. ii. O método "istilibra" irá retornar "true" se o atributo "fabricante" for igual a "Tilibra" e "false" caso contrário. Caderno - qtdfolhas: int # fabricante: String - codigobarras: int + PAPEL_RECICLADO: int = 1 + PAPEL_NAO_RECICLADO: int = 2 + Caderno () + Caderno (fabricante: String) + setqtdfolhas (qtdfolhas: int): void + getqtdfolhas (): int + setfabricante (fabricante: String): void + getfabricante (): String + setcodigobarras (codigobarras: int): void + getcodigobarras (): int + istilibra(): boolean Resposta: public class Caderno { private int qtdfolhas; protected String fabricante; private int codigobarras; public static int PAPEL_RECICLADO = 1; public static int PAPEL_NAO_RECICLADO = 2; public Caderno(){ public Caderno(String fabricante){ this.fabricante = fabricante; public int getqtdfolhas() { return qtdfolhas; public void setqtdfolhas(int qtdfolhas) { if (qtdfolhas > 0) this.qtdfolhas = qtdfolhas; 18

public String getfabricante() { return fabricante; public void setfabricante(string fabricante) { this.fabricante = fabricante; public int getcodigobarras() { return codigobarras; public void setcodigobarras(int codigobarras) { this.codigobarras = codigobarras; public boolean istilibra(){ if (fabricante.equals("tilibra")) return true; else return false; 6) Dado o diagrama de classes UML abaixo, liste todos os métodos que são exemplos de sobrescrita e sobrecarga. Justifique sua resposta. Implemente todas as classes Java presentes neste diagrama. - end: String - cidade: String Imovel + Imovel () + Imovel (end: String) + setcidade (cidade: String): void + getcidade (): String + imprimirdadosimovel(): void + tostring(): String - tamquintal: int - contaagua: double Casa + Casa () + settamquintal (tamquintal: String): void + settamquintal (tamquintal: int): void + gettamquintal (): int + getcontaagua (): double + setcontaagua (contaagua: double): void + imprimirdadosimovel(): void - condominio: double Apartamento +Apartamento () + setcondominio (condomino: String): void + setcondominio (condominio: double): void + imprimirdadosimovel(): void 19

Resposta Na classe Imóvel o método construtor (Imóvel) é um exemplo de sobrecarga, pois temos duas versões do mesmo. Ou seja, dois métodos com o mesmo nome, porém com assinaturas diferentes. Ainda na classe Imóvel o método tostring() é um exemplo de sobrescrita porque o mesmo está implementado na classe Object. Devemos lembrar que a classe Imóvel é filha da classe Ojbect. Na classe Apartamento o método setcondomínio é um exemplo de sobrecarga, pois temos duas versões do mesmo. Ou seja, dois métodos com o mesmo nome, porém com assinaturas diferentes. Ainda na classe Apartamento o método imprimirdadosimovel é um exemplo de sobrescrita, pois o mesmo está sobrescrevendo o método da super classe (Imóvel). Na classe Casa o método settamquintal é um exemplo de sobrecarga, pois temos duas versões do mesmo. Ou seja, dois métodos com o mesmo nome, porém com assinaturas diferentes. Ainda na classe Casa o método imprimirdadosimovel é um exemplo de sobrescrita, pois o mesmo está sobrescrevendo o método da super classe (Imóvel). 7) A partir da classe Java abaixo, gere o diagrama de classe UML correspondente. public class GeradorEletrico { private String fabricante; protected int voltagem; protected int autonomia; public static int POTENCIA = 1200; GeradorEletrico(String fabricante) { this.fabricante = fabricante; public String getfabricante() { return fabricante; public void setfabricante(string fabricante) { this.fabricante = fabricante; public int getvoltagem() { return voltagem; public void setvoltagem(int voltagem) { this.voltagem = voltagem; 20

public int getautonomia() { return autonomia; public void setautonomia(int autonomia) { this.autonomia = autonomia; public String tostring() { return fabricante + " " + voltagem + " " + autonomia; public boolean equals(object obj) { if (obj instanceof GeradorEletrico){ GeradorEletrico ge = (GeradorEletrico) obj; if (this.getfabricante().equals(ge.getfabricante())){ return true; else{ return false; else{ return false; public boolean iscox(){ if (this.getfabricante().equals("cox")){ return true; else{ return false; R: GeradorEletrico - fabricante: String # voltagem: int # autonomia: int + POTENCIA: int = 1200 ~ GeradorEletrico(fabricante: String) + getfabricante(): String + setfabricante(fabricante: String): void + getvoltagem(): int + setvoltagem(voltagem: int): void + getautonomia(): int + setautonomia(autonomia: int): void + tostring(): String + equals(obj Object): Boolean + iscox(): boolean 8) fdfdfdd 21