技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

2020-01-01から1年間の記事一覧

リスコフの置換原則とは

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

単一責任の原則とは

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

C#:セマフォを用いた排他制御

C#

排他制御の仕組みとして先日Mutexを取り上げました(https://akira2kun.hatenablog.com/entry/2020/04/12/170559)。今回は、同じく排他制御で使われるセマフォについて取り上げます。 セマフォがMutexと異なる点は、複数のプロセス・スレッドが資源を取得す…

C言語にはないC++独自の文法の簡単な列挙

C++はC言語を拡張して開発された言語であり、C++ではオブジェクト指向をサポートする文法が追加されています。基本的にC言語で使用していた文法はC++でも使用できるので、学習という面で見るとC言語を扱える方であればC++で追加された文法を覚えればC++も扱…

C#:共有メモリで可変長データを繰り返し送受信する

C#

共有メモリは、同一メモリ上で実行されるプロセス間でデータをやりとりする場合に使用する仕組みです。通常、プロセスで確保しているメモリは他のプロセスから参照することができないのですが、プロセス間で予め共有メモリとして使用するメモリのアドレスを…

WPFでSelectedItemが同期されない→ItemsSourceを先に設定してしまっているからかも

C#

表題の通りです。 XAMLで定義した画面上のリストで特定の行を選択した際、選択した行と結びついているオブジェクトを取得できないことがありハマっていたのですが、SelectedItemを先に定義してからItemsSourceを定義するようにしたら上手く取得できるように…

半角カナの文字コードに関する注意

0x00~0x7FのASCIIコード(半角英数記号やNUL・改行等の特殊な文字)に関しては文字コードセットの違いを気にする必要がないのですが、日本語の文字に関しては複数の文字コードセットが存在し、違いを気にする必要があります。半角カナについても例外ではな…

C#:イベントハンドラとは

C#

イベントハンドラとはC#で標準で用意されている文法であり、イベント送受信の処理を記述するために用意されています。 クラスAでボタンのクリック等のイベントを発行する↓クラスBはクラスAからイベントを受け取り業務処理を行う↓クラスBは業務処理終了時にク…

DLLから別のDLLを呼び出しているかも→「エラー:ファイルまたはアセンブリ 'hoge.dll'、またはその依存関係の1つが読み込めませんでした。指定されたモジュールが見つかりません。」

表題の通りです。DLLから更に別のDLLを呼び出している場合があり、その「別のDLL」はエラーメッセージには出力されません。そのため、必要だと思っているDLLを全て揃えているとしても、エラーメッセージに出力されている'hoge.dll'をexeと同じフォルダに置い…

C#:Mutexでの排他制御

C#

2020/04/18 追記実務でコピペするとAbandonedMutexExceptionが発生し得る若干行儀の悪いサンプルコードだったので、書き直しました。 ----------------------- 排他制御の方法の一つとして、C#にはMutexと呼ばれる機能が用意されています。何れか一つのスレ…

C#:WPFでのHelloWorld

C#

以前の記事では、WindowsFormでのHelloWorld(https://akira2kun.hatenablog.com/entry/2020/03/01/184434)を試しました。今回の記事では、WPFでのHelloWorldを試してみます。 WPFはWindowsFormの後発にあたるWindows向け画面アプリの形式であり、画面がXAM…

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

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

C#:デリゲートの説明(Action・Func、マルチキャストデリゲート含む)

C#

C#のデリゲートの解説は既に色々と出回っていますが、わかりにくい概念であり、色々な人が異なる切り口で説明した方が良いと思うので、私の方でも記事にします。 ---------------------------------------- デリゲートとは、一言で言えば「関数を変数として…

Neutral Face Emoji Tools(Bulk Emoji Uploader)で一括アップロード画面が出てこない件

色々調べてみると、2018~2019年頃にSlack側で絵文字アップロード画面のインターフェースが変わったように見えます。そのため、最新のツールを落とさないと一括アップロード画面が出てきません。 2020/04/04時点の最新は以下で、先ほど試して一括アップロー…

C#:数値リテラル一覧

C#

javaでは数値リテラルの扱いに注意が必要になることがあります。C#の仕様も気になったので、一覧にまとめてみました。 javaとの違いは以下の通りです。・整数型に符号無し(u)、実数型にdecimal型(m)も指定できる ※decimal型は丸め誤差が発生しない実数型、ja…

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

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

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

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

javaでのCommandパターン

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

たまたま手元にあったもので立体マスクを作ってみた

無いなら作れば良い、ということで作ってみました。原材料すら入手困難という話もありますが、補修布として使っている古着+使い捨てマスクから切り取ったゴムでも十分作成できました。(ということで、特別に何か用意しなくても工夫次第で作成できると思い…

C#:オブジェクトの中身をコピーする方法(MemberwiseCloneメソッド実装)

C#

参照型変数(主に、自分で作成したクラスのオブジェクト)をコピーする場合、単純に「=」で代入するだけでは不十分な場合があります。参照型変数の中身は参照先(オブジェクトのメモリ領域を示すポインタ)です。「=」で代入するだけでは、参照先だけがコピ…

javaでのStateパターン

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

WindowsバッチでJavaScriptの関数の結果を標準出力で受け取る

表題の通りですが、WindowsバッチでJavaScriptの関数の結果を標準出力で受け取ることができます。標準出力なので、パイプやリダイレクトも可能です。 JavaScriptで書かれた処理を自動実行したい場合や、JavaScriptのちょっとした仕様調査を行いたい場合等に…

javaでのMediatorパターン

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

javaでのChainOfResponsibilityパターン

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

C#でのHelloWorld(フォームアプリ)

C#

今回は、C#のフォームアプリについて、HelloWorldを表示するアプリケーションを作成したいと思います。単純に手順通りにHelloWorldを表示させるだけだと今後の開発でつまずきかねないので、「Visual Studio Community」というIDEが何をしていてなぜ動くのか…

javaでのVisitorパターン

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

C#でのHelloWorld(コンソールアプリ)

C#

C#のコンソールアプリ(コンソール上で動くアプリケーション)をビルド(実行ファイルを作成)して実行手順をまとめてみました。IDEである Visual Studio Community を使う方法と、Windows OS に標準でついてくるコンパイラ csc.exe を使う方法を紹介します…

javaでのDecoratorパターン

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

javaでのCompositeパターン

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

javaでのBridgeパターン

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