<< 前 ホーム 次 >>

bakaid: 200611181

http://www.youtube.com/watch?v=dA2HPdOnQUk

だれ、このシムラケン。

--

ブレイク・スルーみたいなのがほしいんなら、SICPとか
読んだほうがいいだろうし。でも、そうじゃない人も
たくさんいるし。で、そうじゃない人にとっても、
ポインタや再帰は知っておかなきゃいけない知識なんだ
けど、SICP読破しなきゃ理解できないわけじゃないし。
で、オブジェクト指向プログラミングというかADT
プログラミングの知識っていうのもそうじゃない人に
とって知っておかなきゃいけない知識だと思ってるって
こと。

--

あんまり上の話と関係なくって、ここ最近書いてる
『ベタ』について。

たとえば、4点で矩形を表して、それを描画するような
プログラム。こういうのはOOPがもっとも得意とする
とこなんでエコヒーキになっちゃうけど。これを
Component#paintの中だけで書こうとすると、結構大変。
でも、描画される矩形のクラスを切り出して、線の
描画をベタにやっちゃえば単純になる:

class DrawnRect {
    public void draw(Graphics g) {
        setPenColor(g);
        g.drawLine(p1.x, p1.y, p2.x, p2.y);
        g.drawLine(p2.x, p2.y, p3.x, p3.y);
        g.drawLine(p3.x, p3.y, p4.x, p4.y);
        g.drawLine(p4.x, p4.y, p1.x, p1.y);
    }
}

当然、このDrawnRectのコンストラクタで点の座標を
望む順にソートしておかなきゃいけない。

で、もし、矩形の大きさを変えるハンドルをつけたいんなら:

    public void draw(Graphics g) {
        setPenColor(g);
        g.drawLine(p1.x, p1.y, p2.x, p2.y);
        g.drawLine(p2.x, p2.y, p3.x, p3.y);
        g.drawLine(p3.x, p3.y, p4.x, p4.y);
        g.drawLine(p4.x, p4.y, p1.x, p1.y);
        if (active) drawResizeHandles(g);
    }

    private void drawResizeHandles(Graphics g) {
        drawResizeHandleUpper(g);
        drawResizeHandleRight(g);
        drawResizeHandleLower(g);
        drawResizeHandleLeft(g);
    }

    private void drawResizeHandleUpper(Graphics g) {
        Rectangle rect = getResizeHandleRectUpper();
        g.fillRect(rect.x, rect.y, rect.width, rect.height);
    }

    private Rectangle getResizeHandleRectUpper() {
        int x = p1.x + (p2.x - p1.x) / 2 - RESIZE_HANDLE_SIZE / 2;
        int y = p1.y + (p2.y - p1.y) / 2 - RESIZE_HANDLE_SIZE / 2;
        return new Rectangle(x, y, RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE);
    }

みたいにベタに書く。矩形の4つの辺をforループで
回して描くっていうこともできるんだろうけど、
上みたいにクラスを切り出して、さらにそのメソッドを
切り出して・・・ってやったほうがわかりやすい。わかり
やすいっていうのは、書いてる本人にとってわかりやすい
ということ。似たような処理が10個20個あるなら別だけど、
4個くらいだったらベタに書く。

こういうベタな書き方で、なんとなく設計っぽくなるのが
OOPのいいところ。それに、ベタで書いてるからバグも
入りにくいし、あったとしても、どこがダメかすぐわかる。

それと、クラスを切り出して、それが必要とする
メソッドを切り出していくっていうのは、P.Graham氏の
いうボトムアップ・プログラミングに近いものがある。

本家Permlink

<< 前 ホーム 次 >>


Copyright © 1905 tko at jitu.org

バカが征く on Rails