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

Klasa - da poziva funkcije ili ima atribute?

[es] :: Python :: Klasa - da poziva funkcije ili ima atribute?

[ Pregleda: 2855 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mr.marvin

Član broj: 137276
Poruke: 111
213.149.123.*



Profil

icon Klasa - da poziva funkcije ili ima atribute?26.04.2007. u 12:47 - pre 205 meseci
Ovo me bas interesuje, a vidim i da je u trenutno aktuelnom topicu kernuo offtopic u objektno programiranje, pa reko' da pitam.

U modulu koji sam prikacio (verb.py - nece raditi samostalno, jer je dio paketa) se vidi na sta mislim. Napisao sam klasu Ver() koj vrsi konjugaciju glagola. Ali, Ver() je samo wrapper za funkcije koje se nalaze van klase, a koje vrse konjugaciju.

Moje pitanje glasi, da li je bolje sve funkcije staviti kao atribute klase ili ih ostaviti kao nezavisne funkcije? Da li postoji neka programerska praksa u vezi sa ovim, ili sve zavisi od primjera do primjera?

Kad smo vec kod primjera, u ovom modulu funkcije su van klase jer je citav paket zamisljen kao low-level interfejs, a jednom pozvana funcija za pojedinacni glagol vise se ne poziva (jer nema potrebe - klasa cuva rezultate funkcija). Sa druge strane, gomila funkcija ustaje pod public statusom, i dostupna je za posebno eksperimentisanje sa glagolima.

I jos nesto... Ako pogledate kod, vidjecete da su sve funkcije koje prave vremena (pocinju sa conj_) veoma slicne. Sad, da li je bolje napraviti jednu veliku funkciju/klasu sa if dijelovima i zaobici napotrebno ponavljanje koda ali na racun preglednosti?
Prikačeni fajlovi
 
Odgovor na temu

alex
Aleksandar Radulovic
Senior Software Engineer, Spotify
Stockholm, Sweden

Član broj: 71
Poruke: 2194
*.siminn.is.

Jabber: alex@a13x.info
ICQ: -1
Sajt: www.a13x.info


+1 Profil

icon Re: Klasa - da poziva funkcije ili ima atribute?27.04.2007. u 12:32 - pre 205 meseci
Citat:
mr.marvin:Moje pitanje glasi, da li je bolje sve funkcije staviti kao atribute klase ili ih ostaviti kao nezavisne funkcije? Da li postoji neka programerska praksa u vezi sa ovim, ili sve zavisi od primjera do primjera?


Programerska praksa naravno da postoji, i zove se objektno programiranje. Licno mi se dopada ovakav opis: Object-oriented programming may be seen as a collection of cooperating objects, as opposed to a traditional view in which a program may be seen as a list of instructions to the computer. In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Each object can be viewed as an independent little machine with a distinct role or responsibility. - Po mom misljenju, akcenat u dizajnu softvera bi uvek trebalo staviti upravo na poslednju recenicu - sustina objekata je da su sami po sebi nezavisni i da je njihova uloga specificna i jasno definisana. Znaci, u tvom primeru, sve funkcije koje se po ulozi mogu definisati kao deo jednog objekta bi trebalo da budu metodi tog objekta.

Python jezik, iako dozvoljava pisanje striktno proceduralnog kôda, na svakom koraku ohrabruje i olaksava pisanje objektno-orjentisanog kôda.

Citat:
I jos nesto... Ako pogledate kod, vidjecete da su sve funkcije koje prave vremena (pocinju sa conj_) veoma slicne. Sad, da li je bolje napraviti jednu veliku funkciju/klasu sa if dijelovima i zaobici napotrebno ponavljanje koda ali na racun preglednosti?


Kôd bi trebalo da bude, pored funkcionalnosti, i citljiv i razumljiv a takodje i ne previse komplikovan - svaku komplikovanu konstrukciju u svom kôdu u velikom broju slucajeva mozes da resis kako samim framework-om (odnosno mogucnostima jezika u kome pises kôd) tako i refactoring-om, odnosno redizajnom svog kôd - konkretnije, pokusajem da nadjes i izvuces sto vise moguce zajednickog kôda tih funkcija i pretocis to u tzv. base funkciju (ili pak objekat-klasu) i dodatne razlike implementiras putem nasledjivanja te base klase.

Pogledacu tvoj kôd sad pa ako uspem cu ti prikazati sve to i u konkretnom primeru.
Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x ||
linkedin.13x
 
Odgovor na temu

mr.marvin

Član broj: 137276
Poruke: 111
213.149.123.*



Profil

icon Re: Klasa - da poziva funkcije ili ima atribute?28.04.2007. u 13:41 - pre 205 meseci
> Programerska praksa naravno da postoji, i zove se (objektno
> programiranje

Da, to je jedna od stavi o kojoj sam nesto naucio radeci u Pythonu. Program koji sam zapoceo bio je izricito proceduralan, jer drugacije nisam znao. Kad sam iscitao poneki putorijal, napisao sam glavnu klasu koja je objedinila funkcije...

> Python jezik, iako dozvoljava pisanje striktno proceduralnog kôda, na
> svakom koraku ohrabruje i olaksava pisanje objektno-orjentisanog kôda.

...ali tako da je klasa (gotovo) obican prihvatnik za stringove koje dobije od funcija. Ali, jos uvijek nisam nacisto sa klasama.

> Kôd bi trebalo da bude, pored funkcionalnosti, i citljiv i razumljiv a
> takodje i ne previse komplikovan

Hvala na ovim savjetima, jedan od zadataka prije nego nastavim sa novim kodom bice sredjivanje starog.

Jos malo OOP. Ukratko, sta radi verb.py: Klasa Verb() dobije glagol i potrazi ga u leksikonu (preko Lex() klase) i zatim dobijenu vrijednost (npr. "specto,spectare,1,spectavi,spectatum") prosljedjuje funckijama koje vracaju stringove, koji zatim postaju atributi klase Ver(). Npr:

glagol = Ver("specto")
glagol.tenses izlistace sva vremena koja je program napravio, a
glagol["ipra"] daje prezent glagola.

Ovo ide prilicno brzo ukoliko se radi sa jednim glagolom, ali sta se desava ukoliko je potrebno naci prezent za 1000 glagola a rezultate proslijediti dalje? Da li ce klasa svaki put praviti sve stringove? Pokusavam da nadjem neki kompromis izmedju komfornog rada iz IDLE sa jedne, i brzine i low-level interfejsa sa druge strane, ali mi se trenutno sve svodi na to da klasi/funkciji proslijedim neki "switch".
 
Odgovor na temu

alex
Aleksandar Radulovic
Senior Software Engineer, Spotify
Stockholm, Sweden

Član broj: 71
Poruke: 2194
*.siminn.is.

Jabber: alex@a13x.info
ICQ: -1
Sajt: www.a13x.info


+1 Profil

icon Re: Klasa - da poziva funkcije ili ima atribute?02.05.2007. u 12:09 - pre 205 meseci
Citat:
mr.marvin:
Hvala na ovim savjetima, jedan od zadataka prije nego nastavim sa novim kodom bice sredjivanje starog.


Nema na cemu - toplo bih ti preporucio da procitas neku knjigu o objektnom programiranju kao i Dive Into Python online knjigu u kojoj ima dosta materijala na temu Python jezika i OOP.

Pitanja koja si postavio u vezi tvog kôda su kako pitanja performansi tako i pitanja dizajna tvoje aplikacije koji bi, ako postuje principe objektnog programiranja, trebalo da jasno odredi koji objekat radi sta i na koji nacin se poziva i slicno.
Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x ||
linkedin.13x
 
Odgovor na temu

[es] :: Python :: Klasa - da poziva funkcije ili ima atribute?

[ Pregleda: 2855 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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