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

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

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

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

Aula 08 Encapsulamento. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

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

Linguagem Algorítmica OO. Linguagem Algorítmica


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

Quando um Auto-Relacionamento não é mais um Auto-Relacionamento

PROGRAMAÇÃO ORIENTADA A OBJETOS JAVA

Programação Orientada a Objeto

1 Introdução e Conceitos básicos

Herança e Propriedades

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

POO Fundamentos Parte III. Professor Vicente Paulo de Camargo

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

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

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

Análise de Programação

Tipos, Literais, Operadores

Tipos, Literais, Operadores

COMPORTAMENTOS - Observações

Programação Orientada a Objeto: Introdução. Professor: Adonai Estrela Medrado Data: 22/07/2008

Prof. A. G. Silva. 30 de outubro de Prof. A. G. Silva INE5603 Introdução à POO 30 de outubro de / 1

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

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

POO29004 Programação Orientada a Objetos

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

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

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

Notas de Aula 04: Herança e polimorfismo.

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

Classe Abstrata e Interface

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

Instituto de Informática Estrutura de Dados II

Palavras Reservadas da Linguagem Java

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

Avançando em Java com Polimorfismo. Prof.: Hugo Barros

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

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

Linguagem de Programação II Importando Classes/Pacotes

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

Classes e Objetos. Prof. Fernando V. Paulovich 9 de agosto de 2010

public class Funcionario implements Comparable<Funcionario>{

Programação Orientada a Objetos

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

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

Interfaces POO. Prof. Marcio Delamaro

Linguagem Java - Introdução

Programação Orientada a Objetos

Linguagem de Programação II Herança

Programação Orientada a Objetos

Linguagem de Programação II Implementação

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

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

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

Universidade Federal de Uberlândia

Linguagem de Programação IV Introdução

Visibilidade e Encapsulamento

Rafael B. Pereira (

Programação Estruturada e Orientada a Objetos

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

4 Conceito de Herança

if( opcao.equals("1") ) { ElaborarContratoUI uiec = new ElaborarContratoUI(m_empresa); uiec.run();

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

Classe Produto e Calculo de Produto

PADRÕES DE PROJETO DE SOFTWARE

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

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

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

UNIVERSIDADE DO ESTADO DE SANTA CATARINA DCC Departamento de Ciência da Computação Joinville SC

PROGRAMAÇÃO I INTRODUÇÃO À ORIENTAÇÃO A OBJETOS II

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Lista de exercícios 2

[Desenvolvimento OO com Java] Modificadores de acesso e atributos de classe

Classe Funcionario tem Endereco

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


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

Herança. Caso queira referir-se a um construtor da super classe, a sintaxe é diferente: super.nomedoatributo; super.nomedometodo(<parametros>)

Universidade Estadual de Santa Cruz

Herança e Classes Abstratas. João Paulo Q. dos Santos

Linguagem de Programação III

Aula. Renata Pontin de Mattos Fortes 2006

PROGRAMAÇÃO ORIENTADA A OBJETOS: HERANÇA

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

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

6. Escreva a classe ConversaoDeUnidadesDeTempo com métodos estáticos para conversão aproximada das unidades de velocidade segundo a lista abaixo.

Introdução à UML. Prof. Jesus José de Oliveira Neto

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

LÓGICA DE PROGRAMAÇÃO (JAVA) HERANÇA. Professor Carlos Muniz

O que estas classes possuem em comum? 1) 2) 3)


Como exemplo, vamos criar uma subclasse da classe Funcionario, vista nos capítulos anteriores.

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

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(){ 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 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; 6

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; 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; 7

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() { 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; 8

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 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. 9

FiguraGeometrica # área: double + calculararea(): void - 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 10

4) A partir das classes Java abaixo, gere o diagrama de classe UML correspondente. public class No1 { private String nome; protected int num1; public void setnome(string nome) { public int getnum1() { return num1; public void setnum1(int num1) { this.num1 = num1; public class No2 extends No1 { public String nome; protected int num2; 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 void setnome(string nome) { public int getnum3() { return num3; public void setnum3(int num3) { this.num3 = num3; 11

public class No4 extends No2 { private String nome; private int num4; public void setnome(string nome) { public int getnum4() { return num4; public void setnum4(int num4) { this.num4 = num4; public class No5 extends No2 { protected String nome; protected int num5; 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 void setnome(string nome) { public int getnum6() { return num6; public void setnum6(int num6) { this.num6 = num6; 12

public class No7 extends No3 { private String nome; private int num7; public void setnome(string nome) { public int getnum7() { return num7; public void setnum7(int num7) { this.num7 = num7; 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 13

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 14

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; 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; 15