Professional Documents
Culture Documents
2 - Apstrakcija, Klase, Enkapsulacija
2 - Apstrakcija, Klase, Enkapsulacija
2 - Apstrakcija, Klase, Enkapsulacija
Enkapsulacija
U slučaju daljnjeg korištenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete ovog djela.
Najbolji način da to učinite je linkom na ovu internetsku stranicu.
Od svakog od gornjih uvjeta moguće je odstupiti, ako dobijete dopuštenje nositelja autorskog prava.
Ništa u ovoj licenci ne narušava ili ograničava autorova moralna prava.
• Kategorizacija
• čovjeku prirodna stvar
• od nje se kreće prilikom razmišljanja o programu u čiju se izradu kreće
• Program koji razvijamo odnosi se na tzv. domenu
• Svaka poslovna domena ima svoje objekte koje stavljamo u kategorije (klase)
• fakultet: studenti, nastavnici, ispiti itd.
• ministarstvo: pismena, predmeti, zapisnici itd.
• U kategorijama identificiramo postupke koji su vezani uz pojedinu kategoriju
• npr. prijava ispita, upis predmeta, izračune ocjene na ispitu…
• Opis jednog poslovnog pravila na fakultetu
• “Student mora sakupiti 50% bodova da bi prošao ispit”
• bit će ugrađeno u postupke
Procedural vs. OO-Programming
• Apstraktno:
• “Class” refers to a blueprint. It defines the variables
and methods the objects support
• Konkretno:
• “Object” is an instance of a class. Each object has a
class which defines its data and behavior
Klasa
Klase i objekti VelikiStan
Objekt klase
Objekt klase VelikiStan
MaliStan
Objekt klase
VelikiStan
Klasa
Objekt klase
MaliStan MaliStan
Apstrakcija u proceduralnoj paradigmi
(bez OOP-a)
• Razmišljamo o cjelinama kôda (više naredbi), a ne
pojedinačnim naredbama
• Uvođenjem jasnih i dobro imenovanih apstrakcija kôd
postaje samodokumentirajući
double sum = 0.0;
double power = 1.0;
double factorial = 1.0;
sum += 1.0; sum = ePowerX( x );
for(int i = 1; i < 10; i++) {
power = power * x;
factorial = factorial * i;
sum += power/factorial;
}
Apstrakcija u OOP-u
typedef struct {
int code;
char title [100]; class CourseGrade {
int grade;
int code;
} course_grade;
String title;
int grade;
}
...\src\hr\fer\oop\classes\example1\CourseGrade.java
Pr 1. Apstrakcija studenta (1)
• Klasa sadrži članske varijable (atributi) i metode (ponašanje)
typedef struct {
char id[11];
char *name;
char *surname;
class Student { int no_of_grades;
String id; course_grade grades[60];
String name; } student;
String surname;
int noOfGrades;
CourseGrade[] grades;
void addGrade(int code, String title, int grade){
...
}
void init() {
...
}
} ...\src\hr\fer\oop\classes\example1\Student.java
Pr 1. Izvršna metoda (1)
...\src\hr\fer\oop\classes\example1\Main.java
class Main {
public static void main(String[] args) {
Student s = new Student();
s.init(); Stvaramo
s.name = "Ivo"; novi objekt
s.surname = "Ivić"; tipa Student
s.id = "1234567890";
s.addGrade(105, "OOP", 5); Metode
s.addGrade(20, "ASP", 3); pozivamo na
s.addGrade(77, "PiPI", 2); konkretnom
System.out.println(s.averageGrade()); objektu
}
}
Pr 1. Izvršna metoda (2)
• Primjerak klase (objekt ili instanca) nastaje korištenjem
operatora new
• Varijabla s je referenca na objekt (slično pokazivaču u C-u)
...\src\hr\fer\oop\classes\example1\Student.java
Enkapsulacija (učahurivanje)
skrivanje atributa i metoda od ostalih klasa
Učahurivanje i skrivanje informacija
• učahurivanje (enkapsulacija)
• kako radi Hi-Fi audio sustav? Tako dugo dok uređaj radi, nas to zapravo ni ne zanima!
• učahurivanjem se postiže slaba povezanost objekata (engl. loose coupling)
• slabom povezanošću objekti postaju neovisniji i interne promjene jednog objekta ne
utječu na rad drugog
• audio sustav, iako djeluje kao cjelina, sastavljen je od međusobno neovisnih
i odvojivih komponenti. Ako se jedna komponenta pokvari, ostale i dalje nastavljaju s
radom
• u našem primjeru sa studentom, nebitno je kako je
realizirana pohrana ocjena
• potrebno je zaštititi implementacijske detalje od javnog
pristupa kako bi se izbjegle slučajne ili namjerne pogreške
i smanjila povezanost objekata
Modifikatori vidljivosti (1)
...\src\hr\fer\oop\classes\example2\Main.java