技術とか戦略とか

証券レガシーシステムを8年いじってから転職した普通の文系SEによるブログ。技術のみではなく趣味の戦略考察についても。

java

javaでのCompositeパターン

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

javaでのBridgeパターン

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

javaでのBuilderパターン

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

java:Enumによりコード値に意味を持たせ可読性を向上させる

javaのEnum(列挙型)を使用するメリットとしては、一般的に「使用可能な定数を明確化できる」「定数を複数のクラスで使い回せる」といったメリットが挙げられます。実際に使用していて、コード値に意味を持たせられるというメリットもありそうだったので、…

javaでのAbstract Factoryパターン

Abstract FactoryパターンはFactory Methodパターンを発展させたもので、生成するオブジェクトの組み合わせを間違えないために、1つのFactoryクラスに複数のオブジェクトの生成処理を実装するようにしたものです。 今回は、RPGのキャラクター作成を模したサ…

javaでのFactory Methodパターン

Factory MethodパターンはTemplate Methodパターンをオブジェクト生成の場面に適用したもので、オブジェクト生成の処理を共通化することができます。 今回は、RPGのキャラクター作成を模したサンプルコードを作成してみました。キャラクターの職業毎にクラス…

javaでのTemplate Methodパターン

Template Methodパターンは、処理(メソッド)の中で共通している箇所を抽象クラスとして抜き出すことで、重複した記述を排除し、更に処理の流れも規定する手法のことを指します。手続き型言語でも共通する箇所を子メソッドとして抜き出すことをしますが、子…

javaでのFacadeパターン

Facadeクラスとは、使い方が複雑になっているクラス群をまとめ、使いやすい形のインターフェースとして外部に提供するクラスのことを指します。デザインパターンでは、このFacadeクラスを利用するパターンをFacadeパターンと呼びます。(ちなみに、Facadeは…

javaでのスレッド制御(joinとsynchronized)

javaでは、スレッドを立てて処理を並列に行うことができます。しかし、並列に処理を行う際、処理順を制御しなければならないことがあります。 処理順の制御方法として基本的な方法として、joinを使う方法とsynchronizedを使う方法があります。joinを使うこと…

javaでのソケット通信の記事引用

javaでは、C言語と同じようにIPアドレスとポート番号を指定してのサーバ間ソケット通信が可能です。既に解説やサンプルプログラムが充実していたので、当記事では引用のみ行います。 ・解説(図解)ストリーム型通信 http://ecogis.sfc.keio.ac.jp/online/ja…

情報処理技術者試験対策「UML」

UMLは情報処理技術者試験でも実務でも頻出です。実務のことを考えると、特にクラス図とシーケンス図は使えるようになっておく必要があるでしょう。 しかし、シーケンス図はともかく、クラス図はオブジェクト指向を理解していないと理解できないと思います。…

singletonとstaticの違い

デザインパターンのsingletonパターンを学んだ時に「インスタンスを1個にすれば良いなら、クラス変数やメソッドをstaticにすれば良いのでは?」と思ったので、試しにテストコードを書いてみました。単純なstaticでは利用者側で好きにインスタンスを作成でき…

「不可視です」というエラーが出たらカプセル化された変数・メソッドを使用しようとしていないか疑う

タイトルの通りなのですが。 例えば、「int hoge = new java.util.Random().next(10)」というコードを書いた場合、「next(int)はRandomで不可視です」というエラーが出ます。 Randomクラスのnextメソッドはprotectedで定義されており、外部に提供されていな…

java:イミュータブルなクラスを作る方法

「イミュータブル」とは「不変」という意味で、オブジェクト指向の世界では「状態(クラス変数)がオブジェクト生成時から変更されないこと」を指します。有名所では、Stringがイミュータブルなクラスとして知られています。 イミュータブルなクラスを自作す…

java8:関数型インターフェースの背景にある考え方

【前置き】Java8から関数型インターフェースが使用可能になりました。具体的に「ラムダ式」「Stream」「Optional」「Files」と言った方がわかりやすいでしょうか。 関数型インターフェースは関数型プログラミングをサポートするものであるため、従来からJava…

java:ミュータブルな参照型変数の初期化の注意点

ミュータブルな参照型変数を初期化する場合、初期化の方法を間違えると他の変数も一緒に初期化してしまいます。この記事では、ミュータブルな参照型変数の初期化方法を解説します。 【基本データ型変数と参照型変数】変数は大きく分けて、基本データ型変数(…

10000STEPのクラスを作ってしまった話

「1クラス1000STEPを超えたらクラス分割を考える」という話をどこかで見たり聞いたりした記憶がありますが、金融業界の実務では10000STEP越えのクラスを目にすることは少なくありません。そして、私も趣味(ゲームの戦闘部分の作成)で10000STEP越えのクラス…

java:他環境向けのファイルを出力する(文字コード・改行コード指定)

javaは実行環境に応じてデフォルトの文字コード・改行コードでファイルを出力するようにコーディングすることができます。そのことにより、実行環境毎でコーディングを変更せずとも、実行環境に合わせた文字コード・改行コードを採用することができます。 し…

java:インターフェースを用いることでクラス毎の重複した記述を無くす

javaにはインターフェースという機能があります。インターフェースとは、メソッドの仕様(メソッド名、戻り値、引数)のみを定義したものです。インターフェース単独では処理を実行できませんが、そのインターフェースを実装したクラスを定義することで処理…

java:プリミティブ型とラッパークラスの暗黙の型変換

最近知ったのですが、intやcharに代表されるプリミティブ型と、IntegerやCharacterに代用されるラッパークラスの間では暗黙の型変換が行われるそうです。プリミティブ型からラッパークラスへの暗黙の型変換をオートボクシング、ラッパークラスからプリミティ…

java:暗黙の型変換による意図しない小数点以下切り捨て

原因がわかるまでに手間取ってしまったので、記録として残しておきます。double型やBigDecimal型の変数の初期値を分数(例:2/3)で定義する際、小数点を入れないと「int型変数/int型変数」と判断されてしまい、小数点以下が切り捨てられた状態で変数に格納…

java:Hashmapで1つのキーで複数の値を結びつける方法

HashMapとは、「キー、値」の組み合わせでデータを保持することができるクラスのことです。このクラスを用いれば、キーに紐づく値を検索することが可能になります。 しかし、キーに対応する値が複数の場合は、一工夫する必要があります。私が趣味で作ってい…

java:Windowsバッチからの呼び出しで対話式で実行できることの確認

まあできますよね、という確認です。これができるなら、ちょっとしたツールを作成する時に幅が広がります。 【ソース】javaソースとWindowsバッチは同一フォルダに配置する。 ・javaソース(IOTest.java)import java.util.Scanner; public class IOTest { p…

java:javaからのOSコマンド呼び出しと注意点

javaのプログラムからOSのコマンドを実行したい場合は、Runtimeクラスのexecメソッドで実現できます。 しかし、OSのコマンドは別プロセスで立ち上がるので注意が必要です。ProcessクラスのwaitForメソッドでプロセスの終了を待たないと、処理が前後してしま…

拡張子「jfr」ファイルの開き方(Java開発)

現場のLinux環境でjarファイルを実行したところ、拡張子が「jfr」のファイルが出力されました。これが何のファイルなのか、どうやって開くのかわからなかったのですが、他の人に教えてもらいました。後でグーグルで調べた所、正しい情報にたどり着くのに少し…

java:thisで指定されたメンバ変数が自クラスにない場合、スーパークラスを参照しにいく

javaでは「thisで指定されたメンバ変数が自クラスにない場合、スーパークラスを参照しにいく」という挙動になると聞いたので、やってみました。確かにそうなりました。 【テストコード】・Main.javapackage jp.co.thistest;public class Main { public stati…

ゲーム理論(二人・二択)の混合戦略の確率をjavaで求める

以下の記事の続きです。 ゲーム理論(二人・二択)の混合戦略の確率を求める https://akira2kun.hatenablog.com/entry/2018/12/23/180906 プログラムで計算する場合の計算式を書いたので、javaでサンプルプログラムを作ってみました。 【ソースコード】publi…

ファジィ推論をjavaでやってみた

「ファジィ推論」とは、「高い」「重い」「暑い」等の数値では表せない感覚的なものを数値として表すことでコンピュータ制御を行うAI技術です。現在は、洗濯機・エアコンといったの家電や、地下鉄の自動運転等に応用されています。 今回は、こちらのページで…

java:シリアルバージョンUIDの用途を調べてみた

javaのシリアルバージョンUIDの用途を理解したのでメモ。 前提として、javaではインスタンスをバイナリファイルとして保存することができます。しかし、インスタンスのクラスの設計を変更した場合、前の設計のバイナリファイルを読み込むと、現在の設計のク…

java:for文の様々な書き方

私が教育している新人のfor文に対する理解が不十分であったため&私自身拡張for文についてつい最近読んだ本で初めて知ったので、この記事を作成しました。私が言いたいことは以下のソースコードに全て記載しています。 【サンプルコード】 package lesson1; …