シラバス
科目名 応用プログラミング(Java)
英語科目 ナンバリング Ilab204
開講期 秋学期 開講学部等 コンピュータ理工学部 配当年次 2年次 単位数 2単位
教員名 青木 淳
 ※履修条件,配当年次等の詳細は履修要項をご確認ください。
授業概要/Course outline  
 情報系の産業において主流となっているオブジェクト指向プログラミングをJavaを用いて学ぶ。Javaは去る1995年にデビューして以来、世界中に広がっており、Java無しのプログラミングの世界を、もはや想定できなくなってしまった。Javaを知らずして使えずして世に出ることは、決まりが悪くて面目が立たないであろう。1980年に提唱されたオブジェクト指向についても同様である。世の中に必要とされているプログラミングに関する知識と技術を、実際に動作する例題プログラムをふんだんに用いながら解題してゆく。
 基礎プログラミング演習を通して手続き的なプログラムを作ることに先に慣れてしまうため、発展プログラミング演習で垣間見るオブジェクト指向プログラミングに馴染めなかった学生も多いのではなかろうか。演習の不足や消化不良そして不完全燃焼を解消し、情報産業界で活躍するための知識と技術を育て養おうではないか。
 この授業ではオブジェクト指向プログラミングのスタイルを徹底的に身につける。しかも手続きプログラミングのスタイルも場合に応じで使いこなせるように配慮する。プログラミングに対する苦手意識を払拭し、いずれのプログラミングのスタイルも楽しく愉快に駆使できる高みをめざす。
 同時にプログラミングの厳しさや険しさの自覚を働きかける。人命にかかわるような、社会基盤にかかわるような、ミッションクリティカルと呼ばれる極めて重要なプログラムが多く存在する。けっしてバグってはならないプログラムである。そのようなプログラムの開発に携わってきた講師自らの経験を基にして、一行一行を丁寧に書き下ろすための精神力や技術力について、勘どころを伝えてゆく。
  ■前もってどのような科目の履修が望ましいか:
   ・発展プログラミング演習
   ・ソフトウェア工学I
   ・アルゴリズムとデータ構造
   ・グラフィックスI
   ・ヒューマン・インタフェースI・II
  ■今後どのような科目を履修するのに役立つか:
   ・プロジェクト演習
   ・ソフトウェア工学II
   ・オペレーティングシステム
   ・グラフィックスII
   ・プログラミング言語
   ・分散処理システム
授業内容・授業計画/Course description・plan  
 この授業では「まず、やってみる、それから、学ぶ」をライトモチーフにしながら、以下のようなテーマに沿って進めてゆく。ただし授業の進行状況に応じて変更することがある。
[第01回]
テーマ:Javaとは…(What is Java?:発展プログラミング演習を礎にして…)
テーマ:プログラミング環境(Programming Environment)
[第02回]
テーマ:パッケージ(完全限定クラス名:Javaプログラムの在り処:名前空間)
テーマ:JARファイル(複数のクラスファイルを渡す場合の注意点と問題点)
[第03回]
テーマ:アルゴリズムとプログラム設計(解法手順からプログラム設計=プログラミングの前段)
テーマ:オブジェクト指向プログラミングの変数(「int value = 100;」と「Integer value = 100;」の相異)
[第04回]
テーマ:フィールドとメソッド(「変数≒フィールド」と「手段≒メソッド」)
テーマ:配列:複数のものをまとめて記憶(様々なものを配列にすると…:配列の正体を知ろう)
[第05回]
テーマ:プログラム設計とプログラム実装(プログラミング=プログラムを設計し実装すること)
テーマ:文字列操作(String Manipulation:連結・比較・分割)
[第06回]
テーマ:ジェネリクス(総称性:Generics、型を変数にする:型変数、仮型引数)
テーマ:継承と集約(委譲)(Inheritance and Aggregation (Delegation))
[第07回]
テーマ:配列リスト,スタックとキュー(ArrayList, Stack and Queue)
テーマ:列挙型を定義して活用する方法(Enum Type)
[第08回]
テーマ:同一性と同値性(Identity and Equivalence)
テーマ:オブジェクトの並び替え(Collections.sort(…)とComparableインタフェース)
[第09回]
テーマ:オブジェクトの複製(Cloneableインタフェースの実装)
テーマ:辞書:マップとはキーと値のペアの集まり(Dictionary:Table:HashMap)
[第10回]
テーマ:外部プログラムの実行(ProcessBuilderとProcess)
テーマ:システムプロパティの獲得(JVMの環境とOSの環境)
[第11回]
テーマ:ファイルの読み書き(TXTファイルやCSVファイルを対象にして、読んで、並び替えを施し、そして書く)
テーマ:Javaオブジェクト自体の読み書き(シリアライズ=直列化と言語化=リスト表現やXML表現)
[第12回]
テーマ:Webページのダウンロード(Webブラウザで表示)
テーマ:画像ファイルのダウンロード(Webブラウザで表示)
テーマ:デザインパターンの活用(オブザーバパターン=MVC:Model-View-Controller)
テーマ:画像ファイルのダウンロード&表示(MVCを用いて描画表示)
[第13回]
テーマ:自作ライブラリの活用法(cons.jar, pane.jar, utility.jar)
テーマ:2次元グラフィックス:タートルグラフィックス(亀を歩かせて線描を行う)
[第14回]
テーマ:スレッドによる並行処理プログラミング(Thread of Concurrent Execution)
テーマ:サーバ&クライアントのプログラミング(Server and Client)
[第15回]
テーマ:3次元グラフィックス(Java bindings to the native OpenGL 3D graphics)
[予備群]
 授業の進行状況に余裕があるならば、以下のテーマ群から適宜選定し、授業に組み入れることにする。
テーマ:プログラミング過程(Programming Process)
テーマ:リファクタリング行解(Refactoring Process)
テーマ:Unicodeエスケープ形式(ケネディの名言を用いてnative2asciiを作ってみる)
テーマ:誤差が出ない演算(BigDecimalを用いたテーラー展開法やニュートン法)
テーマ:引数が不定個となる可変引数の活用(formatやprintfのメソッドはどうやってできているのか)
テーマ:アサーション(表明:Assertion)
テーマ:テストと品質(JUnit and FindBugs)
テーマ:頒布(はんぷ:広く配るため)のしつらえ(世界へとリリースするための構成法・ライセンス・など)
準備学習等(事前・事後学習)/Preparation and assignments  
 授業内容が実際のソフトウェアの開発・運用・保守の現場(ソフトウェア開発会社)でのプログラミングを想定している。そのため、学問的なことばかりではなく、作法(さほう・さくほうの両方)や書法(プログラムやドキュメントの著し方)なども範疇に入り、たいへん多くのことに気を配らなければならない。事前に関係するところを調べて授業に臨み、その後、講義で学んだ知識を整理し、さらに理解を深めるために宿題レポートを真剣に行い、理解(りげ)から行解(ぎょうげ)に変えてほしい。また、数々の宿題には複数の配付資料やプログラムが関連する。したがって、それらの整頓も大切である。
[第01回]
テーマ:Javaとは…(What is Java?:発展プログラミング演習を礎にして…)
テーマ:プログラミング環境(Programming Environment)
[事前学習]必ずシラバスを読んで初回の授業に臨むこと。配付資料を教員ページ(リポジトリ)またはmoodleページからダウンロード(チェックアウト)し、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第02回]
テーマ:パッケージ(完全限定クラス名:Javaプログラムの在り処:名前空間)
テーマ:JARファイル(複数のクラスファイルを渡す場合の注意点と問題点)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第03回]
テーマ:アルゴリズムとプログラム設計(解法手順からプログラム設計=プログラミングの前段)
テーマ:オブジェクト指向プログラミングの変数(「int value = 100;」と「Integer value = 100;」の相異)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第04回]
テーマ:フィールドとメソッド(「変数≒フィールド」と「手段≒メソッド」)
テーマ:配列:複数のものをまとめて記憶(様々なものを配列にすると…:配列の正体を知ろう)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第05回]
テーマ:プログラム設計とプログラム実装(プログラミング=プログラムを設計し実装すること)
テーマ:文字列操作(String Manipulation:連結・比較・分割)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第06回]
テーマ:ジェネリクス(総称性:Generics、型を変数にする:型変数、仮型引数)
テーマ:継承と集約(委譲)(Inheritance and Aggregation (Delegation))
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第07回]
テーマ:配列リスト,スタックとキュー(ArrayList, Stack and Queue)
テーマ:列挙型を定義して活用する方法(Enum Type)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第08回]
テーマ:同一性と同値性(Identity and Equivalence)
テーマ:オブジェクトの並び替え(Collections.sort(…)とComparableインタフェース)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第09回]
テーマ:オブジェクトの複製(Cloneableインタフェースの実装)
テーマ:辞書:マップとはキーと値のペアの集まり(Dictionary:Table:HashMap)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第10回]
テーマ:外部プログラムの実行(ProcessBuilderとProcess)
テーマ:システムプロパティの獲得(JVMの環境とOSの環境)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第11回]
テーマ:ファイルの読み書き(TXTファイルやCSVファイルを対象にして、読んで、並び替えを施し、そして書く)
テーマ:Javaオブジェクト自体の読み書き(シリアライズ=直列化と言語化=リスト表現やXML表現)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第12回]
テーマ:Webページのダウンロード(Webブラウザで表示)
テーマ:画像ファイルのダウンロード(Webブラウザで表示)
テーマ:デザインパターンの活用(オブザーバパターン=MVC:Model-View-Controller)
テーマ:画像ファイルのダウンロード&表示(MVCを用いて描画表示)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第13回]
テーマ:自作ライブラリの活用法(cons.jar, pane.jar, utility.jar)
テーマ:2次元グラフィックス:タートルグラフィックス(亀を歩かせて線描を行う)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第14回]
テーマ:スレッドによる並行処理プログラミング(Thread of Concurrent Execution)
テーマ:サーバ&クライアントのプログラミング(Server and Client)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
[第15回]
テーマ:3次元グラフィックス(Java bindings to the native OpenGL 3D graphics)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。
授業の到達目標/Expected outcome  
 動くプログラムと正しいプログラムの相異を知ることが到達目標である。少なくとも、オブジェクト指向プログラミングと手続きプログラミングの双方を会得し、UML(Unified Modeling Language)やデザインパターンなどオブジェクト指向デザイン(設計)への橋渡しも到達目標とする。最高学府のプログラミングの授業である。将来の情報社会に寄与できる精神とプログラミングの知識と技術を保持した人間の育成をめざす。
身に付く力/Special abilities to be attained  
 論理的思考力(課題発見力、計画力、論理的分析力、総合的判断力)、実践力(働きかけ力、実行力、主体性)、そして、実社会の開発現場で役立つコンピュータ理工学「オブジェクト指向プログラミングと手続きプログラミングの双方」の知識と技術を身につけることができる。
履修上の注意/Special notes, cautions  
 定員を45名とし、受講希望者多数の場合はコンピュータ抽選を行う。平成26年度以前入学生は履修不可。詳細は履修要項別冊ガイドを参照。
 システムエンジニア(SE)などの情報産業界の職種を希望している者の履修を強く勧める。より良いプログラム作りをめざしたい、効率的にコストをかけずに高品質のプログラムを開発したい・運用したい・保守したいと望む者の履修を歓迎する。
 毎回、各自のコンピュータを持参し、必ずネットワークに接続して、授業が始まる前までに稼働状態にしておくこと。講義中に援用するプログラムはネットワークを介して取得する。リポジトリ(SCM: Software Configuration Management、たとえばSubversionやGitなどのソフトウェア構成管理)もアクセスするので、その作法(マナー)に慣れること。
評価方法/Evaluation  
 毎回の授業の初めに課す小テストを50%、毎回の授業の終わりに課す宿題レポートを50%、合計100%として、それらの出来具合を総合的に評価する。法令に「1単位45時間(2単位90時間)の学修」が宣われている。授業の終わりに課される宿題レポートは、当該時間(1回すなわち1限分の授業を受けたら約4時間の学修)を確保するものであるから、その時間に見合うレポート内容を必要とする。また、授業の初めに課される短時間の小テストは、当該学修時間の成果を見極めるために実施し、授業への取り組みや姿勢を(出欠および遅刻などを含めて)つまびらかにするものでもある。
教 材/Text and materials  
 教科書:配付資料
 参考書:加藤暢,高田司郎,樋口昌宏『オブジェクト指向Javaプログラミング入門』(近代科学社,2008)
 参考書:高橋友一,柴田祥一,小中英嗣『Javaで学ぶオブジェクト指向プログラミング入門』(サイエンス社,2008)
 参考書:中山清喬『スッキリわかるJava入門 実践編』(インプレス,2014)
 参考書:中山清喬,国本大悟『スッキリわかるJava入門』(インプレス,2014)
 参考書:青木淳,浅岡浩子,澤本依里『Smalltalkで学ぶオブジェクト指向プログラミングの本質』(日経BP社,2008)
 参照URL:http://www.cc.kyoto-su.ac.jp/~atsushi/
その他/Others  
 研究室:第2実験室棟3階65実験室
 オフィスアワー:木曜日3限(13:15-14:45)
 連絡先:配付資料の表紙に記載されているメールアドレス
 授業に関する質問やホウレンソウ(報告・連絡・相談)がある場合には、オフィスアワーの時間に研究室へ訪問するか、メールで問い合わせること。
Copyright (C) 2017 Kyoto Sangyo University. All rights reserved.