読者です 読者をやめる 読者になる 読者になる

『オブジェクトデザイン』読書メモ:第 6 章「制御スタイル」

これまでの分(第 1 〜 5 章)はこちら。 『オブジェクトデザイン』読書メモ:第 1 章「設計概念」 『オブジェクトデザイン』読書メモ:第 2 章「責務駆動設計」 『オブジェクトデザイン』読書メモ:第 3 章「オブジェクトを見つける」 『オブジェクトデザイ…

情報セキュリティスペシャリスト試験に合格した

2015 年春の IPA 情報セキュリティスペシャリスト試験 (SC) に合格しました。 点数は以下のような感じでした。2013 年秋の応用情報技術者合格の効力で、今回は午前 I は受けてないです。中の上。 勉強は、まず、午前問題対策として、以下の本の知識編で知識…

『オブジェクトデザイン』読書メモ:第 5 章「コラボレーション」

これまでの分(第 1 〜 4 章)はこちら。 『オブジェクトデザイン』読書メモ:第 1 章「設計概念」 『オブジェクトデザイン』読書メモ:第 2 章「責務駆動設計」 『オブジェクトデザイン』読書メモ:第 3 章「オブジェクトを見つける」 『オブジェクトデザイ…

『オブジェクトデザイン』読書メモ:第 4 章「責務」

これまでの分(第 1 〜 3 章)はこちら。 『オブジェクトデザイン』読書メモ:第 1 章「設計概念」 『オブジェクトデザイン』読書メモ:第 2 章「責務駆動設計」 『オブジェクトデザイン』読書メモ:第 3 章「オブジェクトを見つける」 前回の章まででは、オ…

『オブジェクトデザイン』読書メモ:第 3 章「オブジェクトを見つける」

これまでの分(第 1, 2 章)はこちら。 『オブジェクトデザイン』読書メモ:第 1 章「設計概念」 『オブジェクトデザイン』読書メモ:第 2 章「責務駆動設計」 ここからは実際の設計作業についての章です。第 3 章「オブジェクトを見つける」では、責務駆動…

『オブジェクトデザイン』読書メモ:第 2 章「責務駆動設計」

前回分(第 1 章)はこちら。 『オブジェクトデザイン』読書メモ:第 1 章「設計概念」 2 責務駆動設計 責務駆動設計についておおまかに説明 分析とオブジェクトの発見 責務の割り当て コラボレーションの設計 それぞれの詳細は後の章で説明 2.1 見て、記述…

『オブジェクトデザイン』第 1 章「設計概念」読書メモ

以下のスライドなどを読んだのがきっかけで、Wirfs-Brock の『オブジェクトデザイン (Object Oriented SELECTION)』を読んでいます。 オブジェクト指向の設計と実装の学び方のコツ ブログにメモを書きながら、とりあえず第 6 章の内容までは読み解きます。今…

Emacs のパッケージ管理に Cask を導入した

OS X の Emacs 環境に Cask を導入しました。 Cask によって、Emacs 環境が依存する elisp のリストをファイルに書き、そのファイルを読み込むことで、コマンドひとつで elisp のインストールやアップデートができるようになります。つまり、導入する elisp …

launchd で Homebrew を自動アップデート(Yosemite 編)

対応した内容をブログにメモしておくのを忘れていたので、いまさらながら書いておきます。 OS X で cron 的なことをするためには、launchd というものを使う必要があります。以前、パッケージマネージャ Homebrew のアップデートを自動で走らせたいと思い、l…

単体テスト時に Hamcrest の Matcher#closeTo で誤差あり浮動小数点数の等値比較

状況 JUnit + Hamcrest で単体テストを書いている。 問題 たとえば、単体テストとして、浮動小数点数を返すメソッドを用いて等値比較をしたいとする。ここで、あるテスト対象オブジェクト sut のメソッド getDoubleValueWithError() は 1.0 を返すが、誤差を…

ISBN を例として不変クラスを作ってみる (2)

前回に続いて、今回は実際に不変クラスを作ってみる。 不変クラスの条件 不変クラスの条件を復習しよう。条件は以下の通りだった。 すべてのフィールドの可視性を private にする final をつけるなどしてすべてのフィールドを変更不可にする setter のような…

ISBN を例として不変クラスを作ってみる (1)

Effective Java で説かれているのが、不変クラスの重要性だ。以前、読書メモを以下の記事に書いた。 Effective Java 第 2 版:第 4 章 項目 15 - kymmt's note 不変クラスとは、インスタンス生成後は保持データの変更ができないクラスのことだ。例えば、Java…

Maven で依存 JAR ライブラリを target/dependency にコピー

問題 $ mvn package で、プロジェクトの target ディレクトリ直下に、プロジェクトの成果物として JAR ファイルが作成される。 このとき、例えばマニフェストに Class-Path: ./dependency/foo.jar ./dependency/bar.jar のように指定する。そして、JARをコマ…

Maven に JDK 1.8 を認識させる

問題 Maven で mvn package などビルドコマンドを実行すると、以下のエラーが表示された。 ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------…

Jackson で JSON データを POJO に格納

前回に続いて。 Jackson を使うと、JSON から POJO へデータを格納できる。 基本 以下のような Book という POJO を考える。著者が一人しか設定できないなど、いろいろ問題があるが、例なので気にしないでほしい。 public final class Book { private String…

Java 向け JSON ライブラリ Jackson でデータを読み込む

使ってみる機会があったのでメモ。 はじめに Jackson は Java 向けの JSON 処理用のライブラリである。 FasterXML/jackson ランダムアクセスで JSON からデータを読みたい。今回は、Jackson にある Databind というモジュールを使う。 データの読み込み 外部…

Effective Java 第 2 版:第 5 章 項目 28, 29

ジェネリックスの章、最後の 2 項目。ワイルドカードを使った API と、マップのキーのパラメータ化について。 項目 28: API の柔軟性向上のために境界ワイルドカードを使用する extends を用いた境界ワイルドカード スタックを考える。pushAll は以下の API …

Effective Java 第 2 版:第 5 章 項目 26, 27

今回は、ジェネリックな型やメソッドを作るという、ジェネリックスの章の中でも重要な部分。 項目 26: ジェネリック型を使用する 自分でジェネリック型を書くときの方法についての話。 基本 まず、クラス宣言に型パラメータを追加する。このとき、型名はなん…

Effective Java 第 2 版:第 5 章 項目 24, 25

項目 24: 無検査警告を取り除く 型パラメータを書いていないなどの理由で、コンパイル時に無検査警告が出ることがある。 無検査警告は全て取り除くべきである。 なぜなら、全ての警告を取り除けば、そのコードは型安全であると保証できるからである。 もし、…

Effective Java 第 2 版:第 5 章 項目 23

ここから 5 章の「ジェネリックス」に入る。 ジェネリックスを適切に使えば、型安全なコードを書くことができる。 項目 23: 新たなコードで原型を使用しない Java 1.5 より前に、コレクション宣言で用いられていた原型 (raw type) は、型安全の観点から、も…

Effective Java 第 2 版:第 4 章 項目 22

項目 22: 非 static のメンバークラスより static のメンバークラスを選ぶ 4 種のネストしたクラスの説明が述べられている。 ネストしたクラス (nested class) とは、あるクラスの中で定義されているクラスのことである。 ネストしたクラスは以下の 4 種類か…

Effective Java 第 2 版:第 4 章 項目 20, 21

項目 20: タグ付クラスよりクラス階層を選ぶ 後の章で出てくる enum をタグとして持たせたタグ付クラスはよくないという話。 わざわざこの悪い方法をとる人はあまりいなさそうな気もする。 以下のようなクラスを考える。 class Figure { enum Shape { RECTAN…

launchd で Homebrew を自動アップデート

追記:Yosemite 以降では以下の記事を参照してください。 launchd で Homebrew を自動アップデート(Yosemite 編) - kymmt's note Homebrew を使っていて、たまに brew doctor すると、以下のメッセージが表示される。 Warning: Your Homebrew is outdated.…

Effective Java 第 2 版:第 4 章 項目 18, 19

項目 18: 抽象クラスよりインタフェースを選ぶ インタフェースの利点 主に以下の利点がある。 簡単に実装できる ミックスインを実現しやすい 階層になっていないフレームワークを組織できる ラッパークラスイディオムを利用できる 骨格実装を提供できる 骨格…

Effective Java 第 2 版:第 4 章 項目 16, 17

項目 16: 継承よりコンポジションを選ぶ 継承を避けておきたい理由 あるサブクラスはスーパークラスの実装に依存してしまうため。 スーパークラスの実装が変わったら、サブクラスの実装も追随して書き換えなければならない。 解決法:コンポジション コンポ…

Effective Java 第 2 版:第 4 章 項目 15

項目 14: 可変性を最小限にする この項目では、不変クラスの作り方に関して説明されている。 不変クラスは、生成したインスタンスの状態を変更できないようなクラスのことである。 String, 基本データクラス(BigInteger なども)は不変クラスである。 例え…

Effective Java 第 2 版:第 4 章 項目 13, 14

亀の歩みで読み進めている Effective Java は第 4 章へ入った。 第 4 章は「クラスとインフェース」。 この章では、Java でクラスやインタフェースの機能を適切に使うための方法が説明されている。 今回は 項目 13, 14 をメモ。 項目 13: クラスとメンバーへ…

Effective Java 第 2 版:第 3 章 項目 12

Comparable の実装を検討する インタフェース Comparable を実装するといいことがあるという話。 Comparable は以下のようなインタフェース。 public interface Comparable<T> { int compareTo(T t); } Javadoc は以下のリンクから。 Comparable (Java Platform</t>…

Effective Java 第 2 版:第 3 章 項目 11

clone を注意してオーバーライドする Object.clone は適切にオーバーライドしないと問題が起こるという話。 clone はあるオブジェクトのコピーを返すメソッドである。 Object (Java Platform SE 8 ) 例えば、GoF のデザインパターンの一つ、"Prototype" パタ…

Effective Java 第 2 版:第 3 章 項目 10

toString を常にオーバーライドする Object.toString をオーバーライドしておくと、クラスが使いやすくなるという話。 toString はオブジェクトを表現する文字列を返すメソッドである。 toString がオーバーライドされているクラスのオブジェクトを println …

Effective Java 第 2 版:第 3 章 項目 9

equals をオーバーライドする時は、常に hashCode をオーバーライドする 今回は、Object.hashCode の一般契約についての話。 hashCode は、あるオブジェクトのハッシュ値を返すメソッドである。 Object (Java Platform SE 8 ) java.util.HashMap のようなコ…

Effective Java 第 2 版:第 3 章 項目 8

本項から、第 3 章「すべてのオブジェクトに共通のメソッド」に入る。 Object クラスのメソッドには、一般契約と呼ばれる使用上の決まりが存在する。 この契約を守って Object クラスのメソッドをオーバーライドしないと、契約を元に設計されている別のクラ…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 7

ファイナライザを避ける Effective Java 第 2 版、第 2 章の項目 7。 ファイナライザはオブジェクトがガベージコレクション (GC) により破棄されるときに呼び出されるメソッドである。 Java では Object クラスで protected void finalize() として定義され…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 6

廃れたオブジェクト参照を取り除く 自前でメモリ管理しているときは、廃れた参照が現れてメモリリークを起きることを防がなければならないという話。 廃れた参照とは、存在しているが使われることのない参照のことである。 例えば、配列を用いてオブジェクト…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 5

不必要なオブジェクトの生成を避ける リソースを効率よく使うためには、以下のような不必要なオブジェクトの生成はできるだけ避けたいという話。 不変クラスを毎回 new メソッドが呼び出されるごとの高コストなオブジェクトの生成 アダプターの複数個生成 意…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 4

private のコンストラクタでインスタンス化不可能を強制する java.lang.Math のような、static な関数や定数を集めたユーティリティクラスはインスタンス化する意味がないので、インスタンス化できないようにコンストラクタを書く必要がある。 これはシング…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 3

private のコンストラクタか enum 型でシングルトン特性を強制する Java でシングルトンを実装するときは、 static ファクトリーメソッド(項目 1 参照) 列挙型 (enum) のどちらかを使うのがよい。 一方、public static フィールドにインスタンスを保持する…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 2

数多くのコンストラクタパラメータに直面したときはビルダーを検討する 多くのフィールドを持ち、それに伴って多くのコンストラクタパラメータを持つクラスは、初期化のコードを書くときに煩雑であったり、可読性に難があることが多い。 このときに、ビルダ…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 1

現在、Joshua Bloch の Effective Java 第 2 版を読んでいるので、しばらくはこの本の読書メモを書いていく。 項目 1: コンストラクタの代わりに static ファクトリーメソッドを検討する インスタンスを生成するためには、コンストラクタを使うのが普通の方…

ブログを開設した

期待される内容 計算機に関する諸々に関して、その時々で学んでいることのまとめ。