Article View: pl.comp.lang.python
Article #8691Re: Największy problem Pythona.
From: Filip Dreger
Date: Thu, 12 May 2005 10:13
Date: Thu, 12 May 2005 10:13
38 lines
3490 bytes
3490 bytes
Użytkownik "Daniel Mróz" <beorn@alpha.pl> napisał w wiadomości news:d5v7fu$75t$1@news.supermedia.pl... >> Jeśli chcemy zmiecić wiek pracownika e, to robimy e.age = 14, a nie >> e.setage(14). To jest naturalne, ponieważ to co chcemy zrobić, to >> jest: >> "zmienić wartość e.age", a nie "wywołać metodę e ustawiającą wiek z >> parametrem 14". Zamiast deklarować atrybut i pisać dwie metody nie > No tak, ale co z kontrola poprawnosci danych? setage() moze nam > sprawdzic czy przypadkiem ktos zamiast 14 nie przekazuje > "czternascie". to, co dodają IDE, to puste settery i gettery, nie przeprowadzające żadnej walidacji. Ich funkcja jest inna i związana z rozwijaniem programu. Jeśli w Javie uznamy, że nie potrzebujemy żadnej walidacji i udostępnimy klientowi goły atrybut, to - można powiedzieć - przegraliśmy. Nie mamy żadnej metody, żeby walidację wprowadzić później. A jeśli na przykład będziemy musieli dodać do aplikacji logowanie każdej zmiany wieku? zgroza! Dlatego właśnie powstał prosty wzorzec projektowy - atrybuty opakowujemy w settery i gettery, które na razie nic nie robią, ale pozwolą nam w przyszłości na rozwój aplikacji. W ten sposób każdy atrybut klasy napisanej w Javie wymaga około czterech linijek nic nie robiącego kodu. Nic dziwnego, że właśnie w Javowym środowisku wyrosła koncepcja złożonych IDE - puste settery i gettery są po prostu watą, której pisaniem rzeczywiście nie powinien zajmować się programista. W Pythonie jest inaczej. Jeżeli potrzebujemy atrybutu age, to dodajemy atrybut age, a nie metodę. To wszystko. Jeśli kiedyś będziemy chcieli dodać logowanie zmian wieku i walidację, zmienimy definicję age na age=property(getage,setage) i dopiszemy getage i setage Ale to dopiero w razie potrzeby. Oznacza to, że unikamyw naszych źródłach waty, czyli nic nie znaczącego kodu (którym w Javie zarządza IDE). Dzięki temu program jest szybszy, łatwiejszy do rozwijania i zrozumiały bez protezy na oczy, jaką bywają nowoczesne edytory. pozdrawiam, Filip
Technical Details
Message-ID:
<d5vahh$l1c$1@nemesis.news.tpi.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!news.tpi.pl!not-for-mailReferences:
<jsq2enrcpp4r$.nmpn8bgh83ge.dlg@40tude.net> <d5r1l6$flm$1@nemesis.news.tpi.pl> <1njwce3cqj46q.11f4hsu79ksgd.dlg@40tude.net> <1gvuz1q6mpswb.2m8e9kggxehl.dlg@40tude.net> <d5r6le$msg$1@nemesis.news.tpi.pl> <1wa07hpw18hk1.effbya3x2hyr$.dlg@40tude.net> <d5sd5s$ctc$1@gw.magellan.net.pl> <d5v015$3ta$1@nemesis.news.tpi.pl> <d5v2tv$4l7$1@news.supermedia.pl> <d5v5so$2bv$1@achot.icm.edu.pl> <d5v7fu$75t$1@news.supermedia.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!news.tpi.pl!not-for-mail From: "Filip Dreger" <fdreger@amiga.pl> Newsgroups: pl.comp.lang.python Subject: Re: Największy problem Pythona. Date: Thu, 12 May 2005 12:13:35 +0200 Organization: tp.internet - http://www.tpi.pl/ Lines: 40 Message-ID: <d5vahh$l1c$1@nemesis.news.tpi.pl> References: <jsq2enrcpp4r$.nmpn8bgh83ge.dlg@40tude.net> <d5r1l6$flm$1@nemesis.news.tpi.pl> <1njwce3cqj46q.11f4hsu79ksgd.dlg@40tude.net> <1gvuz1q6mpswb.2m8e9kggxehl.dlg@40tude.net> <d5r6le$msg$1@nemesis.news.tpi.pl> <1wa07hpw18hk1.effbya3x2hyr$.dlg@40tude.net> <d5sd5s$ctc$1@gw.magellan.net.pl> <d5v015$3ta$1@nemesis.news.tpi.pl> <d5v2tv$4l7$1@news.supermedia.pl> <d5v5so$2bv$1@achot.icm.edu.pl> <d5v7fu$75t$1@news.supermedia.pl> NNTP-Posting-Host: pac142.warszawa.sdi.tpnet.pl X-Trace: nemesis.news.tpi.pl 1115893106 21548 217.96.222.142 (12 May 2005 10:18:26 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Thu, 12 May 2005 10:18:26 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.2180 X-RFC2646: Format=Flowed; Response X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit