技術とか戦略とか

SIerで証券レガシーシステムを8年いじってからSESに転職した普通の文系SEによる技術ブログ。

java

Base64の説明とjavaでのエンコード・デコードの例

Base64とは、テキストデータやバイナリデータ(画像ファイル、PDFファイル等)を表現する方式の一つです。以下の64種類の文字と末尾のパディング文字(=)を用いて表現するのが特徴です。・アルファベット(a~z, A~Z)・数字(0~9)・一部の記号(+, /) …

java:例外発生後に例外のメッセージを書き変える

例外オブジェクトにはメッセージが格納されており、getMessage()メソッドでそのメッセージを取得することができます。しかし、このメッセージはコンストラクタでのみ設定可能であり、メッセージを後で変更するメソッドは用意されていないため、例外クラスに…

java:引数で渡した参照型変数をメソッド内で変更する書き方について

参照型変数を引数としてメソッドに渡し、呼び出し先のメソッドの中でその参照型変数に変更を入れた場合、呼び出し元でもその変更内容を参照することができます。ソースコードで言うと、以下のような形で呼び出し元に影響を与えることができます。(isDisplay…

java:例外を先に生成して後でthrowする

多くのソースコードでは、例外を発生させると同時にthrowしています。しかし、例外クラスもクラスの一つであり、newするとオブジェクトが生成されますので、先に例外クラスのオブジェクトを生成し、オブジェクトとしてやりとりした後、後でthrowすることが可…

java:重複を排除する方法3選

今回は、javaでListの重複排除を行う方法を3つ紹介します。 1つ目の方法は、for文で自力でアルゴリズムを記述して重複排除を行う方法です。記述が冗長になり、コーディングミスも起こりやすいことから、現在の実務ではこの方法で重複排除を行うことはない…

java:標準入出力の入力元・出力先を変更する

javaには・System.setIn・System.setOut・System.setErrの3つのメソッドが用意されており、これらのメソッドにより標準入出力の入力元・出力先を変更することができます。これらのメソッドを利用することで、標準入力や標準出力を使用している処理の立ち振…

java:関数を引数として渡す

C#では、こちらの記事のようにdelegateの仕組みを利用して関数を変数として扱うことができます。例えば、引数と引き渡してコールバック処理を実現することができます。 javaでも、8以降であれば関数型インターフェースを利用して関数を変数として扱うことが…

無名クラスとは

javaやC#では、インスタンス変数をnewする際に、後ろに中かっこを記述し定義を行うことができます。ここで定義されるものは「無名クラス(匿名クラス)」と呼ばれ、クラス名を新たに定義することなく、インスタンス変数のクラス・インターフェースを継承・実…

動的計画法を試してみた

動的計画法とは、再帰的なロジックを、計算結果を都度記録するロジックで代替することで、計算速度を向上させるテクニックです。競技プログラミングのテクニックの一つなのですが、高度なアルゴリズムを実装する開発だけではなく普通の業務システム開発にも…

続・singletonとstaticの違い

こちらの記事について社内外でちょっとした議論になったので、その内容をまとめてみました。Singletonパターンを利用する理由は「外部からnewさせたくないから」だと思っていましたが、「そう書いた方がわかりやすいから」「staticではないメソッドも利用可…

SpringFrameworkのAOPとは

AOPとは、「アスペクト指向プログラミング(Aspect Oriented Programming)」の略称です。「アスペクト」を日本語に直訳すると「相」ですが、プログラミングの世界では「オブジェクト指向ではうまく分離できない横断的な機能」のことを指します。代表例とし…

型推論とは

型推論とは、メソッド内のローカル変数を初期値付きで(右辺がある状態で)宣言する際に、通常の型宣言の代わりに"var"という仮の型を使用できるという文法です。"var"を用いた際は、コンパイル時に自動で型を判断し、その型への置き換えが行われます。 C#で…

java:実務で使うテクニックでfizzbussを解いてみた

10年ほど前に流行ったプログラミングの問題として、fizzbussと呼ばれる問題があります。この問題は、応募者のプログラミング経験の有無を見極める問題であり、問題の内容は以下の通りです。・1から100までの数を出力する。・3の倍数の時は代わりに"fizz"と…

オブジェクト指向言語で良く言われる「委譲」とは

javaやC#といったオブジェクト指向言語のプログラミングの話をしている時に、「委譲」という言葉が出てくる時があります。「委譲」には色々な意味があるのですが、このようなケースでは「具体的な処理が実装されている他のクラスのメソッドを呼び出す」とい…

Eclipse + Maven で Apache POI を用いてExcelファイルを出力する環境の構築(HelloWorldまで)

Apache POI を用いることで、javaでExcelファイルを出力するプログラムを作成することができるようになります。今回は、環境設定を行い、HelloWorldを試す所まで記事にしました。ライブラリを落としてきたりパスの設定をするのに手間がかかるので、今回は Ec…

java:walkFileTreeメソッドの使い方

walkFileTreeメソッドとは、ディレクトリ構造を再帰的に走査するメソッドです。Java7で追加されたFilesクラスが提供するメソッドの一つであり、比較的新しいメソッドです。(このメソッドの提供により、ディレクトリ構造については自力でCompositeパターンを…

リスコフの置換原則とは

リスコフの置換原則とはオブジェクト指向の設計の原則の一つであり、「基本クラスをサブクラスに入れ替えても問題なく動かなけらばならない」という原則です。もしサブクラスに入れ替えると正しく動かなくなるのであれば、クラスを利用する側はサブクラスを…

単一責任の原則とは

オブジェクト指向の設計ではいくつかの原則があります。その中でも有名な原則の一つが「単一責任の原則」です。 この原則は、その名の通り「一つのクラスに持たせる責任は一つにする」という原則です。この原則が何のために用いられるのかと言うと、複数の理…

java:並行開発を行うためのテクニック

何も考えずにクラス分割を行いクラス毎に開発者を割り当てると、未完成のクラスを取り込むことができず、他のクラスが完成するのを待つ必要が出てきてしまいます。今回は、他のクラスが完成するのを待たずに並行開発するテクニックを、javaの例を用いて説明…

java:WEBからHTMLファイルを取得するサンプルプログラム

行きつけのサイトのログ(HTMLファイル)を定期的に取得しているのですが、その時に使用しているサンプルプログラムを公開します。Javaの実行環境が整っているWindowsOSで、LogGet.java と LogGet.bat を同じディレクトリに置き、LogGet.bat を実行すると、…

クラス図とjavaソースの対応一覧

クラス図とはUMLの一種で、以下のような形でクラスの定義と各クラスの関係を表す設計図のことです。 今回は、クラス図で使われる記法とjavaソースの対応について、一覧にしてみました。参考になれば幸いです。 【クラス定義】 【各クラスの関係】

javaでのCommandパターン

Commandパターンとはデザインパターンの一種で、1つ1つのコマンド(命令)をそのままオブジェクトとして表現するパターンです。コマンドをオブジェクトとして表現することで、コマンドの管理(追加・削除・実行)が可能になるというメリットがあります。 …

javaでのStateパターン

Stateパターンとはデザインパターンの一種で、1つ1つの状態をそのままクラスとして表現するパターンです。通常のコーディングだとIF文で状態毎の処理を記述させるためそれぞれの状態でどのような処理が行われるのか読み取りにくいのですが、このパターンを…

javaでのMediatorパターン

Mediatorパターンはデザインパターンの一つで、複雑に絡み合ったオブジェクト間の関係をMediator(調停者)が整理するパターンです。例えば、10個のオブジェクト間で連携を取る必要がある場合、オブジェクト同士で直接連携を取ると、「自分以外の9個のオブ…

javaでのChainOfResponsibilityパターン

Chain of Responsibilityパターンとは、その名の通り責任が連鎖する構造を表すためのパターンです。あるオブジェクトで解決できない問題を別のオブジェクトにたらい回すようにするのがツボで、そうすることで解決できなかった場合の処理を簡略化できます。 …

javaでのVisitorパターン

Visitorパターンは、Compositeパターンを派生させたパターンであり、入れ物・中身の構造に対して複数の処理を記述する必要がある時に適用します。Entryクラスとは別にVisitorクラスを作成し、Visitorクラスの方に処理を記述することで、構造と処理を分けるこ…

javaでのDecoratorパターン

Decoratorパターンは、その名の通りオブジェクトに次々とデコレート(飾りつけ)をし、機能を追加していくパターンです。Compositeパターンと同じように再帰的なクラス構成とすることで、冗長性を排除します。 今回は、じゃんけんの手を作成するサンプルコー…

javaでのCompositeパターン

Compositeパターンは、入れ物のクラスと中身のクラスを1つの抽象クラスでまとめ、同一視できるようにするパターンです。このパターンを取り入れることで、クラスを使う側から見て入れ物のクラスなのか中身のクラスなのかを意識する必要がなくなります。 フ…

javaでのBridgeパターン

Bridgeパターンは、機能のクラス階層と実装のクラス階層を橋渡しするパターンです。機能のクラス階層と実装のクラス階層を分けることで、実装毎に機能を書かなくて良くなりますし、その逆に機能毎に実装を書かなくて良くなります。結果として、重複した記述…

javaでのBuilderパターン

Builderパターンは、処理内容を定義するBuilderクラスと、処理順番を定義するDirectorクラスの2つに分けることで、柔軟に処理を変更できるようにするパターンです。Builderクラスの定義により処理内容が変わっても都度処理内容を記述する必要が無くなり、Di…