Является ли публичное перечисление неуважительным к инкапсуляции в Java?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Является ли публичное перечисление неуважительным к инкапсуляции в Java?

Сообщение Anonymous »

По названию вы уже знаете, что это вопрос к заданию для Университета, так что да, я думаю, что это простой вопрос, но я искал аналогичный и не нашел. Пожалуйста, не грубите, если он есть, но я не смог его найти. Заранее извините.
В любом случае, для этого задания мы должны соблюдать инкапсуляцию и наследование в Java.
Важными классами, которые нужно знать прямо сейчас, являются:
Класс Cliente
` import java.util.EnumSet;
import java.util.List;
публичный класс Cliente {

Код: Выделить всё

// Definicao de enum da localizacao
private enum Localizacao {
CONTINENTE,
ACORES,
MADEIRA;
}

private String nome;
private int numContribuinte;
private Localizacao localizacao;

public Cliente(String nome, int numContribuinte, Localizacao localizacao){
this.nome = nome;
this.numContribuinte = numContribuinte;
this.localizacao = localizacao;
}

public Cliente() {
}
public void setLocalizacao(Localizacao localizacao) {
this.localizacao = localizacao;
}

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

public void setNumContribuinte(int numContribuinte) {
this.numContribuinte = numContribuinte;
}

public String getNome() {
return nome;
}

public int getNumContribuinte() {
return numContribuinte;
}

public Localizacao getLocalizacao() {
return localizacao;
}

public Localizacao[] getLocalizacoes(){
return Localizacao.values();
}

public void printDadosCliente() {
System.out.println("\n");
System.out.println("Dados do Cliente:");
System.out.println("Nome: " + nome);
System.out.println("Número de contribuinte: " + numContribuinte);
System.out.println("Localização do cliente: " + localizacao.name());
}
}`
класс Produtos:
` общедоступный абстрактный класс Produtos {

Код: Выделить всё

private int codigo;
private String nome;
private String descricao;
private int quantidade;
private double valorUnitario;

//Construtor

public Produtos(int codigo, String nome, String descricao, int quantidade, double valorUnitario){
this.codigo = codigo;
this.nome = nome;
this.descricao = descricao;
this.quantidade = quantidade;
this.valorUnitario = valorUnitario;
}

// Getters
public int getCodigo() {
return codigo;
}

public String getNome() {
return nome;
}

public String getDescricao() {
return descricao;
}

public int getQuantidade() {
return quantidade;
}

public double getValorUnitario() {
return valorUnitario;
}

public double getPrecoSemIva() {
return valorUnitario * quantidade;
}

// Abstract method to calculate IVA
public abstract double calculaIva(Cliente.Localizacao localizacao);

public abstract void printDadosProduto();
}`
и класс ProdutoAlimentarNormal, который является подклассом ProdutoAlimentar, который является подклассом Produtos, но я опустил его, поскольку он только добавляет переменная класса, isBiologic boolean:
` public class ProdutoAlimentarNormal расширяет ProdutosAlimentares {

Код: Выделить всё

public ProdutoAlimentarNormal(int codigo, String nome, String descricao, int quantidade, double valorUnitario, boolean isBiologico)
{
super(codigo, nome, descricao, quantidade, valorUnitario, isBiologico);
}

@Override
public double calculaIva(Cliente.Localizacao localizacao){
double taxaIva = 0.23;

if (localizacao.equals(Cliente.Localizacao.MADEIRA)){
taxaIva = 0.22;
} else if (localizacao.equals(Cliente.Localizacao.ACORES)) {
taxaIva = 0.16;
}
if (getBiologico()){
taxaIva *= 0.9;
}

return getQuantidade()* getValorUnitario() * taxaIva;
}

@Override
public void printDadosProduto(){
System.out.println("Dados do Produto:");
System.out.println("Tipo: Produto Alimentar");

if (getBiologico()){
System.out.print("Biologico: Sim");
} else {
System.out.print("Biologico: Não");
}

System.out.println("Taxa de IVA: Normal");

System.out.println("Nome do produto: " + getNome());
System.out.println("Código do produto: " + getCodigo());
System.out.println("Quantidade: " + getQuantidade());
System.out.println("Preço por unidade: " + getValorUnitario() + "€");
System.out.println("Preço total (s/ IVA): "  + getValorUnitario() * getQuantidade() + "€");
}
}`
Как видите, я установил

Код: Выделить всё

    // Definicao de enum da localizacao private enum Localizacao { CONTINENTE, ACORES, MADEIRA; }
как частный, но расчеты IVA для ProdutosAlimentarNormal:
`@Override
public double CalculIva(Cliente.Localizacao местоположение){
двойная ставкаIva = 0,23;

Код: Выделить всё

    if (localizacao.equals(Cliente.Localizacao.MADEIRA)){
taxaIva = 0.22;
} else if (localizacao.equals(Cliente.Localizacao.ACORES)) {
taxaIva = 0.16;
}
if (getBiologico()){
taxaIva *= 0.9;
}

return getQuantidade()* getValorUnitario() * taxaIva;
}`
зависит от этих значений.
Я пробовал написать это так, вместо этого передавая клиент,
` @Override
public double CalculaIva(Cliente Cliente){

Код: Выделить всё

    double taxaIva = 0.13;

if (cliente.getLocalizacao() == cliente.getLocalizacoes().NOVALUE){
taxaIva = 0.12;
} else if (localizacao.equals()) {
taxaIva = 0.16;
}
if (categoria == CategoriasAlimentar.VINHO){
taxaIva += 0.01;
}

if(getBiologico()){
taxaIva *= 0.9;
}

return getQuantidade()* getValorUnitario() * taxaIva;
}`
но никогда не мог заставить cliente.getLocalizacoes().NOVALUE отображать ACORES,MADEIRA или CONTINENTE в NOVALUE< /em> пространство.
Не нарушаю ли я инкапсуляцию, делая перечисление общедоступным?
Я пробовал использовать различные геттеры и сеттеры, но так и не смог получить ни одного, который бы мне что-то возвращал. что я мог бы просто использовать Localizacao.ACORES, пока он является частным.
Хотя он был общедоступным, он работал как шарм, но боюсь, я не уважаю инкапсуляцию.

Подробнее здесь: https://stackoverflow.com/questions/792 ... on-in-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Является ли публичное перечисление неуважительным к инкапсуляции в Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Является ли публичное перечисление неуважительным к инкапсуляции?
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Перечисление Java и перечисление PostgreSQL
    Anonymous » » в форуме JAVA
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Перечисление Java и перечисление PostgreSQL
    Anonymous » » в форуме JAVA
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • FindBugs: Как избежать предупреждения «Незаписанное публичное поле» при использовании метамодели JPA?
    Anonymous » » в форуме JAVA
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»