> For the complete documentation index, see [llms.txt](https://programmingfundamental.gitbook.io/programmingwithjava/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://programmingfundamental.gitbook.io/programmingwithjava/obektno-orientirano-programirane-2-chast/laboratorno-uprazhnenie-2/isp-interface-segregation-principle/zadachi.md).

# Задачи

### Задача 1

Дефинирайте следния интерфейс:

```java
public interface Vehicle {    
    public void drive();    
    public void stop();
    public void refuel();
    public void openDoors();
}
```

Имплементиракте го в класа Bike.

Всички методи ли имплементирахте?

Приложете принципа ISP и имплементирахте класовете Car, Truck

### Задача 2

За примера от лагбораторно упражнение 2 може ли да бъде приложен принципа на ISP. Направете имплементация.

### Задача 3

Дефинирайте следния интерфейс:

```
public interface Payments {
    
    public bool payMoney(double amount);
    
    public ScratchCard getScratchCard();
    
    public double getCashBackAsCreditBalance();
}
```

Имплементирайте клас GooglePay, който предоставя, възможност за:

* Плащане на сметки, проверява наличноста и заплаща сумата, като я намаля.
* Предосатавя скреч карта с награда, ако последната за плащане:
  * е над 100лв има 10% шанс за печеливша карта
  * е над 1000лв има 20% шанс за печеливша карта
  * е над 3 000лв има 30% шанс за печеливша картарта
  * е над 5 000лв има 50% шанс за печеливша карта
  * е над 10 000лв има 100% шанс за печеливша карта
* Връщане на 10% от платената сума при 50% шанс за връщане, увеличава наличноста и връща CashBack сумата.

Имплементирайте клас Paytm, който предоставя, възможност за:

* Плащане на сметки, проверява наличноста и заплаща сумата, като я освобождава 5 дни след плащането.
* Връщане на 5% от платената сума при 70% шанс за връщане, увеличава наличноста и връща CashBack сумата.

В тази задача може ли да използвате ISP, как ще го направите?
