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!newsfeed2.atman.pl!newsfeed.
    atman.pl!goblin1!goblin.stu.neva.ru!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 09:00:46 +0000 (UTC)
    Organization: A noiseless patient Spider
    Lines: 133
    Message-ID: <ldv7fu$3vq$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>
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    Injection-Date: Tue, 18 Feb 2014 09:00:46 +0000 (UTC)
    Injection-Info: mx05.eternal-september.org;
    posting-host="dee8a23a3079bab6ac237103cf6efd4e"; logging-data="4090";
    mail-complaints-to="a...@e...org";
    posting-account="U2FsdGVkX1/tEr0LyNwiPUCFfZPh/j1rWgYQMSj4leA="
    User-Agent: slrn/1.0.1 (Linux)
    Cancel-Lock: sha1:iaemus0iPl8mu4uEJdSKUgVHal8=
    Xref: news-archive.icm.edu.pl pl.comp.programming:205182
    [ ukryj nagłówki ]

    firr <p...@g...com>:
    > nie jestes gotów na rozmowe, moglbym pogadac ale
    > musialaby to byc powazna rozmowa dot techniki, no ale mozemy sprobowac
    przedmiotowo, napisz mi jak napisałbyś obiektowo taki program: (tj skladajacy sie z
    takich elementów)
    >
    > 1) okno (typowo winapowskie, setup okna)
    > 2) pixelbufor (kontener z pixelami)
    > 3) blitter (funkcja do blitniecia pixelbufora do obszaru klienta okna)
    > 4) jakies elementarne handlery dla myszy i klawiatury (powiedzmy ze kod podpiety
    pod eventy myszy miałby robic rysowanie pixeli w oknie, tj
    > w pixelbuforze ktory jest pozniej blitowany do okna)
    >
    > nie chodzi mi o sam kod, mozesz wykropkowac //...
    > ale o obiektową formę, (mozesz podzielic na dowolne
    > obiekty wg uznania alechailbym zobaczyc jak to by wygladalo (najlepiej w postaci
    kodu oop w jawie) ))

    Nie jestem specem od OOP, ale może jakoś tak?

    #v+
    class Pixelbuffer {
    // klasa zawierajaca bufor obrazu.
    };

    class Window {
    private:
    MouseHandler& m;
    KeyboardHandler& k;

    public:
    // wspolne funkcje, istniejace dla kazdego okna

    // dodaje handler do okna
    void addMouseHandler(Handler& h);
    void addKeyboardHandler(Handler& h);
    void draw(Costam& cos);
    };

    class Blitter {
    // interfejs
    };

    class HardwareBlitter: public Blitter {
    void blit(Window& win, Pixelbuffer& buf) {
    // rysowanie na oknie przy pomocy hardware, OpenGL?
    }
    };

    class SoftwareBlitter: public Blitter {
    void blit(Window& win, Pixelbuffer& buf) {
    // rysowanie na oknie przy pomocy software, putPixel?
    }
    };

    class QuickBlitter: public Blitter {
    void blit(...) { // jak wyżej
    // rysowanie w oknie tylko zmienionych obszarów
    }
    };

    // niekoniecznie podział na hardware/software blitter, może być np.
    // DebugBlitter, zbierający info o prędkości blitowania, czy coś takiego

    class Handler {
    // wspolne funkcje dla roznych implementacji konkretnych handlerow
    // moze byc tez interfejs ;)
    };

    class MouseHandler: public Handler {
    void onClicked(Slot& callback, Point& position) {
    callback.emit(position);
    }

    // onLeftDown, onLeftUp, etc
    };

    class KeyboardHandler: public Handler {
    void onKeyPressed(Slot& callback, Key& key) {
    callback.emit(key);
    }

    // onKeyDown, onKeyUp, etc
    }:

    class Game {
    private:
    Pixelbuffer p;

    Blitter& blit;
    Window& w;

    public:
    Pixelbuffer& getBuffer() { return p; }

    void blit() {
    // dla każdego obiektu w grze, renderuje pixelbuffer dla tego obiektu
    // też może być wprowadzony podział na klasy software/hardware rendering
    blit.blit(w, p);
    }

    void run() {
    while(! done) {
    doGame();
    blit();
    }
    }
    };

    ----

    int main() {
    Pixelbuffer p;
    Game game(p);
    HardwareBlitter blit; // lub: SoftwareBlitter, QuickBlitter, lub inne blittery
    Window gameWindow;

    game.addWindow(gameWindow);
    game.setBlitter(blit);

    MouseHandler m;
    KeyboardHandler k;

    gameWindow.addMouseHandler(m);
    gameWindow.addKeyboardHandler(k);

    m.onClicked([&] (Point& mousePos) {
    game.addSomeObject(mousePos);
    });

    gameWindow.show();
    game.run(); // działa, np. dopóki gameWindow istnieje
    return 0;
    }
    #v-

    Sorry, że nie Java, nie pamiętam jej składni ;)

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: