還暦から始める動的Webサイト構築:PHPを学習(3)

June 22, 2008 – 4:48 pm

phpの学習の3回目、今回は、phpのオブジェクト指向プログラムについて学習することにした。まだまだ調べなければならないことが多そうだが、phpの入門は、このくらいにする。次回からはMySQLについて見てゆくことにしよう。

最近、プログラミングといえばオブジェクト指向を指すのがあたりまえといったところか。FortranとかCとかで育ってきたものにとっては、このオブジェクト指向というのは、結構、敷居が高い。オブジェクト指向プログラミング(OPP)とは何かというところで、何がなんだか分からなくなってしまう。

PHPを学ぼうと、いろいろWeb検索で調べてみると、新しいバージョンPHP5が、OPPのプログラミングが可能になっているという。これを機会に、少し、OPPについて勉強をすることにした。

まず、オブジェクト指向プログラミングについて書いた解説記事を探してみた。初心者の私が理解するのに適し、参考になった気がしたのが、次の4つの連載記事だ;

(1) オブジェクト指向プログラミング超入門
― .NETでオブジェクト指向プログラミングを始めよう ―
http://www.atmarkit.co.jp/fdotnet/basics/oop01/oop01_01.html
(2) オブジェクト指向プログラミングを基本から理解する
http://itpro.nikkeibp.co.jp/article/lecture/20061204/255712/
(3) こうしろうのMindStorm日記
http://itpro.nikkeibp.co.jp/article/MAG/20061214/256937/

最初の二つの連載記事、オブジェクト指向プログラミングとはどういうものかというのを理解するのに役立つ気がする。最後の『こうしろうのMindStorm日記』は、著者が子どもにプログラミングを教える記録といったものであるが、『176話』から『181話』にPHPでオブジェクト指向を使ったサンプルを示しながらの説明、初心者の私にとっては役にたつ記事と思った。

これらの連載記事を読んで、私なりにまとめてみると、

オブジェクト指向のプログラムの単位は、『関数と変数をグループにまとめて名前をつけた』クラスである。これをインスタンス化することにより、実行可能なオブジェクトが生成される。オブジェクトの生成に際しては、このオブジェクトを参照する変数を定義し、この変数を通じてオブジェクトを操作することになる。

オブジェクト指向のプログラムの利用のメリットは、(1)クラスを構成する関数、変数の一部を外部から直接操作できないかたちにする(カプセル化する)ことにより、不用意なプログラムの変更を避けることができ、(2)既存のクラスを「継承」し、このクラスの持つ諸機能を保持しながら、新たなクラスを容易に定義することができる。

これにより、クラスが「適切に」設計、作成されるなら、『大規模なプログラムを効率的に作れ、これを容易に保守(改造、修正)でき、プログラムの生産性を向上させることができる。

といったところだろう。

具体的に、オブジェクト指向のサンプル・プログラム(サンプルの示されていたサイトはここ)を一部変更したものにより、具体的なクラスの振る舞いを見た。用いたサンプルは以下;

<?php
class counter {
     private $step;       // 2つの変数を定義
     private $count;
                //4つの関数を定義
     public function getcount() {
          return $this->count;  // $this は 自分自身のクラスを指し、
     }              //      $this->countで 変数$countを参照
     public function getstep() {
          return $this->step;
     }
     public function changestep($newval) {
          if(is_integer($newval))
          $this->step = $newval;
     }
     public function step() {
          $this->count += $this->step;
     }
     public function reset() {
          $this->count = 0;
          $this->step = 1;
     }
}
// ---
$counter = new counter();           //  class counterをインスタンス化
$counter->reset();          // reset()メソッドを実行
$counter->step();          //  step()メソッドを実行
echo $counter->getcount() . "\n";    //  getcount()メソッドを実行し、変数$countを出力
                    // class counter を継承するnewcounter class newcounter extends counter {      public function square() {          return $this->getcount() * $this->getcount();     } }          // class newcounter()を実行 $counter1 = new newcounter();   //  class newcounterをインスタンス化 $counter1->reset(); $counter1->step(); $counter1->step(); echo "counter1->getcount = "; echo  $counter1->getcount() . "\n"; echo "counter1->square() = "; echo  $counter1->square() . \n”; ?>

感想:
・ オブジェクト指向は、言い換えれば、以前にいろいろ議論されていた構造化プログラミングの流れを汲むものなのかな?
・ オブジェクト指向といっても、言語によって、いろいろの違いがありそう。用語も統一されていないのでは?
・ クラス・ライブラリの使い方を身につけると、かなり効率的なプログラミングができるかもしれない。逆にいうと、クラスの設計が悪いと、効率化はおろか大変な事態を迎えそう。
・ 実際のプログラミングでは、phpのオフィシャルサイトのマニュアルを確認しながらの作業が必要

関連ポスト:


  1. 1 Trackback(s)

  2. Oct 28, 2011: 自宅サーバー構築・覚書きリスト | Yama's Memorandum

Post a Comment