Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Modelagem de Classes - Java, Notas de estudo de Informática

Modelagem de Classes - Java

Tipologia: Notas de estudo

2011

Compartilhado em 03/01/2011

alex-ouza-9
alex-ouza-9 🇧🇷

4.3

(3)

4 documentos

1 / 20

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
1
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:
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).
ClienteBanco
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14

Pré-visualização parcial do texto

Baixe Modelagem de Classes - Java e outras Notas de estudo em PDF para Informática, somente na Docsity!

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:

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

ClienteBanco

Veja abaixo:

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

ClienteBanco

+ nome: String

~ CPF: String

# idade: int

  • saldoConta: double

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:

Pessoa

Cliente Funcionário

Pessoa

  • nome: String

# sexo: int

+ MASCULINO: int = 1

+ FEMININO: int = 2

~ Pessoa(nome: String, sexo: int)

+ getNome(): String

+ setNome(nome: String): void

+ getSexo(): int

+ setSexo(sexo: int): void

+ main(args: String[]): void

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.nome = nome; this.sexo = sexo; }

public String getNome(){ return nome; }

public void setNome(String nome){ this.nome = nome; }

public int getSexo(){ return sexo; }

public void setSexo(int sexo){ this.sexo = sexo; }

public static void main (String args[]){ } }

return nome; }

public void setNome(String nome) { this .nome = 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 .nome = nome; 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; }

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) { this .nome = 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() {

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

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 =

  • 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

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.

FiguraGeometrica

área: double

  • calcularArea(): void

Trapezio

  • baseMaior: double
  • baseMenor: double
  • altura: double
  • 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

Triangulo

  • base: double
  • altura: double
  • 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

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

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) { this .nome = nome; } public int getNum1() { return num1; } public void setNum1( int num1) { this .num1 = num1; } }

public class No5 extends No2 { protected String nome; protected int num5; public String getNome() { return nome; } public void setNome(String nome) { this .nome = 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) { this .nome = 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) { this .nome = nome; } public int getNum7() { return num7; } public void setNum7( int num7) { this .num7 = num7; } }

R:

No

  • nome: String

num1: int

  • getNome(): String
  • setNome(nome: String): void +getNum1(): int +setNum1(num1: int): void

No

  • nome: String

num2: int

  • getNome(): String
  • setNome(nome: String): void +getNum2(): int +setNum2(num2: int): void

No ~ nome: String

  • num3: int
  • getNome(): String
  • setNome(nome: String): void +getNum3(): int +setNum3(num3: int): void

No

  • nome: String
  • num4: int
  • getNome(): String
  • setNome(nome: String): void +getNum4(): int +setNum4(num4: int): void

No

nome: String

num5: int

  • getNome(): String
  • setNome(nome: String): void +getNum5(): int +setNum5(num5: int): void

No

  • nome: String

  • num6: int

  • getNome(): String

  • setNome(nome: String): void +getNum6(): int +setNum6(num6: int): void

No

  • nome: String
  • num7: int
  • getNome(): String
  • setNome(nome: String): void +getNum7(): int +setNum7(num7: int): void

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.

Imovel

  • end: String
  • cidade: String
  • Imovel ()
  • Imovel (end: String)
  • setCidade (cidade: String): void
  • getCidade (): String
  • imprimirDadosImovel(): void
  • toString(): String

Casa

  • tamQuintal: int
  • contaAgua: double
  • Casa ()
  • setTamQuintal (tamQuintal: String): void
  • setTamQuintal (tamQuintal: int): void
  • getTamQuintal (): int
  • getContaAgua (): double
  • setContaAgua (contaAgua: double): void
  • imprimirDadosImovel(): void

Apartamento

  • condominio: double

+Apartamento ()

  • setCondominio (condomino: String): void
  • setCondominio (condominio: double): void
  • imprimirDadosImovel(): void

Resposta

Na classe Imóvel o método construtor é um exemplo de

sobrecarga, pois temos duas versões do mesmo.

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.

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.

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