eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingCo może robić konstruktor i dlaczego nie?Re: Co może robić konstruktor i dlaczego nie?
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!newsfeed2.atman.pl!newsfe
    ed.atman.pl!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-b-01.new
    s.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
    From: "slawek" <h...@s...pl>
    Newsgroups: pl.comp.programming
    References: <4ff4908d$0$1302$65785112@news.neostrada.pl>
    <o...@a...home>
    <4ff4a8dd$1$26700$65785112@news.neostrada.pl>
    <jt2mjk$hud$1@mx1.internetia.pl> <jt3ab8$gr8$1@inews.gazeta.pl>
    <4ff54041$1$26701$65785112@news.neostrada.pl>
    <7...@a...googlegroups.com>
    <4ff5a465$0$1221$65785112@news.neostrada.pl>
    <1...@n...googlegroups.com>
    In-Reply-To: <1...@n...googlegroups.com>
    Subject: Re: Co może robić konstruktor i dlaczego nie?
    Date: Fri, 6 Jul 2012 16:01:34 +0200
    MIME-Version: 1.0
    Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=original
    Content-Transfer-Encoding: 8bit
    X-Priority: 3
    X-MSMail-Priority: Normal
    Importance: Normal
    X-Newsreader: Microsoft Windows Live Mail 15.4.3555.308
    X-MimeOLE: Produced By Microsoft MimeOLE V15.4.3555.308
    Lines: 34
    Message-ID: <4ff6efc0$1$26684$65785112@news.neostrada.pl>
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 62.69.202.124
    X-Trace: 1341583296 unt-rea-a-01.news.neostrada.pl 26684 62.69.202.124:64075
    X-Complaints-To: a...@n...neostrada.pl
    Xref: news-archive.icm.edu.pl pl.comp.programming:198298
    [ ukryj nagłówki ]

    Użytkownik "Andrzej Jarzabek" napisał w wiadomości grup
    dyskusyjnych:1e74e8d1-f280-479f-96a7-fa085ecea990@n1
    6g2000vbn.googlegroups.com...

    >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

    To jest chore.

    Ale czas na PODSUMOWANIE...

    Pomysł, aby w duchu RAII odpalać np. wątek itp. przez wywołanie
    konstruktora, tj. przez samo skonstruowanie obiektu pewnej klasy (w dalszej
    dyskusji nazywanej Foo) może być kłopotliwy... bardziej niż np. wywoływanie
    dodatkowej publicznej metody run(), a to dlatego że:

    1. różne języki w różny sposób rozumieją konstruktor i nie jest on
    zupełnie-taką-samą-metodą-jak-inne (vtable, wyjątki), problemy z
    dziedziczeniem;
    2. możliwe jest przypadkowe stworzenie obiektu tymczasowego (co może w
    niezamierzony sposób zrobić coś, czego nie chcielibyśmy);
    3. konstruktor powinien zawierać wyłącznie te operacje, które nie mają
    efektów ubocznych innych niż tworzenie obiektów powiązanych z daną klasą.

    Punkt 3. można tak rozwinąć: konstruktor może tworzyć obiekty zagregowanie,
    lecz konsekwentne stosowanie reguły będzie chronić przed nieodwracalnymi
    efektami ubocznymi i w tym przypadku. Zawsze należy dążyć do tego, aby para
    wywołań konstruktor-destruktor (bez jakichkolwiek innych pomiędzy) była bez
    znaczenia dla działania programu. (A ten postulat nie jest spełniony, gdy
    konstruktor zawiera nietrywialny run(), tj. wywołanie
    procedury/funkcji/metody/czegokolwiek co niesie ze sobą nieodwracalne skutki
    np. otwarcie pliku do zapisu i skasowanie w nim "starych" danych.)

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: