プログラミング言語には様々なものがあり、それらが提供している機能もまた様々である。そういった多様な言語機能には、ソフトウェアのモジュール化、再利用性、安全性などを向上させるという強い動機があり、言語の意味論、モジュール化機構、型システムといった理論的背景によって支えられている。これら諸機能を俯瞰的に把握することで、プログラミング言語の設計を行う際の要点を理解するだけでなく、プログラミング言語を使ってソフトウェア開発を行う際の指針を得ることができる。
プログラミング言語に備わる様々な機能が、どのような理論的背景の下で成立し、実際の言語によってどのような特徴や違いがあるかを学ぶことで、プログラミング言語の設計に関する全体像を把握することを目標とする。このようなプログラミング言語に関する深い知識を得ることで、その背後にある情報科学の理論の応用例を知り、特定の言語にとらわれないプログラミングの本質を身に付けることも目標とする。
プログラミング言語機能のうち表面言語、即ち利用者が実際に記述するプログラムのための諸機能をテーマとする。特に近年では極めて一般的になっているオブジェクト指向言語とその発展型に見られる機能を対象とする。
Parnasモジュール化原則、情報隠蔽、抽象データ型、Liskov置換原則、オブジェクト指向、クラス、継承、委譲、再利用性、デザインパターン、多重継承、trait、フィーチャ指向、アスペクト指向、横断的関心事、アドバイス、Dependency injection、文脈指向、層活性、型安全性、代数データ型、部分型、型推論、型多層性、The Expression Problem、モジュール型、汎化型、テンプレート、メタプログラミング、マクロ
✔ 専門力 | 教養力 | ✔ コミュニケーション力 | 展開力(探究力又は設定力) | 展開力(実践力又は解決力) |
各回で簡単なテストを行い、その回の問題点を理解する準備をする。その上で言語機能が設計された背景、基本的な機能、バリエーションについて講義をする。講義は討論形式を中心に行う。
(偶数年度は日本語開講であるため、非日本語使用者のために講義スライドは英語を使用する。また英語による質問・補足説明も歓迎する。
授業計画 | 課題 | |
---|---|---|
第1回 | 講義の概要説明 | 特になし |
第2回 | モジュール化: Parnasモジュール化原則, 依存性, 情報隠蔽 | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
第3回 | 抽象データ型: インタフェースと実現, CLU言語, Liskov置換原則, カプセル化 | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
第4回 | オブジェクト指向1: クラス, 継承, インスタンス, メソッド | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
第5回 | オブジェクト指向2: 委譲, インスタンスベースオブジェクト指向, 多重継承, マルチメソッド | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
第6回 | 再利用性: ライブラリとフレームワーク, デザインパターン | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
第7回 | 再利用性: mixins, traits | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
第8回 | アスペクト指向: 横断的関心事, ポイントカット, アドバイス | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
第9回 | 型システム1: 型安全性, 型検査 | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
第10回 | 型システム2: テンプレート, 総称型, 型制約 | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
第11回 | 型推論: 型推論, オブジェクト指向言語の型推論, ソフト型, 段階的型付, 暗黙型変換 | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
第12回 | The Expression Problem, mixin層 | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
第13回 | プロダクトライン、フィーチャ指向、文脈指向、フィーチャ、層、部分メソッド | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
第14回 | メタプログラミング, マクロ | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
第15回 | メタオブジェクトプロトコル, 自己反映計算, 鏡(mirrors) | 講義で解説された言語機能について、実際のプログラミング言語を用いて確認せよ |
学修効果を上げるため,教科書や配布資料等の該当箇所を参照し,「毎授業」授業内容に関する予習と復習(課題含む)をそれぞれ概ね100分を目安に行うこと。
特になし
特になし
レポート課題によって評価する。課題は授業で取りあげた諸概念を、実際のプログラミング言語に即して実験するものとする。これによって授業内容を応用可能なレベルまで理解しているかを判定し、成績評価の基準とする。
特になし