Java-OOP-Pitanje pocetnika.

goranmirjana

Početnik
Poruka
3
Cao,
Prvi put se susrecem za Javom i za OOP.Čitam redom (uzeo sam neku knjigu) i + sa neta uzimam neke info.Imam jedan program koji je uradjen sa klasama i objektima koji ću da napisem u daljem textu.Volio bih da neko prođe kroz nejga i da mi čisto kaže da li sam ja to dobro skontao.Poslije programa ću da napisem komentar mog 'kontanja' klasa i objekata pa ako nisam u pravu da me upozorite.Jer ako ga sad skontam pogresno osta stalno tako.
Unapred hvala.

*******************************************************************
public class TestSimpleCircle {
/** Main method */
public static void main(String[] args) {
// Create a circle with radius 4.0
SimpleCircle myCircle = new SimpleCircle(4.0);
System.out.println(„The area of the circle of radius ”
+ myCircle.radiuss + „ is ” + myCircle.findArea());

//Create a circle with radius 1
SimpleCircle yourCircle = new SimpleCircle();
System.out.println(„The area of the circle of radius ”
+ yourCircle.radius + „ is ” + yourCircle.findArea());

// Modify circle radius
yourCircle.radius = 100;
System.out.println(„The area of the circle of radius ”
+ yourCircle.radius + „ is ” + yourCircle.findArea());

// Modify circle radius
yourCircle.radius = 200;
System.out.println(„The area of the circle of radius ”
+ yourCircle.radius + „ is ” + yourCircle.findArea());

}
}

// Define the circle class with two constructors
class SimpleCircle {
double radius;

/** Construct a circle with radius 1 */
SimpleCircle() {
radius = 1.0;
}

/** Construct a circle with a specified radius */
SimpleCircle(double newRadius) {
radius = newRadius;

}

/** Return the area of this circle */
double findArea() {
return radius * radius * 3.14159;
}
}

********************************************************************
//čitav fazon je da je SimpleCirlce class napravila variables, methods and constructs koji je kasnije koristen (construct) da napravi objekte (myCircle-yourCircle) koji su poprimili properties i methods od iste classe...Npr: myCircle.radius (iz prvog djela programa-gdje se printa) ima vrijednost 4.0 zato što je to objekat koji je napravljen od 'constructora' i samim ti dobio properties .radious i onda vrijednost od 4.0.Kako to da samo myCircle nema vrijednost 4.0???Kako to da je myCircle.radious = 4.0-da li sam ispravno odovorio na ovo sa svojim komentarom gore????
Još jednom HVALA.
 
U javi imas jednostruko nasledjivanje, t.j., jedna klasa moze da bude izvedena iz samo jedne klase.
Kad se kaze izvedena klasa, onda to pre svega znaci da ima:
public class Auto{.....}
public class PlaviAuto extends Auto{.....}
virtualne funkcije osnovne klase se automatski prepisuju u izvedenoj, pravljenjem metode sa istim imenom:

npr:
u Auto
public virtual int Boja(){return 0;}
a u plavi auto:
public virtual int Boja(){return 2;}

ako napravis objekat tipa Auto i pozoves metodu Boja za njega, vratice ti 0,a ako napravis PlaviAuto , ista metoda ce ti vratiti 2....................

itd,itd,itd.........

ipak ti je najbolje da nadjes dobru knjigu,.
Pozdrav i srecno sa ucenjem.
 
E ovako, ja sam C++ programer, pa cu ti iz te perspektive objasniti klase, to ti je isto (nadam se, jer neznam Javu).
E ovako klasu kreiras kada zelis da pravis vise elemenata, koji ce imati iste atribute, razlicitih vrijednosti.
Recimo zelis da pravis vise auta, gdje svaki ima duzinu, sirinu, visinu, e kada kreiras klasu auto, postavljas i te objekte.
Poslije iz te klase kreiras neko auto, recimo auto Golf, i sada ides principom (u C++) Golf.visina = 6; i tako dalje i ti iz te klase auto mozes izvesti koliko hoces elemenata, kao sto je Golf, recimo Mercedes, pa ide Mercedes.duzine = xxx itd. Nadam se da si razumio.
A konstruktor ti odmah definise vrijednost objekta, recimo visine na 10;
Pozdrav ! Zao mi je sto neznam Javu, pa da ti dajem primjere u njoj, ali nije to daleko od C++.
 
Sobzirom da tek pocinjes sa OOP - njem mozda je najlaksi nacin da skapiras klase taj da ih posmatras kao (citaj: za pocetak) tip podatka kao sto su int, long, float, double, boolean,...itd. sa jednom razlikom sto ih ti pravis po svojim potrebama.

Po mom misljenju probaj da napravis recimo...klasu MyDouble koju ces da opremis svim metodama koje ima i sam double.

PRIMER:

public class MyDouble {

private double broj;

public MyDouble () { broj = 0; } // Podrazumevani konstruktor(default konstruktor).
public MyDouble (double broj) { this.broj = broj; } // Konstruktor konverzije.
public MyDouble(final MyDouble d) { this.broj = d.broj; } // Konstruktor kopije.

public double dohvati () { return broj; }
public MyDouble postavi (double broj) { this.broj = broj; return this; }

public static MyDouble saberi (final MyDouble b) { // Ovo bi bio operator +
return new MyDouble (this.broj + b.broj)
}

public MyDouble dodaj (final MyDouble b) { // Ovo bi bio operator +=
this.broj += b.broj; return this;
}

public String toString () { // Sastavljanje tekstualnog prikaza.
return Double.toString(broj);
}
} // class MyDouble

OBJASNJENJE:

Naime, u klasi MyDouble imas tri konstruktora. Sta oni rade ??? Svaki od ta tri konstruktora omogucavaju da prilikom pravljenja objekta klase postave pocetne vrednosti tvog broja.

PR 1: MyDouble b1 = new MyDouble();
Ovim bi postavio pocetnu vrednost broja b1 na NULU jer si pozvao podrazumevani (default) konstruktor

PR 2: int x = 3; MyDouble b2 = new MyDouble(x);
Ovde bi se pozvao konstruktor konverzije i incijalizovao bi broj na 3 tj. vrednost prom. x i konvertovao bi broj u tip double;

PR 3: MyDouble b3 = new MyDouble (b2);
Ovde se poziva konstruktor kopije pa b3 ima istu vrednost kao i b2;

Znaci konstruktori se koriste kako bi se inicijalizovali (citaj: neki) atributi te klase, takodje moze da se spreci i losa inicijalizacija.

NPR:

public class Trougao {

// Duzine stranica trougla
private double a;
private double b;
private double c;

// Provera da li trougao postoji
private boolean moze (double a, double b, double c) {
return a > 0 && b > 0 && c > 0 && a+b > c && b+c > a && a+c > b;
}
public Trougao () { a = b = c = 1; }
public Trougao (double aa, double bb, double cc) {
if( ! moze(aa, bb, cc))throw new GRESKA();
a = aa; b = bb; c = cc;
}
} // class Trougao


Znaci ako stranice nisu pozitivne i ako ne formiranju trougao prijavljuje se greska...itd.
Sto se metoda tice one omogucavaju da se sa Trouglom nesto radi. Recimo izracunati Obim, Povrsina,...,itd. Nadam se da sam ti bar malo pomogao da skapiras OOP (za pocetak naravno).

Pozdrav i samo giljaj jer to je jedini nacin.
 
evo linka ka source fajlovima iz zbirke Laslo Kraus Programiranje u jeziku Java.
Mislim da ako proanaliziras deo koda iz ocve knjige, mozes mnogo da naucis.
Pozdrav

http://galeb.etf.bg.ac.yu/~kraus/knjige/rzj.html

imas isto tako i izvorne kodove programa u c++, a mnogi zadaci se ponavljaju (paralelno su napisani u c++ i javi), pa moze biti zanimlojivo ako hoces da ubijes dve muve jednim udarcem.

http://galeb.etf.bg.ac.yu/~kraus/knjige/rzcp.html

inace , kratak pregled razlika java vs c++:
java:
1)
sve metode su virtuelne ( ne pise se virtual, podrazumeva se, zbog jednostrukog nasledjivanja nema mogucosti zabune)
p.s. u pomenutom java kodu potrazi koriscenje sluzbene reci super koje nema u c++ , zato sto u c++ mozes da izvedes klasu iz vise klasa

2) interface je potpuno apstraktna klasa ( u c++ to nije interface, vec klasa cije su sve metode apstraktne)

3) u javi nemas pokazivace, ni destruktore ( kompajler sam alocira memoriju, a brise objekte takodje sam, ako se sa njega skinu sve reference(t.j. ako kompajler vidi da vise nicemu ne sluzi))

4) u javi kucas public ili protected ili private ispred svakog atributa ili metode, dok su u c++ oni u blokovima ( koji slede jedan pozsle drugog)

java:

public int a;
private float b;
private abstract double mojMetod();

c++:
private:
float b;
double virtual mojMetod() =0;
//ovako se pise apstraktna metoda u c++
public:
int a;

apstraktna klasa je svaka koja sadrzi bar 1 apstraktnu metodu ( u javi to mora eksplicitno da se kaze)
abstract class ....
dok u c++ ne.
Objekti tipa apstraktne klase ne mogu da postoje, vec samo tipa neke klase izvedene iz nje, gde umesto svih apstraktnih metoda postoje konkretne metode, kojima su redefinisane.

u c++ postoji visestruko nasledjivanje, pa ne postoji sluzbena rec super:

npr:

class Bicikl : public Tocak,Prevozno_sredstvo
{
...........


ukratko, to je to, skini one source kodove, citaj, menjaj, isprobavaj, to je valjda najbolji nacin da se uci programiranje.

Pozdrav i srecno
 
Zaboravih(naravno ne moze se sve reci u par recenica, pa cu ja ovako, kad se setim neceg vaznog ili zanimljivog, da dodam).

private clanove vide samo primerci iste klase.

protected clanove vide samo clanovi iste i izvedenih klasa

public clanovi su svuda dostupni


Pozdrav
 
Cao svima.
Zanima me, posto i sam zelim da naucim Javu, koja kniga je najbolja za totalne pocetnike? Vec imam dve knjige: Java 1.2 naucite za 21 dan, Laura Lemay i Java 2 od pocetka, Ivor Horton. Prva mi se ucinila da je bas za pocetnike, a inace sam je poceo citati, dok sam ovu drugu igrom slucaja nesto veoma jeftino nabavio.
Dakle, vasa misljenja u vezi kljiga o javi (za pocetnike)???
 
Evo kako bi ti ja preporucio da ucis programiranje, bar sam ja tako radio i nisam se pokajao, naucis neke osnove programskog jezika koji zelis da znas, e onda pocnes sa nekim projektom, e tokom rada na tom projektu susrest ces se sa mnogo problema koje do tada nisi rjesavao, e onda trk na net trazi kako da to rjesis, mozda je potrebna neka funkcija ili slicno, i naravno to kad pronadjes odradis ga i samim tim to ces zapamtiti i tako prosirujes svoje znanje veoma efikasno, jer recimo ucenje nekih funkcija API-ja recimo ono bez rada i primjera, je gubljenje vremena.
 
Ako si apsolutni pocetnik u programiranju (pa i da nisi), a hoces da ucis da programiras korz JAVU Ivor Horton - ova knjiga je pravi izbor jer ide bas od samog pocetka pa do dosta slozenih stvari kao sto su thread - ovi rad sa GUI - jem itd. Mada bih ti preporucio ( i svakom ko hoce da se bavi programiranjem) da pocnes sa ucenjem klasicnog C - a, pa kada to savladas da predjes na C++ pa tek onda na JAVU. To je po mom misljenju neki logicki redosled.

pozdrav
 

Back
Top