Javaの勉強しました。PythonだったCS1101とは比にならないくらい難しかった。。。
元々JavaよりPythonの方が触ったことあるからというのはありましたが、当然ながらCS1101のようにdictやtry..except...を使えるようになるのがゴールのコースではなかったので、オブジェクト指向とか学ぶことがたくさんありました。
使うテキストはEck, D. J. (2022). Introduction to programming using java version 9, JavaFX edition.
Readingの量もCS1101より多い、かつ何言ってるか分からない感じだったので、
さらっとだけReadingを読む
→Programming Assignment(PA)の問題を解こうとする
→分からない部分があるのでテキスト上で検索して例をちゃんと読む。その他にも色々検索して何を学ぶべき週なのか理解する
→Programming Assignmentを完成させる
→Discussion Forum(DF)投稿
という感じで進めました。
ヤバすぎると思ったのがDiscusstion Forumもまさかの500-750 word。しかも大量に質問してきて「comprehensive」な回答を求めてくるので何を書くべきなのかいまいち分からない。
chatGPTにも助けてもらいながらなんとか進めました。
Unit1
Eclipseをダウンロードして環境を整え、if文やswitch文を使ったプログラムを書きました。
Discussion postではprimitive型とreference型の変数の違いを説明。
Unit2
For文やWhile文などのループ処理について
インスタンス化もArrayもまだ習っていないのに、本を管理するライブラリーシステムの構築がPAになっていてとても困りました。でも自力でできる範囲でオブジェクト化したら満点は取れたので、評価基準がおかしいということではなさそう。
DFはループ処理やIF分岐においてどの構文を使うのが良いか、というような話。今から思うと、最初の2週はまだ平和なDFトピックでした。文字数も少なかったし。
Unit3
staticとnon-staticについて。ここからはPythonコースにはなかった話なので一気に難しく感じましたが、Unit2でどう作れば良いのか分からなかった部分の答えが分かって楽しかったです。
悔しかったのでUnit2のPAのコードを書き直して、DFの例として使いました。
CS1101ではPAは全部満点、DFも2回目以降はずっと満点だったのに、このコースではコメントアウトが足りない、説明資料が足りない、もっとシンプルに書けますといったコメントで毎回満点はもらえなかったので、しっかり見られてる感がありました。
Unit4
ArrayとArrayListについて。
これ使わなきゃ今までのPA解けなかったでしょ、、みたいな内容ではあるので割ととっつきやすかったです。
DFはArrayとArrayListのメリデメの説明。Arrayは固定長だがメモリ効率が良い、ArrayListはパフォーマンス懸念があるがdynamic resizingができてcontains()のようなbuilt-in functionが使えます。
Unit4にしてようやくPAとDF両方で満点獲得ができました
Unit5
オブジェクト指向のカプセル化(Encapsulation)について。
private変数とpublic変数の違いを理解して、インスタンス化したオブジェクトにgetterやsetterメソッドをつけます。
1回のPAで書くコード量が1ファイルでできるレベルではなくなった週でした。
Unit6
オブジェクト指向の継承(Inheritance)や多態性(Polymorphism)について。interfaceを構築してimplementsで関連クラスに実装する方法。abstract classを構築してextendsで別クラスに拡張する方法。superを使った親クラスメソッドの上書き。
ああpythonって簡単だったんだなーと思った瞬間でした。
特に多態性がよく分からず。
- オーバーロード:引数が違えば同じ名前のメソッドを作ることができる
- オーバーライド:親のクラスに存在するメソッドに上書きすることで、子から生成されたオブジェクトでは親とは違うメソッドで処理できる
概念的な親要素の型宣言で具体的な子要素を定義できるという多態性の文脈で大事なのはオーバーライドの方ですね。
このあたりは日本語記事を検索してようやく少し分かりました
https://qiita.com/skrisiskr/items/0d6c4310b80208877bba
https://ameblo.jp/smeokano/entry-11099112749.html
あとはchatGPT。質問したら広告を混ぜずにピンポイントで答えてくれるし、具体例をくれるし、とても良い先生です。
Unit7
SwingまたはJavaFXを使ったGUI Developmentについて。
PAのコードを完成させるのにほぼ2日かけた週でした。
PAに書かれた機能要件を見ると最低4画面は必要。Swing Designer使ってもイベントを取得する方法やリスト値を制御する方法を調べながら機能要件を満たすコードを作るのにとにかく時間がかかる。
完成したコードは自分で見てもModularityが微妙なのは分かる。
それでももう頑張れないと思って提出しました。結果的に満点だったからそこまでは求められてなかったんだろうか。
Unit8
Multithreading、Collection Hierarchy、Stream APIについて。
PAは急にシンプルになって、StreamAPIを使ってリストを操作するだけでした。ただなんせ使い慣れていないので、今後はStreamAPIを使うことも考慮に入れながらコード書かないといけないと思うと来期が不安になりました。使いこなせれば多分かなり便利、、
DFはまず何を聞かれているのかよく分からなかった、、。
理解できたparallel streamとsequential streamの違いや、複数スレッドで処理させてマージする方法で回答は出したけど、なんで皆テキストに出てこないConcurrentHashMapの話してるの?って感じだった。
今回のクラスは治安が良いからなのか、皆何が正解か分からないからなのか、8点以下をつけてくる人がいなかったのでピアレビューの平均点が9.5点くらいでした。
最終的に96.52点のAで修了しました。
A+逃した、、