Professional Documents
Culture Documents
Informatika 111
Informatika 111
Ако класата има референца на некој ентитет, тоа е познато како агрегација. Да ја
разгледаме следната ситуација: објектот Employee содржи многу информации како што се
id, name, email итн. Тој содржи уште еден објект кој се нарекува address, кој содржи свои
сопствени информации како што се град, република или кантон, држава, zipcode итн. Како
што е прикажано:
class Employee{
int id;
String name;
Address address; //Address e klasa
...
}
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
package zadaca_1;
import java.util.Scanner;
Задача 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;
Вежби
Методи
Задача 1:
Решение:
public class Minimum {
return min;
}
Решение:
import java.util.Scanner;
public class Uspeh {
Пример 1:
package studenti;
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");
}
}
Решение:
class Student { // klasa
int id; // data member (instancirana varijabla)
String ime; // data member -||-
int starost; // data member -||-
class AritmetickaSredina{
int a;
int b;
int c;
void calculateAS() {
System.out.println((a + b + c) / 3);
}
firstN.calculateAS();
secondN.calculateAS();
}
}
s1.display();
s2.display();
}
}
Претпоставуваме дека на факултетот
има 500 студенти, па сите инстанцирани
променливи ќе добијат меморија
секојпат кога ќе се креира објект. Секој
студент има свој единствен број на
индекс и свое име така што
инстанцираната променлива е добра.
Овде факултетот означува заедничка
особина на сите објекти. Ако ја
направиме статичка, ова поле ќе добие
меморија само еднаш.
2. Статички метод
Ако го користиме клучниот збор static на било кој метод, тој станува
статички метод
Статичкиот метод и припаѓа на класата а не на објектот од класата.
Статичкиот метод може да биде повикан без потреба да се креира инстанца
од класата
Статичкиот метод може да пристапи кон статички податоци – членови и
може да ја менува нивната вредност
Ограничувања!
Постојат две главни ограничувања за статички метод.
Тоа се:
Статички метод не може да користи не-статички податоци-членови или да
повика не-статички метод директно.
this и super не може да се користат во статички контекст.
Пример:
Да се напише програм кој прикажува два метода. Статичкиот метод е display() а show() не
е. Повикот и печатењето се изведува од main методот.
Опис на програмата: За повик на статички метод display() не треба да се креира објект,
додека за методот show() кој не е статички мора да се креира метод.
void show(){
System.out.println("Objektot t e kreiran uspesno!");
}
}
Вежби
Пример 1:
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);
}
Домашна задача:
Да се креираат три преоптоварени методи. Првиот 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
}
Печати на екран:
b.x: 2
c.x: 2
b.x posle b.triple(): 6
c.x posle c.triple(): 5
Пример 3:
Да се креираат две класи. Првата класа /superclass/ - Kuce содржи метод особина кој
печати “Кучето лае”. Подкласата /subclass/ - Ловечко куче има метод особина кој печати
“Ловечкото куче душка”. Да се креира објект рекс од основната класа Kuce. Да се креира
објект ловец од подкласата LoveckoKuce и од main да се повикаат особините на двата
објекта.
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
Полиморфизам (Polymorphism)
Bank е класа која обезбедува метод за добивање на каматна стапка. Каматните стапки се
разликуваат во зависност од банката. Банките ABC, DEF и GHI даваат каматни стапки од
8%, 7% и 9%.
Методот getRateOfInterest() го повикуваме со помош на референтната променлива од
родителската класа. Бидејќи таа упатува на објект од подкласа, а методот од подкласата се
преклопува со методот од родителската класа, методот од подкласата се повикува за време
на извршување.
class Bank{ // SUPERCLASS Bank
int getRateOfInterest(){return 0;}
}
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:
1. Објект
2. Класа
3. Наследување
4. Полиморфизам
5. Апстракција
6. Енкапсулација
Објект – било кој ентитет кој има состојба и однесување се нарекува објект. Moже да биде
физички и логички.
Пример 1:
public class Soberi {
Пример 2:
class Bike {
Bike() {
System.out.println("Bike e kreiran"); }
Пример 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;
Kvadar (){
dolzina = 2;
visina = 3;
sirina = 4;
}
Kvadar (int d, int v, int s){
dolzina = d;
visina = v;
sirina = s;
}
}
package Konstruktori;