C, PHP, VB, .NET

Дневникът на Филип Петров


* Изходен код от упражнение 4, 2015

Публикувано на 29 октомври 2015 в раздел ПИК3 Java.

Задача 1. Дефинирайте интерфейс “Buyable”, в който дефинирайте действиe “int buy(int quantity)” (купуване на продукт) и действие “String getName()” (взимане на името на продукта).

Задача 2. Дефинирайте клас “Product”, който имплементира интерфейс “Buyable”. Член променливи са:

  • id – идентификатор на продукта в склада от тип int;
  • name – описание на продукта, записано в String;
  • quantity – наличност (бройки) в склада от тип int.

Защитете член променливите по следния начин:

  • id трябва да е винаги положително число (строго по-голямо от 0);
  • quantity трябва да е винаги по-голямо или равно на 0;
  • name да бъде само за четене.

Реализирайте метод buy. Идеята му е по подадено количество стока от даден продукт да връща или “id” на продукта в склада (ще бъде положително число), или -1 (невалидно id) ако такова количество не е налично или ако е подадена невалидна стойност за количество (<=0). Ако покупката е успешна, да намалява стойността на член-променлива quantity с количеството, което е закупено.

Задача 3. Реализирайте клас “BetterProduct”, който наследява клас “Product” и предефинира метод buy по следния начин – вече вместо да връща -1  при неуспех, трябва да хвърля RuntimeException с подходящо съобщение за грешка.

Задача 4. Направете клас с main метод, в който инициализирайте масив с два елемента от тип Buyable. В него запишете един Product и един BetterProduct. Обходете масива с цикъл и отпечатайте имената на продуктите на екрана.

Забележка: и при двата класа правете само конструктор с подадени параметри.

Решение:

public class Upr4{
  public static void main(String[] args){
    Buyable[] arr = new Buyable[2];
    try{
      arr[0] = new Product(1, 5, "Product A");
      arr[1] = new BetterProduct(2, 6, "Product B");
    }
    catch(Exception e){
      System.err.println(e.getMessage());
    }
    for(Buyable b : arr){
      System.out.println(b.getName());
    }
  }
}

interface Buyable{
  int buy(int quantity);
  String getName();
}

class Product implements Buyable{
  private int id;
  private int quantity;
  String name;
  public Product(int id, int quantity, String name) throws Exception{
    this.setId(id);
    this.setQuantity(quantity);
    this.name = name;
  }
  int getId(){
    return this.id;
  }
  void setId(int id) throws Exception{
    if(id<=0) throw new Exception("Идентификатора трябва да е > 0");
    else this.id = id;
  }
  int getQuantity(){
    return this.quantity;
  }
  public String getName(){
    return this.name;
  }
  void setQuantity(int quantity) throws Exception{
    if(quantity<0) throw new Exception("Количеството трябва да е > 0");
    else this.id = id; 
  }
  
  public int buy(int quantity){
    if(quantity<=0 || quantity>this.quantity){
      return -1;
    }
    else{
      this.quantity -= quantity;
      return this.id;
    }
  }
}

class BetterProduct extends Product{
  public BetterProduct(int id, int quantity, String name) throws Exception{
    super(id, quantity, name);
  }
  public int buy(int quantity){
    int productId = super.buy(quantity);
    if(productId==-1) throw new RuntimeException("Няма такава наличност");
    else return productId;
  }
}

 



Добави коментар

Адресът на електронната поща няма да се публикува


*