Ir ao conteúdo
  • Cadastre-se

Duvida com relação a um programa


AXSano

Posts recomendados

E ae pessoal...

Então tenho que implementar um programa mas estou em duvida com relação aos construtores, tem tambem a questão sobre hierarquia de classes uma das partes do programa é essa

public abstract class Construcao

{//1

private double area;

private double precoArea;

public Construcao(double area, double precoArea)

{//2

this.area = area;

this.precoArea = precoArea;

}//2

//CONSTRUTORES

public String getDados()

{//4

/*retorna uma String contendo valores

*dos campos da classe*/

String s1;

s1="Area="+area+"PrecoArea="+precoArea;

return(s1);

}//4

public void printDados()

{//5

/*Imprimir o conteudo dos campos das classes

*empregando o metodo getDados()

*e o valor total fornecido por

*getPrecoTotal()*/

System.out.printf(getDados());

}//5

public abstract double getPrecoTotal();

{//6

/*Retornar o valor contido no campo

*area(area total do imovel em m^2)

*multiplicado pelo valor contido no

*campo precoArea (preço por m^2)*/

double PrecoTotal=area*precoArea;

}//6

}//1

falta ainda colocar os construtores e tem outras partes do programa alguem poderia me ajudar a conclui - lo

Obrigado

a outra parte é esta aqui

public class Loja extends Construcao implements Commission

{//1

private double sales = 0.0;

public Loja(double sales)

{

setVendas(sales);

}//construtor com um parametro

public String getDados()

{//4

/*Retorna uma String contendo valores

*dos campos da classe*/

}//4

public void setVendas(double s)

{//3

this.s=(s<0)?0.0:s;

return s;

}//3

public double getPrecoTotal()

{//4

/*retomar o mesmo valor do metodo

*da superclasse acrescido da taxa

*contida na classe commission sobre

*o valor contido no campo de cada instancia*/

double PrecoTotal = COMMISSION_RATE*s;

return PrecoTotal;

}//4

}//1

se alguem puder me ajudar a terminar este programa

Link para o comentário
Compartilhar em outros sites

Vamo la:

1. use a tag CODE E /CODE pra postar codigo.

você definiu uma classe chamado Loja, como classe filha de Construção :confused:. A não ser que usou a logica "toda loja fisica é feita de tijolo e cimento, logo É UM(A) Construção" você nao deveria ter feito ela como filha.

Isso nao é um erro de Java em si, mas de orientação a objeto só que vai acabar te quebrando as pernas porque Java é todo em cima disso. você só deve fazer uma classe estender outra, se ela passa no teste É UM/ É UMA, senao se torna desnecessario.

Se você queria apenas criar classes que fossem todas relacionadas ao tema Construção, e se em Construção você tem em mente um metodo que tem que existir em TODAS subclasses ou classes relacionadas, então deveria ter definido Construção como interface, nao superclasse.

Construcao


package clubedohardware;

public class Construcao implements Commission{

/*
ESSA CLASSE NAO PRECISA SER ABSTRATA, PORQUE SE MANTER ELA ABSTRATA
você VAI SER OBRIGADO CRIAR MAIS UMA CLASSE PRA IMPLEMENTAR
OS METODOS EM BRANCO DESTA, O QUE NAO É NECESSARIO NUM CODIGO estão SIMPLES
*/
private double area;
private double precoArea;

public Construcao(double area, double precoArea)
{
this.area = area;
this.precoArea = precoArea;
}

//CONSTRUTORES

/*fica mais fácil e pratico pra quem ja usa java saber pelo nome ou jeito
que o nome dos metodos esta escrito, pra que eles servem, sem você
precisar comentar um a um. Pesquise sobre o padrão JavaBeans.
Normalmente toda classe ja deve sobrescrever o toString de Object, que serve
exatamente pra exibir todos dados da classe,

public String toString(){
String str="";
-->aqui vai seu codigo<---
return str;
}

então troquei seu getDados por toString.*/

public String toString(){
String s1;
s1="Area= "+area+", "+"PrecoArea= "+precoArea;
return s1;
}

public void printDados(){
System.out.printf(toString());
}

public double calculaPrecoTotal(){
double precoTotal=area*precoArea;
return precoTotal;
}

//METODOS MODIFICADORES QUE ESTAVAM FALTANDO

public double getArea() {
return area;
}

public void setArea(double area) {
this.area = area;
}

public double getPrecoArea() {
return precoArea;
}

public void setPrecoArea(double precoArea) {
this.precoArea = precoArea;
}
}


codigo puro



public class Construcao implements Commission{

private double area;
private double precoArea;

public Construcao(double area, double precoArea)
{
this.area = area;
this.precoArea = precoArea;
}

public String toString(){
String s1;
s1="Area= "+area+", "+"PrecoArea= "+precoArea;
return s1;
}

public void printDados(){
System.out.printf(toString());
}

public double calculaPrecoTotal(){
double precoTotal=area*precoArea;
return precoTotal;
}

public double getArea() {
return area;
}

public void setArea(double area) {
this.area = area;
}

public double getPrecoArea() {
return precoArea;
}

public void setPrecoArea(double precoArea) {
this.precoArea = precoArea;
}
}

Loja


package clubedohardware;

public class Loja implements Commission{
private double sales;

/*
SEU CONSTRUTOR ANTERIOR

public Loja(double sales){
setVendas(sales);
}

SALES É UM ATRIBUTO DE LOJA, você NAO PRECISA ( NEM É RECOMENDAVEL) CHAMAR
UM METODO DE DENTRO DO CONSTRUTOR PRA DEFINIR ELE. EM CONTRUTORES você COLOCA
O VALOR INICIAL
DIRETO PELO ATRIBUTO, LEMBRE-SE QUE O CONSTRUTOR SÓ É EXECUTADO NA CRIACAO
DO OBJETO E NAO QUANDO você QUER ATUALIZA-LO. DEPOIS DE CRIADO,
O OBJETO SÓ É ALTERADO PELOS METODOS
*/
public Loja(double sales){
this.sales=sales;
}

/*
SEU CODIGO ANTERIOR

public void setVendas(double s){
this.s=(s<0)?0.0:s;
return s;
}

1. você SÓ USA THIS, QUANDO O S FOR UMA DO OBJETO EM EXECUÇÃO,
MAS você NAO CRIOU NENHUM ATRIBUTO CHAMADO 'S', NAO TEM COMO USAR THIS NELE
2. METODO VOID NAO RETORNA NADA, SE QUER DAR RETURN EM ALGO,
TEM QUE DEFINIR O TIPO DE RETORNO DO METODO
3.METODOS MODIFICADORES PADROES DEVEM APENAS ALTERAR O ATRIBUTO,
TRATAMENTOS ESPECIAIS você USA EM CLASSES DE CONTROLE, ISSO AQUI É UMA
DAS CHAMADAS 'CLASSE BEAN' DEVEM CONTER SO CONSTRUTORES E MODIFICADORES
NORMALMENTE
4. OS METODOS SETTERS, DEVEM SER SEMPRE VOID, QUEM RETORNA ALGO SAO OS
GETTERS
5. VOU APENAS IGNORAR O METODO, PORQUE NAO ENTENDI DIREITO
O QUE você QUER DELE AFINAL
*/

/*
seu codigo anterior

public double getPrecoTotal(){
double PrecoTotal = COMMISSION_RATE*s;
return PrecoTotal;
}
1. EVITE COMEÇAR NOME DE ATRIBUTOS COM OU TODO EM MAIUSCULO, A NAO SER
QUE SEJA UMA CONSTANTE
2. MESMO PROBLEMA ANTERIOR, NAO EXISTIA NENHUMA VARIAVEL CHAMADA S,
APENAS 'SALES'

*/

public double calculaPrecoTotal(){
double precoTotal = COMMISSION_RATE*sales;
return precoTotal;
}


public double getSales() {
return sales;
}

public void setSales(double sales) {
this.sales = sales;
}

}


codigo puro



public class Loja implements Commission{
private double sales;
public Loja(double sales){
this.sales=sales;
}

public double calculaPrecoTotal(){
double precoTotal = COMMISSION_RATE*sales;
return precoTotal;
}

public double getSales() {
return sales;
}

public void setSales(double sales) {
this.sales = sales;
}
}


interface


package clubedohardware;

/*
* INTERFACE QUE FALTAVA
*
*/
public interface Commission {
int COMMISSION_RATE=5;

double calculaPrecoTotal();
}


/*ESSA INTERFACE FICOU UM TANTO DESNECESSARIA, CRIEI SÓ PRA NAO fugir
MUITO DA SUA IDEIA INICIAL
PRA NAO FICAR UMA INTERFACE APENAS DE UM ATRIBUTO, COLOQUEI O
SEU METODO 'getPrecoTotal' DENTRO DELA,
JA QUE SE REPETIA NA CLASSE LOJA E CONSTRUCAO. TROQUEI O
NOME POR 'calculaPrecoTotal' PORQUE PELO
padrão JAVABEANS,APENAS GETTERS PODEM SER CHAMADOS 'getAlgumaCoisa'*/

codigo puro



public interface Commission {
int COMMISSION_RATE=5;

double calculaPrecoTotal();
}


Classe de execução, pois estava sem main



public class ExecutaConstrucao {
public static void main(String[] args) {
Construcao c1=new Construcao(100, 50);
double preco=c1.calculaPrecoTotal();
Loja l1=new Loja(preco);
double valorFinal=l1.calculaPrecoTotal();//aqui
foi adiconado o valor da comissão
System.out.println("Clube do Hardware S.A");
System.out.println("Recibo: ");
System.out.println("--------------");
System.out.println("Dados compra:");
c1.printDados();
System.out.println("\n Valor total: " +valorFinal);
System.out.println("--------------");
}
}


Procure exercicios mais basicos, e estude mais fundamentos de orientação a objeto, depois você volta ao Java em si e tentar criar algum codigo com todos conceitos juntos.

Nao adianta muito você pegar um codigo mesmo que simples, mas com muita coisa junta, se você ainda nao dominou elas separadas, vai acabar causando mais confusao.

[]'s

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...