上記の書籍を読んで、Javaによる実践的なソフトウェア開発をするために必要な知識を得られたので、その中から特に印象に残ったものをメモしておく。関連記事これの前段階である入門編を読んだ際のまとめ記事はこちら。高階関数による宣言的な記述タイムゾーンの操作ファイル操作時の例外処理XMLファイルを操作するためのJAXPOSSライブラリJacksonを使ったJSONファイルの操作javadocによる仕様書の自動生成チーム開発チーム開発に必要なものアジャイル開発の進め方スクラムプロダクトバックログスプリントバックログ障害リストスプリント計画ミーティングデイリースクラムスプリント・レビュースプリント・レトロスペクティブデイリースクラムの実践ポイントThreadクラスによる並列処理synchronizedによる排他制御メモ2つのインスタンスが等価かを判定するequals()equals()は、Objectクラスから継承して備える。2つの変数に入っているインスタンスを比較して等価であるかを判定できるが、その判定方法はオーバーライドして実装する。下記のコードはその実装例。習慣化するまではオーバーライドをし忘れそうなので注意したい。下記の2段階の処理が行われる。高速だが曖昧な方法で、「大体同じか?」を判定する「大体同じ」な要素にだけ、equals()で「厳密に同じか?」を判定する1における「大体同じか?」の判定には、インスタンスに対するハッシュ値を利用するが、それを計算するためにObjectクラスが持つhashCode()を継承してオーバーライドする必要がある。ハッシュ値とは、インスタンスの内容を数値として要約したもの。下記は、オーバーライド時のハッシュ値計算の実装例。}}インスタンスのコレクションを作りたくなる時もよくあるので、このオーバーライドも習慣化しないといけない。インスタンスの自然順序付け例えばArrayListによるインスタンスのコレクションがあるとして、それをCollections.sort()で並び替えるには、そのクラスについて一般的に想定される並べ順を規定しておく必要がある。その手段としては、java.lang.Comparableインターフェースを実装する方法がある。}}実装するのは面倒だけど、逆に言えば実装次第で自由に並べ替えのルールが作れるということ。後工程の処理を効率化するためにコレクションをソートしておくことはよくやるので、使いこなせるようにしないといけない。null安全に配慮したOptionalクラスjava.util.Optionalクラスは、下記4つの特徴を持つ、1つのインスタンスを格納するだけクラス。newできず、静的メソッドofNullable()で生成するisPresent()を用いて中身がnullか検証できるget()で内容を取得できるが、nullなら例外が発生するorElse()でnullを置換して内容を取得できるOptionalクラスは特に、メソッドから戻り値を返す場面で利用され、nullが格納されている可能性を考慮した処理の記述を呼び出し元に強制できる。System.out.println(s.orElse("nullのため処理できません");}関数オブジェクトの代入Javaでは関数も第1級オブジェクトとして扱うようになっている。よって、プログラム内で関数を変数に代入できる。}}標準関数インターフェース上記で利用したFunctionクラス以外にも、関数オブジェクトを格納するための下記のようなインターフェースが用意されている。これらは標準関数インターフェースと呼ばれる。下記のようなラムダ式があるとする。3.14;}こういったラムダ式は、様々な省略した書き方をすることができ、それには次に紹介するようなルールがある。3.14個人的にはラムダ式はあまり使いたくないけど、こうやって簡単に書けるやり方は知っておいて損はなさそう。}}宣言的な記述とは、目的だけを表現してその実現方法までは踏み込まない書き方をいう。いうヒトの思考に近い直感的な書き方は可読性の向上に繋がりそう。タイムゾーンの操作タイムゾーンは、java.util.TimeZoneクラスを用いて操作する。現在のタイムゾーンを取得して表示するコードは下記のようになる。状況によってはclose()が実行されずにメソッドが終了してしまう場合がある。}}こういったことを防ぐために、必ずclose()されることを保証できるようなコードを書かないといけない。以上を踏まえると、正しい例外処理は下記のようなコードになる。</job></person>JAXPによってファイル中の特定のデータを読み取るコードは下記のようになる。Notation)がある。JavaScriptで利用されていた独自の形式だったが、今では広く利用されている。}}Javaの標準APIとしては、基本機能であるJSON-Pと、より発展的な操作を実現するためのJSON-Bが用意されている。歴史的経緯より、OSSライブラリであるJacksonやgsonが使われる場合が多いらしい。Jacksonを使うには、まずこちらのサイトを参考にセットアップを行う必要がある。内部構造を逐次指示してアクセスする方法である。こちらのコードでは、Jacksonに準備されているObjectMapperというクラスを使ってJSONファイルの内容をJsonNodeインスタンスとして読み取り、その内容を取り出すようにしている。}}そしてもう一つの方法は、「JSONのデータ構造と同じクラスを作っておき、そこにデータを保存する」というものである。person;}次に全体クラスのメンバであるPersonDataクラス。job;}次に、PersonDataクラスのメンバであるJobDataクラス。year;}そして最後に、上記の3つのクラスを用いてJSONファイルを読み取るクラス。}}javadocによる仕様書の自動生成JDKに付属しているJavadocを使うことで、作成済みのコードからプログラムの仕様書を自動生成できる。/で囲った特殊なコメントとして記述する。}}また、メソッドのパラメータや戻り値などの記述を含めるには、Javadocコメント内に@で始まるタグを記述する必要がある。共通の手順アジャイル開発の進め方2~4週間の短期間で工程を反復するスパイラル型開発プロセスを実践する。素早く顧客の要求に対応できるようになる。1回の工程反復期間のことはイテレーションあるいはスプリントと呼ぶ。スクラム世界で最も多く活用されているとされるアジャイル開発方法論。プログラミングに関する言及はほとんどなく、製品開発チームのメンバーの役割や連携をどう実現するかを重視している。スクラムでは、各メンバーが次の3つの役割を担うとしている。1プロダクトオーナーチームが開発すべき製品に関する最終責任者。作るべき機能の優先順位を決めるなど、開発を方向付ける。実際に開発をするメンバー。お互いの作業を手助けしながら、チーム全体の成果に全員が責任を持つ。3スクラムマスタースクラムに関する専門家。チームが正しくスクラムをできるよう指導や助言を行う。円滑なチーム活動とチームの成長を手助けする。プロダクトバックログ製品が実現すべき要件や機能を、優先度が高い順にリストアップしたもの。プロダクトオーナーが管理する。スプリントバックログ現在のスプリントで実現すべき機能と、その達成に必要な作業項目のリスト。各機能の進捗状況などが一目でわかるように、タスクボードに整理して提示することが多い。開発メンバー全員で管理する。障害リストチームの活動を阻害している事柄を、懸念度が高い順にリストアップしたもの。スクラムマスターが管理する。具体的な開発方法や作業量などを見積もり、スプリントバックログに取り込む。スプリントの最初に1回だけ実施する。デイリースクラム開発チームが全員で1か所に集まり、進捗状況や問題点などを共有するミニ会議。スプリント期間中に毎日行う。評価とフィードバックを得る。スプリント期間中の最後に1回だけ実施する。スプリント・レトロスペクティブ自分達チーム自体の活動や成長について振り返りを行う。次回のスプリントでより効率的な開発を行うためのヒントを得る。スプリント・レビューの後に1回だけ実施する。デイリースクラムの実践ポイント基本的には各自が下記について発表する。昨日やったこと今日やることその他チームに影響がありそうなことまた、実践の際は下記を心がける。長くても15分以内に終わらせる割り込まない、議論は始めない全員に対して共有するThreadクラスによる並列処理Threadクラスを利用して、例えば下記2つの処理を同時に実行するプログラムを考える。9から0までのカウントダウンを表示するカウントダウン中に「STOP」と入力すると、カウントダウンを停止するスレッドの実現方法としては、まずThreadクラスを継承してrun()メソッドをオーバーライドする。このとき、run()には別スレッドで処理したい内容を書き込む。別スレッドの実行を開始したい場所で上記のクラスをインスタンス化し、start()を呼び出す。以上を踏まえると、作りたいプログラムのコードは下記のようになる。表示を行う別スレッドを定義するクラスを作る。}}そして、そのクラスをインスタンス化して別スレッドを開始するクラスを作る。}}synchronizedによる排他制御マルチスレッドプログラミングにおいて注意したいのが、複数のスレッドが同時に同じデータにアクセスして壊してしまうこと。いった問題を避けるために、1つのスレッドがあるデータにアクセスしている間、他のスレッドは待機するようにコントロールする。これをスレッドの同期や調停という。Javaには、スレッドを調停するための仕組みが準備されていて、それらを利用し「複数のスレッドから同時に利用しても安全なクラスやメソッド」は、スレッドセーフな設計であるという。スレッドの調停を行うには、次のようなsynchronizedブロックを利用する。(1)Sponsor引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。