オブジェクト指向

ホーム | JavaScript メモ | オブジェクト指向 | オブジェクト指向 続き | Aptana Studio | Titanium Studio のインストールと設定 | Hello プロジェクト | Creating Your First Titanium Apps 改 | ナビゲーションウィンドウ for iOS | book データを追加する

このページでは JavaScript におけるオブジェクト指向について説明します。


オブジェクト

前節では配列にデータだけではなく関数も要素にできることを説明しました。つまり一つの識別子でデータとコード (何かを実行する部分)が扱えることになります。このことは JavaScript の配列が、すでにオブジェクトとしての 要件の一つを達成していることになりますが、まだまだ完全なものではありません。一般的にオブジェクトとして実装 すべき要件は次のものだと言われています。

このほかにもオブジェクトのカプセル化 (データの隠蔽化) などが問われる場合もあります。

次項からはこれらの要件を一つ一つ説明していきます。JavaScript はサンプルコードなどをコピーして簡単に使う ことができます。そしてそのことが JavaScript の文法が本格的に学習されることが少ない原因だと言われています。 しかし JavaScript の学習が進まないのは JavaScript のオブジェクト指向が他の言語と比べてかなり変わって いるということも大きく原因しているように思われます。たしかに JQuery をはじめてとする便利で優秀なライブラリ やフレームワークが登場している今では、言語的な学習に時間を使うより、ライブラリやフレームワークの使い方を学ぶ ほうが有意義な時間の使い方のように思われます。しかしそれはあくまでも Web サイトを構築する場合の話しです。 このコーナーの目標は「JavaScript による Android/iOS アプリの開発」です。ここはしっかりと JavaScript の オブジェクト指向を学習しておいたほうが良いでしょう。

と、偉そうなこと書いていますが、やや言語オタクの傾向のある私にとって、JavaScript のような仕様の小さな言語で アプリケーションを作るということは、ワクワクするほど面白い私の趣味だということを素直に認めます、ハイ。


コンストラクタ関数

JavaScript にはいわゆるクラスというものは存在しません。他のオブジェクト指向言語のクラスの代わりとなるものが コンストラクタ関数です。まず次のコードを見てください。JavaScript ファイルの拡張子は .js です。

book.js


function Book(name, tel, mail) {
    this.name = name;
    this.tel  = tel;
    this.mail = mail;
    this.showBook = function () {
        var str ='名前:'+this.name+'\n';
        str += '電話:' + this.tel +'\n';
        str += 'メール:' + this.mail;
        alert(str);
    };
}
			

1行ずつ説明します。

1行目:function Book (name, tel, mail) {

コンストラクタ関数の名前は大文字で始めることが慣習(習わし)となっています。 引数には引数名だけを指定します。型を指定する必要はありません。

2行目:this.name = name;

予約語 this を使うことによってコンストラクタ関数(クラス)の内部にプロパティと呼ばれる属性を作成できる ようになります。this.name と引数の name は同じ名前ですが衝突することはありません。プロパティは変数に 似ているものですが、クラスの外部からもアクセスできる点で関数内のローカル変数とは大きく違うものです。 3行目・4行目は説明を省略します。

5行目:this.showBook = function () {

ここで無記名関数を使っています。予約語 this で始めることによって showBook というプロパティ名で この関数を外部から呼び出せるようになります。なおこのように外部から呼び出せるオブジェクトの関数の ことを一般的にはメソッドと呼びます。

6行目:var str = '名前:' + this.name + '\n';

演算子 + で文字列を連結しています。最後の \n は改行を表すエスケープシーケンスです。表示したいのは あくまでもクラス内部の name プロパティなので this.name を使っています。ここで name を使うと引数 の name を使うことになります。今回の場合は this.name と name は同じ値になっていますが、 this.name は showBook() メソッドを呼び出す前に変更されている可能性があることに留意してください。

7行目:str += '電話:' + this.tel + '\n';

ここでは複合代入演算子 += を使っています。この意味は str = str + '電話:' + this.tel + '\n'; と同じ意味になります。8行目の説明は省略します。

9行目:alert(str);

標準関数 alert() は引数の値をアラートダイアログに表示します。引数が文字列でない場合は自動的に 文字列に変換されます。

10行目:};

処理系の警告を抑えるためにセミコロンを付けています。

11行目:}

なぜかここでは警告がでなかったのでセミコロンを省略しました。セミコロンを付けても問題はありません。

ここまでの説明で、他のオブジェクト指向プログラミング言語をご存知の方は、非常に奇妙に感じられたかもしれません。 他のオブジェクト指向プログラミング言語ではオブジェクトのプロパティに外部からアクセスすることはできません。 プロパティにアクセスするためにはオブジェクトに用意されているセッター (setter) や ゲッター (getter) と 呼ばれるメソッドを使います。しかし JavaScript のプロパティには obj . property という式で オブジェクトの外部からアクセスすることができます。このことについてオブジェクトのカプセル化(データの隠蔽化)という 観点から、データプロパティに外部から直接アクセスできないようにする方法については、後述することにいたします。


オブジェクトの使用

では、Book クラスからインスタンスを作成して実際に使ってみます。book.js に次のコードを追加します。


var obj = new Book ('Yamada Taro',
    '090-1111-2222',
        'taro@yamada.jp');

obj.showBook();
			

では、1行ずつ説明します。

1行目: var obj = new Book

オブジェクトの作成は 演算子 new を使ってクラス (コンストラクタ関数)を呼び出すことによって作成します。

2行目: ('Yamada Taro',

このサイトを iPhone で見た場合のレイアウトの都合上、引数部分を改行しています。改行は式の終わり を意味すると以前にお話ししましたが、時と場合により処理系(インタープリタ)が適宜判断してくれるみたい です。3行目と4行目も同様になります。

6行目: obj.showBook();

オブジェクトを代入した変数 obj に対してドット演算子 . を使って showBook() メソッドを呼び出します。

book.js の全リストは次のようになります。インデント(字下げ幅)が2文字分になっていますが、 一般的には4文字です。しかしインデントはあくまでも見やすさためでありインデント幅がプログラムに 影響を与えることはありません。


/* books.js */

function Book (name, tel, mail) {
    this.name = name;
    this.tel  = tel;
    this.mail = mail;
    this.showBook = function () {
        var str ='名前:'+this.name+'\n';
        str += '電話:' + this.tel +'\n';
        str += 'メール:' + this.mail;
        alert(str);
    };
}

var obj = new Book ('Yamada Taro',
    '090-1111-2222',
          'taro@yamada.jp');

obj.showBook();
			

HTML5

JavaScript のスクリプトファイルは前項までで完成しました。しかしスクリプトを実行するには Web ブラウザが必要 になります。そして Web ブラウザにデータを表示するためには HTML ファイルが必要となります。当サイトでは 今の時流を考えて今後作成する HTML ファイルは、すべて HTML5 にしようと思っています。以下に必要最小限 の最もシンプルな HTML5 ファイルの例を記載します。ファイル名は book.html にします。

book.html


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <script type="text/javascript"
            src="book.js">
        </script>
        <title>Book</title>
    </head>
    <body>
         <p>Book</p>
    </body>
</html>
			

説明

ドキュメントタイプの宣言は <!DOCTYPE html> というごくシンプルなものに変わっています。実はこのことが HTML5 を採用する本当の理由だったりします。<meta charset="utf-8"> は必須だと思ってください。 そして今回はスクリプトファイルを別のファイルとして作成しましたので <script type="text/javaxcript"> タグに src="book.js" オプションを付けて読み込んでいます。ここではタグの間で改行していますが通常は改行せずに 記述します。そして HTML ファイルなので終了タグ </script> も必要となります。なお HTML ファイルに スクリプトを直接書き込むこともできます。その場合は、<head> と </head> タグの間か、 <body> と </body> タグの間に、<script type="text/javascript"> タグと </script> 終了タグを記述して、その間に book.js の内容を記述します。src="book.js" オプションは 当然不必要になります。

では、book.js と book.html をお使いのテキストエディタで記述して同じディレクトリに保存してください。そして book.html をお使いの Web ブラウザにドラッグするなどして開いてください。何が起こりましたでしょうか!


Aptana Studio

ところでいま、Aptana Studio というアプリケーションが JavaScript の IDE (統合開発環境) として注目されて います。今もこのページを Aptana Studio で作成しています。Aptana Studio は www.aptana.com から無料でダウンロード できます。インストールの方法や使用方法は Aptana Studio の使い方 で説明しています。



ホーム | JavaScript メモ | オブジェクト指向 | オブジェクト指向 続き | Aptana Studio | Titanium Studio のインストールと設定 | Hello プロジェクト | Creating Your First Titanium Apps 改 | ナビゲーションウィンドウ for iOS | book データを追加する
Copyright (c) 2006 - 2014 vivacocoa.jp All Rights Reserved.