ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

GoFデザインパターン解説 THE LAST

今回はGoFデザインパターン解説をします。

この前のGoFデザインパターンの記事「[GoF] クラスで表すパターン解説」で、
もう解説できるようなパターンが、Builderパターン、Bridgeパターン、ChainOfResponsibilityパターン、Proxyパターンぐらいしか残っていないと書きましたが、

今日はそのネタを使いきってしまおうと思います。
4つも書くのはしんどいんですけどね…。

あと、もうあんまり覚えてない…。

というわけで、今回の記事は、当ブログでのGoFデザインパターン解説記事としては最後になります。

続きを読む

tag: プログラミング オブジェクト指向 GoF デザインパターン クラス 継承 プロキシ 条件分岐 リスト 処理

[GoF] クラスで表すパターン解説

ネタがないときはGoFデザインパターンの記事を書くのが鉄板になりそうですが、

GoFデザインパターンは23種あるようにみえて、実は記事にするほどでもないクソみたいなパターンも多いので、わりと弾薬は減っています。


そういえば、そもそも私がGoFデザインパターンの勉強に使った本は、「Java言語で学ぶデザインパターン入門」という本で、
Java使えませんが、ほとんどC#と同じだし、書いてある内容は言語に依存しないものなので、読んでいたんですが

この本の著者の結城浩という方、数学にも精通していて「数学ガール」という本で、すごく有名なんですね。
読んだことはないですが、私でもたまに耳にしていた本です。

数学の色々なテーマについてのシリーズ本になっているみたいで、なんかよく分かりませんが高校生の女の子とかがなぜか数学詳しくて、取り巻きと一緒に数学について考察するストーリーものなんでしょうか。

私が現在勉強している論理学の「ゲーテルの不完全性定理」について扱っている巻もあるようなので、ぜひ機会があれば読んでみたいですね。


さて今回は、あまりクラスで表現しようと思わないものをクラスで表現してみました、というコンセプトのデザインパターンがいくつかあるので、それを紹介します。


具体的には、Stateパターン、Mementoパターン、Commandパターンです。

クラスで表すというカテゴライズでやるなら、StrategyパターンとInterpreterパターンも取り上げるべきだと思うのですが、
Strategyパターンは単純すぎるのと、Interpreterパターンは需要がニッチすぎるので、やめておきます。

まあ正直に言うと面倒臭いだけなんだがな!

続きを読む

tag: プログラミング オブジェクト指向 GoF デザインパターン クラス ステート 処理 カプセル化

PowerShellでWPFとかイベントとか ~ 枠組みをC#で書く ~

この頃、ブログの更新がおろそかでしたが、ネタはあったのです。

今回は大したものではないですが、この前書いた記事「PowerShellで.NETのウィンドウを生成する」の続編的な内容を綴りたいと思います。

そのため、あちらの記事を読んでからこちらを読むこと推奨です。

最近、昔の記事と同じネタを使いまわすばっかりで、やっぱりネタないんだろとか言ってはいけない。



上記リンクの記事では、ウィンドウの生成と表示までをメインに書いてあり、
ボタンを押したら〇〇するみたいなイベントハンドラというかロジックの部分はかなり適当でした。


一応、前にイベントハンドラについて言及したことをまとめましょう。

XAMLでたとえば、Windowの要素としてButtonがあるというときに、PowerShell上でButton.Clickイベントのハンドラを書きたいなというときは、

まず、PowerShellでButtonのインスタンスを取得できるようにするため、XAMLのほうでButton要素に適当なx:Name属性を設定しておきます。

そして、Windowのインスタンスはすでに例のXamlReader.Parseメソッドから取得できているので、
そのWindowのFindNameメソッドにButtonのx:Nameを与えればインスタンスを探して返してくれます。


そして、そのインスタンスのメンバに、PowerShell専用の普段は使えないメソッドですが、Add_(イベント名)というメソッドがあるので、それを呼びます。

引数に { ... } と書くスクリプトブロックを与えれば、たとえばAdd_Clickを呼んだなら、そのあとボタンがクリックされたときにスクリプトブロックが呼ばれるということになります。

ちなみにAdd_(イベント名)じゃなくて、Register-ObjectEventというコマンドレットでもPowerShell的なスタイルでイベントハンドラを登録できるのですが、
これは厳密にいうとイベントハンドラとはちょっと違うPowerShellのジョブというものであるようで、実験してみたところおそらくジョブを扱うスレッドはGUIスレッドと違うという問題で上手いことハンドラが呼ばれませんでした。



このように、
1. XAMLにx:Nameを書いておく
2. FindName
3. Add_(イベント名)
と、三つの工程を踏まなければならないので、イベントを登録するコントロールがひとつならいいですが、たくさんあるともう大変です。

つまりイベントハンドラがたくさんあるような本格的なGUIを、PowerShellから構築することは考えないほうがいいでしょう。

続きを読む

tag: Windows PowerShell C# イベント WPF XAML テンプレート スクリプト

[GoF] データ構造に関するパターン解説

またGoFデザインパターンの記事を書こうと思います。

前回のGoFの記事「Factory MethodとAbstract Factoryの違いを考える」では、
Template Method、Factory Method、Abstract Factoryについて書きましたが、

今回はデータ構造に関するデザインパターンについて解説していきます。

Iteratorパターン、Compositeパターン、Visitorパターンです。


本当は“データ構造に関するデザインパターン”なんてカテゴリはなくて、これらは別のカテゴリになっているんですが、
私はこの三つをデータ構造に関するパターンと言っていいんじゃないかなと思いますね。

特にIteratorとVisitorは一般に、比較されるようです。

続きを読む

tag: プログラミング オブジェクト指向 GoF デザインパターン データ構造 イテレータ ツリー ディスパッチ

PowerShellで.NETのウィンドウを生成する

ずっとブログのトップ記事がギャラリーになっていて、もう鏡開きなのでそろそろ普通の記事を出さないといけないと思っていたのですが、

なにしろネタがありませんでして、更新するにも出来ない状態だったのですが、今日は例によって祝日ではありませんか。

祝日は更新しなければならないという謎の使命感が今宵もクソ記事を生み出します。


最近、PowerShellを触っていたわけでもないのですが、ネタをひねり出した結果、PowerShellの記事を書くことにしました。


PowerShellでは.NET Frameworkのライブラリをコールできるので、もちろんWindows FormsやWPFなどGUI用のライブラリも使用できます。

これを使って、PowerShellからウィンドウを生成して表示することができるわけでして、
GUIで使える使い捨てツールを作りたいときとかいいんじゃないかと思いましたので、その方法について簡単に紹介していきます。


まあ、GUIで使える使い捨てツールは、記事「シェルスクリプトとかExcelとか」で書いたように、Excelで作るのもなかなかよい選択なんじゃないかと思ったりもしますけどね。


それでも今回はPowershellと.NETで、
・Windows Forms
・WPF(コード)
・WPF(XAML)
の三編でお送りします。

おまけとしてイベントハンドラについても述べます。
続きを読む

tag: PowerShell プログラム GUI WindowsForms WPF XAML スレッド イベント

Factory MethodとAbstract Factoryの違いを考える

前回記事「円柱を傾けて転がすことについて考察」は、祝日、文化の日に書きました。

そろそろまた記事を書こうと思ったら、なんと今日は勤労感謝の日ではありませんか。

祝日限定更新とかにしますか…。


さて、今回はデザインパターンの話です。
この前はパターンマッチングの記事を書いて、パターンの話ばかりしています。


この前、GoFデザインパターン23種類をひととおり学んだのですが、なんということでしょう、ほぼ忘れてしまいました。

まあ23個もあったら無理はないかもしれませんが。

そして、覚えられない原因として、キッチリ覚えようとしてしまうというのがあるのかなと思いました。


記事の最後のほうでまた書きますが、デザインパターンって別にこれに準拠してガチガチに組み立てていくものじゃなくて、参考程度のものなんですよね。

「GoFの頭いい人はこんな作り方してたけどどう?」みたいな程度です。

そのため覚えるもクソもなくて、考え方のニュアンスというかエッセンスを吸収するだけぐらいの心持ちのほうが、応用も効く頭になっていいと思いました。

というわけで、最近は「結局なにをどうしたくてこうなったのか?」ということを着眼点において、またGoFデザインパターンを学び直しています。


今回は、以前からFactory MethodパターンとAbstract Factoryパターンは何が違うのかよくわからなかったのですが、学び直して分かったような気がしないでもないので、書いていきます。
続きを読む

tag: プログラミング オブジェクト指向 クラス オブジェクト デザインパターン GoF 抽象 設計 ファクトリ

後方参照とか.NETの正規表現考察

一週間程前に正規表現についての記事「正規表現の“否定”について勘違いと、アンカー」を書いたばっかりですが、
その記事の最後で、グループとかキャプチャとか後方参照とかをまだ分かっていないという課題を挙げました。

というわけで、それについて調べたので、記事にします。


先にグループとかキャプチャとかが何なのかを書こうと思うのですが、これらは正規表現におけるひとかたまりの単位のことです。

まず、グループというのは正規表現のパターン文字列でグループ化の記号()を用いてグループ化された部分のこと、すなわちこれは正規表現の構文としての一つの単位だと認識しています。

たとえば"I am the (king|queen)"というパターン文字列において、まず括弧で囲まれた"(king|queen)"というグループがひとつあります。

ただし、括弧で囲まれていませんが、パターン文字列全体はひとつのグループとするという決まりがあるようで、このパターン文字列には2つのグループがあることになります。


このように、本当はグループというのは木構造になっているのですが、グループを木構造として扱わずに平坦に扱うのが普通のようです。

実装によりけりかもしれませんが、ほとんどがグループを平坦に扱っていると思います。

これは、グループを平坦に扱うと、パターン文字列内のすべてのグループに一次元的な番号を割り振ることができて、後述する後方参照という仕組みを簡単に利用できるようになるためだと思います。


グループにはそれぞれ番号が割り振られます。

どのように割り振られるかというと、これも実装によりけりかもしれませんが、普通は幅優先探索の順番だと思います。

続きを読む

tag: 正規表現 パターンマッチ 文字列処理 後方参照 .NET

正規表現の“否定”について勘違いと、アンカー

昔、正規表現の基本を学んで、もう基礎的なことは大丈夫だろうと思っていたんですが、思いがけない重大な勘違いをしていました。

“ある文字列でない文字列”の表現の方法なんですが、正規表現ではこの表現が非常にやりづらいみたいで、私のように躓いている人もいると思うのでメモします。

どういうときにこういう正規表現を書くのかというと、私はHTMLのタグ認識をさせていました。

たとえば、以下はXMLですが、

<Root>
<Element>
なまむぎなまごめなまたまご
</Element>
</Root>


このXMLから、Elementの要素、なまむぎなまごめなまたまごを抜き出すための正規表現みたいなのを書こうとしたわけです。

まず、文字列"<Element>"の直後のアンカーを表す"(?<=<Element>)"を書きます。

アンカーも、実は今までよくわかっていなかったので、これも後でメモします。

そして、Elementの要素はなんでもいいので".*"とします。

そして、".*"だけだと"</Root>"までマッチしてしまうので、"</Element">の直前が最後なのだということを表すため、そのアンカーを表す"(?=</Element>"を書きます。

というわけでパターン文字列は"(?<=<Element>).*(?=</Element>)"となります。


ちなみに、".*"の解釈は行末で終わってしまうというのがデフォルトなので、解析対象に改行があった場合は行の概念を無視するように設定しておきます。
続きを読む

tag: 正規表現 パターンマッチ 文字列処理 XML HTML アンカー

本「オブジェクト指向でなぜつくるのか」の感想、要約

C言語をやると言いながらまたオブジェクト指向の記事を書くという、やるやる詐欺以外の何物でもありません。

この夏休みは、日経BPの「コンピュータはなぜ動くのか(矢沢久雄氏著)」から始まるなぜシリーズの中の一冊、「オブジェクト指向でなぜつくるのか」を読みました。

この本の前半がすごく面白かったです。

オブジェクト指向言語の仕組みを解説する本というのは、だいたいが現実世界の例えを用いたりするわけですが、
オブジェクト指向の考え方を現実世界に当てはめるのは適切ではないと、この本は言っています。

また、そのような例えで「人間クラスが動物クラスを継承して~」とか説明しても、結局それがどうなのか、オブジェクト指向というのはどういうところで役に立つのか、その説明ではわからないだろうと、この筆者様の持論ではありますが主張しており、

この本では、オブジェクト指向というのがどのような経緯で生まれてどのような問題を解決したパラダイムなのかを、曖昧な例えをせず理論的に説明するという、ありそうでなかった本です。

その説明が前半部分で、後半は主にプログラミング技術以外のオブジェクト指向について説明しています。

どういうことかというと、オブジェクト指向というのはもともとプログラミングの技術でしたが、オブジェクト指向における考え方が優れていたため、設計や要求定義などの上流工程にも応用されていて、その説明をしています。

たとえばUMLを使ってプログラミング以外での物の関係を表現する例などをあげています。

ただ、本の主題は前半部分で落ちてしまった感じで、この後半部分はあまりインパクトなかったですね。

しかし、前半部分が良かったです。
続きを読む

tag: プログラミング オブジェクト指向 OOPL 構造化プログラミング クラス

Visual Studio 2015きたああああ ~ Roslyn ~

なんか超久しぶりにプログラミング的な記事ですね。

Visual Studioの待望の新バージョン、Visual Studio 2015の正式版が7月20日(日本時間7月21日)にリリースされました!

私は今年はgccでC言語を学ぶつもりなので、しばらくはインストールしませんが…。

まあ、Windowsタブレットのほうには入れてみようかなと思っています。

ただし、周辺のコンポーネント(?)に一部、来月にならないと正式版が出ないものがあるようなので、そのときまでは待ちますけどね。

あと、ちょくちょく言っていますがgccが上手いことインストールできないままですので、あきらめてVSでC言語をやるかもしれません。
そのときはこれをインストールしようと思います。


たしか、Visual Studio 2012からVisual Studio 2013になったときは、微妙な違いだけでしたが、今回はそれなりに変わったようです。

まず、なんとExpressエディションは2013版で終わりだそうで、これからは無料のVSはVisual Studio Communityエディションだけになります。

Communityエディションは2013版からありましたね。
2013版っていうか、リリースは2014年でしたが。

登場時は当ブログでも取り上げました。
(記事「Visual Studio Communityとかとか!!!」を参照)


このCommunityエディション、なんと実質的にはProfessionalエディションと同等で、しかも無料という、なんとも素晴らしいMSは狂ったのかというエディションです。

ただし、個人使用ならいいんですが、企業や団体で使用するとなったときに制限があります。

公式サイトによると、団体が使用する際は、

・学習、学術調査目的の開発者
・オープン ソース開発者
・中小規模の企業や団体

でないといけないそうです。


上記に該当しない団体が無料でVSを使いたい場合は、Expressエディションを使えということだったのですが、今回Expressエディションが廃止になって、この人達はどうするんですかね…。

まあ上記に該当しない団体っていうと大企業でしょうから、別に有料版を買っても困らない財力だとは思いますけどね。

Expressエディションではこの大企業でさえも無料で使用できました。

続きを読む

tag: VisualStudio Roslyn Microsoft .NET コンパイラ

次のページ

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。