[ miljannet @ 15.03.2014. 17:22 ] @
Dosao sam do dela gde ucim klase i objekte.

U knjizi ima objasnjenje sta je klasa, i sta je objekat. Ali mi nije jasno, procitao sam nekoliko puta i jos tacno nisam shvatio sta je klasa a sta je objekat, da li bi neko od vas mogao da mi to kaze svojim recima ? Mnogo bi vam bio zahvalan. :)
[ Burgos @ 15.03.2014. 17:57 ] @
Vrlo uprošćeno, objekat je "stvar" u memoriji koja ima stanje i ponašanje. Npr. objekat sijalica ima svojstvo "Sija/Ne sija" i metode "uključi/isključi" kojima možeš da upravljaš svojstvom svetla. Klasa je opis objekta - dakle, ovo što sam ti ja napisao u prethodnoj rečenici. Pomoću jedne klase je (uglavnom, nije moguće god npr. Singleton klasa, proguglaj) moguće napraviti jedan ili više objekata.

Dakle:


Code:
class Sijalica
{
    private boolean svetli;
    public void ukljuci(){ svetli = true; }
    public void iskljuci(){svetli = false; }
};


je klasa. Nad njom ne možeš vršiti operacije, već nad objektima koji su opisani istom:


Code:
Sijalica a = new Sijalica();
Sijalica b = new Sijalica();

a.ukljuci();
b.ukljuci();


Ovde su a i b reference na objekte koji su opisane klasom Sijalica.

Nadam se da je jasnije.

[Ovu poruku je menjao Burgos dana 15.03.2014. u 19:30 GMT+1]
[ X Files @ 15.03.2014. 20:11 ] @
Klasa je nacrt/šablon/opis/dogovor kako treba da izgledaju budući objekti napravljeni prema tom nacrtu.

Klasa pod jednim imenom (na primer: BICIKL), grupiše podatke (na primer: TRENUTNA BRZINA, SMER KRETANJA...) i funkcije (na primer: POSTAVI NA BRZINU, VOZI, KOČI, SKREĆI...) od značaja, koje neki budući objekat treba da ima da bi bio od koristi.

Ti zapravo upravljaš objektima (menjaš ih, pozivaš njihove funkcije) za vreme izvršavanja programa (RUN-TIME). O klasi si kreativno razmišljao pre nego što si pokrenuo program (DESIGN-TIME). Mislim da te to buni.


... I taman kad pomisliš da si dobro osmislio naziv klase, njene osobine i funkcije - shvatiš da TRENUTNA BRZINA, SMER KRETANJA, POSTAVI NA BRZINU, VOZI, KOČI, SKREĆI ne opisuju samo BICIKL, već neko imaginarno kretanje, pristutno kod bicikla, auta, aviona, i sl.

To znači da je bolje da daš neko drugo ime klasi (sa onim podacima i funkcijama), na primer MATERIJALNA TAČKA, a da posebno napravis klasu BICIKL, koja će "dobiti" sve što može materijalna tačka, plus ono što stvarno ima SAMO bicikl. To "dobiti" se može ostvariti NASLEĐIVANJEM ili SASTAVLJANJEM, ali to je druga priča.



[Ovu poruku je menjao X Files dana 15.03.2014. u 21:34 GMT+1]
[ Nymeria @ 15.03.2014. 20:43 ] @
Ovo su klase:






A ovo je objekat:

[ Rapaic Rajko @ 16.03.2014. 08:13 ] @
Pa nije tesko shvatiti korelaciju klase i objekta ;) .

Svi znamo sta je homo sapiens, zar ne? Humanoidna vrsta, sa svim svojim (evolucionim) manama i vrlinama. Tacno se zna koje osobine sapiens ima, a koje nema. Sta mozemo uciniti sa vrstom/klasom HS? Pa, recimo mozemo je (u dalekoj buducnosti) modifikovati, genetski izmeniti, ili (ne daj boze) unistiti (bukvalno, kao da unistavamo nacrt/prototip); a moze i izumreti. To bi u nasoj prici bila KLASA.

A objekti, sta su oni? To su instance/primerci neke klase. U slucaju klase/vrste homo sapiens, objekti smo ti, ja, komsija (tvoj/moj), citaoci foruma itd, itd.

Da li je nesto jasnije sad?

Pozz
[ casperns2 @ 16.03.2014. 09:01 ] @
Moze li proci ovaj primer... Klasa ti dodje BRAK, ti i tvoja zena ste objekti tog braka. A sve sto radite u braku su metode tog braka (klase).

I onda posle par godina funkcionisanja programa, uradis update i pozoves metodu Brak.newWife()
:)

[Ovu poruku je menjao casperns2 dana 16.03.2014. u 10:29 GMT+1]
[ X Files @ 16.03.2014. 09:04 ] @
^
Samo ako si u Turskoj.

Kod nas mora prvo:
Wife.Kill(silent)

Šala
[ casperns2 @ 16.03.2014. 09:20 ] @
Mada se kod tog metoda najcesce javlja greska IllegalStateException (nije dopusteno pozivanje tog metoda), tako da se mora veoma oprezno raditi sa metodama u Braku ...
:)
[ miljannet @ 16.03.2014. 11:22 ] @
Koliko sam ja do sada skontao, klasa to je kao neki skup pravila i u njoj se kao sto je rekao X Files grupisu podaci, brzina kretanje, ubrzanje i tako to. Onda se napravi objekat. I onda pomocu te klase sto sam ja napisao te podatke, tj neka pravila ja vrsim operacije nad objektom, jel tako ? Hvala svima na odgovorimo, najbolji ste !
[ ventura @ 16.03.2014. 11:39 ] @
Najlakše da razumeš je ako zamisliš da je klasa isto što i folder, a objekat su fajlovi u tom folderu. Fajlovi mogu biti npr. tekstualni (varijable) ili programi (funkcije).

[ Odin D. @ 16.03.2014. 12:27 ] @
Mislim da je najopstije poredjenje klase i objekta nesto kao poredjenje ugradjenog tipa i varijable.

Recimo, ugradjeni tipovi su int, char, float,.... a varijable su a, b, c... (ako si ih prethodno kreirao sa
Code:
...
int a;
char b;
float c;
...


Otprilike bi mogao da kazes npr. da je int klasa, a varijabla a objekat klase int.

Ugradjeni tipovi imaju varijable odredjene strukture (8-bitni, 16-bitni, ... komad memorije ciji sadrzaj u bitovima se tumaci na neki nacin) i operacije koje nad njima mozes vrsiti (+, -, *, /, ... itd. zavisi od tipa).

Klase mozes posmatrati kao korisnicke tipove koje sam korisnik definise po svojoj potrebi.
Recimo, ne postoji ugradjen (gotovi) tip imaginarnih brojeva, ali ti mozes napraviti klasu (tj. sam definisati novi tip) koja predstavlja imaginarne brojeve i sam definisati odredjene operacije sa binarnim brojevima.
Znaci, napravio si kao neki novi tip:

Code:
class ImaginarniBroj {
....
}


Dalje, onog momenta kada definises neke konkretne imaginarne brojeve pomocu te svoje klase (tipa):

Code:
ImaginarniBroj a;
ImaginarniBroj b;


ti si ustvari dobio objekte a i b klase ImaginarniBroj.

Znaci, klasa je opis tipa: od cega se varijable tog tipa sastoje i koje se operacije nad njima mogu izvrsavati.
Objekat je konkretna implementacija tog tipa koja postoji u memoriji u toku izvrsavanja programa.

Odnos klase i objekta isto je sto i odnos ugradjenog tipa i varijable, razlika je samo u tome kako ih nazivas:

tip i varijabla za ugradjene tipove:
Code:
int a;


klasa i objekat za korisnicke tipove.
Code:
ImaginarniBroj a;



[ Burgos @ 16.03.2014. 12:34 ] @
Obratite pažnju da u svim primerima korisničkih tipova stvarate samo referencu odgovarajućeg tipa, ali ne i objekat na koji ukazuje (TM Laslo Kraus).
[ Odin D. @ 16.03.2014. 12:54 ] @
To valjda zavisi od konstruktora.
[ Burgos @ 16.03.2014. 13:45 ] @
Ne - u Javi (za razliku od C++-a), kreiranje objekata korisničke klase je moguće samo sa operatorom new (ako izuzmemo refleksiju, serijalizaciju, itd.).
[ Odin D. @ 16.03.2014. 13:59 ] @
Nisam obratio paznju da se radi o Javi (a u cije detalje se i ne kontam narocito :)
U svakom slucaju - napomena (zamerka) na mjestu. Fala na pojasnjenju.
[ jablan @ 16.03.2014. 17:16 ] @
Jbg, dobio si baš dosta odgovora, od kojih su neki baš loši... Ja bih preporučio Odinov i Rajkov odgovor kao ispravne i ne previše zbunjujuće.

Dodao bih samo (opet i opet) da se Java opet pokazuje lošim izborom za učenje OOP, jer bi sasvim logično bilo da je int klasa, a npr. broj 42 instanca te klase (kao što je u nekim drugim OO jezicima), ali u Javi nažalost to nije tako (ali postoji klasa Integer i onda dolazi cela peripetija sa boxovanjem i unboxovanjem od koje se početniku diže kosa na glavi).

Najbolje je da ipak konsultuješ neki udžbenik, koji nije striktno vezan ni za jedan jezik. Ja mogu da preporučim jedan, pomalo zaboravljen, i to na srpskom jeziku: "Saga o OOP" autora Dragana Mašulovića. Možeš ga preuzeti ovde:

http://www.elitesecurity.org/t19637-0
[ negyxo @ 16.03.2014. 21:41 ] @
^Nisam neki poznavalac Jave, ali mi je boxing i unboxing poznat iz nekih drugih jezika, a koliko vidim u Javi ima istu ulogu. Sa aspetka Type Systema, ne znam kakve veze ima sta sve kompajler radi da bi imao privid OOP-a. Pretpostavljam da bi mogli reci da je problem to sto ne mozes da nasledis primitivne tipove, ali sa druge strane, postoje constrainti unutar jezika koji to omogucavaju i na ostalim klasama (final, seald...).

OK, sve ovo sam napisao samo radi ove opaske:
"Java opet pokazuje lošim izborom za učenje OOP" - posto ne znam bas mnogo jezika koji bi bili nesto pure OOP.
[ jablan @ 16.03.2014. 21:51 ] @
Pa prosto, int nije klasa (već postoji klasa Integer), a 42 nije objekat. Naravno da kompajler dosta toga radi implicitno, ali svejedno postoji taj opipljiv layer "magije" koji okružuje primitivne tipove koji nije baš intuitivan početniku.

Što se tiče pure OOP, već sam pričao o tome u drugoj temi i ne bih da offtopicujem i ovde. Ima pure OO jezika, čak i mainstream, a opet, ne vidim zašto bi bio problem da se OOP principi uče i na jezicima koji nisu mainstream, ako to omogućava da se materija brže i bolje savlada.
[ negyxo @ 16.03.2014. 22:03 ] @
Ipak u Javi izgleda postoji ta separacija izmedju int i Integer, i jos par primitivnih tipova. Ne znam koji je razlog odluke dizajnera Jave ali deluje mi totalno bespotrebno da se stvari handluju rucno kada moze i kompajler da se izbori sa tim. Svojevremeno kada sam ucio Javu (kada se pojavila) ostalo mi secanje jedne recenice iz knjige gde je u Javi sve objekat, ali izgleda da bas i nije ili meni lose pamcenje :)

Elem, slazem se da za pocetnike sto bolje da ne moraju da uce posebne slucajeve u pocetku, to ce svakako kasnije saznati zbog prirode posla :D
[ casperns2 @ 16.03.2014. 22:18 ] @
Kada smo kod klasa i objekata, nije mi najasni ovaj deo. Ako imamo klasu Osoba i konstruisemo objekat **public Osoba(String ime, String prezime ) ....

i u nastavku konstruisemo ** public Osoba(final Osoba o) .....

cemu sluzi i kada se upotrebljava definisanje objekta sa final kao u drugom primeru?
[ dusans @ 16.03.2014. 23:46 ] @
Code:

public Osoba(final Osoba o)


Ovde se ne radi o definiciji objekta, već o parametru o koji je final i to nema nikakve veze sa final klasama (to su one koje ne možeš dalje da nasleđuješ).
Kada je parametar final, to znači da je zabranjena bilo kakva dodela vrednosti za taj parametar:
Code:

o = new Osoba(); // Ovo nije dozvoljeno
o = nekaOsoba2; // Ovo nije dozvoljeno
o.ime = "Petar"; // Ovo jeste dozvoljeno


Parametar obavezno mora biti final ako ga koristiš u anonimnoj klasi koja je definisana unutar metode.

[ FooLControL @ 17.03.2014. 02:00 ] @
Klasa je apstraktni opis, dok je objekat specifikacija klase.
[ jablan @ 17.03.2014. 06:14 ] @
Citat:
Kada je parametar final, to znači da je zabranjena bilo kakva dodela vrednosti za taj parametar:

Osim prosleđivanjem kroz poziv metode. (Treba naglasiti da ne bude nedoumica. ) Takođe treba da naglasiš da kod koji si naveo stoji u telu metode (konstruktora).

Citat:
Klasa je apstraktni opis, dok je objekat specifikacija klase.

Ne. Molim da ne ostavljate ovakve odgovore jer čovek pokušava da nauči nešto.
[ casperns2 @ 17.03.2014. 08:01 ] @
Nisam dobro objasnio, nisam mislio na klasu da definisemo sa final vec taj prametar. Kada je parametar final razumem da ne mozeda se nasledi i menja ali drugo me nesto zanima.. .

1. definisemo klasu ... class Osoba{ ....

2. definisemo koje ce parametre imati objekat te klase public Osoba(String ime,String prezime){ .....

3. zasto sada pisemo ovaj deo
Code:
public Osoba(final Osoba o){
this(o.ime,o.prezime)
}


Kada u main metodu pravim novi objekat kotistim Osoba pilot1=new Osoba("Pera","Peric") , i za pravljenje novog objekta uglavnom mi je bitan 2. deo
u kojim situacijama upotrebljavam 3. deo koji sam napisao, kada je on koristan i da li je potrebno da se uvek definise ....
[ jablan @ 17.03.2014. 08:45 ] @
Kao prvo, 2. i 3. su KONSTRUKTORI klase Osoba.

3. je overloadovan konstruktor koji u pozadini koristi 2. Bez nekog uvida u tvoj kod, ne može se tačno reći čemu taj konstruktor zapravo služi - vidimo da on kreira novu Osobu na osnovu postojeće instance Osobe, uzimajući njeno ime i prezime.

Kao što je dusans rekao, final u parametrima konstruktora (ili bilo koje druge metode) znači da ti ne možeš u telu te metode da assignuješ nešto drugo toj lokalnoj promenljivoj (u tvom slučaju promenljivoj o).

U principu, može a ne mora da se piše taj final (osim u lambdama, tj. anonimnim klasama, koliko sam skapirao, tamo mora da bi se sačuvao kontekst lambde, ali to ne želiš da znaš još).
[ casperns2 @ 17.03.2014. 09:33 ] @
OK, Hvala, nije mi bilo jasno zasto je konkretno sluzio taj 3. konstruktor i zasto bez njega ne bi moglo sve da funkcionise, u principu nije mi ni sada jasno ali bar znam da nije previse bitan za sad, da se ne opterecujem sa njim. U principu, moze sve da se uradi i bez njega koliko sam razumeo ...

U svakom slucaju hvala na pojasnjenu...
[ dusans @ 17.03.2014. 09:35 ] @
@casper

Po pitanjima koja si postavljao na drugim temama kao i ovde, cenim da je knjiga iz koje učiš loš udžbenik.

Code:

public Osoba(final Osoba o){
this(o.ime,o.prezime)
}


U ovom konkretnom slučaju, to što je parametar final nije od nikakvog značaja i može samo da zbuni.
[ casperns2 @ 17.03.2014. 11:07 ] @
Nisam se skoncentrisao na jednu knjigu ili jedan sajt. Za bazu kojim redosledom da ucim uzeo sam ovu stranicu http://poincare.matf.bg.ac.rs/~marija/oop.html gde na dnu imaju podeljene oblasti na casove od 1 do 13. Kako ucim koju oblast tu imaju i neki i primeri i osnovna objasnjenja ali redovno istu tu oblast pogledam kako je objasnjena na http://www.tutorialspoint.com/java/ , uradim njihove primere a ako nesto nije jasno proguglam ostale forume a ako bas potrebno nesto da pitam postavljam pitanja samo na ovom forumu.

Sto se tice literature ne bih znao kakva je jer ucim i ne mogu jos da procenim sta je bitno kada ucim nove pojmove , neke stvari ne bih teoretski znao objasniti i mesam neke nazive ali gledam da znam da napisem sta je potrebno ili kada vidim kod da znam sta ce se desiti.

Na primer kod Kolekcija , ja ucim sve liste i sve sto nadjem a mozda nije potrebno, sad su tu Vektori, Stekovi, LinkedList, HashMap , hesiranje i sve to treba, ali u njima ima nekih masu konstruktora i funkcija i metoda, tema je jako obilna i verovatno cu uciti i ono sto mi nije bas potrebno ali sta da se radi.

Uglavnom zadovoljan sam koliko sam za dva ipo meseca razumeo i naucio(naucio da znam sta je i osnove a razumem da to treba da se jos dosta izvezda da bi se zacementiralo znanje) , mozda i prebrzo pa se dosta toga pomesalo, ali bitno je da imam zelju za daljim ucenjem pa ce sve doci na svoje,cim ne budem imao volje za ucenjem nece mi pomoci nikakva literatura tako da gledam da mi literatura na neki nacin bude i zanimljiva ...



[ casperns2 @ 17.03.2014. 12:57 ] @
I da, zaboravio sam da kazem, ko baci pogled na sajtove,bar povrsno po onome sto je dato da se uci, svacije misljenje kako god da je dobro je doslo, posebno onih koji su sve ovo prosli, saveti su uvek dobrodosli ....
[ miljannet @ 06.04.2014. 23:37 ] @
Evo ovako, posto sam dosao do ogovora koji je sjajan, i svakom potpunom pocetniku kao meni koji se prvi put susreo sa klasama i objektima.
Link koji detaljno govori sta je Objekat
Link koji detaljno govori sta je Klasa
I evo ga link koji objasnjava sta je klasa, klase. link

Nadam se da je pomoglo ))