[ Thugzsr @ 26.07.2014. 16:30 ] @
Pozdrav svima. Moze li mi neko reci kada i zasto se koriste interface? Sta se dobija njima?
[ plus_minus @ 26.07.2014. 16:58 ] @
Interfejs, recimo, ne mora ništa drugo da ima osim CONST.

Nadžidžaš u jednom interfejsu sve konstante koje će gotovo svaka naredna klasa uzimati..

I posle nakon extends thisAndThat dodaš i implements Constants.. ili samo implements.

Code (php):


interface ConstantsGlobal
{
     const SOME_SECONDS = 90;
     const OTHER_SECONDS = 180;
     const NO_LEFTOVERS = TRUE;
     const LEFTOVERS_COMMENT = FALSE;
}

abstract class someClass implements ConstantsGlobal
{
 
  public static $boo;

  public static function constValue()
  {
    static::$boo=self::OTHER_SECONDS;
    return static::$boo;
  }

}

 


Eto, jedan banalan primer.
Inače, interfejs služi za još mnogo što-šta. U većim, ozbiljnijim projektima uz pomoć interfejsa postaviš blago rečeno 'zakon' kako, koliko će ih biti i kako moraju da počinju SVE metode koje će biti uključene u "igru"... To je jedan od benefita korišćenja interfejsa, kada rade više developera na jednom -gabaritnom- projektu. U svakom slučaju ako u interfejsu kažeš da ta i ta metoda treba da postoji, jer će se logično, takva koristiti nadalje, ta metoda mora da bude i public. Naravno, ima još dosta pravila -> Php Object Interfaces
[ Thugzsr @ 26.07.2014. 17:40 ] @
U sustini interfejsom dobijem samo 'spisak' stvari koje moraju postojati? Kad kazem stvari mislim na metode, konstante i sl.
[ plus_minus @ 26.07.2014. 19:06 ] @
Otprilike.

Ako implementiraš interfejs i u interfejsu ima i metoda, nekoliko metoda i jedna od njih npr. ima i 2 argumenta, a ostale ni jedan, klasa koja implementira interfejs mora da prati i redosled iz interfejsa, kao i broj argumenata za svaku metodu ukoliko metoda ima argumente, dakle da poziva i prethodne metode onako kako su sortirane u samom interfejsu. Ako je ta jedna sa dva argumenta upisana nakon neke "prazne" metode, pre nje, mora da se koristi i prethodna. Po svemu sudeći, za omanji sajt gde radi jedan čovek, interfejs gotovo nikada nije potreban.
[ Predrag Supurovic @ 27.07.2014. 00:16 ] @
Velicina projekta nema veze sa tim da li ces koristiti interfejse.

Interfejs ima smisla koristiti uvek kada postiji mogucnost ili potreba da se pravi vise klasa koje moraju obavezno da imaju da imaju zajednicka svojstva i metode.
[ plus_minus @ 27.07.2014. 04:50 ] @
Zavisi ponajviše od načina razmišljanja.
[ VladaSu @ 29.07.2014. 15:12 ] @
Citat:
plus_minus: U većim, ozbiljnijim projektima uz pomoć interfejsa postaviš blago rečeno 'zakon' kako, koliko će ih biti i kako moraju da počinju SVE metode koje će biti uključene u "igru"...

Mozes li da pojasnis kroz primere ovaj deo koji je i sustina tvog objasnjenja "kako, koliko će ih biti i kako moraju da počinju SVE metode"?
Pretpostavljam da je ovo prvo 'kako' isto kao i zadnje 'kako', a ako nije molim pojasnjenje.
Kako mozes da definises kako pocinju sve metode? Ne znam da li si mislio da se definise kako pocinje naziv metode ili kako pocinje code metode?
Kako mozes da definises koliko ce metoda biti u klasi?
Koliko si siguran da redosled pisanja metoda u interfejsu uslovljava isti redosled pisanja metoda u klasi koja je implementira?

Sa definicijom koju je izneo Predrag se slazem u potpunosti bez da imam sta da oduzmem ili dodam.

Interfejs omogucuje da se napise spisak konstanti i metoda bez koda koje mora da poseduje klasa koje implementira taj interfejs. Naravno, logicno je da se samo public stvari definisu.

Meni je upecatljiv primer bio sa karticama za placanje.
Imas vise vrsta kartica za placanje npr A,B.
Znas da svaka kartica mora da ima npr. proveru, pocetak transakcije i kraj transakcije ali sve tri kartice rade na drugaciji nacin i sa drugim servisima.
Onda napravis inerfejs Kartica koja ce imati definisane tri metode: checkTrans, beginTrens, endTrans.
Onda u klase A, B implementiras inerfejs Kartica i ako neka od ove dve klase nema ove navedene tri metode php ce da prikaze error.
Onda kada radis neko placanje karticom u zavisnosti koja je kartica podignes ili klasu A ili klasu B i siguran si da da ima ove tri metode.
Ako se pojavi nova kartica za placanje C onda implementiras inerfejs Kartica i jednostavno moras napraviti one tri metode a ostatak koda
onda treba da radi bez problema.
Ovo sada lupetam. Desi se da izadje zakon da svaka transakcija preko nekog .rs sajta mora da se prijavi poreskoj sto je vrlo moguce kakva smo drzava. Da se prvi u svetu napravimo pametni.
Ti onda dodas i interfejs Kartica metodu posaljiPorsekoj() i ako ne dodas tu metodu u A,B i C klasu sajt ti nece raditi.

Da li za omanji sajt treba interfejs? Evo primer sa karticom gde je pozeljno imati interfejs a sajt moze da ima neki tekst i samo jedno dugme za doniranje novca i input gde se unese iznos.






[Ovu poruku je menjao VladaSu dana 29.07.2014. u 17:09 GMT+1]
[ plus_minus @ 29.07.2014. 19:48 ] @
Citat:
Mozes li da pojasnis kroz primere ovaj deo koji je i sustina tvog objasnjenja "kako, koliko će ih biti i kako moraju da počinju SVE metode"?

Odnosi se na SVE metode - koje se pominju u samom interfejsu. To prvo i drugo -kako- su isto.
Citat:

Da li za omanji sajt treba interfejs? Evo primer sa karticom gde je pozeljno imati interfejs a sajt moze da ima neki tekst i samo jedno dugme za doniranje novca i input gde se unese iznos.

To jedno dugme je onda prosto rečeno mini aplikacija, nije i omanji sajt sa "Home - About - Gallery - Contact" i još 4 .. ili 10 podstranica gde ima po par nekih submitova, itd.
[ Predrag Supurovic @ 29.07.2014. 22:41 ] @
Ako je sajt "omanji sajt sa "Home - About - Gallery - Contact" i još 4 .. ili 10 podstranica" eto ti lepog primer kako se moze upotrebiti interfejs, ako organiyujes sajt tako da svak atranica bude predstavljena kroy neki objekat. Svi ti objekti moraju da imaju zajednicke elemente koji ih cine objektima stranice i eto ti prostor da upotrebis interfejs.
[ VladaSu @ 30.07.2014. 09:26 ] @
Opet nisi objasnio vec sam ponovio recenicu.
Sta znaci kako pocinju metode? Da li mislis na naziv kako pocinje? Da li mislis na php kod metode kako pocinje?
Sta znaci koliko ce ih biti? Znaci u interfejsu definises da ce svaka klasa koja implementira inerfejs imati recimo 10 metoda i ne moze drugacije?

Ne kontam kako je dugme donate mini aplikacija? To je deo sajta kao i svaka druga forma. Onda mozes da kazes da je i kontakt stranica mini aplikacija ako implementiras interfejs.

[Ovu poruku je menjao VladaSu dana 30.07.2014. u 11:05 GMT+1]
[ plus_minus @ 30.07.2014. 11:14 ] @
Citat:
Predrag Supurovic: Ako je sajt "omanji sajt sa "Home - About - Gallery - Contact" i još 4 .. ili 10 podstranica" eto ti lepog primer kako se moze upotrebiti interfejs, ako organiyujes sajt tako da svak atranica bude predstavljena kroy neki objekat. Svi ti objekti moraju da imaju zajednicke elemente koji ih cine objektima stranice i eto ti prostor da upotrebis interfejs.


A i ne moraš da upotrebiš interfejs. Jel' da?
Nigde ne piše da je interfejs u php-u nužna stvar.
Da, skoro svaka SPL klasa ima po jedan, ali opet, nije nužna stvar.

Citat:
VladaSu: Opet nisi objasnio vec sam ponovio recenicu.
Sta znaci kako pocinju metode? Da li mislis na naziv kako pocinje? Da li mislis na php kod metode kako pocinje?
Sta znaci koliko ce ih biti? Znaci u interfejsu definises da ce svaka klasa koja implementira inerfejs imati recimo 10 metoda i ne moze drugacije?


Pa šta može Vlado da znači kako počinju metode? Kako inače počinju metode? I da, samo početak:
public func name1(arg1, arg2);
public func name2(arg1, arg2);
Ako u interfejsu staviš 4 metode i implementiraš taj interfejs, metode koje su deklarisane u interfejsu, ukoliko ih uključuješ, ideš redom kao što je u interfejsu.
A odnosi se na to da logično, ostale metode koje se nalaze u samoj klasi, mogu najnormalnije da se koriste. Eto, to znači.

I sada mi reci da TI ne znaš šta je interfejs .. itd..
Očekujem da Thugzsr postavi ovakva pitanja, a ne ti.

Ukoliko imaš bolje objašnjenje povodom interfejsa, ništa protiv nemam.
Napiši mu, jer tvoje foliranje je malo bzvz.

Čovek je lepo pitao šta je interface, kada i zašto..

Citat:

Ne kontam kako je dugme donate mini aplikacija? To je deo sajta kao i svaka druga forma. Onda mozes da kazes da je i kontakt stranica mini aplikacija ako implementiras interfejs.


Dugme donate je mini aplikacija u ovom slučaju jer si sam napisao da u tom primeru - sajt - ima samo to jedno dugme i neki tekst uz pomoć kojeg se vrši transakcija.
[ Predrag Supurovic @ 30.07.2014. 13:07 ] @
Citiraj gde sam napisao da mora?
[ plus_minus @ 30.07.2014. 13:30 ] @
Hoću, al' prvo ti Peđa isto tako da citiraš gde sam JA napisao da je Baja Patak siromah... :)
[ VladaSu @ 30.07.2014. 13:57 ] @
Cak je i Thugzsr dao sam sebi dosta precizan i jasan odgovor "U sustini interfejsom dobijem samo 'spisak' stvari koje moraju postojati?"

1. Pocetak metode je sirok i neprecizan pojam. Pod pocetak metode se podrazumeva prvi red koda a ovo sto ti pricas je definicija metode.
2. Nije tacno da u interfejs stavljas metode. U klase stavljas metode. U interfejsu definises-deklarises metode tj pravis spisak metoda.
3. Takodje je netacno da definises redosled metoda kojim kasnije pises klasu jer definises metode koje moraju postojati bez obzira na redosled.
4. Takodje je netacno da definises broj metoda vec definises minimum broj metoda tj koje moraju postojati a ti mozes u klasi dodati jos X metoda.
5. I nije tacno da velicina projekta i broj ljudi koji rade ne projektu odlucuje da li ce se interface pisati ili ne.

Smatram da si dao 80% netacan odgovor a 20% neprecizano-netacan i takav odgovor nije od pomoci i samo zbunjuje coveka.
Nisam bezgresan, mozda sam pogresno skontao nesto, pa sam te zbog toga pitao da malo pojasnis odgovor jer mozda i ja gresim, ne bi mi bilo prvi put.

Za 1 si dao objasnjenje koje je tacno ako citalac skonta sta si mislio jer si se pogresno izrazio odnosno pogresno nazvao stvari.
Za 2,3 i 4 nisi dao odgovor.
za 5 je stvar razmisljanja, navika, iskusva i ukusa i o tome ne vredi raspravljati jer je uvek svako pomalo u pravu i uvek svako pomalo gresi :)


[ plus_minus @ 30.07.2014. 14:45 ] @
Jeste. On je sam sebi dao odgovor. A ja se nadovezao sa - Otprilike. Eno, piše gore, pročitaj.

1. Citiram samog sebe - "Inače, interfejs služi za još mnogo što-šta." Pa onda na kraju ide i link... matični. Manual.

2. Ne čitaš prethodno... a tebi je napisano, nije Thugzsr-u.
Citat:

public func name1(arg1, arg2);
public func name2(arg1, arg2);


3. Ovde zaista ne znam šta nije jasno i kako je ko šta protumačio. I ne interesuje me pravo da ti kažem, ko je kako protumačio.

4. Opet se ne čita prethodno .... Don't do that.
Citat:
Ako u interfejsu staviš 4 metode i implementiraš taj interfejs, metode koje su deklarisane u interfejsu, ukoliko ih uključuješ, ideš redom kao što je u interfejsu.
A odnosi se na to da logično, ostale metode koje se nalaze u samoj klasi, mogu najnormalnije da se koriste. Eto, to znači.

Između ostalog i to piše u php manualu. I radi baš tako kako piše.

5. Naravno da nije tačno. Ništa nikada u php-u ne mora da ima svoj neki "pattern" ustaljeni ili štagod.
Ali niti jedan jedini, naredni projekat, sajt, ma bilo šta.. ukoliko grupa ili pojedinac nije zatarabljen i vezan za neki od framework-a. *(moguće je produbiti tezu i ovde, jer nije lepo deklarisano šta se podrazumeva pod "vezan", "zatarabljen", itd.)

Citat:

Smatram da si dao 80% netacan odgovor a 20% neprecizano-netacan i takav odgovor nije od pomoci i samo zbunjuje coveka.
Nisam bezgresan, mozda sam pogresno skontao nesto, pa sam te zbog toga pitao da malo pojasnis odgovor jer mozda i ja gresim, ne bi mi bilo prvi put.

Za 1 si dao objasnjenje koje je tacno ako citalac skonta sta si mislio jer si se pogresno izrazio odnosno pogresno nazvao stvari.
Za 2,3 i 4 nisi dao odgovor.
za 5 je stvar razmisljanja, navika, iskusva i ukusa i o tome ne vredi raspravljati jer je uvek svako pomalo u pravu i uvek svako pomalo gresi :)


Ako hoćeš da čitalac skonta u što kraćim crtama i da mu bude što jasnije, pa pazi, to nije pošlo za rukom ni onim ljudima što održavaju i ažuriraju svu php dokumentaciju. Meni je ono što piše ono na manual-u, sasvim ok. Ali, za mnoge nije. Nejasno im je šta hoće da kažu. Nije dovoljno jasno kako sam ja pokušao da objasnim, ono što lično - znam, što praktično, što teoretski? Izvoli, stavi.. @Thugzsr .. etc, etc..

Mislim, može još pitanja i korekcija kako ja to interpretiram stvari, nema problema, samo ne zaboravi da ovo nije interjvu za posao, niti mene treba neko iz ove oblasti da proverava. Bez uvrede, ali mislim da ti nisi dorastao da mene testiraš i prepravljaš. Isto to važi i - obrnuto, dakle i za mene, ne zaboravi. A ako ćemo da se takmičimo ko će bolja cepidlaka da ispadne, može, ali, ja ne volim da se takmičim na tom polju i igrajte se bez mene, jer 'nama' LOGIKA jeste primarna stvar i glavno oružje. To mora da funkcioniše besprekorno, inače od koda - krš. To valjda važi za svakog dobrog developera/programera/kodera. I eto, rešena misterija, nadam se.. šta je to plus_minus hteo da kaže.

Uostalom eno ti 5 odgovora, ako si na te mislio. Ako nisi, nema veze. Nesporazum.
Ja ću u svakom slučaju da nastavim diskusiju na ovu temu onda kada se dignete iz kreveta na pravu nogu.



ps:
Ja sam dao i jedan mali code primer sa interfejsom i kako je interfejs zgodan da se koristi samo za konstante.
Sad je po nekom nepisanom pravilu i na ostale red .. da postave svoje objašnjenje uz primer za ljude kojima treba pomoć, kristalno čisto i jasno objašenjenje za php Interfejs - bez da uzimaju mene u obzir ili mene da ispravljaju. Zamislite da nisam tu..
I možda će nekim čudom neko sa ovim malim predlogom, čak i da se složi ... bez puno - mudoklopije...
[ Thugzsr @ 08.09.2014. 14:17 ] @
Problem svih nas developera je Ego. Poprilicno je otislo daleko. Da rezimiram. Interface se koristi kao grubi blueprint za kreiranje klase. Nema neku posebnu svrhu/funkcionalnost, osim da se napravi taj kostur klase. Pogodno je koristiti kada se razvija u timu, tako da bi svaki clan znao kako treba da izgleda. Takodje i samom developeru daje uvid kako treba da izgleda, posto svi dodjemo do momenta da posle par meseci gledamo svoj kod i pitamo se sta je pisac hteo da kaze. Moje skromno misljenje/zapazanje.