K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]


新規投稿 | 開設者ホームページへ戻る | ヘルプ


[2017] Re:『Java謎+落とし穴徹底解明』の正誤について
返信


投稿者:藤四郎
2017/11/05 20:16:43

Link:
おくればせながら、正誤表の追加とソースの訂正、ありがとうございました。おそれいりますが、またいくつかきづいてしまいましたので、ふたたびご面倒をおかけします。今回も当方の勘違いがありましたらお許しください。 (才能に乏しいようでなかなか理解がすすみませんが、趣味としてこつこつやっております。)

まずは、またもや細かいことですみませんが……。 p. 147 の英文で [emphasis is in the original text] とあるのが反映されていません。和訳の方はされています。また、和訳の方で「どのオブジェクトも参照しない特殊なnull参照」に相当する英文がないです。

X-Draw のソースで DrawWindow.java の l. 110 -
    public void mouseDown(int x, int y) {}
    public void mouseUp(int x, int y) {}
    public void mouseDrag(int x, int y) {}
は不要と思われます。

あと、 l. 164 - 
    public void resize(int width, int height) {
        this.adjustBoundary();
    }
ですが、今後の拡張を見込んでこのようにされたのでしょうか。

3.6.7 「本当にdraw()をShapeに入れてよいのか?」が、コードを実地にかいてみることでようやくわかってきました。それできづいたのですが、 p.227 の interface Visitor の三つのシグネチャーの頭に void がいるかと。また、 p.228 の
        v.visitPolyline(polyline);
は実際には
        v.visitPolyline(this);
になるかと。

ちなみに、つぎのようにかきましたが、これで適当でしょうか。(Polyline たちから draw() を排除するかわりに getter をいれなければならなくなったのがどうも……。)

class Polyline extends Shape {
        private Point2D[] points;
        
        Polyline(Point2D[] points) {
                this.points = points;
        }
        
        public Point2D[] getPoints() {
                return this.points;
        }

        void accept(Visitor v) {
                v.visitPolyline(this);
        }
}
// Circle, Rectangle は略

class DrawVisitor implements Visitor {
        Drawable drawable;
        
        DrawVisitor(Drawable drawable) {
                this.drawable = drawable;
        }
        
        public void visitPolyline(Polyline polyline) {
                Point2D[] points = polyline.getPoints();
                for (int i = 0; i < points.length - 1; i++) {
                        drawable.drawLine(points[i].getX(), points[i].getY(), points[i + 1].getX(), points[i + 1].getY());
                }
        }
        // visitCircle(), visitRectangle() は略
}

XDrawCanvas の paint() の
        shape.draw(this.drawWindow);

        shape.accept(new DrawVisitor(this.drawWindow));
に変更。

その他、まだ消化しきれていないこともありますので、今後もご面倒をおかけしてしまうかもしれませんが、どうぞよろしくお願いします。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[ より新しい投稿] [ より古い投稿]