投稿

ラベル(Perl)が付いた投稿を表示しています

プログラミング・パラダイム

結局、「オブジェクト指向プログラミング(OOP)」というのは、1) 手続指向は構造化で、2) データは構造体で、ということであり、この両者を、3) 構造化された手続(メソッド)を、構造体(オブジェクト)単位で整理することでまとめた、というだけの話であり、これ以上でもないし、これ以下でもないのではないかと思う。 手続自体は、あくまでも構造化プログラミング的な観点で整理を行なうべきで、これを生半可なオブジェクト指向的観点で整理すると、コードが無茶苦茶になって却って“百害あって一利なし”といっても言い過ぎにはならない気がする。少なくとも、自分の場合はそうである。 そうやって、構造化プログラミング的にすっきりと整えられた個々のコードが、集合して複数のコード群としてそのままそこいらにぶちまけられている時に、手続指向の限界が急にクローズアップされてくる。 この時に整理整頓の“容れ物”として俄かに脚光を浴びることになるのが、構造体(オブジェクト)である。手続のためのコードをそのまま“裸”でそこいらにぶちまけては置かないようにしよう、必ず、構造体に入れられた(カプセル化)状態で置いておくことにしようね、というのが僕流のオブジェクト指向像である。 上のことをちゃんと自覚していないで、「オブジェクト指向スゲー」で何でもかんでもオブジェクト指向のノリを持ち込もうとすると、むしろコードの見通しが悪くなって、あっちへ飛んだり、こっちへ飛んだりと、ダイクストラ先生が「goto は使わないようにしよう」といった時代の事情に逆戻りして、あっちのメソッドこっちのメソッドを飛び回るような、いわば「goto なきスパゲッティ化プログラミング」に陥ってしまう。 新しいコードをスクラッチで組んでいく時、ここは手続指向で素直に、一つ一つの処理を継ぎ足して行ってプログラミングするのが、やはり王道なのではないかと思う。そしてそのコードが伸びるにつれ、(2回以上)多用される同様の処理は、サブルーチンとして分離する。そのことで、「コードをコピー&ペーストして使い回すことを避ける」というのが、構造化プログラミングの単純かつ肝となる原点だと思う。ある処理に関するコードが記述される場所を一元化することで、後に変更の必要が生じた時に、あちこちを修正して回るというようなことは避けないと、例えば、一部を修正し、一部

オブジェクト指向プログラミングと構造化プログラミング

オブジェクト指向プログラミング(OOP)と構造化プログラミング(手続指向)を対立する概念だと思っていたが、どうやら間違っていたようだ。 詳細は別の機会でもあれば書くかもしれないが、両者は共存可能、というか共存させるのが適切だと思った。 この結論に達することで、メソッド定義の private と public、static と dynamic の使い分けもはっきり線引きできるようになったと思う。 構造化プログラミングは static で、そのうちのサブルーチン部分は private、メインルーチンは public。 オブジェクト指向プログラミングは dynamic で、オブジェクトの操作に関するインターフェイスとしてのメソッドは public。 大ざっぱな分け方としてはそんな感じ。

Entware-ng で最新の Perl 環境

イメージ
QNAP の AppCenter で色々と追加パッケージをインストールできるという話だけど、Perl のバージョンが 5.10 というのはやる気がなさ過ぎる。 ……で、そもそも、QNAP のサーバーは初めて使うので、元々 Optware だとかのその手の類のものは何もインストールされていない状態だったのだけど、調べてみると、Entware、Optware、QNAPware、Itsy OPKG というのは、ぜ〜んぶ古くて、今は Entware-ng が活きてるものらしい。しかし、ネットで QNAP の情報を調べても、特に日本語では、古い情報が比較的多く残ってるので、この点は要注意だと思った。そこまで QNAP を使い倒しているような人が少ないせいだと思う。 Entware-ng については非常に情報が少なく、さらに、自分の使っている HS-210 で使えるかどうかも全く不明な状態だったが、今まで AppCenter も使ったことのない状況で、いきなり、 apps.qnap.community というサイトから qpkg をダウンロードし、AppCenter の設定からファイルを指定して手動でインストールするという、冒険に出た。全く確信はなかったが、これ以上情報を調べるのはもっと面倒臭かった。 すると、インストールは簡単に終ったようで、AppCenter のマイアプリに Entware-ng のアイコンが加わっているので、アンインストールも簡単そうだ。 それで、次に、ちゃんと動くのかどうか、SSH でログインしてみた。Perl が目的だったから、perl -v したが、何も反応なし。 perl -v -sh: perl: command not found どうやら、Entware-ng がインストールされた状態で、Entware-ng を使って、Perl などの個別のモジュールをインストールするようだ。それには opkg コマンドを使うらしい。Ubuntu の apt-get みたいなものだろう。下のような流れで Perl をインストールした: opkg update Downloading http://pkg.entware.net/binaries/armv5/Packages.gz. Updated list of availabl