オブジェクト指向とsmalltalk

CLR/H 第38回勉強会
オブジェクト指向smalltalk
に参加してきましたー。

普段はMS系の勉強会が中心だったのですが、今回はオブジェクト指向smalltalkがメインということでこれはぜひ参加してみたいということで。

今回は2部構成になっていて、まず第一部がオブジェクト指向についてのセッションで、第二部がsmalltalkの歴史とそして簡単な実際の使い方&ハンズオンセミナーみたいな感じでした。

第一部については
第1部
OOPとはなにか
 本来であれば基本中の基本
  OOPは2つ
   ・ ADTとメッセージング
   区別して使い分ける。
    
    
  メッセージングOOPの権化(smalltalk)
   → 得体が知れない
   → 実は身近な存在でもある。
   
  「オブジェクト指向
   プログラミング(OOP)
    → 今日のメイン!    
   分析・設計(OOAD)
    →また機会があったら

  一般的なオブジェクト指向
   カプセル化
    継承
     ポリモーフィズム
     
   オブジェクトにメッセージを送って。。。
      
  オブジェクト指向を考えた人 
   アラン・ケイ(本人談)
   実のところは?
   1977年ごろ?(smalltalkの開発者が言っていた?)
   議論の分かれるところ。
   
   アラン・ケイオブジェクト指向
    ・メッセージング    
    ・状態やプロセスの 保持、保護、遮蔽    
    ・遅延のバインディングの徹底
        
   カプセル化とは
    カプセル化→1970年代(CLU)
    継承 → 1960年代(SIMULAI)
    ポリモーフィズム(1967年 ストレイチー、1985年 ウェグナ)
    
   三点セット+アルファとして「OOP」→ ビョーン・ストラウストラップ(C++の実装者)
   
   OOPとはADTの拡張である
    手続き的なプログラミング    
    モジュール機構を用いた〜    
    抽象データ型(ADT)を    
    オブジェクト指向プログラミング
       
   モジュール化とは
    ・モジュールを単位としたプログラムの分割    
    ・モジュール内の情報の公開・非公開の制御
   
   抽象データ型(ADT)とは
    1977 バーバラ・リスコフ
     手続きとデータのセット(カプセル化
     ユーザー定義型によるモジュール化
     
   「OOP」とは
    ユーザ定義形をSIMULAクラスを使って実現
    
   SIMULAのクラス
    ・ALGOL60のブロックに「寿命」を与えた
    ・擬似並行処理のために公安
    ・手続きをクラス内に内包
    ・継承機構、ポリモーフィズム
    
   ここまでの生理
    ・OOPを言い出したのはアラン・ケイ
    ・しかしケイは3点セットをいっていない
    ・ストラウストラップが1980年代半ばにADTの特殊形態として再定義
    ・クラスを使ってADTするのがOOP
    
   三点セットの招待
    「OOP」 = 「ADT」+「クラス」
     カプセル化 。。。 ADTのこと
     継承・ポリモーフィズム
      。。クラスの機能・効果
      
   ケイの「オブジェクト指向」は?
    前述の公開されたメールのやり取りのほか、Squeak-DevMLなどで断片的に語られる
    
    それ自体をテーマに書かれた論文はない。
    
   ソフトウェアはいまだに「工学」の域に達していない
    ・ソフトウェア工学はツールやアイディアにかけている
    ・建築好学で言うなら、ピラミッドを作っているよう
    ・プロジェクトのたびに新たな学習を強いられる
    ・途中で学んだことを完成後には適用できない
    
    真のソフトウェア工学が実現するまでのつなぎ「遅延バインディング」ではないだろうか?

    遅延バインディングが可能にすること
     ・動作させながら安全ん変更を加えられるか
     ・不都合があれば取り消しが可能か
     ・すでに存在するオブジェクトに属性を追加できるか
     
    遅延システムでのプログラミング
     ・生物あるいはインターネットのような機構を想像
     ・構成成分はオブジェクトのみ。そしてそれは万能
     ・メッセージングで協動、プログラミングも同じ
     ・オブジェクトはしかるべく「振舞う」
     ・ごり押しや神がごとくコントロールはNG
     ・巨大なソフトウエアは生態系、変更は対話的
     
    二つのオブジェクト指向
     ・ストラウストラップ。。。データ型のOOP
      ADTをクラスで実現
      オブジェクトは「データ型」
      
     ・ケイ。。。メッセージングのOOP
      遅延結合をメッセージングで実践
      オブジェクトは細胞、小さな計算機
      
    プロトタイプのOOP
     当初、メッセー任具のOOPから派生的に生じた
     
     samlltakに反抗、クラスは複雑過ぎる → SELF
    
     オブジェクトにはスロットと委譲機構があれば十分
      ・メソッド・インスタンス変数はスロットで
      ・存在しないスロットへアクセスは委譲先へ
      ・クラス(メソッド保持、インスタンス生成、型)不要
     メッセージングという概念すら不要、→JavaScript

って感じでした。
第二部は実際に、smalltalkの処理系であるを用いて実際に動かしていく感じでした。実際には自分がなれていないせい&文字がかすんで(年寄りなので><)最後まではついていけなかったけど、雰囲気は味わえてよあったかなーと思います。

世の中にはいろいろな言語があって、それぞれ特徴があっていろいろな使われ方をしていてっていうのを味わえるのもこういう勉強会の醍醐味というか楽しいところかもw

自分で実際に主催することはないと思うけど、これからもいろいろな勉強会に参加させてもらってどんどん知識の幅を広げたいな〜(広げるばっかりで深くならなくてやばいけど(爆))