You are on page 1of 10

Defining Classes

EXAM – CREATING ENTITIES FROM DIFFERENT OBJECT


Za izpita ako iskame drug class s (a collection field which stores the entity Vegetable)

v noviq vegi class napravihme


private List<Vegetable> products;
sled tova imashe da iztriem salatata ako sushtestvuva v lista
I go napravihme po po-lesen nachin
public boolean buy(String name) {
return this.data.removeIf(salad -> salad.getName().equals(name));
}
imahme i da napravim method koito dava salatata s nai malko calories
i za nego go napisahme taka
public Salad getHealthiestSalad() {

return this.data
.stream().min(Comparator.comparing(Salad::getTotalCalories))
.orElse(null);

}
Creating –
Rightclick on package – create new Class sled tova otivame v main
I pravim (ako classa ni se kazva Car)
Car sportCar = new Car();

Classovete vinagi imat sustoqnie purvo I sled tova deistvie


Primerno s Car

Class Car {
String brand;
String model; <------ sustoqnie

void drive() { method} <------- deistvie


}
Ako sled tova probvame da suzdadem oshte novi klasove
Primerno
Car policeCar = new Car();
To shte ima sushtoto povedenie I sustoqnie kato prednoto
Car sportCar = new Car();

Moje da suzdavame private obekti za suzdadeniq class koito da budat


dostupni samo do nas no ne I za vunshniq svqt, primerno..
public class Car {

private String brand;


}

v sluchaq imame markata (brand) na kolata


public class Car {

private String brand = "bmw";

public String getBrand() {


return brand;
}
}
sled tova trqbva da napravim method koito vrushta branda (markata)
no ne promenq stoinosta zatova ne pravim public branda zashtoto shte
promeni stoinosta zatova si pravim public method koito samo da q
pokazva bez da q promenq i trqbva da izvikame ot Main classa po tozi
nachin (normal)
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

Car sportCar = new Car();

String marka = sportCar.getBrand();

System.out.println(marka); // bmw
}
}
private – krie ot drugite klasove toest variable mogat da budat
dostupeni edinstveno s geteri I seteri ako sa zadadeni kato private
public – pokazva normal dfk zakvo go pisha tva
zatova gettera vrushta samo stoinosta no nemoje da se prezapisva
zashtoto ako bqhme napravili public branda sled tova v main methoda
toi moje mnogo lesno da bude prezapisan I da se dopusnat greshki ta za
tova nikoga ne se izpolzva vutreshnotot sustoqnie

methodite koito promenqt stoinost sa nqkakuv vid setter

access modifiers (ako gi vidim pred zadachite)


+ oznachava che publichno i vidimo za vseki
- oznachava che e private
# oznachava che e protected
() – tezi skobi pokazvat che se izvurshva funkciq ili method

Hubavo e vseki put kogato suzdavame nov obekt da mu prisvoqvame


povedenie I da ima veche prisvoeni stoinosti zashtoto neshto moje da se
oburka moje v Main da izprintirame predi da presvoim I shte stane
null/0 zatova nai dobre e pri vsqka instanciq -> prisvoqvane

private String brand = "bmw";


private String model = "m5";
private int horsePower = 590;

public String getBrand() {


return brand;
}

public String getModel() {


return model;
}

public int getHorsePower() {


return horsePower;
}
moje da suzdadem direktno getterite bez da gi pishem kato zapochenm
s get. (i to direktno pokazva koe iskame da vzemem)
i avtomatichno suzdava gettera

setteri – po podredeno e da pishem setterite predi getterite


primerno ako iskame da PREZAPISHEM branda
public void setBrand(String newBrand) {
this.brand = newBrand;
}

public String getBrand() {


return brand;
}

executable code – moje da pishem executable commands v classa


primerno kakto e v sluchaq za kolata neinite konski sili HorsePower
da gi uvelichim
private int horsePower = 590;

public void increasingHP(int value) {


this.horsePower += value;
}

public int getHorsePower() {


return horsePower;
}

i v main shte go povikame taka


public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

Car sportCar = new Car();

sportCar.increasingHP(10); // 590 + 10 ot Car class methoda

System.out.println(sportCar.getHorsePower()); // 600
}
}

izpolzvame this za da ne krushtavame promenlivite s drugi imena


private int horsePower = 590;

public void increasingHP(int horsePower) {


this.horsePower += horsePower;
}

ako imenata sa razlichni nqma da ima field hiding i raboti i bez this
no v rabotata zaduljitelno gi pravim s this (za da nqma izlishni imena)
suotvetno e po chetimo
AUTO-CREATE
Moje intellij avtomatichno da ni suzdade getteri i setteri alt+insert
ili right-click + generate i suotvetno tova koeto iskame da generirame
no e po-dobre za da sviknem da si go pishem ruchno

ToString() Method & notaciq


toString() methoda trqbva da si go napravim ruchno i da mu slojim
notaciq za da moje kogato primerno go izprintirame instanciqta da
nameri methoda
@Override
public String toString() {
return getHorsePower() + "kubika";
}

Polzva se za formatirane moje da si go formatirame v classa I sled tova


direktno da otpechatame primerno sout(car) i direktno shte otpechata
tova v toString() methoda (koeto sme zadali)

Constructors
Constructurite se izpolzvat za da izpulnish nqkakvo specialno povedenie
na koda primerno za kolata shte ima
Kudeto go slojim konstruktura shte ima primerno v classa
public class Car {

private String brand;

public Car() {
this.brand = "BTW";
}
}

kato pravim constructor purvo che ponqkoga ni spestqva getterite I


setterite I v nqkoi sluchai e po dobre da go izpolzvame i drugo che
ne ni pozvolqva da napravim nov obekt/instanciq s razlichni parametri
primerno tuk
Car car = new Car(brand, model, horsePower);
Zadavame mu s kakvi parametri da e kolata
Sled tova pishe che ochakva 0 no ima 3 alt+enter i constructor za da
suzdadem constructor koito da e s tochno tezi parametri sled tova to ni
go suzdava v classa Car
private String brand;
private String model;
private String horsePower;

public Car(String brand, String model, String horsePower) {


this.brand = brand;
this.model = model;
this.horsePower = horsePower;
}

I sega v main classa nqma da ni pozvoli da suzdadem car koqto nqma


konski sili ili nqma marka ili nqma model 😊
moje da si napravim prazen construktor s 0 stoinosti I v nego da
napravim setteri taka primerno ako usera ne e zadal stoinosti
stoinostite shte budat zadadeni po default primerno unknown? 😊
USING CLASSES INSIDE MAPS

Ako imame mnogo danni za kolata ili choveka emails ili tochki na
chudovishta kruv damage etc… mnogo gluposti koito iskat class no
trqbva da se zapishat nqkude izpolzvame maps

Na mapa mu zadavame v sluchaq


TreeMap<String, Car> cars = new TreeMap<>();

Zadachata beshe takava che trqbvashe da se pazi mnogo informaciq za


kolata
Za tova na String v mapa mu zadavame model a na Car v sluchaq
Sme go krustili Car shtoto e class name
I za da dobavim v mapa se poluchava taka
while (n-- > 0) {
String[] input = scanner.nextLine().split("\\s+");

String model = input[0];


double fuelAvailable = Double.parseDouble(input[1]);
double costPerKilometer = Double.parseDouble(input[2]);

cars.put(model, new Car(model, fuelAvailable, costPerKilometer));


}

Tova e problem solved map class object problem ***

int n = Integer.parseInt(scanner.nextLine());

LinkedHashMap<String, Car> cars = new LinkedHashMap<>();

while (n-- > 0) {


String[] input = scanner.nextLine().split("\\s+");

String model = input[0];


double fuelAvailable = Double.parseDouble(input[1]);
double costPerKilometer = Double.parseDouble(input[2]);
cars.put(model, new Car(model, fuelAvailable, costPerKilometer));
}

String input = scanner.nextLine();


while (!input.equals("End")) {
String[] info = input.split("\\s+");

String carModel = info[1];


int kms = Integer.parseInt(info[2]);

if (!cars.get(carModel).fuelUp(kms)) {
System.out.println("Insufficient fuel for the drive");
}

input = scanner.nextLine();
}

for (Map.Entry<String, Car> s : cars.entrySet()) {


System.out.println(s.getValue().getModel() + " " +
String.format("%.2f", s.getValue().getFuelAmount()) + " " +
s.getValue().getDistanceTravelled());
}
eto I klassa kakuvto beshe my own solved \/
public class Car {
private String model;
private double fuelAmount;
private double costPerKilo;
private int distanceTravelled = 0;

public Car(String model, double fuelAvailable, double


costPerKilometer) {
this.model = model;
this.fuelAmount = fuelAvailable;
this.costPerKilo = costPerKilometer;
}

public String getModel() {


return model;
}

public double getFuelAmount() {


return fuelAmount;
}

public int getDistanceTravelled() {


return distanceTravelled;
}

boolean fuelUp(int distance) {


double total = distance * this.costPerKilo;
if (this.fuelAmount - total >= 0) {
this.fuelAmount -= total;
this.distanceTravelled += distance;
return true;
} else {
return false;
}
}

CREATING CLASS IN CLASS


Moje pri inicializiraneto na class da vkarash private drug class I da
izpolzvash na drugiq klass private neshtata v noviq class
Primerno v tazi zadacha imashe 2 classa
Engine classa imashe
private String model;
private String power;
private String displacement;
private String efficiency;
I sled tova v Car class moje da vkarash Engine classa eto taka
private String model;
private String engine;
private String weight;
private String color;
private Engine eng;

I sega ako iskash da vzemesh nqkoq stoinost ot Engine class primerno


displacement shte stane taka
public String getDisplacement() {
return this.eng.getDisplacement();
}
I vsushtnost ti kradesh ot drugiq class v tozi stoinosti
I otnovo tova nikoi ne mi go kaza 😊great
CALCULATING PROGRAM RUN TIME
pravim si longa za start system.current….
I sledovatelno longa za end I programata q refactorvame v method koito
da q izpulnqva slagame q mejdu start I enda I bi trqbva da izchisli za
kolko vreme e rabotila programata moje da vidim
Kolko raboti vsushtnost I se bavi ako si hardcornem stoinostite
Zashtoto v momenta po tozi nachin zavisi ot choveka kolko shte se
zabavi s vhodnite danni 😊
package com.company; // USE COLLECTIONS MORE OFTEN 😊
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

long start = System.currentTimeMillis();

extractor(scanner);

long end = System.currentTimeMillis();

System.out.println(end - start);
}

private static void extractor(Scanner scanner) {


String brand = scanner.nextLine();
String model = scanner.nextLine();
String horsePower = scanner.nextLine();

Car car = new Car(brand, model, horsePower);

System.out.println(car.toString());
}
}

AKO NAPRAVIM LIST OT List<Rabbits> v sluchaq Rabbits beshe drug class


Tova znachi che ako go napravim tozi list v drug klass po tozi nachin
pravim list ot Rabbits classa I demek moje da dostupvame vsichki
funkcii ot Rabbits classa v cage classa kato si napravim list
Demek tova znachi list ot tozi class I taka shte moje da polzvame I na
rabbit funckiite

StringBuilder – sb.append(System.lineSeparator());
Tova appendva nov red kato sout

You might also like