SLC S22 Week2 || The Object Approach In JAVA
Коли я вчився, то вивчав мову С. А от С++ ще навіть не було стандартизовано, але навіть тоді ця мова мені здалася тяжчою за С. І це ще до стандарту С98, а про нововведення С11 які настільки змінили цю мову що це можна вважати ледь не новою мовою версією мови.
Що ж до Java, не пригадую коли вперше про неї почув - але точно памя'ттаю про першу назву Oak і про байт код та віртуальну ява-машину.
Студенти зараз в основному вчать мову С++, але починають з С її підмножини. Потім вчать С++ (його ООП частину). Далі вчать C# чи Java. Я часто їм говорю що це "одна" мова, тобто що вони дуже схожі, а перші відмінності лиш у вводі/виводі. Али чим глибше в мову - тим сильніше вони відрізняються. І Java та C# тут як брати-близнюки сильніше відрізняються від С/С++. C# і була створена щоб витіснити Java, про ці війни можна цілі історії писати.. та врешті решт сьогодні мова про Java. Ця мова ООП, я б сказав строго ООП - тут як і в C# не можна оголосити функцію просто так, як в С. Що мені до сих пір дається складно - для того щоб знайти суму двох чисел, треба городити цілий клас, та ще й не один. Але чим далі вивчаєш ці всі мови - починаєш розуміти чому все так.
Завдання 1
1) Що таке клас у Java?
(A) Схема створення об’єктів.
Клас є шаблоном або схемою для створення об'єктів, що визначає їх властивості та поведінку. Коли я пояснюю що таке клас чи метод - то провожу аналогію з рецептом. Рецепт торта - це не сам торт. але коли треба буде спекти торт - ми дістанемо рецепт і створимо торт.
2) Що робить ключове слово new
у Java?
(B) Створює новий об’єкт класу.
Ключове слово new
використовується для створення нових об'єктів класу в Java, виділяючи пам'ять під них. Це власне процедура випікання торта за рецептом. тобто був рецепт, став торт. Рецепт нікуди не зникає, а за цим же рецептом можна зробити скільки завгодно тортів.
3) Яке з наступних тверджень є правильним щодо атрибутів у класі?
(C) Атрибути зберігають дані для об’єкта.
Атрибути (поля класу) призначені для зберігання даних, пов'язаних з конкретним екземпляром класу (об'єктом). Я б назвав це так - це те що раніше називалося змінні,
Яке призначення конструктора в класі?
(B) Для ініціалізації полів класу.
Конструктор використовується для ініціалізації об'єкта, зокрема його полів, під час створення нового екземпляра класу. Конструктор це процес випікання торта з рецепту
Мені дуже сподобалося що в C# атрибути еволюціонували до властивостей, щось таке що посередині між атрибутами(змінними) та методами. Тобто на вид як змінна - а по факту метод.
Завдання 2
- Напишіть програму, яка демонструє створення та використання класу, включаючи атрибути, методи та екземпляри об’єктів. Зокрема, створіть
Laptop
клас з атрибутамиbrand
(рядок) іprice
(double). - Реалізуйте конструктор для ініціалізації цих атрибутів і метод
displayDetails()
друку марки та ціни ноутбука. - У
main
методі створіть два екземпляри класуLaptop
з різними значеннями для атрибутів і викличтеdisplayDetails()
метод для кожного об’єкта, щоб створити та відобразити відповідний вихід.
Якби це все виглядало БЕЗ ООП і без класів, нам довелося створити змінні brand1, brand2, price1, price2 - і це були б цілком незалежні чотири змінні. Те що price1 відповідає brand1, можна тільки здогадатися. і цей зв'язок доведеться уявляти. Функцію displayDetails() слід було б викликати з параметрами. displayDetails(brand1, price1); displayDetails(brand2, price1); А про копіюванні/чи наборі коду можна булоб "розірвати" і без того уявний зв'язок із змінними. Крім того нема контролю над коректністю даних, що забезпечують сеттери(або конструктор). Але це ще тільки початок, так як поки що тут розглянуто простий приклад.
Завдання 3
- Напишіть програму, яка демонструє створення класу
Movie
, його атрибутів і методів, а також керування кількома об’єктами в масиві. ВизначтеMovie
клас за допомогою атрибутівtitle
(string) іrating
(double). - Реалізуйте конструктор для ініціалізації цих атрибутів і метод
displayInfo()
для друку назви та рейтингу фільму. - У
main
методі створіть масив для зберігання трьохMovie
об’єктів, заповніть масив деталями для кожного фільму та викличтеdisplayInfo()
метод для кожного об’єкта, щоб відобразити відповідні деталі.
Це завдання схоже на попереднє, відмінність лиш у масиві об'єктів.
До того ж спочатку треба створити сам масив через Movie[] movies = new Movie[3];
і вже потім створити кожен фільм, movies[0] = new Movie("Terminator", 9.9);
Тут можуть бути деякі моменти не відразу зрохумілі, ал ети м хто гарно вчив С, і особливо вказівники - буде зрозумілим створення і масиву і самих об'єктів через new
До того ж так як у нас тепер масив, немає необхідності викликати кожен фільм на друк - це все можна зробити в масив. Я класичному, через індекс i, так і через цикл foreach
який так лиш називається, насправді ж виглядає так:
for (Movie movie : movies)
{
movie.displayInfo();
}
Завдання 4
- Напишіть програму, яка демонструє додавання методів з обчисленнями шляхом створення
Product
класу. Клас повинен містити атрибутиname
(string),price
(double) іquantity
(int). - Реалізуйте конструктор для ініціалізації цих атрибутів і метод
calculateTotalPrice()
для обчислення загальної ціни як добуткуprice
таquantity
. Крім того, створіть спосібdisplayProduct()
друку деталей продукту, включаючи загальну ціну. - У
main
методі створіть екземпляр класуProduct
та викличтеdisplayProduct()
метод, щоб вивести деталі продукту та його загальну ціну.
метод calculateTotalPrice() вважати обчислювальним полем)), аналогічно формулам в таблицях, а ще зробити приватним, тобто "для внутрішнього використання".
Завдання 5
- Напишіть програму, яка керуватиме записами студентів шляхом створення
Student
класу. Клас повинен мати атрибутиid
(int),name
(string) іmarks
(масив int). - Реалізуйте конструктор для ініціалізації цих атрибутів і метод
calculateAverage()
для обчислення та повернення середнього балів. Крім того, створіть методdisplayDetails()
друку інформації про студента, включно з його середніми балами. - У
main
методі створіть масив із трьохStudent
об’єктів, заповніть масив деталями для кожного студента та викличтеdisplayDetails()
метод для кожного об’єкта, щоб відобразити відповідну інформацію, включно з їхніми середніми оцінками.
В цьому завданні атрибутом є не проста змінна, а цілий масив, так як у різних студентів може бути різна кількість оцінок.
Рядок №8 звичайне присвоювання, але 9 та 10 рядки - з ними не все так просто. Адже там відбувається присвоювання не простої змінної, а складних об'єктів. Рядок №10 виглядає просто - скопіювати переданий масив, в атрибут класу. Але це лиш виглядає просто, насправді це ціла лекція буде))
Напевне потребує додаткових пояснень і підрахунок середнього, оголошена сума типу int для підрахунку суми цілих чисел, рядок 15 це вже згаданий мною цикл foreach
де оголошена ціла змінна mark
яка пробігає по масиву оцінок marks
. Підрахонок кількості елементів ми не ведем так як він вже "підрахований" в атрибуті масиву length
. І якщо ми для середнього арифметичного підрахуємо поділивши суму на кількість - то одержимо не точний результат. Адже якщо операнди цілі - то і результат буде цілий. Для цього ми в процесі обчислення змінюємо тип змінної sum на double - (double)sum
. Залишиться лиш вивести резальтат.
Завдання 6
Напишіть програму для моделювання простої системи управління бібліотекою . Програма має включати наступне:
- Книжковий клас
- Атрибути:
id
(int): унікальний ідентифікатор для кожної книги.title
(string): Назва книги.author
(string): Автор книги.isAvailable
(bool): вказує на те, доступна чи позичена книга.
- Методи:
- Конструктор для ініціалізації всіх атрибутів.
borrowBook()
: встановлюєтьсяisAvailable
,false
якщо книга доступна, інакше друкується, що книга недоступна.returnBook()
: встановлюєтьсяisAvailable
наtrue
.displayDetails()
: друкує деталі книги, включно з її доступністю.
- Атрибути:
- Бібліотечний клас
- Атрибути:
books
(ArrayList< Book >): колекція книг у бібліотеці.
- Методи:
addBook(Book book)
: додає нову книгу до бібліотеки.displayAllBooks()
: Відображає деталі всіх книг у бібліотеці.searchByTitle(String title)
: шукає книгу за назвою та відображає її деталі, якщо знайдено.borrowBook(int id)
: дозволяє користувачеві позичити книгу за її ідентифікатором, якщо він доступний.returnBook(int id)
: дозволяє користувачеві повернути книгу за її ідентифікатором.
- Атрибути:
- Основний метод
- Створіть бібліотеку з кількох початкових книг.
- Дозволити користувачеві виконувати такі дії:
- Переглянути всі книги.
- Пошук книги за назвою.
- Взяти книгу за ID.
- Повернути книгу за ID.
Таке завдання без підготовки важко мені зробити. не те що важко - просто не легко. це завдання явно не для новачків.
Скріни я тут буду робити в тому ж онлайн компіляторі що і раніше, а от запускати доведеться в іншому. Не кожен онлайн компілятор дозволяє створювати багато файлів. Майже всим мені подобається OnlineGDB крім кольорової гамми та відсутності парного кодування.
PS2 Довелося дописувати допис за основним ПК де я і встановив останній Eclipse Java IDE
розробка класу книги не складніша за попередні, оголошуємо атрибути. Прописуємо конструктор, що приймає три аргументи та заповює 4й значенням по замовчуванню(книга є). Додаємо геттери, методи взяти borrowBook() та повернути книгу returnBook(), і метод відображення інформації displayDetails().
Клас Library буде містити всі книги у вигляді масиву(а масив організований списком, про що й каже назва об'єкту ArrayList)
Реалізуємо методи додавання книги, пошуку, повернення, та взяття книги на читання.
Ще не встиг налаштувати середовище на чорну гамму))
Головний клас Main що запускає програму спочатку додає книги в бібліотеку, потім виводить меню і циклічно опитує користувача який пункт меню він обере.
Дякую всім хто прочитав моє домашнє завдання, з нетерпінням чекаю наступного уроку))
Запрошую @ahsansharif, @akmalshakir, @mohammadfaisal
Thank you for inviting me. My participation is on the way.
Congratulations, your post has been upvoted by @scilwa, which is a curating account for @R2cornell's Discord Community. We can also be found on our hive community & peakd as well as on my Discord Server
Felicitaciones, su publication ha sido votado por @scilwa. También puedo ser encontrado en nuestra comunidad de colmena y Peakd así como en mi servidor de discordia