🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #52132

Re: Wielokrotne dziedziczenie z jawnym wywołaniem konstruktorów klas bazowych z parametrami

#52132
From: Jarosław Lubczyński
Date: Thu, 06 Jan 2011 19:12
92 lines
5061 bytes
W dniu 2011-01-06 17:34, Bartosz Jakubski pisze:
> On 2011-01-06, Jarosław Lubczyński<guess@who.com.pl>  wrote:
>> W dniu 2011-01-06 12:20, Ireneusz Pluta pisze:
>>>
>>> Ten komunikat to wyjaśnia. Atrybut 'data' zadeklarowałeś jako required
>>> w klasach pierwotnych, a nie umieściłeś go w konstrukcji. Dodaj go w
>>> My::ClassC->new().
>>
>> Ale nie mam innego pomysłu, jak go dodać. Atrybut 'data' jest w *obu*
>> klasach bazowych, więc należy go sprefixować nazwą klasy, co, jak mi się
>> wydawało, próbowałem zrobić. Wywołanie:
>
> Skąd ten pomysł z prefiksowaniem? ZTCW nie możesz mieć dwóch atrybutów
> o tej samej nazwie i tyle.

W zwykłym dziedziczeniu przez błogosławienie hasza owszem, dlatego 
zainteresowałem się techniką obiektów odwróconych, gdzie takie sztuczki 
są możliwe :)

>  Jaką struturę próbujesz modelować? Bo trochę
> dziwnie wygląda ten przykład. Nie bardziej naturalna byłaby
> jakaś delegacja np.?
>
>>
>> $obj = My::ClassC->new	# (*)
>> (
>>           'info' =>  'help',
>>           'data' =>  11,
>>           'para' =>  4342,
>>           'parb' =>  'ma kota',
>> );
>>
>> oczywiście ustawia wartość  (tu: 11) w *obu* klasach bazowych, a nie o
>> to przecież chodzi...
>
> Nie w obu klasach bazowych, tylko w obiekcie.

Tak, 'drobny' brak precyzji z mojej strony.

> On ma jeden atrybut (jeśli
> dziedziczysz z wielu, to "użył się" z pierwszej bazowej.

OK, przyjąłem. Moose nie oferuje hermetyzacji. Będę musiał sobie z tym 
jakoś poradzić :).

>>
>> Aha, próba wywołania typu:
>>
>> $obj = My::ClassC->new
>> (
>>           'info' =>  'help',
>>           'My::ClassA::data' =>  11,
>>           'My::ClassB::data' =>  31,
>>           'para' =>  4342,
>>           'parb' =>  'ma kota',
>> );
>>
>> też nie prowadzi do sukcesu. No i pomysły mi się skończyły...
>
> Chyba próbujesz zastosować w Moosie jakąś dziwną konwencję z jakiegoś
> innego modułu. Proponuję na spokojnie przeczytać sobię dokumentację
> Moose - jest naprawdę sympatyczna: Moose::Manual(::*) i Moose::Cookbook(::*)

Tak, to dobry pomysł, oddam się lekturze i pewno trochę mi sie rozjaśni, 
zwłaszcza, że nie terminy mnie nie gonią.

>
> Z pewnością _jakoś_ da się osiągnąć to co chcesz w Moose (przez ->meta
> i Class::MOP naprawdę wiele da się zmienić), ale trudno oprzec się
> wrażeniu, że na siłę jakiś problem wpasowałeś w wielokrotne
> dziedziczenie i teraz próbujesz się wykopać :-)
>
>

Nie, to po prostu przyzwyczajenie z C++, gdzie biorę dwie klasy z półki, 
tworzę trzecią poprzez wielokrotne dziedziczenie *nie* *przejmując* 
*się* nazwami pól w klasach bazowych bo C++ oferuje pełną hermetyzację i 
mam nową klasę, której instancje mają dokładnie takie cechy jakie 
potrzebuję - praktycznie bez żadnego wysiłku. To samo (jak zdążyłem się 
naumieć) można osiągnąć w Perlu w technice InsideOut, niestety oferowane 
pakiety są dla mnie zdecydowanie za ciężkie. Dlatego ostatecznie chyba 
użyję Mouse i będę musiał się pogodzić z brakiem hermetyzacji obiektów. 
Na szczęście kodem Perla zarządzam osobiście :)

-- 
Pozdrawiam
Jarek Lubczyński
(eljot<NULL>90125 at gmail dot com)
Nawiasy trójkątne z zawartością zbędne są

There are 10 kinds of people:
Those who understand binary and those who don't
Technical Details
Message-ID: <ig547p$4d8$1@inews.gazeta.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <ie9uh2$qfj$1@opal.futuro.pl> <kjzr5dheupb.fsf@ccfs1.fuw.edu.pl> <iedin2$bbc$2@inews.gazeta.pl> <kjzmxo5con2.fsf@ccfs1.fuw.edu.pl> <ifanvr$iut$1@inews.gazeta.pl> <kjzipyf7xpf.fsf@ccfs1.fuw.edu.pl> <ifcg1j$a6r$1@inews.gazeta.pl> <72ddf779-ba30-44e8-bf4d-132def818429@fu15g2000vbb.googlegroups.com> <ifv5fs$4ir$1@opal.futuro.pl> <7af449a1-136b-46b1-a3bf-7fc25fc1b8cd@w18g2000vbe.googlegroups.com> <ig07a6$18l$1@inews.gazeta.pl> <8dc8aba4-2abe-42db-82b5-366ba34a9d8d@l7g2000vbv.googlegroups.com> <ig2mrl$2cl$1@inews.gazeta.pl> <77910e78-c927-43fe-b6c9-feb092225395@d7g2000vbv.googlegroups.com> <ig4jq1$7r2$1@inews.gazeta.pl> <ig4qur$2cs$1@mx1.internetia.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: Jarosław Lubczyński <guess@who.com.pl>
Newsgroups: pl.comp.lang.perl
Subject: Re: Wielokrotne dziedziczenie z jawnym
 wywołaniem konstruktorów klas bazowych z parametrami
Date: Thu, 06 Jan 2011 20:12:26 +0100
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 93
Message-ID: <ig547p$4d8$1@inews.gazeta.pl>
References: <ie9uh2$qfj$1@opal.futuro.pl> <kjzr5dheupb.fsf@ccfs1.fuw.edu.pl> <iedin2$bbc$2@inews.gazeta.pl> <kjzmxo5con2.fsf@ccfs1.fuw.edu.pl> <ifanvr$iut$1@inews.gazeta.pl> <kjzipyf7xpf.fsf@ccfs1.fuw.edu.pl> <ifcg1j$a6r$1@inews.gazeta.pl> <72ddf779-ba30-44e8-bf4d-132def818429@fu15g2000vbb.googlegroups.com> <ifv5fs$4ir$1@opal.futuro.pl> <7af449a1-136b-46b1-a3bf-7fc25fc1b8cd@w18g2000vbe.googlegroups.com> <ig07a6$18l$1@inews.gazeta.pl> <8dc8aba4-2abe-42db-82b5-366ba34a9d8d@l7g2000vbv.googlegroups.com> <ig2mrl$2cl$1@inews.gazeta.pl> <77910e78-c927-43fe-b6c9-feb092225395@d7g2000vbv.googlegroups.com> <ig4jq1$7r2$1@inews.gazeta.pl> <ig4qur$2cs$1@mx1.internetia.pl>
NNTP-Posting-Host: apn-95-40-102-76.dynamic.gprs.plus.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1294341178 4520 95.40.102.76 (6 Jan 2011 19:12:58 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Thu, 6 Jan 2011 19:12:58 +0000 (UTC)
X-User: eljot_007
In-Reply-To: <ig4qur$2cs$1@mx1.internetia.pl>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.13) Gecko/20101207 Thunderbird/3.1.7
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit