Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Klase: nova instanca ili iskoristiti staru?

[es] :: Art of Programming :: Klase: nova instanca ili iskoristiti staru?

[ Pregleda: 4059 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mr.marvin

Član broj: 137276
Poruke: 111
*.crnagora.net.



Profil

icon Klase: nova instanca ili iskoristiti staru?27.08.2007. u 18:28 - pre 202 meseci
Ako imam klasu Print() koja kao argument ima neku drugu klasu, recimo POS. Zavisno od toga kakva je vrsta POS, Print koristi razlicita formatiranja u .print(). Mene zanima sta je bolje uraditi, ukoliko imam na stotine poziva Print(POS).print():

* Napisati Print() tako da je dovoljno napraviti jednu instancu?
* Napisati Print() tako da svako "stampanje" zahtjeva novu instancu, jer se vecina posla odradi u "init" metodu?
 
Odgovor na temu

yaelo
Rajko Vojnović
Beograd

Član broj: 78087
Poruke: 153
*.smin.sezampro.yu.



+9 Profil

icon Re: Klase: nova instanca ili iskoristiti staru?27.08.2007. u 19:21 - pre 202 meseci
Mozda bi bilo dobro da koristiš šablone, ako koristiš C++. Na primer napraviš primarnu Print klasu za osnovne tipove i specijalizuješ je za stringove i posebne klase kao POS. Ako ne koristiš C++ možeš da napraviš baznu klasu i izvedene za posebne slucajeve i koristiš virtuelne funkcije.Mada bi najlakše rešenje bilo kada bi svaki objekat koji bi se predavao Print objektu imao istu funkciju ToString () i sve što teba da uradiš je da je pozoveš u Print.print ().
 
Odgovor na temu

mr.marvin

Član broj: 137276
Poruke: 111
*.crnagora.net.



Profil

icon Re: Klase: nova instanca ili iskoristiti staru?27.08.2007. u 21:42 - pre 202 meseci
Koristim Python, ali ne znam sta su sabloni. Od terminologije u vezi sa klasama poznato mi je jedino nasljedjivanje. Pogledacu detaljnije, mozda vjerovatno nesto slicno postoji i za Py. Isto vazi i za virtuelne funkcije.

Nisam siguran da li sam te razumio, zapravo, nisam siguran da li sam ja uopste objasnio kako treba.. ;)

Elem, svaka POS klasa (Nom(), Ver(), Adj()...) ima vec funkciju (metod?) .show() koji u konzoli izlista ono sto treba (da li se na ovo odnosi ToString()?). Medjutim, kako projekat napreduje shvatam da pomenute POS klase treba da budu sto vise low-level, te sam izbacio sporedne stvari (kao sto je .show(), tj. u ovom postu .print())

Potom sam napravio novu klasu Print() koja za argment uzima neku od POS klasa, provjerava koja je klasa u pitanju i u konzolu izbacuje tekst.

Sad me zanima da li je bolje da u citavom projektu, nakon sto se on importuje imam jednu jedinu klasu Print(), pa da je pozivam ovako, svaki put kad mi treba tekst:

p = Print()
p_nom = p(Nom).print()
p_ver = p(Ver).print() itd.

Ili da za svaku POS klasu, pravim pravim popjedinacne instance Print() klase, koje odmah brisem:

p_nom = Print(Nom).print()
p_ver = Print(Ver).print()

Odnosno, da li da unistavam svaku instancu klase, ili da drzim jednu u memoriji, pa je pozivam? Sta je bolje, postoje li neka pravila?

Zahvaljujem! :)

edit: typos

[Ovu poruku je menjao mr.marvin dana 27.08.2007. u 23:43 GMT+1]
 
Odgovor na temu

masetrt
Marko Djurovic
Programer, Omni-Explorer
Beograd

Član broj: 3129
Poruke: 228
195.252.119.*

Sajt: www.vast.com


+2 Profil

icon Re: Klase: nova instanca ili iskoristiti staru?28.08.2007. u 10:10 - pre 202 meseci
Postoje pravila u zavisnosti sta ocekujes od svoje aplikacije. Najcesce se vrsi kompromis izmedju brzinskih performansi i memorijskog zauzeca. Mada generalno ako jedan objekat instance klase mozes da upotrebis vise puta, a da to ne zahteva neko neverovatno zauzece procesora zasto to ne bi i uradio. Znaci slobodno "recikliraj".
His majesty Grand Duke of Shumadija and Western Pomoravlje
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Klase: nova instanca ili iskoristiti staru?28.08.2007. u 10:29 - pre 202 meseci
Kao prvo, "print" (glagol) nije ime za klasu, već za metodu. Jesi li siguran da si dobro isprojektovao klase u svom programu?

Kao drugo, to da li treba da imaš jednu instancu ili više instanci takođe zavisi od toga koju situaciju taj program opisuje. Načelno, ako se atributi instanci ne razlikuju, nema logike da praviš posebne instance.
 
Odgovor na temu

yaelo
Rajko Vojnović
Beograd

Član broj: 78087
Poruke: 153
*.smin.sezampro.yu.



+9 Profil

icon Re: Klase: nova instanca ili iskoristiti staru?28.08.2007. u 19:33 - pre 202 meseci
Ako sam te dobro razumeo svaka klasa ima Show () funkciju koja radi sve što treba oko prikazivanja. Šta če ti onda Print klasa. Samo pozovi objekat.Show () u nekoj output funkciji(objektu ili šta več koristiš u Pythonu).
Primer C++
Code:

std::cout << objekat.Show () << std::endl;
 
Odgovor na temu

lukeguy
Novi Sad

Član broj: 46545
Poruke: 470
*.net
Via: [es] mailing liste



+8 Profil

icon Re: Klase: nova instanca ili iskoristiti staru?28.08.2007. u 22:45 - pre 202 meseci
Čini mi se da je dečko napisao da želi da izbaci te rutine i da koristi (kako on reče) samo "low level" kod. U tom slučaju neka klasa poput Printer (obratiti pažnju na "er") bi mogla da obavlja sav posao. Ja bih recimo osmislio statičku klasu koja bi imala overloadovanu metodu print() za svaki tip argumenta koji želim da joj prosledim. Ovo bi bila visoko specijalizovana klasa koja bi radila isključivo sa klasama koje koristim u svom programu i umela da iz objekta svake od tih klasa izvuče podatak šta je to što treba da se ispiše na konzolu. (Pretpostavljam da je to poznato programeru.)

Mada bih ovo rešenje primenio isključivo ako imam debeo razlog zašto moram da izbacim tu show() metodu.
 
Odgovor na temu

mr.marvin

Član broj: 137276
Poruke: 111
*.crnagora.net.



Profil

icon Re: Klase: nova instanca ili iskoristiti staru?29.08.2007. u 12:23 - pre 202 meseci
@masetrt
Pa ne zahtjeva trenutno neku veliku snagu/resurse, niti ce u skoroj buducnosti, ali bih zelio da znam kako da zapoceti projekat postavim na sigurne noge, da se ne desi da se hvatam za glavu nakon svakih 1000 linija koda... :)

@jablan
Veliko slovo: klasa, malo slovo: funkcija/atribut/metod...

@yaelo
Zato sto hocu da se rijesim tog metoda... Klasa za prikaz rezultata koristi se na samo za konzolni ispis vec i za txt/html export.


@lukeguy
Upravo tako! :) Konretno, klasa se bavi deklinacijom, izvodjenjem padeza od osnovnog oblika imenice. Shvatio sam da to treba da je jedini zadatak klase i nista vise, i to u svom projektu nazvah low level. Razlog za micanje ovog .show() je preglednost koda i lak update/refactoring. Cak i sama klasa (Nom(), npr.) je obican placeholder za stringove koje generisu funkcije u modulu.

Rijec je (ili ce biti) o svim klasama koje se bave morfologijom, a posto su toliko vazne ne zelim da ih zakrcim nepotrebnim kodom.

Sto se tice dizajna i osmisljavanja klasa, nisam siguran da li sam ih dobro osmislio, ali to izgleda, manje-vise ovako:

Code:
lylatinam /ime projekta/:

    morph - morfologija: Nom(), Ver(), Adj() itd.
    syntax - kod za sintaksu
    tools - pomocni kod za prikaz, eksport u txt/html,
        debagovanje:
        posshow (ovdje ce biti klasa za prikaz rezultata)


Hvala svima na sugestijama.

Kod projekta nacete na http://code.google.com/p/pylatinam/

Ne obracajte paznju na SVN jer nije updeteovan, niti sam savim siguran kako se koristi...
 
Odgovor na temu

[es] :: Art of Programming :: Klase: nova instanca ili iskoristiti staru?

[ Pregleda: 4059 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.