オブジェクト指向がイケてないとか本質は何なのかとかの云々

そもそも1980年代から1990年代にかけてオブジェクト指向がやたら持ち上げられたのはどういう世の中の動きがあったからかを理解していないとダメで、当時はMacWindowsが出てきてGUIが急に流行り出したところで、マウス操作のGUIのプログラムを書くのちょー難しいってことが課題になりオブジェクト指向を使うことによりそれをめちゃくちゃいい感じに解決できるということが判明し、もうGUIを作るためにはオブジェクト指向プログラミングをやらざるを得なくなってしまったんだ。

 

だからまあいまのようにあまりにもDOMが当たり前になってもうオブジェクト指向とかを全く意識しないままそれらをみんなが使うようになってしまったときに、オブジェクト指向なんてダメだとか古いとか言われてもじゃあDOM使うのやめるのかというとそうではないだろうから、GUIにおいてオブジェクトという概念は今後も主流でありつづけるだろうし、そういう意味では全部をオブジェクト指向が有用かダメかみたいなのは分野によるんじゃねとしか言いようがない。

 

 

話は変わってじゃあオブジェクト指向の本質はなんなのかという話になるのだけど、GUIツールキットについて考えたときにはC++JavaではなくC言語を使ったGUIツールキットはどうなんだあれはオブジェクト指向じゃないんじゃないのかというのが疑問に浮かぶ。そんでその代表格であるGTKのサンプルコードはこんな感じで、これはオブジェクト指向なのかそうじゃないのかというと、いやこれはオブジェクト指向なんじゃね?と個人的には思ってしまう。

 

GTKプログラミング - Wikibooks

#include <gtk/gtk.h>
int main (int argc, char *argv[])
{
   gtk_init(&argc, &argv); // GTKの初期化

   /* ウィンドウ、GtkFixedなど各種ウィジェットを作成 */
   GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   GtkWidget *fixed = gtk_fixed_new();   
   GtkWidget *label = gtk_label_new("Hello, world!");

   /* GtkFixedをウィンドウにパック */
   gtk_container_add(GTK_CONTAINER(window), fixed);

   /* GtkFixed内の(10,20)にラベルを配置 */
   gtk_fixed_put(GTK_FIXED(fixed), label, 10, 20);

   /*  表示することを設定 _all であることに注意 */
   gtk_widget_show_all(window); 

   /*  メインループ */
   gtk_main();
   return 0;
}

 

そしてここには継承も多態もメッセージパッシングもなく(もちろんこの裏のGTK内部にはそれらが用いられているのだとは思うが)、オブジェクトとそれに応じた関数群があって、関数を呼び出すためには引数に対象になるオブジェクトを指定しなければいけないというルールがあるだけである。

 

 

だからまあ僕はオブジェクト指向の本質が継承だとか多態だとかそういうのはどうでもいいなーって感じです。多態は便利だし継承は便利なときもあるけどダメなときもある。