Blog.Ks-Product.com

初音ミクの消失PV(特別編集版)が初音ミクVISION(DVD)に収録されます!詳しくはこちら! 設定不要!プリロード機能付きロールオーバープラグイン jquery.automaticRollover 有名動画サイトの動画の埋め込みが簡単に行える! jquery.createvideo

各プログラミング言語のオブジェクト指向な記述方法を比較してみた

 

ActionScript3.0、2.0、PHP5、JavaScript それぞれのOOPの記述方法を比較してみました。基本的に各言語のサンプルは同じ振る舞いをするので、「ASは得意だけど他の言語まで覚えるのは大変そう」と腰を重くしている人は参考になるかもしれません。


■AS3■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
package 
{
    public class Person
    {
        public var name:String;
        public var age:uint;
        public var sex:String;
        
        private var paramNum:uint;
        
        public function Person(__name:String=null, __age:uint=0, __sex:String=null)
        {
            paramNum = arguments.length; //privateインスタンス変数にコンストラクタの引数の個数を記憶
            
            name = __name;
            age = __age;
            sex = __sex;
        }
        
        public function showMessage():void
        {
            trace("コンストラクタに指定された引数の数:", paramNum, "\n",
                  "名前:", name, "\n",
                  "年齢:", age, "\n",
                  "性別:", sex);
        }
        
        static public function showClassInformation():void
        {
            trace("クラス名:Person\n",
                  "性質:人物を表します");
        }
    }
}

//以下のコードをタイムラインまたはメインクラスに記述
var p:Person = new Person("kakeru",27,"male");
p.showMessage();
Person.showClassInformation();


■AS2■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
class Person
{
    public var name:String;
    public var age:Number;
    public var sex:String;
    
    private var paramNum:Number;
    
    public function Person(__name:String, __age:Number, __sex:String)
    {
        paramNum = arguments.length; //privateインスタンス変数にコンストラクタの引数の個数を記憶
        name = __name;
        age = __age;
        sex = __sex;
    }
    
    public function showMessage():Void
    {
        trace("コンストラクタに指定された引数の数:"+ paramNum+ "\n"+
              "名前:"+ name+"\n"+
              "年齢:"+ age+"\n"+
              "性別:"+ sex);
    }
    
    static public function showClassInformation():Void
    {
        trace("クラス名:Person\n"+
              "性質:人物を表します");
    }
}

//以下のコードをタイムラインまたはメインクラスに記述
var p:Person = new Person("kakeru",27,"male");
p.showMessage();
Person.showClassInformation();

■PHP5■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//このソースをまるまるコピペしてPHPファイルとして保存すれば動作するはずです。
<?php
class Person
{
    public $name;
    public $age;
    public $sex;
    
    private $paramNum;
    
    function __construct($__name=null,$__age=0,$__sex=null)
    {
        $this->paramNum = func_num_args(); //privateインスタンス変数にコンストラクタの引数の個数を記憶
        
        $this->name = $__name;
        $this->age = $__age;
        $this->sex = $__sex;
    }
    
    public function showMessage(){
        echo "コンストラクタに指定された引数の数:", $this->paramNum, "<br>",
                 "名前:", $this->name, "<br>",
                 "年齢:", $this->age, "<br>",
                 "性別:", $this->sex, "<br>";
    }
    
    static public function showClassInformation(){
        echo "クラス名:Person<br>",
                 "性質:人物を表します";
    }
}

$p = new Person("kakeru",27,"male");
$p->showMessage();
Person::showClassInformation();
?>


■JS■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//body要素内にscript要素を配置してその中にソースをコピペすれば動作するはずです。
function Person(__name,__age,__sex)
{
    var paramNum = arguments.length; //privateインスタンス変数にコンストラクタの引数の個数を記憶
    
    this.name = __name;
    this.age = __age;
    this.sex = __sex;
    
    this.showMessage = function()
    {
        document.write("コンストラクタに指定された引数の数:"+ paramNum+ "<br>"+
              "名前:"+ this.name+ "<br>"+
              "年齢:"+ this.age+ "<br>"+
              "性別:"+ this.sex+ "<br>");
    };
}
Person.showClassInformation = function()
{
        document.write("クラス名:Person<br>"+
                "性質:人物を表します");
};

var p = new Person("kakeru",27,"male");
p.showMessage();
Person.showClassInformation();

各言語ともこのような出力結果になるかと思います。

コンストラクタに指定された引数の数:3
名前:kakeru
年齢:27
性別:male
クラス名:Person
性質:人物を表します

いかがでしたでしょうか?
各言語とも記述方法に大きな違いは無かったかと思います。(JavaScriptだけ他の言語と異なりクラスベースではなくプロトタイプベースオブジェクト指向言語なので若干特殊ですが。)

各言語の違いといえば以下のようなものでしょうか。

  • AS2.0、3.0は変数に型指定ができる。
  • AS2.0、3.0はthisキーワードを明示的に指定しなくてもインスタンスメンバーにアクセスできる。
  • AS3.0、PHP5は関数の引数にデフォルト値を指定できる(指定しない場合は必ず引数を指定しないといけない)。
  • PHP5はインスタンス・クラスメンバーへのアクセス方法がASやJSと異なり、アロー演算子やコロン(を二つ並べたもの)を使用する。
  • JSではthisキーワード指定したものをパブリックメンバー、それ以外をプライベートメンバーとして扱われる。

他にもpackageや外部ファイル化のルールなど上げればきりがありませんが、普遍的な内容の違いはこのくらいでしょうか。

そんなことよりも、JavaScriptのクラスベース化を切望します(;ω;)

コメント(0)

コメントが存在しません。

コメントを投稿する

※投稿されたコメントは管理人が承認するまで反映されません。
またHTMLタグはご利用できません。コメント上にHTMLタグを表示させたい場合は全角でご入力ください。

お名前
URL
コメント
名前:
kakeru ( twitter
職業:
フロントエンドエンジニア
生年月日:
1983年4月19日

HTML、CSS、JavaScript、ActionScript、デザイン、映像制作(After Effects、CINEMA 4D)で遊んでます。
最近はjQueryを使ったプログラミングに色んな意味ではまってます。ライブラリ作ってます。

好きなK-POPはf(x)、Brown eyed girls、4minute、B2ST、2PM、KARA、SNSD、Sunny hillということで、K-POPの話題を中心に発信中!

お問い合わせはこちらからどうぞ。
kakeru[at]ks-product.com
([at]を@に置き換えてください)