Programare orientată pe obiecte în Java

classic Classic list List threaded Threaded
2 messages Options
salierimorella salierimorella
Reply | Threaded
Open this post in threaded view
|

Programare orientată pe obiecte în Java

Buna ziua am avut o problema de rezolvat si am incercat s-o rezolv dar nu-mi iese codul oare unde gresesc:

//Clasa Produs
public abstract class Product {
//Declararea variabilelor

int barcode;
String name;
float price;
public abstract double countPrice();

public  Product(int barcode, String name, float price) {
    int b = barcode;
    String n = name;
    float p = price;
}
public int getBarcode(){
    return barcode;
}

public String getName(){
    return name;
}

public float getPrice(){
    return price;
}
public void setBarcode(int barcode){
    int b = barcode;
}
public void setName(String name){
    String n = name;
}
public void setPrice(float price){
    float p = price;
}



//Suprascrierea metodei toString
@Override
public String toString() {
//Fiindcă se execută concatenarea stringului, cea mai eficientă variantă este folosirea clasei StringBuilder
StringBuilder output = new StringBuilder();
//Se adaugă date despre produs. this.name va fi atribuită constructorului.
//De asemenea, şi preţul va fi atribuit în constructor, însă acesta nu se scrie direct,
//ci se procesează prim metoda calculare preţ
//(această metodă va fi scrisă mai târziu la nivelul clasei copil,
//deoarece fiecare clasă copil are propria cotă de impozitare)
output.append("Produs: ");
output.append(this.barcode).append(", ");
output.append(this.name).append(", ");
output.append("preţ: ").append(countPrice()).append(", ");
return output.toString();
}




        }



//Clasa  Chocolate clasa Produs
public abstract class Chocolate extends Product {
   
    private float WheightChocolate;
   
   
   public Chocolate(int barcode, String name, float price, float WeightChocolate)
{
//Se atribuie parametrii prin constructor
super(barcode, name, price);
this.WheightChocolate=WheightChocolate;
   
    @Override
     private  String toString(){
       
   
    return super.toString() +", WheighChocolate: " + this.WheightChocolate;
}


}
   
    private final static float Taxes_VAT= (float) (this.price*0.2)static {
           

   
   
    @Override
    public final double countPrice() {
//Se calculează preţul produsului cu taxa de 20%
     return 0.2*this.price + this.price;
}
}
}


public abstract class Wine extends Product{
   private float VolumeWine;
   
   
    public  Wine(int barcode, String name, float price, float VolumeWine);
    {
     //Se atribuie parametrii prin constructor
     super.(barcode, name, price);
     this.VolumeWine=VolumeWine;
     
     
     @Override
     private  String toString(){
       
   
    return super.toString() +", VolumeWine: " + this.VolumeWine;
}
    }
   
    @Override
     private final static float Taxes_VAT= (float) (this.price*0.2)static {
         private final static float Taxes_ADD=(float) (Taxes_VAT*0.1){
     }
}

   
   @Override
   public final double countPrice() {
//Se calculează preţul produsului cu taxa TVA de 20% plus taxa suplimentara de 10% din TVA
return this.price + this.price*0.2 + 0.1*(this.price*0.2);
   }
   
}

//Programul principal
public class TestProduct {
   
public static void main(String[] args) {
//Instanţierea clasei Wine
Wine w = new Wine("8410261271224","Don Simon Rosu Sec","750ml",5);

//Instanţierea clasei Chocolate
Chocolate c = new Chocolate("4025700001023","Milka Alune","100g",3);

   //Afişarea claselor Wine şi Chocolate
   System.out.println(w);
   System.out.println(c);
    }
   
}

Toate acestea le-am facut conform exercitiului:


"Imaginaţi-vă că trebuie să modelaţi un sistem informaţional al unui magazin. Trebuie să creaţi clasa Product, care
va reprezenta baza pentru moştenirea ce urmează şi care nu se va putea instanţia. Această clasă trebuie moştenită
de două clase care reprezintă grupuri concrete de produse: Chocolate şi Wine. Această ierarhie, reprezentată prin
diagrama de mai jos, arată astfel:

Fiecare produs trebuie să posede anumite caracteristici precum:
denumirea produsului,
codul de bare,
preţul de bază,
taxa.
De asemenea, fiecare produs posedă şi o metodă pentru calcularea preţului, metodă care se calculează atunci
când preţul de bază se măreşte cu suma taxei. Taxa (TVA) pentru fiecare produs este de 20% şi aceasta este o dată
constantă care nu se va modifica.
Produsele din grupul de vinuri au o taxă suplimentară, fiindcă intră în categoria băuturilor alcoolice, aşadar această
taxă suplimentară este de 10% din preţul cu TVA. Şi această dată este constantă şi nu se va modifica.
Din motivele menţionate, este necesar să redefinim metoda pentru calcularea preţurilor în cadrul clasei Wine.
În afară de aceasta, clasa Wine trebuie să posede un atribut care va defini volumul sticlei, iar clasa Chocolate
trebuie să aibă atributul care va defini greutatea.
În clasele Chocolate şi Wine, trebuie creaţi constructori parametrizaţi pentru crearea obiectelor.
De asemenea, în clase trebuie redefinită metoda to String pentru afişarea informaţiilor despre obiect.
În cele din urmă, trebuie creat câte un obiect pentru fiecare dintre aceste clase, iar la ieşire trebuie afişate
informaţiile despre produse, precum şi preţul final, definit prin metoda pentru calcularea preţului. Ca preţ de bază
luaţi o sumă arbitrară."

ovidiu ovidiu
Reply | Threaded
Open this post in threaded view
|

Re: Programare orientată pe obiecte în Java

1) clasa Product - e ok ca este abstracta dar metodele sale nu trebuiesc implementate (doar declarate ca si abstracte; implementarea lor o faci in clasele concrete); de asemenea nu ai nevoie de constructor intr-o clasa abstracta.
2) clasele Chocolate si Wine nu trebuiesc declarate abstracte (sunt clase concrete)
3) field-ul TVA - il poti declara in clasa abstracta pentru ca il vor mosteni ambele clase concrete