背景、状況
mistral aiに500行ぐらいのプログラムになる問題を作って欲しいといったときのaiの回答を元に練習しました。以下aiの生成した練習問題です。
問題1: 図書館管理システム
要件
-
図書クラス:
- タイトル、著者、ISBN、貸出状況を持つ。
- 貸出状況を変更するメソッド。
-
ユーザークラス:
- ユーザーID、名前、貸出中の図書リストを持つ。
- 図書を貸出・返却するメソッド。
-
図書館クラス:
- 図書リスト、ユーザーリストを持つ。
- 図書の登録、貸出、返却、検索機能を持つメソッド。
-
メインクラス:
- ユーザーインターフェースを提供し、図書館の操作を行う。
詳細
- 図書の登録時には、タイトル、著者、ISBNを入力し、図書リストに追加。
- 図書の貸出時には、ユーザーIDと図書のISBNを入力し、貸出処理を行う。
- 図書の返却時には、ユーザーIDと図書のISBNを入力し、返却処理を行う。
- 図書の検索時には、タイトルや著者で検索できる。
プラスで僕がいくつかクラスを追加しました。
ScannerUtilクラスを作った理由は改行処理と了承を得るため、isbnのチェックメソッドが入っています。patternと13桁目の桁チェック両方しました。
それからFrontクラスについては上記の通りです。
コード
肝心のコードですが、teratailの仕様で9000文字しか質問できないためgithubのurlを貼ります。お手数をおかけしますってかterateailが悪いですよね。あとコード内のコメントアウトはなぜか拙い英語で書かれています。別に日本語が使えない環境ではないです。javaのバージョンは21だと思います。ちなみにintellij idea使ってます。
https://github.com/shuoga4/testjava
テーマ、知りたいこと
もしかして、public final type variableは、stringなどの型の場合private + getterと同じですかね?Bookクラスを作るとき最初は手癖でフィールドをプライベートにしましたが、あとからパブリックにしました。結局
Book class内のOptional以外の解決方法。一応強制返却機能も設けたが、これだとUserが多くなると処理が重くなりそうで、Book内に誰が借りてるかの情報が欲しかったので、なにか代替案あれば教えて下さい。一応あとからid保存するだけでいいんじゃね?とは思いました。
現在classを作る理由がそのほうがきれいだから、以外に理由が無いです。カプセル化とかポリモーフィズムをあまり理解していない、一応設計の本は買ったがまだ読んでいません。まだそんなレベルでは無い気がして。
フィールドをプライベートにするのもなんとなくプログラマーっぽいのでやっています。もちろんレンジは意識していますが。
フロントがmainから直接アクセスされるクラスで、基本的にFrontから他のクラスにアクセスする。mainメソッドがごちゃらないほうがかっこいいから。
Frontからしか他のクラスにアクセスできないように明示とかできるんですかね?
これから
実はjava始めたのはminecraftのmodを作りたかったからです。ありふれた理由ですが。一応javaのオラクル認定試験のgold買って、残りの知らない構文とかを勉強したあとは、一番最初のminecraftのバージョンであるclassicを0から自分で作れたらいいなと思っています。そこで、なにかおすすめのサイトなり本なりあったらお願いします。
逆にみなさんがどういう職についてどうjavaを使っているのか気になります。やっぱ企業が使うソフトを作るのがメインなんですかね?システムエンジニアの定義があんまりわかっていません。逆に僕がシステムエンジニア目指そうと思ったらここから何を学ぶのかも気になります。
全部の質問に回答しなくても良いので好きなのだけ回答してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。