eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingDavid West: OOP is Dead › Re: David West: OOP is Dead
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask
    .pl!news.nask.org.pl!news.unit0.net!eternal-september.org!feeder.eternal-septem
    ber.org!news.eternal-september.org!.POSTED!not-for-mail
    From: toslaw <s...@n...4u.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: David West: OOP is Dead
    Date: Tue, 18 Feb 2014 19:40:49 +0000 (UTC)
    Organization: A noiseless patient Spider
    Lines: 59
    Message-ID: <le0d01$46k$1@dont-email.me>
    References: <ldaa9r$3j5$1@speranza.aioe.org>
    <9...@g...com>
    <52fccceb$0$2362$65785112@news.neostrada.pl>
    <6...@g...com>
    <52fceef0$0$2140$65785112@news.neostrada.pl>
    <1...@g...com>
    <ldv7fu$3vq$1@dont-email.me>
    <6...@g...com>
    <a...@g...com>
    <ldvj3g$28c$1@dont-email.me>
    <6...@g...com>
    <ldvqkt$bnu$1@dont-email.me>
    <4...@g...com>
    <c...@g...com>
    <2...@g...com>
    <d...@g...com>
    <e...@g...com>
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    Injection-Date: Tue, 18 Feb 2014 19:40:49 +0000 (UTC)
    Injection-Info: mx05.eternal-september.org;
    posting-host="dee8a23a3079bab6ac237103cf6efd4e"; logging-data="4308";
    mail-complaints-to="a...@e...org";
    posting-account="U2FsdGVkX1/Co8U4Txptu2mzgruSPzhPJ4mZNGo5rzU="
    User-Agent: slrn/1.0.1 (Linux)
    Cancel-Lock: sha1:CpA8ZAa+bnqtP855c2NzWHAkhho=
    Xref: news-archive.icm.edu.pl pl.comp.programming:205193
    [ ukryj nagłówki ]

    firr <p...@g...com>:
    > > dla przykladu czy nie lepiej osadzic pixelbufora
    > > blittera i window od razu w Game, lub jeszcze
    > > inaczej na przyklad window w game a pixelbufor w
    > > window z kolei blitter w pixelbufor lub jeszcze inaczej? Co o tym decyduje?
    > w systemie modułowym cały ten 'setup' i 'konfiguracja' wzajemnej
    > widzialnosci miedzy tymi obiektami ktora tutaj jest wypączkowywana w runtime
    > (dla mnie brzydka i ograniczona, choc jestem chetny uslyszec jak ktos chce
    > tego braonic) jest po prostu statycznie dany w bardzo ładnej i czystej
    > formie w systemie modułowym , gdzie u mnie wygladołoby to mw tak (nie
    > mialbym modulu game ale zamiast niego moduł ramka, kod updatujacy i rysujacy
    > dana ramke
    [bzzz]

    Aby zrozumieć, że OOP nie ogranicza w żaden sposób programowania, może
    powinieneś wyobrazić sobie nie sam akt pisania programu, ale jego przyszły
    rozwój.

    To znaczy: napisałeś program, który w 100% wypełnia zachcianki klienta, czyli
    rysuje piksel na ekranie. Potem natomiast przychodzi drugi klient, i zamawia u
    ciebie program, który rysuje nie piksel, ale prostokąt. Teraz, aby nie kopiować
    projektu A do katalogu B, i nie posiadać dwóch wersji dość podobnego kodu
    źródłowego, mógłbyś kombinować tak, żeby tylko dopisać do kodu A funkcję
    rysowania prostokątów, ale tak, aby funkcja rysowania pikseli nie została
    usunięta. Czyli, aby program był w stanie rysować i piksele i prostokąty, ale
    nie obydwa na raz.

    Twój kod modułowy może osiągnąć to np. tak:

    1) W funkcji rysującej piksel możesz dodać warunek:

    if(pierwszyKlient) { rysujPiksel(); } else { rysujProstokąt(); }

    Jednak, gdy przyjdzie trzeci klient, i zechce program, który blituje od tyłu do
    przodu, a nie tak, jak pierwszych dwóch klientów, od przodu do tyłu, sytuacja
    może się skomplikować (szczególnie jak przyjdzie kolejnych 10 klientów z
    kolejnymi zachciankami).

    2) Możesz wyrzucić funkcję rysującą do oddzielnego pliku cpp, dopisać nowy plik
    cpp, który implementuje tą samą funkcję, ale zamiast piksela rysuje prostokąt.

    Jednak, gdy przyjdzie klient, który zechce, by na ekranie został narysowany
    prostokąt, a na nim piksel, nie będziesz mógł wykorzystać obu plików cpp
    jednocześnie. Będziesz zmuszony stworzyć trzeci plik, który rysuje prostokąt i
    piksel, będzie on jednak powielał kod i z pierwszego pliku cpp, i z drugiego.

    3) Masz jakiś inny pomysł? ;)

    Mój kod obiektowy wymaga stworzenia nowego interfejsu logiki rysowania i dwóch
    klas:

    class RysujPiksel: public LogikaRysowania { };

    class RysujProstokąt: public LogikaRysowania { };

    Sama funkcja rysująca wykorzystuje klasę LogikaRysowania, więc automatycznie
    akceptuje wszystkie klasy, które ją dziedziczą. Wybór, która klasa ma zostać
    użyta, może być dokonany podczas działania programu. Może być to jedna klasa,
    albo obie i nie trzeba wybierać, które pliki skompilować, a których nie ;)

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: