到達目標
(ア)計算モデルの観点からプログラミング言語を分類できる.
(イ)BNFを用いてプログラミング言語の文法を記述できる.
(ウ)命令型プログラミング言語の特徴と計算モデルを説明できる.
(エ)オブジェクト指向プログラミング言語の特徴を説明できる.
(オ)関数型プログラミング言語の特徴と計算モデルを説明できる.
(カ)論理型プログラミング言語の特徴と計算モデルを説明できる.
(キ)プログラミング言語と処理系の関係について説明できる.
ルーブリック
| 理想的な到達レベルの目安 | 標準的な到達レベルの目安 | 未到達レベルの目安 |
評価項目1 | 講義で扱うプログラミング言語と,自らが調べたプログラミング言語を計算モデルの観点から説明・分類でき,講義で扱うプログラミング言語を用いたプログラミングができる. | 講義で扱うプログラミング言語を計算モデルの観点から説明・分類できる. | プログラミング言語を計算モデルの観点から説明・分類できない. |
評価項目2 | プログラミング言語の文法について,および文法の記述方法を説明でき,さらに簡単な例についてBNFで記述できる. | プログラミング言語の文法について,および文法の記述方法を説明できる. | プログラミング言語の文法について,および文法の記述方法を説明できない. |
評価項目3 | プログラミング言語と処理系の関係について説明でき,ソフトウェア開発に応用できる. | プログラミング言語と処理系の関係について説明できる. | プログラミング言語と処理系の関係について説明できない. |
学科の到達目標項目との関係
学習・教育到達度目標 A2 ソフトウェア開発において,数理的理論に基づくスマートな設計ができるとともに,ハードウェアの基本動作を意識した設計ができる.
JABEE d 当該分野において必要とされる専門的知識とそれらを応用する能力
本校教育目標 ① ものづくり能力
教育方法等
概要:
「プログラミング言語はなぜいくつも提案されているのだろうか」という問いに答える講義である.これまでに学習してきたC言語,Java,Pythonはすべて手続き型言語である.一方で,宣言型言語と分類されるプログラミング言語も存在する.特に近年では関数型を好むプログラマも増加している.
そこで,本講義では「扱ったことのない言語にどう接すればよいか」を学ぶことを目的に,これまでに学習したプログラミング言語やコンピュータアーキテクチャの知識を基に,プログラミング言語が最低限もつべき機能や,文法を記述する方法について学習する.
プログラミング言語が計算モデルにより分類できることを学び,命令型,関数型,論理型のプログラミングについてそれぞれ計算モデルの観点から学習する.また,異なる計算モデルに基づくプログラミング言語が,機械語しか理解できないコンピュータでなぜ利用可能か学習する.さらにより即効性のある実用的な知識として,オブジェクト指向についても学習する.
授業の進め方・方法:
講義は座学形式を主体とし,スライドを用いて説明を行う.授業スライドは公開する.また,適宜ワークシートを配布する.なお教科書については,授業を受けることで内容の理解が進むことを期待しており,事後に知識を補強する用途を想定している.
課題はレポートを課すが,指定の方法で提出することで添削を受けた後再提出できる.学習成果を適宜確認するためにこの機会を活用してほしい.
注意点:
特に課題やワークシートを活用し,継続的に学習成果の確認を行うこと.
課題評点は事前に公開するルーブリックによって定め,課題返却時に評点を通知する.このため,自身の学習成果について,自らが責任をもって取り組むこと.
「情報科学」教育プログラムの選択必修科目である.
選択必修の種別・旧カリ科目名
選択必修1
授業の属性・履修上の区分
授業計画
|
|
週 |
授業内容 |
週ごとの到達目標 |
後期 |
3rdQ |
1週 |
「なぜ我々はプログラミング言語論を学ぶのか」 シラバスの説明,さまざまなプログラミング言語を知る (自学自習:授業で知ったプログラミング言語について調べる) |
シラバスの内容を確認し,授業の目標を理解する.さまざまなプログラミング言語を知る.
|
2週 |
「計算とは何かを説明する」 計算,計算モデル,プログラミング言語と計算モデル (自学自習:指示した計算理論に関する動画を視聴し理解する) |
プログラミング言語を計算モデルの観点から分類できる.
|
3週 |
「プログラミングの文法と「プログラムが書ける」とは」 文法(BNF),言語処理系 (自学自習:プログラミング言語の文法をBNFで表現する) |
BNFを用いてプログラミング言語の文法を記述できる.
|
4週 |
「深淵を覗くとき,深淵もまた…」(命令型計算モデルと構造化プログラミング) レジスタ機械,構造化定理 (自学自習:教科書第3章を読みこれまでに学習したことと関連付ける) |
命令型プログラミング言語の計算モデルおよび構造化プログラミングについて説明できる.
|
5週 |
「構造化プログラミングからオブジェクト指向へ」 命令の抽象化,データの抽象化 (自学自習:様々な言語の型付けを調べる) |
命令型プログラミング言語におけるデータの扱い方を説明できる.
|
6週 |
「データ抽象から入るオブジェクト指向プログラミング」 データ抽象,オブジェクト指向プログラミング,ジェネリックプログラミング (自学自習:命令型プログラミング言語の歴史について調べる) |
命令型プログラミング言語における関数やモジュールなどの概念を説明できる.
|
7週 |
「中間試験までのまとめ」 この講義以外で学んできたことと,この講義で学んだことを関連付けてまとめる (自学自習:命令型/オブジェクト指向プログラミングに関する課題を行う) |
クラス,カプセル化,ポリモーフィズムなどのOOPの特徴を説明できる.
|
8週 |
「オブジェクト指向のこころ」 機能分解,観点と責任,OOPと責任 (自学自習:身の回りのモノが備えている責任を考える) |
オブジェクト指向における設計原則を説明できる.
|
4thQ |
9週 |
「どのように責任を考えるか」 デザインパターン,設計原則 (自学自習:デザインパターンについてインターネットなどで検索し理解する) |
動的型付けなオブジェクト指向プログラミング言語の特徴を説明できる.
|
10週 |
「関数だけで計算を扱ってみる」 関数型プログラミング言語,関数型計算モデル (自学自習:指示した関数型モデルに関する動画を視聴し理解する) |
関数型プログラムの特徴と計算モデルを説明できる.
|
11週 |
「えっ,関数を引数に与える?できらぁ!」 導入(ラムダ記法,Haskellの記法,カリー化など),高階関数とリスト (自学自習:関数型プログラミングに関する課題を行う) |
関数型プログラムの特徴と計算モデルを説明できる.
|
12週 |
「Haskell以外で関数型プログラミング」 Pythonで関数型,OOPと関数型,JavaScript (自学自習:PythonやJavaScriptを用いて関数型プログラミングを実践する) |
Haskellを用いて簡単なプログラムを作成できる.
|
13週 |
「Prologのパワフルさを体験」 Prolog,論理型プログラミング (自学自習:これまでに説明した3つの計算モデルの特徴と違いについてまとめる) |
Pythonにおける関数型プログラミングについて説明できる.
|
14週 |
「人類の夢の跡」 論理型の応用,論理型の基礎(命題論理~SLD反駁) (自学自習:論理型プログラミングに関する課題を行う) |
一階述語論理と論理型プログラミングの計算モデルについて説明できる.
|
15週 |
「振り返りと総まとめ」 命令型,関数型,論理型計算モデルの関連性について振り返る (自学自習:これまでの学習成果を用いて機械で命令型以外の言語が動作する理由をまとめる) |
Prologを用いて簡単なプログラミングができる.
|
16週 |
|
|
モデルコアカリキュラムの学習内容と到達目標
分類 | 分野 | 学習内容 | 学習内容の到達目標 | 到達レベル | 授業週 |
専門的能力 | 分野別の専門工学 | 情報系分野 | プログラミング | プログラミング言語は計算モデルによって分類されることを説明できる。 | 4 | 後1,後2,後10,後13,後15 |
主要な計算モデルを説明できる。 | 4 | 後4,後5,後6,後7,後8,後9,後10,後11,後12,後13,後14,後15 |
システムプログラム | コンパイラの役割と仕組みについて説明できる。 | 4 | 後2,後3,後4,後10,後13,後15 |
評価割合
| 中間試験 | 定期試験 | 課題 | 合計 |
総合評価割合 | 30 | 45 | 25 | 100 |
専門的能力 | 30 | 45 | 25 | 100 |