Contents
前書き
自分用。適当です。
概要
■OOPの三つの特徴
要素 | 説明 |
カプセル化(クラスの利用) | ・変数とメソッドをまとめる ・クラス内に限定される変数とメソッドを隠す ・単一クラスからの複数インスタンスの生成 ・同一変数および同一処理の再利用(static) |
ポリモーフィズム | ・呼び出し元メソッドの一元化 (=異なる処理を同一のメソッドから呼び出せるので、後から別の呼び出し先を足しても呼び出し元の変更が不要) |
継承 | ・スーパークラスの変数とメソッドをサブクラスで利用できる →Template Methodパターン以外では使わない →99.99%のケースにおいては、staticメソッドor委譲(別クラスのインスタンス化)を利用した方が望ましい。 |
■用語整理:三つの変数
変数 | 特徴 | メモリに存在する期間 |
ローカル変数 | 当該メソッド内でのみ有効(※狭すぎ) | メソッドを抜けるまで |
グローバル変数 | 全クラスで有効(※無駄すぎ) | アプリケーションが終了するまで |
インスタンス変数 | 当該クラス内で有効(※ちょうどよい) | インスタンスが不要になるまで |
■隠蔽の例=getterとsetter
クラス
class Account{
private String name;
public void setName(String input){
this.name = input;
}
public String getName(){
return this.name;
}
}
インスタンスの生成
Account acc1 = new Account();
acc1.setName("TestAccount1");
Account acc2 = new Account();
acc2.setName("TestAccount2");
System.out.printLn(acc1.getName());
System.out.printLn(acc2.getName());
■Visualforceにおけるgetterとsetter
get:Apex→VFの値のパス(=表示値を送信)
set:VF→Apexの値のパス(=入力値の受け取り)
VF↓
<apex:page controller="VfTest">
<apex:form>
<apex:outputlabel value="Enter String here"/>
<apex:inputtext value="{!input}"/>
</apex:form>
</apex:page>
Apex Controller↓(※これだけでOK)
public class VfTest
{
public String input{get; set;}
}
Apex Controller↓(※表示の初期値の設定&setに関して丁寧な書き方をした場合)
public class VfTest
{
public String userinput;
public String getinput(){return 'Neko';}
public void setInput(String input)
{
this.input = input;
}
}
■ポリモーフィズムの例
スーパークラス:ここでwrite()メソッドを定義
public virtual class TextWriter {
public virtual void write() {
System.debug('Write some text.');
}
}
サブクラスA:write()メソッドをA仕様に上書き
public class WriterA extends TextWriter {
@Override
public override void write() {
System.debug('Write some text using the A class');
}
}
サブクラスB: write()メソッドをB仕様に上書き
public class WriterB extends TextWriter {
@Override
public override void write() {
System.debug('Write some text using the B class');
}
}
メソッド:write()メソッドの呼び出し
TextWriter[] textWriterList = {new WriterA(), new WriterB()};
for(TextWriter tw: textWriterList){
tw.write();
}
メモリ領域について
格納されるもの | 確保の単位 | 確保タイミング | |
静的領域 | グローバル変数・コード(クラスなど) | システム単位 | 常時 |
ヒープ領域 | インスタンス・SOQL取得結果 | 同期処理:6MB 非同期処理:12MB | Apex実行時 |
スタック領域 | メソッドの引数・ローカル変数・戻り先 | スレッド単位 | LIFO |