From 05ca9ce68e4e3474678bdb2d405567e5d902dc50 Mon Sep 17 00:00:00 2001 From: ChrissyDev Date: Mon, 26 Feb 2024 18:39:08 +0200 Subject: [PATCH 1/2] homework nine --- oop_basics/book.js | 43 +++++++++++++++++++++++++++++++++++++++++++ oop_basics/eBook.js | 25 +++++++++++++++++++++++++ oop_basics/task1.js | 21 +++++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 oop_basics/book.js create mode 100644 oop_basics/eBook.js create mode 100644 oop_basics/task1.js diff --git a/oop_basics/book.js b/oop_basics/book.js new file mode 100644 index 0000000..d605c71 --- /dev/null +++ b/oop_basics/book.js @@ -0,0 +1,43 @@ +export default class Book { + constructor(title, author, releaseYear) { + this._title = title; + this._author = author; + this._releaseYear = releaseYear; + } + + get title() { + return this._title; + } + + set title(newTitle) { + this._title = newTitle; + } + + get author() { + return this._author; + } + + set author(newAuthor) { + this._author = newAuthor; + } + + get releaseYear() { + return this._releaseYear; + } + + set releaseYear(newYear) { + if (typeof newYear === 'number') { + this._releaseYear = newYear; + } else { + console.error('Invalid input. Year must be a number.'); + } + } + + printInfo() { + console.log(`Title: ${this._title}, Author: ${this._author}, Release Year: ${this._releaseYear}`); + } + + static findOldestBook(books) { + return books.reduce((oldest, current) => (oldest.releaseYear < current.releaseYear ? oldest : current)); + } +} \ No newline at end of file diff --git a/oop_basics/eBook.js b/oop_basics/eBook.js new file mode 100644 index 0000000..c2b9057 --- /dev/null +++ b/oop_basics/eBook.js @@ -0,0 +1,25 @@ +import Book from './book.js'; + +export default class EBook extends Book { + constructor(title, author, releaseYear, fileFormat) { + super(title, author, releaseYear); + this._fileFormat = fileFormat; + } + + get fileFormat() { + return this._fileFormat; + } + + set fileFormat(newFormat) { + this._fileFormat = newFormat; + } + + printInfo() { + super.printInfo(); + console.log(`File Format: ${this._fileFormat}`); + } + + static createEBookFromBook(bookInstance, fileFormat) { + return new EBook(bookInstance.title, bookInstance.author, bookInstance.releaseYear, fileFormat); + } +} \ No newline at end of file diff --git a/oop_basics/task1.js b/oop_basics/task1.js new file mode 100644 index 0000000..ba302ff --- /dev/null +++ b/oop_basics/task1.js @@ -0,0 +1,21 @@ +import Book from './book.js'; +import EBook from './eBook.js'; + +const book1 = new Book('Title1', 'Author1', 2000); +const book2 = new Book('Title2', 'Author2', 2010); + +const ebook1 = new EBook('E-Title1', 'E-Author1', 2020, 'PDF'); +const ebook2 = new EBook('E-Title2', 'E-Author2', 2021, 'EPUB'); + +book1.printInfo(); +book2.printInfo(); +ebook1.printInfo(); +ebook2.printInfo(); + +const oldestBook = Book.findOldestBook([book1, book2, ebook1, ebook2]); +console.log('Oldest book:'); +oldestBook.printInfo(); + +const newEBook = EBook.createEBookFromBook(book2, 'MOBI'); +console.log('New EBook:'); +newEBook.printInfo(); \ No newline at end of file From ad14fe0569766e69cc77838b8082184248927c2b Mon Sep 17 00:00:00 2001 From: ChrissyDev Date: Sun, 3 Mar 2024 18:18:08 +0200 Subject: [PATCH 2/2] changed homework nine --- oop_basics/book.js | 12 +++++++++--- oop_basics/eBook.js | 3 +++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/oop_basics/book.js b/oop_basics/book.js index d605c71..3f90c88 100644 --- a/oop_basics/book.js +++ b/oop_basics/book.js @@ -10,6 +10,9 @@ export default class Book { } set title(newTitle) { + if (typeof newTitle !== 'string' || newTitle.trim() === '') { + throw new Error('Invalid input. Title must be a non-empty string.'); + } this._title = newTitle; } @@ -18,6 +21,9 @@ export default class Book { } set author(newAuthor) { + if (typeof newAuthor !== 'string' || newAuthor.trim() === '') { + throw new Error('Invalid input. Author must be a non-empty string.'); + } this._author = newAuthor; } @@ -26,11 +32,11 @@ export default class Book { } set releaseYear(newYear) { - if (typeof newYear === 'number') { - this._releaseYear = newYear; - } else { + if (typeof newYear !== 'number') { console.error('Invalid input. Year must be a number.'); + return; } + this._releaseYear = newYear; } printInfo() { diff --git a/oop_basics/eBook.js b/oop_basics/eBook.js index c2b9057..ae5091a 100644 --- a/oop_basics/eBook.js +++ b/oop_basics/eBook.js @@ -11,6 +11,9 @@ export default class EBook extends Book { } set fileFormat(newFormat) { + if (typeof newFormat !== 'string' || newFormat.trim() === '') { + throw new Error('Invalid input. File format must be a non-empty string.'); + } this._fileFormat = newFormat; }