eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingCo może robić konstruktor i dlaczego nie?
Ilość wypowiedzi w tym wątku: 63

  • 31. Data: 2012-07-05 21:01:33
    Temat: Re: Co może robić konstruktor i dlaczego nie?
    Od: "slawek" <h...@s...pl>

    Użytkownik "Michoo" napisał w wiadomości grup
    dyskusyjnych:jt4hc2$trd$...@m...internetia.pl...
    >> Odpowiedź oczywista: bo w trakcie działania ma tworzyć inne obiekty,
    >> mające referencje do pól, a w szczególności do jego this.
    >To nie jest problem, bo obiekt jest na etapie konstruktora już
    >zainicjowany.

    Michoo, wygląda na to że pogubiły się cytowania. Spróbuję uporządkować.

    Ja twierdzę, że obiektu foo klasy Foo - niezależnie czy ma czy nie metodę
    run() -- NIE DA SIĘ zastąpić wywołaniem nie-obiektowej funkcji
    foofunc();

    Uzasadniam: obiekt foo klasy Foo to nie tylko jego metoda run() (oraz ew.
    jego konstruktor, lecz przecież dyskutowaliśmy o scaleniu run() z
    konstruktorem). Obiekt klasy Foo to także wszystkie dane w polach obiektu,
    ze szczególnym zwróceniem uwagi na te publiczne. Przykładowo nie jest tym
    samym:

    class Foo { public int n; int run() { return n++; } } ; // klasa

    int foofunc() {return n++; } // funkcja

    bo w drugim przypadku brak definicji n i jest to nietrywialne (nie da się
    zastąpić deklaracją globalną int n; bo może istnieć wiele obiektów klasy
    Foo, co nijak nie przekłada się na "wiele globalnych definicji int n").


    PODSUMOWUJĄC - obiektowe podejście niekoniecznie jest zawsze najlepsze,
    ale... jak już są obiekty, to nie ma na co marudzić.

    slawek


    --- Posted via news://freenews.netfront.net/ - Complaints to n...@n...net ---


  • 32. Data: 2012-07-05 22:34:58
    Temat: Re: Co może robić konstruktor i dlaczego nie?
    Od: Edek Pienkowski <e...@g...com>

    Dnia Thu, 05 Jul 2012 21:01:33 +0200, slawek napisal:

    >
    > PODSUMOWUJĄC - obiektowe podejście niekoniecznie jest zawsze najlepsze,
    > ale... jak już są obiekty, to nie ma na co marudzić.

    Jak to marudzić. Rozstrzelać za takie pomysły bez zastanowienia.

    Edek


  • 33. Data: 2012-07-05 23:30:56
    Temat: Re: Co może robić konstruktor i dlaczego nie?
    Od: "slawek" <h...@s...pl>

    Użytkownik "Edek Pienkowski" napisał w wiadomości grup
    dyskusyjnych:jt4tpi$7u5$...@m...internetia.pl...
    >Jak to marudzić. Rozstrzelać za takie pomysły bez zastanowienia.

    Bo to będą obiekty, które będą pompowane przez sieć jako coś XML-owego, przy
    tym w 99% będą binarne i na końcu, po paru(nastu) przekształceniach mają
    zaistnieć jako elementy wizualnie widoczne. Po molierowsku dowiedziałem się
    o mojej skłonności do GRAPPLE, czyli do gdybania o tym co i jak przez ponad
    80% czasu. I tak na zdrowy rozum zauważyłem, że metod run() mam tyle samo co
    konstruktorów... więc czemu by ich nie połączyć?! (Przy okazji zauważyłem
    też wiele innych zadziwiających rzeczy, np. że więcej niż połowa rzeczy
    jakie zrobiłbym bez UML byłaby i tak niepotrzebna do działania tego
    programu.)

    A dla odprężenia proponuję lekturę
    http://xmpp.org/extensions/xep-0239.html - czyli specyfikację protokołu
    przesyłania binarnych danych zgodnie z duchem, ideą itd. XML.

    slawek


  • 34. Data: 2012-07-05 23:45:14
    Temat: Re: Co może robić konstruktor i dlaczego nie?
    Od: Edek Pienkowski <e...@g...com>

    Dnia Thu, 05 Jul 2012 23:30:56 +0200, slawek napisal:

    > Użytkownik "Edek Pienkowski" napisał w wiadomości grup
    > dyskusyjnych:jt4tpi$7u5$...@m...internetia.pl...
    >>Jak to marudzić. Rozstrzelać za takie pomysły bez zastanowienia.
    >
    > Bo to będą obiekty, które będą pompowane przez sieć jako coś XML-owego,
    > przy tym w 99% będą binarne i na końcu, po paru(nastu) przekształceniach
    > mają zaistnieć jako elementy wizualnie widoczne. Po molierowsku
    > dowiedziałem się o mojej skłonności do GRAPPLE, czyli do gdybania o tym
    > co i jak przez ponad 80% czasu. I tak na zdrowy rozum zauważyłem, że
    > metod run() mam tyle samo co konstruktorów... więc czemu by ich nie
    > połączyć?!

    Odpowiedź brzmi: bo rozstrzelać. Ja sam należę do tych, którzy nie widzą
    nic złego w (dosłowny kod):

    ...
    new Obiekcik(i,j,k);
    ...

    Przeyznaję, to trochę nietypowo wygląda, trochę jak wyciek. Ale tak nie
    jest, cykl żcyia jest ściśle określony, bo konstruktor się rejestruje
    w jakimś zbiorze po czym wykonuje pewną pracę kiedyś później, a na końcu
    jest usuwany. Tę konstrukcję za to widziałem chyba tylko o Stroustupa:
    ref = *new Obiekt();
    Próbowałem tego użyć, ale przy pierwszym review skończyło się na pytaniach
    "to tak można?" "no ale po co to?" więc zrezygnowałem.

    (Przy okazji zauważyłem też wiele innych zadziwiających
    > rzeczy, np. że więcej niż połowa rzeczy jakie zrobiłbym bez UML byłaby i
    > tak niepotrzebna do działania tego programu.)
    >
    > A dla odprężenia proponuję lekturę
    > http://xmpp.org/extensions/xep-0239.html - czyli specyfikację protokołu
    > przesyłania binarnych danych zgodnie z duchem, ideą itd. XML.

    Mam nadzieję, że to lżejsze od Higgsa.

    Edek



  • 35. Data: 2012-07-06 08:17:23
    Temat: Re: Co może robić konstruktor i dlaczego nie?
    Od: "slawek" <h...@s...pl>

    Użytkownik "Edek Pienkowski" napisał w wiadomości grup
    dyskusyjnych:jt51ta$7u5$...@m...internetia.pl...

    >Mam nadzieję, że to lżejsze od Higgsa.

    Ibidem jest opisany sposób zapisu pliku binarnego w postaci XML, ot po
    prostu 01101 itd. powinno się zapisywać jako <zero/><one/><one/> etc.

    Może wywołać oplucie monitora, zakrztuszenie się kanapką, rozlanie
    kawy/czekolady/piwa na klawiaturę etc. (Przecież pisałem o odprężeniu?!)

    Formalnie wygląda na "normalny" dokument nt. XML - np. ma uzasadnienie dla
    i18n dla takiego zapisu - itp. itd.


  • 36. Data: 2012-07-06 09:09:49
    Temat: Re: Co może robić konstruktor i dlaczego nie?
    Od: Edek Pienkowski <e...@g...com>

    Dnia Fri, 06 Jul 2012 08:17:23 +0200, slawek napisal:

    > Użytkownik "Edek Pienkowski" napisał w wiadomości grup
    > dyskusyjnych:jt51ta$7u5$...@m...internetia.pl...
    >
    >>Mam nadzieję, że to lżejsze od Higgsa.
    >
    > Ibidem jest opisany sposób zapisu pliku binarnego w postaci XML, ot po
    > prostu 01101 itd. powinno się zapisywać jako <zero/><one/><one/> etc.
    >
    > Może wywołać oplucie monitora, zakrztuszenie się kanapką, rozlanie
    > kawy/czekolady/piwa na klawiaturę etc. (Przecież pisałem o odprężeniu?!)
    >
    > Formalnie wygląda na "normalny" dokument nt. XML - np. ma uzasadnienie
    > dla i18n dla takiego zapisu - itp. itd.

    <dobre/><przecinek/><calkiem/><niezle/> ;)

    Edek


  • 37. Data: 2012-07-06 10:59:42
    Temat: Re: Co może robić konstruktor i dlaczego nie?
    Od: "AK" <n...@n...com>

    Użytkownik "Edek Pienkowski" <e...@g...com> napisał:

    > Tę konstrukcję za to widziałem chyba tylko o Stroustupa:
    > ref = *new Obiekt();
    > Próbowałem tego użyć,
    Heh.
    A ja konstrukcje Obiekt& ref = *new Obiekt(); (i podobne) stosuje namietnie
    od lat gdzie tylko sie da i sobie chwale (bo zbliza nieco C++ do normalnosci).

    > ale przy pierwszym review skończyło się na pytaniach
    > "to tak można?" "no ale po co to?" więc zrezygnowałem.

    Ci review-anci nadaja sie raczej do czyszczenia klawiatur :(

    PS: Dziwne sa wybory dziesiejszej mlodziezy C++owej.

    >> A dla odprężenia proponuję lekturę
    >> http://xmpp.org/extensions/xep-0239.html - czyli specyfikację protokołu
    >> przesyłania binarnych danych zgodnie z duchem, ideą itd. XML.

    :) Naprawde nie moge wyjsc z "podziwu". Smieszne sa te "powroty rakiem"
    do normalnosci z przeambicjnowanego XMLa (jak z kazdego silver bullet).

    AK


  • 38. Data: 2012-07-06 11:01:55
    Temat: Re: Co może robić konstruktor i dlaczego nie?
    Od: Paweł Kierski <n...@p...net>

    W dniu 2012-07-05 16:27, slawek pisze:
    > Użytkownik "Paweł Kierski" napisał w wiadomości grup
    > dyskusyjnych:jt4588$o34$...@i...gazeta.pl...
    >
    >> W sumie najlepszy argument na "nie" - łatwo dopisać:
    >> void foo()
    >> {
    >> Foo().run();
    >> }
    >
    >> trudniej "rozkleić" istniejący konstruktor.
    >
    > Można też
    >
    > #define foo (Foo().run())
    >
    > Jednak argument o "rozklejaniu" jest chybiony - celem sklejenia mogłoby
    > przecież być uniemożliwienie rozklejenia (i np. dwa razy wywoływania
    > run() dla jednego obiektu).

    W takim razie bym napisał:

    class Foo
    {
    void run();
    public:
    Foo();
    static void doFoo() {Foo().run();}
    };

    --
    Paweł Kierski
    n...@p...net


  • 39. Data: 2012-07-06 11:10:35
    Temat: Re: Co może robić konstruktor i dlaczego nie?
    Od: Andrzej Jarzabek <a...@g...com>

    On Jul 5, 4:24 pm, "slawek" <h...@s...pl> wrote:
    > Użytkownik "Andrzej Jarzabek"  napisał w wiadomości grup
    > dyskusyjnych:7a3451d2-b497-461a-8a6e-b79d7ffda...@a1
    6g2000vby.googlegroups.com...
    >
    > >Pewną dość oczywistą wadą 'uruchomienia przez konstruktor' jest brak
    > >możliwości sensownego dziedziczenia po takiej klasie. W C++ dodatkowo
    > >w takich przypadkach występuje problem z wywoływaniem funkcji
    > >wirtualnych z konstruktora.
    >
    > Ale przecież konstruktor tej klasy może być sparametryzowany i jednocześnie
    > domyślny konstruktor może być pusty. No problem.

    Problem jest taki, że jeśli w klasie potomnej w konstruktorze wywołasz
    ów pusty konstruktor, to tracisz dostęp do swojego 'run' - nie
    skonstruujesz klasy bazowej dwa razy.

    > Chyba vtable jest już wypełniona przed wejściem w blok {} konstruktora? Bo i
    > niby czemu nie miałaby być?!

    Powody mogłyby być, natomiast np. w C++ będzie to vtable dla aktualnie
    konstruowanej klasy, a nie dla końcowego typu obiektu, który jest
    konstruowany. Czyli jeśli masz klasę B, która wywołuje swój 'run' w
    konstruktorze, tworzysz dziedziczącą po niej klasę D, która nadpisuje
    funkcje wirtualne klasy B, to wywołania tych funkcji w 'run' nadal
    wywołują funkcje zdediniowane dla B, nie te dla D. Nie mówiąc już o
    pięknej okazji do wprowadzenia UB jeśli klasa jest abstrakcyjna.

    W Javie jest inaczej, ale niekoniecznie lepiej: cała klasa
    inicjalizowana jest przed konstrukcją i metody są wywoływane dla
    ostatecznego typu, ale to znaczy, że trzeba przewidzieć
    'nieskonstruowany' stan klasy: nie możesz np. założyć, że jakas
    referencja jest nie-null, jeśli ustawiasz jej wartość w konstruktorze.


  • 40. Data: 2012-07-06 12:59:26
    Temat: Re: Co może robić konstruktor i dlaczego nie?
    Od: Paweł Kierski <n...@p...net>

    W dniu 2012-07-05 23:30, slawek pisze:
    [...]
    > A dla odprężenia proponuję lekturę
    > http://xmpp.org/extensions/xep-0239.html - czyli specyfikację protokołu
    > przesyłania binarnych danych zgodnie z duchem, ideą itd. XML.

    Dobra, dobra:

    <cytat>
    Last Updated: 2008-04-01
    </cytat>

    RFC z 1.04 w różnych latach też są fajne 8-)

    --
    Paweł Kierski
    n...@p...net

strony : 1 ... 3 . [ 4 ] . 5 ... 7


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: