SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

「IBM Japan Geeks」勉強会レポート(AD)

IBMのとがった人たち ~ 「IBM Japan Geeks」
勉強会レポート(後編)

「Google基盤」と「カリー化」

  • X ポスト
  • このエントリーをはてなブックマークに追加

オブジェクト指向とカリー化

 「巻き」が入る中、最後に登場したGeekは津田嘉孝氏。「オブジェクト指向とカリー化」と題された発表は4月に行われたもので、「カリー化の意義を理解する」ことを目標としたものである。そもそもこの資料は、お客様先で勉強会を実施するために制作したものだという。

津田嘉孝 氏
津田嘉孝 氏

 このお客様は業界大手で、Java Webアプリケーション開発を多数実施しており、フレームワークも所有していたが、開発効率に課題があるため、日本アイ・ビー・エム システムズ・エンジニアリング株式会社(以下、ISE)にて、Seasar2をベースにした新規フレームワークを開発・保守していた。2008年に入ってから、その追加機能を含む保守をお客様が引き継ぐに当たり、技術力向上を目指し、勉強会を実施することになった。その中でオブジェクト指向とカリー化を取り上げたのだという。 

閉じた世界と開かれた世界

 津田氏はまず、「閉じた世界と開かれた世界」として比較を行った。ここで言う閉じた世界とは、メインフレームに代表される決まりきった接続先だけの世界で、開かれた世界とはLinuxやWindows、AIXなどのOS、Javaや.NET、Ruby、PHPなどの言語に代表されるように多種多様な接続先がある世界だ(ここで"The Internet"のinterが「~間の」という意味があることを考えると閉じたネットワーク同士が結びつきあうことで開かれたネットワークを形成していったことが感じ取れる)。

 さて、閉じた世界ではプログラムの考慮点がほとんどないため、メソドロジーとして構造化設計手法を採用し、単純にサブルーチン化していけば、サブルーチン呼び出しによる再利用が達成される。そのため開かれた世界に比べ閉じた世界では生産性を高く維持することが可能だ。

閉じた世界と開かれた世界
閉じた世界と開かれた世界

 一方、開かれた世界では、プログラムの考慮点はセキュリティやアーキテクチャ、プロトコル、フレームワークなど多数存在し、かつ、旧来の手法では、これらへの対応項目が増えるほどコード量が爆発的に増えてしまう傾向がある。つまり、世界が開かれていくほど考慮事項が増え、生産性は下がっていく、そのため、開かれた世界のメソドロジーとして、オブジェクト指向が注目されてきたのである。特に開かれた世界では、状況を特定できないという辛さがあると津田氏は言う。 

状況を特定できないことの苦労

 例えば、ResourceBundleを使ってプロパティファイルからキーに対して値を取得することを考えた場合、もし、この世界に住むすべての人間が英語だけを使用しているのなら

a)
bundle.getBundle(key)

 だけで済む。しかし、日本語などの国際化対応を考慮した途端

b)
bundle.getBundle(key, request.getLocale())

 と、ロケールに気を遣う必要がでてくる。また、JavaEEコンテナから利用される状況まで考慮しだせば、アプリケーションのClassLoaderまで特定する必要が出てくるため、

c)
bundle.getBundle(
  key,
  request.getLocale(),
  Thread.currentThread().getContextClassLoader()) 

のように記述が複雑になってくる。本来、キーに対して値が欲しいだけなのに、場合によっては状況の特定にコード上でこれだけの努力が必要となるのだ。

 また状況が変わった場合、例えば、アメリカで作られたアプリケーションでは最初a)の記法を用いて記述されていたが、ある日、日本にも進出しようと考えた結果、国際化対応でb)のような修正が発生したとしても不思議ではない。

 このように旧来の手法では状況に変化が現れた結果、パラメータもすべて書き直すことになり、ひいてはアプリケーションを作り直すことにまで繋がる。この原因はレイヤーの上から下まで必要なパラメータを引き渡していかなければならないことにある。もし、要件の追加だけですべて作り直さなければならないのであれば、レイヤー化に意味はない。

 この課題に対し、パラメータはそのままに要件の追加を可能にするのが、オブジェクト指向が目指したことであり、本質的な答えをコンピュータサイエンスに求めれば、それは「カリー化」ということになる。

次のページ
カリー化とは

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
「IBM Japan Geeks」勉強会レポート連載記事一覧
この記事の著者

吉澤 亨史(ヨシザワ コウジ)

元自動車整備士。整備工場やガソリンスタンド所長などを経て、1996年にフリーランスライターとして独立。以後、雑誌やWebを中心に執筆活動を行う。パソコン、周辺機器、ソフトウェア、携帯電話、セキュリティ、エンタープライズ系など幅広い分野に対応。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2992 2008/09/10 18:40

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング