eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingDavid West: OOP is DeadRe: David West: OOP is Dead
  • Data: 2014-02-18 10:00:46
    Temat: Re: David West: OOP is Dead
    Od: toslaw <s...@n...4u.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie 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: