Я не думаю, что вопрос достаточно информативен, чтобы дать хороший ответ. ОО, в первую очередь, о том, где провести черту. Если вы смоделируете книгу, и она должна иметь и ISBN, это нормально, но фанатик ОО также попросил бы вас снабдить Книгу массивом Листов, каждый Лист имеет ровно две Страницы, каждая Страница имеет PageNumber, и массив строк-s, каждая строка представляет собой массив символов. Или, может быть, строка. Но тогда String не очень хороший OO в этом случае.
Вы должны принять решение о том, где прекратить моделирование, и важно понимать, что вы моделируете не реальное слово, а скорее согласование метафоры в уме (второго) программиста и машины. То, что вы делаете, - это одновременно что-то объяснять машине и читателю. ОО может быть хорошим инструментом в этом, но он также может быть использован, чтобы помешать. Быть осторожен! Сохраняйте это простым!
Если единственное, что вам нужно, это поиск заголовка на основе ISBN, то сделайте это просто:
Map<String, String> indexedBookList;
Если вы подозреваете, что функциональность может возрасти, вам, возможно, следует создать
class Book {
String title;
String isbn;
String author;
}
и храните все свои книги в
List<Book> bookList;
С другой стороны, может случиться так, что ваш проект вырастет из этой статичной мелочи в нечто, что должно взаимодействовать с базой данных SQL, которое обновляется время от времени и выходит из-под вашего контроля. Тогда для удобства чтения было бы лучше сохранить простоту и моделировать базу данных, а не пытаться моделировать реальный мир.
Программирование заключается в том, чтобы сообщать машине, что делать, и в то же время рассказывать другим людям, что мы пытаемся сказать машине, чтобы делать. Наиболее важной особенностью вашего кода является то, что он доступен для чтения программисту, который должен это понимать. Через год это может быть ты.