既視感

Objective-Cを学習していると、過去にどこかで見たことがある気がしてくることがある。 無論Objectcive-Cのメッセージ式などは独自のものであり見るのも初めてだが、全体を俯瞰すると何か既視感を覚えるのだ。

Objective-Cのヘッダファイル
#import <Foundation/NSObject.h>

@interface MYClass: NSObject {
@public
    int publicVar;
@protected
    int protectedVar;
@private
    NSString *keyword;
}
@property (retain) NSString* keyword;
- (id) init
- (void) say;
@end
?????の宣言部
unit TMyClass;

interface
uses  〜;
type
  TMyClass = class(TObject)
  private
    FKeyword: string;
    function GetKeyword: string;
    procedure SetKeyword(const Value: string);
  protected
    protectedVar: Integer;
  public
    publicVar: Integer;
    property  Keyword : string read GetKeyword write SetKeyword;  
    constructor Create;
    procedure Say;
  end;

そう。?????はDelphi(Object PASCAL)である。

Objective-CDelphiは宣言部だけでもいろいろと相似点が見つかる。

    • クラスの宣言部と実装部が分かれている(interface/implementation)
    • 宣言部に変数とそのスコープを記述する
    • プロパティ構文(プロパティと変数を結びつける構文)がある
    • オブジェクトは参照型(ポインタ型)である
    • 単一継承のみ許される
    • ネームスペースが無い (これは両者とも設計が古いからとも言えるが)

ソースコードは省略するが、他にも

    • プリミティブ型以外はGCが無く自身でメモリ管理をする必要がある(Objective-CはCocoaTouch系のみ)
    • イニシャライザ(コンストラクタ)のチェーンを意識して書く必要がある
    • オブジェクトのポインタのコピーと実態のコピーは明確に区別される

と似ているところが多い。
互いに既存の言語にSmallTalkの血を入れてオブジェクト指向型に拡張したハイブリット型言語であり、そういう点で似るのは当然なのかもしれない。※

※私はDelphiを使っていた時間が長かったので、なんとなく懐かしかったのもあるが、C++とは違う形で拡張されたのは興味深い。

追記:
自分自身すっかり忘れていたが、コメントでも頂いた通りObject PASCAL自体がAppleの中の人に作られた言語であり、そもそもMacの正統な実装言語として使われてきた訳で(熱心な古くからのMacファンは未だにObjective-Cを認めないと聞いたことがある)、互いに影響していても(されていても)全然不思議では無いのだった。