You are on page 1of 23

Агрегација

Ако класата има референца на некој ентитет, тоа е познато како агрегација. Да ја
разгледаме следната ситуација: објектот Employee содржи многу информации како што се
id, name, email итн. Тој содржи уште еден објект кој се нарекува address, кој содржи свои
сопствени информации како што се град, република или кантон, држава, zipcode итн. Како
што е прикажано:
class Employee{ 
  int id; 
  String name; 
  Address address; //Address e klasa 
... 
}

Зошто се користи агрегација?


Поради повторна употребливост на кодот (reusability).
Задача 1:
Користејќи агрегација да се направи програма за достава по станови. Да се направи
пример за два купувачи во истата населба.
Опис: Во овој случај постојат два објекта Tom и Marko, kupuvac tom = new Kupuvac(1212,
adresa1); и Kupuvac marko = new Kupuvac (1673, adresa2);
Решение:
class AdresaLok{
private int stanBr;
private String lokacija;
public AdresaLok (int stanBr, String lokacija){
this.stanBr = stanBr;
this.lokacija = lokacija;
}
public int getStanBr(){
return stanBr;
}
public String getLokacija(){
return lokacija;
}
}

class Kupuvac{
private int kupuvacID;
private AdresaLok adresaLinija;
public Kupuvac (int kupuvacID, AdresaLok adresaLinija){
this.kupuvacID = kupuvacID;
this.adresaLinija = adresaLinija;
}
public int getKupuvacID(){
return kupuvacID;
}
public AdresaLok getAdresaLinija(){
return adresaLinija;
}
}
public class Dostava {
public static void main(String[] args) {
String lokacija = new String ("Naselba1, Zgrada2");
AdresaLok adresa1 = new AdresaLok (15, lokacija);
Kupuvac tom = new Kupuvac(1212,adresa1);
System.out.println("Kupuvac Id: " + tom.getKupuvacID());
System.out.println("Stan br: " +
tom.getAdresaLinija().getStanBr());
System.out.println("Lokacija: " +
tom.getAdresaLinija().getLokacija());

System.out.println();
AdresaLok adresa2 = new AdresaLok (32, lokacija);
Kupuvac marko = new Kupuvac(1673,adresa2);
System.out.println("Kupuvac Id: " + marko.getKupuvacID());
System.out.println("Stan br: " +
marko.getAdresaLinija().getStanBr());
System.out.println("Lokacija: " +
marko.getAdresaLinija().getLokacija());
}
}
Печати :
Kupuvac Id: 1212
Stan br: 15
Lokacija: Naselba1, Zgrada2

Kupuvac Id: 1673


Stan br: 32
Lokacija: Naselba1, Zgrada2
Објектно ориентирано програмирање

Вежби за втор колоквиум


Задача 1:
Да се напише програма во која се вчитуваат 3 реални броеви. Да се испита
дали од внесените броеви може да се формира триаголник и дали истиот е
правоаголен, остроаголен или тапоаголен.
Објаснување:
Задачата треба да содржи две класи: влез (објектната класа со податочен дел за страните
на триаголникот, потребните конструктори, сетери или гетери и метод резултат() кој
проверува дали постои триаголник со зададените страни) и излез (класа која го содржи
main методот и го проверува каков е според аглите).
Решение:
package zadaca_1;

public class vlez {


double a, b, c;

public vlez(double a, double b, double c) {


this.a = a;
this.b = b;
this.c = c;
}

public double strana_a() {


return a;
}

public double strana_b() {


return b;
}

public double strana_c() {


return c;
}

public boolean rezultat()


{
return (a+b>c && a+c>b && b+c>a);
}
}

package zadaca_1;

import java.util.Scanner;

public class izlez {


public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Vnesi strana a");
double a = input.nextDouble();
System.out.println("Vnesi strana b");
double b = input.nextDouble();
System.out.println("Vnesi strana c");
double c = input.nextDouble();
vlez zadaca_1 = new vlez(a, b, c);
if (zadaca_1.rezultat()) {
System.out.println("Postoi triagolnik so zadadenite strani");
if (a * a == b * b + c * c || b * b == a * a + c * c|| c * c == a * a
+ b * b) {
System.out.print("I toj e pravoagolen." + "\n");
} else if (a * a < b * b + c * c && b * b < a * a + c * c && c * c < a
* a + b * b)
System.out.print("I toj e ostroagolen." + "\n");
else
System.out.print("I toj e tapoagolen." + "\n");
} else
System.out.print("Ne postoi triagolnik so dadenite strani");
}
}

Задача 2:
Во пакет именуван како Натпревар потребно е да се креираат 3 класи:
1. Класа Тим – Оваа класа треба да послужи за да се креира кошаркарски тим. Тимот
има свое име и град од кој доаѓа, да се напише соодветен конструктор и метод кој
го враќа името и градот на тимот во соодветниот облик Real Madrid (Madrid).
2. Класа Натпревар – Оваа класа користи за да се креира кошаркарски натпревар
меѓу два тима. Се состои од два тима (објекти од типот тим). Да се напишат
соодветни конструктори, методи со кои се додаваат поените на тимот и метод кој
пресметува кој е победникот или е нерешено.
3. Класа Тест – Во оваа класа се наоѓа main методот, да се внесат податоци за двата
тима, да се креираат соодветни објекти(tim1 и tim2). Да се креира објект од типот
кошаркарски натпревар финале, да се внесат поени за двата тима и да се прогласи
победникот.

Решение:
package Natprevar;

class Tim {
private String ime;
private String mesto;
public Tim(String ime, String mesto) {
this.ime = ime;
this.mesto = mesto;
}
public String toString() {
return ime + " (" + mesto + ")";
}
}
package Natprevar;

public class KosarkarskiNatprevar {


public Tim domakjin, gostin;
public int brojPoeniDomakjin, brojPoeniGosti;
public KosarkarskiNatprevar(Tim d, Tim g) {
domakjin = d;
gostin = g;
}
public void domakjinPoentira(int brojPoeni) {
brojPoeniDomakjin += brojPoeni;
}
public void gostinPoentira(int brojPoeni) {
brojPoeniGosti += brojPoeni;
}
public void pobednikNaNatprevarot() {
if (brojPoeniDomakjin > brojPoeniGosti)
System.out.println("Pobednik je " + domakjin);
else if (brojPoeniDomakjin < brojPoeniGosti)
System.out.println("Pobednikot e " + gostin);
else
System.out.println("Nereseno (prodolzetoci)");
}
}
package Natprevar;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner (System.in);
System.out.print("Vnesi ime na prviot klub i gradot od koj
doagja: ");
String ime1 = input.nextLine();
String grad1 = input.nextLine();
System.out.print("Vnesi ime na vtoriot klub i gradot od koj
doagja: ");
String ime2 = input.nextLine();
String grad2 = input.nextLine();
Tim partizan = new Tim(ime1, grad1);
Tim zvezda = new Tim(ime2, grad2);
KosarkarskiNatprevar finale;
finale = new KosarkarskiNatprevar (partizan, zvezda);
System.out.print("Vnesi poeni za prviot tim: ");
int tim1 = input.nextInt();
System.out.print("Vnesi poeni za prviot tim: ");
int tim2 = input.nextInt();
finale.domakjinPoentira(tim1);
finale.gostinPoentira(tim2);
finale.pobednikNaNatprevarot();
}

Вежби
Методи
Задача 1:

Напиши програма во која ќе употребиш метод кој наоѓа минимум од два


броја. Минимумот да се испечати на екран.

Домашна работа: Напиши програма во која внесуваш три броја од тастатура


и со помош на метод за наоѓање за минимум најди го најмалиот и испечати
го на екран.

Решение:
public class Minimum {

public static int findMin(int n1, int n2) {


int min;
if (n1 < n2)
min = n1;
else
min = n2;

return min;
}

public static void main(String[] args) {


System.out.println("Minimum od dvata broja e: " + findMin(10,
5));
}
}

Што ќе испечати програмата?


Задача 2:
Напиши програма во која ќе користиш метод со еден аргумент (double) кој
ќе пресметува кaков успех постигнал студентот и го печати на екран. Бројот
на бодови се внесува од тастатура.

Решение:
import java.util.Scanner;
public class Uspeh {

public static void metodUspeh(double bodovi) {


if (bodovi >= 8.5) {
System.out.println("Odlicen");
} else if (bodovi >= 7.5) {
System.out.println("Mnogu dobar");
} else if (bodovi >= 5.5) {
System.out.println("Dobar");
} else if (bodovi >= 3.5) {
System.out.println("Dovolen");
} else {
System.out.println("Nedovolen");
}
}

public static void main(String[] args) {


Scanner input = new Scanner(System.in);

System.out.print("Vnesi bodovi od 1-10\n");


System.out.print("Broj na bodovi: ");
double bodovi = input.nextDouble();
System.out.print("Za broj na bodovi " + bodovi + " uspehot e:
");
metodUspeh(bodovi);
}
}

Што ќе испечати програмата за внес 5.7?

Getter и Setter методи:

Пример 1:

package studenti;

public class Student {


int id;
String ime;
int godini;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getIme() {
return ime;
}
public void setIme(String ime) {
this.ime = ime;
}
public int getGodine() {
return godini;
}
public void setGodine(int godine) {
this.godini = godini;
}
}

package studenti;
public class Glavna {
public static void main(String[] args) {
Student marko = new Student();
marko.setId(1);
marko.setIme("Marko");
marko.setGodini(18);
System.out.println("Reden broj " + marko.getId() + " e
studentot " + marko.getIme() + " star " + marko.getGodini() + "
godini");
}
}

Што ќе испечати програмата?


Преоптоварување
Пример 2:

Креирај класа Student кој има два конструктори. Еден e со два


параметри Student(int i, String n) a другиот е со 3 параметри Student(int i,
String n, int a). Податоците се идентификациски број, име и старост на
студентот. Креирај објекти s1 (2 параметри) и s3 (3 параметри).
Податоците да се испечатат со истиот метод на екран.

Краток опис: Преоптоварување (overloading) на конструктори. Ова е


техника во Javа со која во иста класа може да има одреден број на
конструктори со исто име а различни параметри. Компајлерот прави разлика
помеѓу овие конструктори така што го зема во обзир бројот на параметри и
нивниот тип.

Решение:
class Student { // klasa
int id; // data member (instancirana varijabla)
String ime; // data member -||-
int starost; // data member -||-

Student(int i, String n) { // konstrukor so 2 parametri


id = i;
ime = n;
}

Student(int i, String n, int a) { // konstrukor so 3 parametri


OVERLOADING
id = i;
ime = n;
starost = a;
}

void display() { // metod


System.out.println(id + " " + ime + " " + starost);
}

public static void main(String args[]) {


Student s1 = new Student(111, "Petar "); // kreiraj objekt s1
Student s2 = new Student(222, "Marko", 25); // kreiraj objekt
s2
s1.display(); // pecati - s1
s2.display(); // pecati - s2
}
}

Клучниот збор this


Постојат повеќе начини за употреба на клучното зборче this. Во Java е
референтна променлива која упатува на тековниот објект.
Употреба на клучното зборче this.
 this може да се употреби за да упати на инстанцирана променлива од тековната класа.
 this() може да биде употребен за да се повика конструктор од тековната класа.
 this може да се употреби за да се повика метод од тековна класа.
 this може да биде проследен како аргумент во повикување на метод/конструктор.
 Може да се употреби за да врати инстанца од тековната класа.

class AritmetickaSredina{
int a;
int b;
int c;

AritmetickaSredina(int a, int b, int c) {


this.a = a;
this.b = b;
this.c = c;
}

void calculateAS() {
System.out.println((a + b + c) / 3);
}

public static void main(String args[]) {


AritmetickaSredina firstN = new AritmetickaSredina (3, 5, 7);
AritmetickaSredina secondN = new AritmetickaSredina (13, 25, 29);

firstN.calculateAS();
secondN.calculateAS();
}
}

Што ќе испечати програмата?


Домашна задача:
Модифицирај ја веќе напишаната програма на следниот начин:

 Корисникот да биде известен колку броеви треба да внесе.


 Да внесе потребен број на броеви и да се пресмета нивната
аритметичка средина.
 Соодветно да се коментира секоја линија од кодот и нејзината примена.

Клучниот збор static


Клучниот збор static во Java во главно се користи за управување со меморијата. Може да
се примени на променлива, метод, блок и вгнездена класа.
1. Статичка променлива
 Статичката променлива може да се употреби така што да се однесува на
заеднички особини на сите објекти, на пример компанија – име на
компанија, факултет- име на студенти и итд.
 На статичката променлива и се доделува мемориски простор само еднаш во
просторот на класата во моментот на вчитување на класата.
Пример:
class Student{
int index;
String ime;
static String fakultet ="ITS"; // staticna promenliva

Student(int r,String n){


index = r;
ime = n;
}
void display (){
System.out.println(index + " " + ime + " " + fakultet);
}
public static void main(String args[]){
Student s1 = new Student(111,"Petar");
Student s2 = new Student(222,"Marko");

s1.display();
s2.display();
}
}
Претпоставуваме дека на факултетот
има 500 студенти, па сите инстанцирани
променливи ќе добијат меморија
секојпат кога ќе се креира објект. Секој
студент има свој единствен број на
индекс и свое име така што
инстанцираната променлива е добра.
Овде факултетот означува заедничка
особина на сите објекти. Ако ја
направиме статичка, ова поле ќе добие
меморија само еднаш.

2. Статички метод
 Ако го користиме клучниот збор static на било кој метод, тој станува
статички метод
 Статичкиот метод и припаѓа на класата а не на објектот од класата.
 Статичкиот метод може да биде повикан без потреба да се креира инстанца
од класата
 Статичкиот метод може да пристапи кон статички податоци – членови и
може да ја менува нивната вредност

Ограничувања!
Постојат две главни ограничувања за статички метод.
Тоа се:
 Статички метод не може да користи не-статички податоци-членови или да
повика не-статички метод директно.
 this и super не може да се користат во статички контекст.

Пример:
Да се напише програм кој прикажува два метода. Статичкиот метод е display() а show() не
е. Повикот и печатењето се изведува од main методот.
Опис на програмата: За повик на статички метод display() не треба да се креира објект,
додека за методот show() кој не е статички мора да се креира метод.

public class Razlika {


public static void main(String[] args) {
display(); // povik bez objekt
Razlika t = new Razlika();
t.show(); // povik so koristenje na objekt
}

static void display() {


System.out.println("Pecati od staticki metod");
}

void show(){
System.out.println("Objektot t e kreiran uspesno!");
}
}

Вежби
Пример 1:

Преоптоварување (overloading) на методи


Да се креираат два преоптеретени методи. Првиот minFun (int n1, int n2) метод кој наоѓа
помал број од два. Другиот minFun (int n1, int n2, int n3) кој наоѓа најмал број од три
броја.
class min {
int min;
void minFun(int n1, int n2) { // metod - min od dva
broja
min = n1; // pretpostaven
minimum
if (min > n2)
min = n2;
System.out.println("Od broevite "+n1+" i "+n2+" pomal e " +
min);
}

void minFun(int n1, int n2, int n3) { // metoda - min od tri
broja
min = n1; // pretpostaven
minimum
if (min > n2)
min = n2;
if (min > n3)
min = n3;
System.out.println("Od broevite "+n1+", "+n2+", "+n3+" najmal
e " + min);
}

public static void main(String[] args) {


min najmal = new min(); // kreiraj objekt
najmal.minFun(11, 6); // povik na metodot - min od dva
broja
najmal.minFun(6, 3, 4); // povik na metodot - min od tri
broja
}
}

Домашна задача:
Да се креираат три преоптоварени методи. Првиот maxFun наоѓа поголем од 2 броја,
другиот метод maxFun наоѓа поголем од три броја и третиот метод maxFun наоѓа
најголем број од четири броја.
Пример 2:
Наследување (inheritance)
Да се креираат две класи. Првата класа /superclass/ - B содржи податок x = 2 и има
метод triple() – кој за зголемува вредноста на x за 3 пати. Креирај подкласа C /subclass/
која има метод triple() која на вредноста на x и додава 3. Да се определи што ќе се
испечати на екранот со повикување на b.x и c.x пред и после triple() и за b.triple() и
c.triple().
class B { // SUPERCLASS B
int x=2; // DATA MEMBER SUPERCLASS x = 2
void triple() {x=x*3;} // metod - pomnozi ja vrednosta x so 3
x*=3
int returnIt() {return x;} // metod - vrati go podatokot-DATA
MEMBER x
}

class C extends B { // SUBCLASS C


void triple() {
x=x+3 // metod - Zgolemi ja vrednosta na x so 3 x+=3
}
}
class main {
public static void (main(String[] args) {
B b = new B(); // Kreiraj objekt b -
SUPERCLASS B
System.out.println("b.x: " + b.returnIt()); // pecati 2
C c = new C(); // Kreiraj objekt c - SUBCLASS
C
System.out.println("c.x: " + c.returnIt()); // pecati c.x
2
b.triple(); // promena na vrednosta b.x *=3
c.triple(); // promena na vrednosta c.x +=3
System.out.println("b.x posle b.triple(): " + b.returnIt()); // pecati
b.x =2*3 = System.out.println("c.x posle c.triple(): " +
c.returnIt()); // pecati c.x =2+3 = 5
}
}

Печати на екран:
b.x: 2
c.x: 2
b.x posle b.triple(): 6
c.x posle c.triple(): 5

Пример 3:

Преклопување (Overriding) на методи

Да се креираат две класи. Првата класа /superclass/ - Kuce содржи метод особина кој
печати “Кучето лае”. Подкласата /subclass/ - Ловечко куче има метод особина кој печати
“Ловечкото куче душка”. Да се креира објект рекс од основната класа Kuce. Да се креира
објект ловец од подкласата LoveckoKuce и од main да се повикаат особините на двата
објекта.

class Kuce{ // SUPERCLASS Kuce


public void osobina(){ // metod osobina
System.out.println("Kuceto lae");
}
}
class LoveckoKuce extends Kuce{ // SUBCLASS Pas
public void osobina(){ // metod osobina
System.out.println("Loveckoto kuce duska");
}
}

class glavna {
public static void main(String [] args){
Kuce reks = new Kuce(); // kreiraj objekt
reks.osobina(); // povik na metodot osobina od
podklasata Kuce
Pas lovec = new LoveckoKuce(); // kreiraj objekt lovec
lovec.osobina(); // povik na metodot osobina od podklasata
LoveckoKuce
}
}

Печати на екран:
Kuceto lae
Loveckoto kuce duska

Преоптеретување на методи Преклопување на методи


Преклопување на методите се користи за да
Преоптеретување се користи обезбеди соецифична имплементација на
за да се подобри читловоста методите која веќе ја обезбедила
на програмата суперкласата.
Преклопување се јавува кај две класи кои се
Преоптеретување се изведува во заедничка релација односно наследуваат
во класата. една од друга.
Во случај на преоптеретување
параметрите мора да биде Во случај на преклопување параметрите мора
различни. да бидат исти.
Пример 4:

Полиморфизам (Polymorphism)
Bank е класа која обезбедува метод за добивање на каматна стапка. Каматните стапки се
разликуваат во зависност од банката. Банките ABC, DEF и GHI даваат каматни стапки од
8%, 7% и 9%.
Методот getRateOfInterest() го повикуваме со помош на референтната променлива од
родителската класа. Бидејќи таа упатува на објект од подкласа, а методот од подкласата се
преклопува со методот од родителската класа, методот од подкласата се повикува за време
на извршување.
class Bank{ // SUPERCLASS Bank
int getRateOfInterest(){return 0;}
}

class ABC extends Bank{ // SUBCLASS ABC


int getRateOfInterest(){return 8;}
}

class DEF extends Bank{ // SUBCLASS DEF


int getRateOfInterest(){return 7;}
}
class GHI extends Bank{ // SUBCLASS GHI
int getRateOfInterest(){return 9;}
}

class main{
public static void main(String args[]) {
Bank b1 = new ABC();
Bank b2 = new DEF();
Bank b3 = new GHI();
System.out.println("ABC kamatna stapka: " + b1.getRateOfInterest());
System.out.println("DEF kamatna stapka: " + b2.getRateOfInterest());
System.out.println("GHI kamatna stapka: " + b3.getRateOfInterest());
}
}
Печати на екран:
ABC kamatna stapka: 8
DEF kamatna stapka: 7
GHI kamatna stapka: 9

Домашна задача:
Во класата Bank вметни уште еден метод кој пресметува камата за 100 евра.
Каматите да се испечатат на екран.

Апстрактна класа
Класа која е декларирана со клучното зборче abstract, е позната како апстрактна класа
во Java. Таа може да има апстактни и не-апстрактни методи (методи со тело).
Пред запознавање со јава апстрактната класа, прво трба да се сфати поимот апстрекција
во јава.
Апстракција е процес на криење на детали на имплементацијата и при што на
корисникот му се прикажува само функционалноста.
Со други зборови, на корисникот му се покажуваат важни работи, а внатрешните детали
остануваат скриени. Пример: При праќање на sms порака ние само го внесуваме текстот
на пораката и ја праќаме. Не ни е познато интерното процесирање поврзано со праќањето
на пораката.
Апстракцијата ни дозволува да се фокусираме на тоа што објектот работи наместо како
го прави тоа.
Апстрактната класа во јава мора да биде наследувана и нејзиниот метод
имплементиран. Таа не може да биде инстанцирана.
Апстрактната класа е некој вид на фантомска класа. Таа може да проследува методи и
променливи, но самата не може никогаш да биде инстанцирана, т.е. немозможно е да се
креира објект од апстрактната класа. Во таа смисла, апстрактната класа е како интерфејс,
но за разлика од него таа може да содржи методи кои не се апстрактни. Исто така може да
користи податоци кои не се константи.
Секоја класа која содржи еден или повеќе апстрактни методи мора да биде декларирана
како апстрактна. Во апстрактни класи (за разлика од интерфејсите) модификаторот
abstract мора да биде применет на секој апстрактен метод.
Апстрактниот метод никогаш не може да биде static.

Пример 1:

abstract class Bike{


Bike(){System.out.println("bike is created");}
abstract void run();
void changeGear(){System.out.println("gear changed");}
}

class Honda extends Bike{


void run(){System.out.println("running safely..");}
}
class TestAbstraction2{
public static void main(String args[]){
Bike obj = new Honda();
obj.run();
obj.changeGear();
}
}
Објектно ориентирано програмирање

Објектно – ориентираното програмирање е парадигма која содржи многу концепти


како што се наследување (inheritance), поврзување на податоци (data binding),
полиморфизам и сл.

Првите објектно- ориентирани јазици биле Simula и Smalltalk. Програмската


парадигма каде се е претставено како објект е позната како вистински објектно-
ориентиран програмски јазик.
Објект означува ентитет од вистинскиот свет како што е молив, столче, маса, итд.
Објектно-ориентираното програмирање е методологија или парадигма на пишување на
програми при што се користат класи и објекти. Тоа го поедноставува развојот и
одржувањето на софтверот со тоа што ги обезбедува следните концепти:

1. Објект
2. Класа
3. Наследување
4. Полиморфизам
5. Апстракција
6. Енкапсулација

Објект – било кој ентитет кој има состојба и однесување се нарекува објект. Moже да биде
физички и логички.

Класа – колекција од објекти се нарекува класа. Таа е логички ентитет.

Наследување – кога еден објект ги добива сите особини и однесувања од родителскиот


објект тоа се нарекува наследување. Ова обезбедува повторна употребливост (reusability)
на кодот. Се користи за да се постигне полиморфизам во времето на извршување.

Полиморфизам – кога една задача се извршува на различни начини е познато како


полиморфизам. Во Јава се користи преоптоварување (overloadinig) метод и преклопување
(overriding) метод за да се постигне полиморфизам.
Апстракција – криење на внатрешните детали и покажување на функционалност е познато
како апстракција. Во Јава користиме апстрактни класи и интерфејс за да постигнеме
апстракција.

Енкапсулација – поврзување на кодот и податоците заедно во единствена единица е


познато како енкапсулација. Јава класа е пример за енкапсулацја. Јава зрно (bean) е во
потполност енкапсулирана класа бидејќи сите податоци – членови во неа се приватни.
Предности на ООП над процедуралното- ориентирано програмирање

1. ООП го прави развојот и одржувањето полесно додека во процедуралното-


ориентирано програмски јазици тоа не е лесно да се постигне доколку кодот расте
со развивање на обемот на проектот.
2. ООП обезбедува криење на податоците додека во процедуралното- ориентирани
програмски јазици глобалните податоци можат да се пристапат од било каде.
3. ООП овозможува многу поефикасно симулирање на случувањата од реалниот свет.
Можеме да овозможиме решавање на реални проблеми ако користиме ООП јазик.

Пример 1:
public class Soberi {

public static void main(String[] args) {


int sum = Soberi_broevi(2, 3, 4);
System.out.println("Sumata na trite broja = " + sum);
}

public static int Soberi_broevi(int a, int b, int c){


return (a+b+c);
}
}

Пример 2:

class Bike {
Bike() {
System.out.println("Bike e kreiran"); }

public static void main(String args[]) {


Bike1 b = new Bike();
}
}

Пример 3:

class Student{
int id;
String ime;
Student(int i,String n){
id = i;
ime = n;
}
void display(){System.out.println(id + " " + ime);}
public static void main(String args[]){
Student s1 = new Student(111, "Petar");
Student s2 = new Student(222, "Marko");
s1.display();
s2.display();
}
}

Задача 1:

package Konstruktori;
public class Kvadar {
int dolzina;
int visina;
int sirina;

public int getVolumen (){


return (dolzina * visina * sirina);
}

Kvadar (){
dolzina = 2;
visina = 3;
sirina = 4;
}
Kvadar (int d, int v, int s){
dolzina = d;
visina = v;
sirina = s;
}
}

package Konstruktori;

public class Glavna {

public static void main(String[] args) {


Kvadar kv = new Kvadar();
System.out.println("Volumen " + kv.getVolumen());

Kvadar kv2 = new Kvadar(2, 2, 2);


System.out.println("Volumen_2 " + kv2.getVolumen());
}
}

You might also like