SLC S22 Week2 || The Object Approach In JAVA

in Ukraine on Steem5 days ago

image.png

Коли я вчився, то вивчав мову С. А от С++ ще навіть не було стандартизовано, але навіть тоді ця мова мені здалася тяжчою за С. І це ще до стандарту С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); А про копіюванні/чи наборі коду можна булоб "розірвати" і без того уявний зв'язок із змінними. Крім того нема контролю над коректністю даних, що забезпечують сеттери(або конструктор). Але це ще тільки початок, так як поки що тут розглянуто простий приклад.

![image.png]() Тут також варто зазначити що через `new` створюється все крім примітивних типів тобто ми НЕ пишемо так `int t=new int(13);` а пишемо простіше `int t=13;` Так як прості типи не є об'єктами, тобт через `new` створюються екземпляри класу(об'єкти)

Завдання 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();
}

image.png


Завдання 4

  • Напишіть програму, яка демонструє додавання методів з обчисленнями шляхом створення Productкласу. Клас повинен містити атрибути name(string), price(double) і quantity(int).
  • Реалізуйте конструктор для ініціалізації цих атрибутів і метод calculateTotalPrice()для обчислення загальної ціни як добутку priceта quantity. Крім того, створіть спосіб displayProduct()друку деталей продукту, включаючи загальну ціну.
  • У mainметоді створіть екземпляр класу Productта викличте displayProduct()метод, щоб вивести деталі продукту та його загальну ціну.

image.png
метод calculateTotalPrice() вважати обчислювальним полем)), аналогічно формулам в таблицях, а ще зробити приватним, тобто "для внутрішнього використання".

Завдання 5

  • Напишіть програму, яка керуватиме записами студентів шляхом створення Studentкласу. Клас повинен мати атрибути id(int), name(string) і marks(масив int).
  • Реалізуйте конструктор для ініціалізації цих атрибутів і метод calculateAverage()для обчислення та повернення середнього балів. Крім того, створіть метод displayDetails()друку інформації про студента, включно з його середніми балами.
  • У mainметоді створіть масив із трьох Studentоб’єктів, заповніть масив деталями для кожного студента та викличте displayDetails()метод для кожного об’єкта, щоб відобразити відповідну інформацію, включно з їхніми середніми оцінками.

image.png
В цьому завданні атрибутом є не проста змінна, а цілий масив, так як у різних студентів може бути різна кількість оцінок.
Рядок №8 звичайне присвоювання, але 9 та 10 рядки - з ними не все так просто. Адже там відбувається присвоювання не простої змінної, а складних об'єктів. Рядок №10 виглядає просто - скопіювати переданий масив, в атрибут класу. Але це лиш виглядає просто, насправді це ціла лекція буде))
Напевне потребує додаткових пояснень і підрахунок середнього, оголошена сума типу int для підрахунку суми цілих чисел, рядок 15 це вже згаданий мною цикл foreach де оголошена ціла змінна mark яка пробігає по масиву оцінок marks. Підрахонок кількості елементів ми не ведем так як він вже "підрахований" в атрибуті масиву length. І якщо ми для середнього арифметичного підрахуємо поділивши суму на кількість - то одержимо не точний результат. Адже якщо операнди цілі - то і результат буде цілий. Для цього ми в процесі обчислення змінюємо тип змінної sum на double - (double)sum. Залишиться лиш вивести резальтат.


Завдання 6

Напишіть програму для моделювання простої системи управління бібліотекою . Програма має включати наступне:

  1. Книжковий клас
    • Атрибути:
      • id(int): унікальний ідентифікатор для кожної книги.
      • title(string): Назва книги.
      • author(string): Автор книги.
      • isAvailable(bool): вказує на те, доступна чи позичена книга.
    • Методи:
      • Конструктор для ініціалізації всіх атрибутів.
      • borrowBook(): встановлюється isAvailable, falseякщо книга доступна, інакше друкується, що книга недоступна.
      • returnBook(): встановлюється isAvailableна true.
      • displayDetails(): друкує деталі книги, включно з її доступністю.
  2. Бібліотечний клас
    • Атрибути:
      • books(ArrayList< Book >): колекція книг у бібліотеці.
    • Методи:
      • addBook(Book book): додає нову книгу до бібліотеки.
      • displayAllBooks(): Відображає деталі всіх книг у бібліотеці.
      • searchByTitle(String title): шукає книгу за назвою та відображає її деталі, якщо знайдено.
      • borrowBook(int id): дозволяє користувачеві позичити книгу за її ідентифікатором, якщо він доступний.
      • returnBook(int id): дозволяє користувачеві повернути книгу за її ідентифікатором.
  3. Основний метод
    • Створіть бібліотеку з кількох початкових книг.
    • Дозволити користувачеві виконувати такі дії:
      • Переглянути всі книги.
      • Пошук книги за назвою.
      • Взяти книгу за ID.
      • Повернути книгу за ID.

Таке завдання без підготовки важко мені зробити. не те що важко - просто не легко. це завдання явно не для новачків.
Скріни я тут буду робити в тому ж онлайн компіляторі що і раніше, а от запускати доведеться в іншому. Не кожен онлайн компілятор дозволяє створювати багато файлів. Майже всим мені подобається OnlineGDB крім кольорової гамми та відсутності парного кодування.
PS2 Довелося дописувати допис за основним ПК де я і встановив останній Eclipse Java IDE
image.png
розробка класу книги не складніша за попередні, оголошуємо атрибути. Прописуємо конструктор, що приймає три аргументи та заповює 4й значенням по замовчуванню(книга є). Додаємо геттери, методи взяти borrowBook() та повернути книгу returnBook(), і метод відображення інформації displayDetails().

Клас Library буде містити всі книги у вигляді масиву(а масив організований списком, про що й каже назва об'єкту ArrayList)
Реалізуємо методи додавання книги, пошуку, повернення, та взяття книги на читання.
java01.gif

Ще не встиг налаштувати середовище на чорну гамму))

Головний клас Main що запускає програму спочатку додає книги в бібліотеку, потім виводить меню і циклічно опитує користувача який пункт меню він обере.
java2.gif

Дякую всім хто прочитав моє домашнє завдання, з нетерпінням чекаю наступного уроку))

Запрошую @ahsansharif, @akmalshakir, @mohammadfaisal

Posted using SteemPro

Sort:  
Loading...

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

Manually curated by @ abiga554
r2cornell_curation_banner.png

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

Loading...