Professional Documents
Culture Documents
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Вовед во Java
Зошто Java?
• Развиена од Sun Microsystems, 1995 (James
Gosling)
• Објектно-ориентиран јазик за општа
намена
• Се базира на C/C++
• Дизајниран за лесни Web/Internet
апликации
• Широко распространет
• Нуди независност на платформа (ОС)
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Литература
Web resources…
• http://www.apl.jhu.edu/~hall/java/
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Особини на Java
• Едноставен
– Решава дел од проблемите на C++
– Нема покажувачи
– Автоматски garbage collection
– Богати предефинирани класни библиотеки
http://java.sun.com/j2se/1.4.2/docs/api/
• Објектно ориентиран
– Се фокусира на податоците (објектите) и методите (функциите) кои
манипулираат со податоците
– Сите функции се поврзани со објекти
– Скоро сите податочни типови се објекти (датотеки, стрингови, итн.)
– Потенцијално подобра организација на код и реискористливост
4
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Недостатоци на Java
5
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Развојни околини
• За да вршите развој на софтвер во Java потребно е да
имате инсталирано Sun Java Development Kit (JDK)
• Постојат многу околини кои даваат поддршка за развој
на софтвер во Јава, вклучувајќи ги:
– Sun NetBeans
}Инсталирани се во лабораториите на ФИНКИ
– IBM Eclipse, GNU Eclipse
– Borland JBuilder
– MetroWerks CodeWarrior
– BlueJ
– jGRASP
• Иако овие околини се разликуваат во деталите,
основниот процес на компајлирање и извршување во
суштина е идентичен
6
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Eclipse
7
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Лесна инсталација
• Може да го спуштите од www.eclipse.org
• Препорачливо е да се спушти Eclipse IDE for
Java ЕЕ Developers
• Најновата верзија е Eclipse 4.5.0 (Mars)
• Внимание!
• Пред да се инсталира Eclipse потребно е да
имате инсталирано JDK (Java Development
Kit)
8
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Лесна инсталација
• Нема потреба од инсталација
• Само unzip и го стартувате
• На првиот почеток Eclipse ќе ви побара да ја
наведете локацијата за вашиот работен
директориум (workspace directory) каде што
ќе се чуваат сите ваши проекти и датотеки
9
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Работа со Eclipse
• Како да напишете и извршите Java код во
Eclipse во 5 чекори:
– Направете нов проект (Java Project)
– Додадете нова класа на проектот (File->New->Class)
– Напишете го кодот
– Комајлирањето е автоматски, нема потреба вие
тоа да го правите
– Стартувајте го проектот (Run->Run…)
– Најдете ги грешките (Run->Debug…)
10
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
12
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Се е објект
• Во Java, се е објект, па дури и програмите
• C++ е хибриден јазик
– Компатибилен со C
• Во Java, единствен начин на програмирање
е објектно – ориентираното програмирање
• Објект се креира со помош на клучниот
збор “new”
String s = new String(“Hello!”);
13
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Податочни типови
• Основни (примитивни) vs. Референцирачки
податочни типови
• Основни, примитивни типови
– boolean, byte, char, short, int, long, float, double
– сите тие имаат подразбирливи вредности
• Непримитивните податочни типови во Јава се
објектите и низите (array).
– Тие често се нарекуваат “референцни типови”
бидејќи до нив се достапува преку референца (by
reference)
– Подразбирлива вредност на секоја референцна
променлива е null
14
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Уништување на објекти
• Нема потреба од уништување на објектите !!!!
• Garbage Collection се грижи за тоа
– ЈВМ означува даден објект како „ѓубре кое треба да се
собере“ во моментот кога кон тој објект нема повеќе
референци
• Jaва програмерот е ослободен од должноста да ја
управува меморијата
15
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Правила
• Сите правила што важат за објектно-
ориентираната парадигма, важат и во Java
• Потсетете се што сте учеле во курсот ООП!!!
• Правилата се исти, само синтаксата на
јазикот е различна.
16
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
If-else структура
Пример 1: Програма која ги пресметува плоштината и периметарот
на круг или квадрат (во зависност од изборот). Страната на квадратот и
радиусот на кругот се читаат од тастатура.
import java.util.Scanner;
public class Zadaca {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Izbor: 1-Krug 2-Kvadrat \n");
short choice = input.nextShort();
if(choice == 1)
{
System.out.print("Vnesete radius na krug: \nR = ");
double r = input.nextDouble();
double plostinaKrug = r*r*Math.PI;
double perimetarKrug = 2*r*Math.PI;
System.out.println("Perimetarot na krug so radius" + r +
" e: " + perimetarKrug);
System.out.println("Plostinata na krug so radius " + r +
" e: " + plostinaKrug);
}
17
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
If-else структура
Пример 1: Продолжение ...
else if(choice == 2)
{
System.out.prinln("Vnesete strana na kvadrat: a = ");
int a = input.nextInt();
int plostinaKvadrat = a*a;
int perimetarKvadrat = 4*a;
System.out.println("Perimetarot na kvadrat so " + a +
" e: " + perimetarKvadrat);
System.out.println("Plostinata na kvadrat so " + a +
" e: " + plostinaKvadrat);
}
else
{
System.out.println("Nevaliden izbor !");
}
}
}
18
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Структури за повторување
Структура на for циклус:
<Block of statements>;
} }while(<boolean condition>);
19
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Структури за повторување
Пример 2: Програма која ги печати сите парни и непарни броеви во
даден опсег од броеви
import java.util.Scanner;
public class Zadaca {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Vnesi opseg na broevi: \n");
System.out.print("Start = ");
int start = input.nextInt();
System.out.println("End = ");
int end = input.nextInt();
System.out.print("Izbor: 1-Parni 2-Neparni \n");
short choice = input.nextShort();
if(choice == 1)
{
for(int i=start; i <= end; i++)
{
if( i % 2 == 0)
{
System.out.print(i + " ");
} 20
}}
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Структури за повторување
Пример 2: Продолжение ...
else if(choice == 2)
{
for(int i=start; i <= end; i++)
{
if( i % 2 != 0)
{
System.out.print(i + " ");
}
}
}
else
{
System.out.println("Nevaliden izbor !");
}
}
}
21
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Структури за повторување
Пример 2: Решена со while …
import java.util.Scanner;
public class Zadaca {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Vnesi opseg na broevi: \n");
System.out.print("Start = ");
int start = input.nextInt();
System.out.println("End = ");
int end = input.nextInt();
System.out.print("Izbor: 1-Parni 2-Neparni \n");
short choice = input.nextShort();
if(choice == 1){
int i = start;
while(i <= end)
{
if( i % 2 == 0)
{
System.out.print(i + " ");
}
i++; 22
}}
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Структури за повторување
Пример 2: Продолжение со while ...
else if(choice == 2)
{
int i = start;
while(i <= end)
{
if( i % 2 != 0)
{
System.out.print(i + " ");
}
i++;
}
}
else
{
System.out.print("Nevaliden izbor !");
}
}
}
23
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Структури за повторување
Пример 2: Решена со do-while …
import java.util.Scanner;
public class Zadaca {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Vnesi opseg na broevi: \n");
System.out.print("Start = ");
int start = input.nextInt();
System.out.println("End = ");
int end = input.nextInt();
System.out.print("Izbor: 1-Parni 2-Neparni \n");
short choice = input.nextShort();
if(choice == 1){
int i = start;
do
{
if( i % 2 == 0)
{
System.out.print(i + " ");
}
i++; 24
} while(i <= end); }
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Структури за повторување
Пример 2: Продолжение со do-while ...
else if(choice == 2)
{
int i = start;
do
{
if( i % 2 != 0)
{
System.out.print(i + " ");
}
i++;
}while(i<=end);
}
else
{
System.out.print("Nevaliden izbor !");
}
}
}
25
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Задача 1
Да се напише програма која ќе го испечати збирот на првите
100 прости броеви.
public class Zadaca {
public static void main(String[] args) {
int limit = 100;
int sum = 0;
for(int i=1; i < 100; i++){
boolean isPrime = true;
for(int j=2; j < i ; j++){
if(i % j == 0){
isPrime = false;
break;
}
}
if(isPrime)
sum += i;
}
System.out.println("Zbirot na prvite 100 broja e " + sum);
}
}
26
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Пакети во Java
• Java Application Programming Interface (API)
– Исто така познато и како Јава Библиотека со Класи (анг.
Java Class Library)
– Содржи предефинирани методи и класи
• Сродните класи се организирани во пакети (анг. packages)
• Вклучува методи за математички пресметки, манипулација со
знаци/стрингови, влез/излез, бази на податоци, мрежно
работење, процесирање на датотеки, проверка за грешки, итн.
• Колекција од класи и методи кои што ви ги нуди
Јава API (http://docs.oracle.com/javase/7/docs/api/)
27
1 // MaximumFinder.java
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
2 // Кориснички деклариран метод maximum. Користење на пакет java.util
3 import java.util.Scanner;
4
5 public class MaximumFinder
6 {
7 // внесување на три floating-point вредности и определување на максимумот
8 public void determineMaximum()
9 {
10 // креирај Scanner за внесување од команден прозорец
11 Scanner input = new Scanner( System.in );
12
13 // читање на корисничкиот внес
14 System.out.print(
15 "Vnesete tri realni broja razdeleni so po edno prazno mesto: " );
16 double number1 = input.nextDouble(); // прочитај го првиот double број
17 double number2 = input.nextDouble(); // прочитај го вториот double број
18 double number3 = input.nextDouble(); // прочитај го третиот double број
19
20 // определи ја максималната вредност
21 double result = maximum( number1, number2, number3 );
22
23 // прикажи ја максималната вредност
24 System.out.println( "Maksimumot e: " + result );
25 } // крај на методот determineMaximum
26
28
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
29
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Наследување - потсетување
• Класата Б ја наследува класата А ако
објектите на класата Б ги имаат сите
карактеритики на класата А, дополнети со
сопствени карактеристики
• Во Јава се вели дека поткласата ја
проширува суперкласата.
• Наследност: “e”-релација
30
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Наследност Композиција
31
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Разлики во Java
• Терминологија
– Суперкласа, - A (основна, родителска класа)
– Поткласа – Б (изведена класа)
• Во Јава
– Единечна наследност – дрво на хиерархија
– НЕМА повеќекратно наследување
• Кога класа наследува од повеќе различни класи
• Се решава со Interface
32
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Класна хиерархија
• Поткласата наследува од суперкласата, но
додава и свои особености
– Додава свои променливи
– Додава свои методи
• Директна суперкласа
– Поткласите се веднаш под суперкласата
• Индиректна суперкласа
– Е секоја суперкласа која не е директно
поврзана со поткласата во класна хиерархија
33
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
34
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Задача 2
Да се развие класа Zadaca за која се чуваат следниве информации:
- опис (string)
- број на часови (int)
- статус (boolean)
За оваа класа да се имплементираат сите конструктори, get и set методи и да
се преоптовари toString() методот.
Потоа да се развие класа Vraboten во која се чуваат следниве променливи:
- Име (string)
- Презиме (string)
- Вредноста на еден бод (static double)
- Плата (double)
- Стаж (int)
- Број на бодови (int)
- Листа на задачи за една недела (zadaci[10])
- Број на задачи (int)
35
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Задача 2
Да се имплементира default конструктор и конструктор кој на влез ги прима
името, презимето, стажот и бројот на бодови, get и set методи и да се
преоптовари toString() методот.
Да се напише метод кој ќе овозможи додавање на нова задачи.
Дополнително да се креира метод којго враќа вкупниот број на часови потребни
за да се извршат задачите и метод кој го враќа процентот на завршени задачи.
Да се развие класа Kompanija која ќе содржи листа од вработени. Да се
имплементираат следниве методи:
- najangaziran() – го враќа вработениот со најголем вкупен број на часови
- pecatiPoUspesnost() – ги сортира вработените според успешноста и го печати нивното име,
презиме и успешноста
- pecati() – метод кој ги печати информациите за вработените
36
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Решение (1)
class Zadaca {
private String opis;
private int casovi;
private boolean status;
public Zadaca(){
}
37
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Решение (2)
public int getCasovi() {
return casovi;
}
public void setCasovi(int casovi) {
this.casovi = casovi;
}
public boolean getStatus() {
return status;
}
@Override
public String toString() {
return "Opis: " + opis + "\ncasovi: " + casovi + "\nstatus: " +
(status ? "aktivna" : "zavrsena");
}
}
38
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Решение (3)
class Vraboten {
public Vraboten(){
zadaci = new Zadaca[10];
brZadaci=0;
}
39
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Решение (4)
public Vraboten(String ime, String prezime, int staz, int brBod) {
this();
this.ime = ime;
this.prezime = prezime;
this.staz = staz;
this.brBod = brBod;
plata = brBod * BOD;
}
40
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Решение (5)
public void setPrezime(String prezime) {
this.prezime = prezime;
}
41
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Решение (6)
public int getBrBod() {
return brBod;
}
public void setBrBod(int brBod) {
this.brBod = brBod;
}
public void dodadiZadaca(Zadaca z){
if(brZadaci == 10)
System.out.println("Ne moze da se dodade zadaca");
else{
zadaci[brZadaci++] = z;
}
}
public double procentZavrseni(){
int br = 0;
for(int i = 0;i<brZadaci;i++){
if(zadaci[i].getStatus())
br++;
}
return (float)br/brZadaci; }
42
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Решение (7)
public int vkupnoCasovi(){
int suma = 0;
for(int i = 0;i<brZadaci;i++)
suma += zadaci[i].getCasovi();
return suma;
}
@Override
public String toString() {
return ime + " " + prezime;
}
43
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Решение (8)
import java.util.Scanner;
public class Kompanija {
44
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Решение (9)
public void pecatiPoUspesnost(){
45
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Решение (10)
public void pecati(){
for(Vraboten v : vraboteni){
v.toString();
}
}
46
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Решение (11)
int p = input.nextInt();
for(int j = 0;j<p;j++){
Zadaca z = new Zadaca();
z.setCasovi(input.nextInt());
z.setOpis(input.next());
z.setStatus(input.nextBoolean());
v.dodadiZadaca(z);
}
}
Kompanija k = new Kompanija(pom);
k.pecati();
k.pecatiPoUspesnost();
System.out.println("Najangaziran vraboten e: " +
k.najangaziran());
}
}
47